ZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MmRkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMyBAQAoraWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQoraW5jbHVkZSAkKGNhbGwgYWxsLXN1YmRpci1tYWtlZmlsZXMpCitlbmRpZgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDBmMDRkLi4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZworKysgL2Rldi9udWxsCkBAIC0xLDU4OSArMCwwIEBACi0yMDA1LTA3LTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbTogY2Fub25pY2FsaXplCi0JICBTUkNESVIgdG8gZml4IG1ha2UgY2hlY2sKLQotMjAwNS0wNy0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC45LjEKLQotMjAwNS0wNy0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogZml4IGZvciBHQ0MgMy40LCBzcG90dGVkIGJ5Ci0JICBKYXNvbiBMdW56IDxsdW56QGZhbG9vbGV5Lm9yZz4KLQotMjAwNS0wMS0wNiAgUmFsZiBCYWVjaGxlICA8cmFsZkBsaW51eC1taXBzLm9yZz4KLQotCSogZXZlbnRzL01ha2VmaWxlLmFtOgotCSogZXZlbnRzL21pcHMvMjRLL2V2ZW50czoKLQkqIGV2ZW50cy9taXBzLzI0Sy91bml0X21hc2tzOgotCSogbGlib3Avb3BfZXZlbnRzLmM6Ci0JKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgotCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKLQkqIHV0aWxzL29waGVscC5jOiBBZGQgTUlQUyAyNEsgc3VwcG9ydAotCi0yMDA1LTA2LTE2ICBSaWNoYXJkIFB1cmRpZSAgPHJwdXJkaWVAby1oYW5kLmNvbT4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBmaXggQVJNIGtlcm5lbHMgYWdhaW4gYWZ0ZXIgMjAwNS0wNS0wNAotCSAgY2hhbmdlIHRvIG9wX2JmZC5jcHAgYnJva2UgaXQgYWdhaW4uIE9ubHkgbG9vayBmb3IgLnRleHQKLQkgIHNlY3Rpb24gZm9yIG91ciBrZXJuZWwgcmFuZ2UuCi0KLTIwMDUtMDYtMTMgIFJpY2hhcmQgUHVyZGllICA8cnB1cmRpZUBvLWhhbmQuY29tPgotCi0JKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGUuY3BwOiBpZ25vcmUgYW55IHN5bWJvbHMgYmVmb3JlIC50ZXh0Ci0JICBmb3Igc3RhcnRfb2Zmc2V0IHByb2ZpbGVzCi0KLTIwMDUtMDYtMDIgIEphc29uIEx1bnogIDxsdW56QGZhbG9vbGV5Lm9yZz4KLQotCSogbGlicHAvZGlmZl9jb250YWluZXIuY3BwOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuY3BwOgotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGZpeCBjb21waWxhdGlvbiBvbiBHQ0MgMi45NS54LAotCSAgb2xkZXIgZ2xpYmMKLQotMjAwNS0wNi0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDogZXJyb3Igb3V0IGlmIC0tYXNzZW1ibHkgYW5kIC0tb3V0cHV0LWRpcgotCSAgYXJlIHVzZWQgdG9nZXRoZXIKLQkqIGRvYy9vcGFubm90YXRlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiB1cGRhdGUgZG9jdWNtZW50YXRpb24gYWNjb3JkaW5nLgotCi0yMDA1LTA1LTMxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjkuMWN2cwotCi0yMDA1LTA1LTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL2RpZmZfY29udGFpbmVyLmNwcDogY29udmVydCB0aGUgZGlmZnMgaW50bwotCSAgYW4gYWN0dWFsIHBlcmNlbnRhZ2UhCi0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjkKLQotMjAwNS0wNS0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2Nvb2tpZS5jOgotCSogZGFlbW9uL29wZF9zZmlsZS5jOgotCSogZGFlbW9uL29wZF90cmFucy5jOiBmaXhlcyBmb3IgaW1hZ2UgZmlsdGVyaW5nCi0KLTIwMDUtMDUtMDkgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogZGFlbW9uL29wZF9zZmlsZS5jOiBGaXggdmFyaWFibGUgZGVjbGFyYXRpb24gdG8gY29tcGlsZSBvbiBnY2MgMy40LgotCQotMjAwNS0wNS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IHNwbGl0IGFyZ3VtZW50ICJ7fSIgaW4gdHdvIHNlcGFyYXRlIGFyZ3VtZW50Ci0KLTIwMDUtMDUtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDogZml4IHR5cG9zCi0KLTIwMDUtMDUtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9jdmVyYi5jcHA6Ci0JKiBsaWJ1dGlsKysvY3ZlcmIuaDogZml4IGNvbW1lbnQsIHJlbW92ZSB1bmVjZXNzYXJ5IGZyaWVuZCBkZWNsYXJhdGlvbi4KLQotMjAwNS0wNS0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuYzogZml4IHByZXZpb3VzIHdvcmthcm91bmQKLQkgIHNvIGl0IG9ubHkgdHJpZ2dlcnMgb24geDg2Ci0KLTIwMDUtMDUtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL29wX2JmZC5oOgotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGRvbid0IGFzc3VtZSAudGV4dCBpcyB0aGUgZmlyc3QgU0VDX0NPREUKLQkgIHNlY3Rpb24uIEtlZXAgYSBtYXAgb2Ygc2VjdGlvbiBmaWxlIG9mZnNldHMgdG8gZml4IHVwIGRiZmQKLQkgIHN5bWJvbHMuIFJlbW92ZSBicm9rZW4gc2FuaXR5IGNoZWNrcy4KLQotMjAwNS0wNS0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBzbWFsbCBjaGFuZ2UKLQotMjAwNS0wNS0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vTWFrZWZpbGUuYW06Ci0JKiBkYWVtb24vb3BkX2Fub24uaDoKLQkqIGRhZW1vbi9vcGRfYW5vbi5jOgotCSogZGFlbW9uL2luaXQuYzoKLQkqIGRhZW1vbi9vcGRfY29va2llLmM6Ci0JKiBkYWVtb24vb3BkX2V2ZW50cy5oOgotCSogZGFlbW9uL29wZF9ldmVudHMuYzoKLQkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuYzoKLQkqIGRhZW1vbi9vcGRfc2ZpbGUuaDoKLQkqIGRhZW1vbi9vcGRfc2ZpbGUuYzoKLQkqIGRhZW1vbi9vcGRfdHJhbnMuaDoKLQkqIGRhZW1vbi9vcGRfdHJhbnMuYzoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jOgotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGxpYmFiaS9hYmkuY3BwOgotCSogbGliYWJpL29waW1wb3J0LmNwcDoKLQkqIGxpYmFiaS90ZXN0cy9hYmlfdGVzdC5jcHA6Ci0JKiBsaWJvcC9vcF9tYW5nbGUuaDoKLQkqIGxpYm9wL29wX21hbmdsZS5jOgotCSogbGlib3Avb3Bfc2FtcGxlX2ZpbGUuaDoKLQkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOgotCSogbGlicHAvaW1hZ2VfZXJyb3JzLmNwcDoKLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6Ci0JKiBsaWJwcC9wYXJzZV9maWxlbmFtZS5jcHA6Ci0JKiBsaWJwcC9wb3B1bGF0ZS5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlLmg6Ci0JKiBsaWJwcC9wcm9maWxlLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3BncHJvZi5jcHA6IGFkZCBiYXNpYyBhbm9uIG1hcHBpbmcgc3VwcG9ydAotCi0yMDA1LTA0LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDoKLQkqIGRvYy9vcGNvbnRyb2wuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6IGFkZCBvcGNvbnRyb2wgLS1zdGF0dXMKLQotMjAwNS0wNC0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL29wZF9zZmlsZS5jOiBjbGVhciBvbmx5IDI1NiBlbnRyeSBpbiB0aGUgc2ZpbGUgbHJ1IGxpc3QKLQotMjAwNS0wNC0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJhYmkvYWJpLmNwcDoKLQkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOiBhZGQgY2dfdG9faXNfa2VybmVsIHRvIGFiaQotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBsaWJhYmkvdGVzdHMvTWFrZWZpbGUuYW06Ci0JKiBsaWJhYmkvdGVzdHMvYWJpX3Rlc3QuY3BwOiBtb3ZlIHRlc3QgdG8gc3ViZGlyCi0KLTIwMDUtMDQtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS9pYTY0L29wX3BtdS5jOiBjb21waWxlIGZpeCwgcGZtX3N5c3RfaW5mbyBoYXMgYmVlbiBhZGRlZAotCSAgYmV0d2VlbiAyLjQuMjAgYW5kIDIuNC4yMQotCi0yMDA1LTA0LTI3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsL29wX2ZpbGUuaDogb3BfZmlsZV9yZWFkYWJsZSgpIGFjY2VwdCBvbmx5IHJlZ3VsYXIgZmlsZQotCSogbGlidXRpbC9vcF9maWxlLmM6Ci0JKiBsaWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5jcHA6Ci0KLTIwMDUtMDQtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9zZmlsZS5oOgotCSogZGFlbW9uL29wZF9zZmlsZS5jOiByZXdyaXRlLiBGaXggLS1uby12bWxpbnV4IHRha2luZyB1cAotCSAgQ1BVIHdoZW4gdXNpbmcgY2FsbCBncmFwaCBwcm9maWxpbmcKLQotMjAwNS0wNC0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmg6IHJlbW92ZSBkZWFkIHByb3RvdHlwZQotCi0yMDA1LTA0LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6IHByb3RlY3QgbGFzdCBhZ2FpbnN0IHNmaWxlIGxydSBkZWxldGlvbgotCSogZGFlbW9uL29wZF9zZmlsZS5jOiBhbGxvdyBudWxsIHNmaWxlIHRvIHNmaWxlX2dldCgpLCBzZmlsZV9wdXQoKQotCi0yMDA1LTA0LTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcGRfY29va2llLmg6Ci0JKiBkYWVtb24vb3BkX2Nvb2tpZS5jOgotCSogZGFlbW9uL29wZF90cmFucy5jOgotCSogZGFlbW9uL29wZF9zZmlsZS5jOgotCSogZGFlbW9uL29wZF9zdGF0cy5oOgotCSogZGFlbW9uL29wZF9zdGF0cy5jOiBoYW5kbGUgTk9fQ09PS0lFIChkcm9wIG9uIHRoZSBmbG9vcikKLQotCSogbTQvcXQubTQ6IGFsbG93IGdjYyA0LjAgY29tcGlsZSB3aXRoIFF0IGhlYWRlcnMKLQkgIGJ5IHVzaW5nIC1pc3lzdGVtCi0KLTIwMDUtMDQtMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiBhZGQgLS13aXRoLWdjYywgLS13aXRoLWJpbnV0aWxzIChmb3IKLQkgIGRldmVsb3BtZW50IHVzZSBvbmx5LCB1bmRvY3VtZW50ZWQpCi0KLTIwMDUtMDQtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuaDogYWRkIGEgdmlydHVhbCBkdG9yIHRvIGV4dHJhX2ltYWdlczo6bWF0Y2hlcgotCi0yMDA1LTA0LTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9pbnRlcm5hbHMueG1sOiBzb21lIHBhcmFncmFwaHMgb24gY2FsbCBncmFwaHMKLQotCSogbGlib3Avb3BfZXZlbnRzLmg6Ci0JKiBsaWJvcC9vcF9ldmVudHMuYzoKLQkqIGxpYnV0aWwvb3BfZGV2aWNlaW8uaDoKLQkqIGxpYnV0aWwvb3BfZGV2aWNlaW8uYzoKLQkqIGxpYnV0aWwvb3BfZmlsZWlvLmg6Ci0JKiBsaWJ1dGlsL29wX2ZpbGVpby5jOiByZW1vdmUgZGVhZCBjb2RlCi0KLQkqIGxpYnV0aWwvb3BfbG9ja19maWxlLmg6Ci0JKiBsaWJ1dGlsL29wX2xvY2tfZmlsZS5jOiBtYWtlIGEgZnVuY3Rpb24gc3RhdGljCi0KLQkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgotCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0Lmg6Ci0JKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuY3BwOiBtb3ZlIGxvdHMgb2YgQkZEIGd1bmsgaW50bwotCSAgYSBzZXBhcmF0ZSBmaWxlLiBGaXggc3ludGggc3ltYm9scyBzdXBwb3J0LCB3aXRoIGxvdHMgb2YKLQkgIHRlc3RpbmcgYnkgTWF5bmFyZC4KLQotCSogbGlidXRpbCsrL2NvbW1hX2xpc3QuaDogcmVtb3ZlIHVudXNlZCBzZXRfcAotCi0JKiBwcC9vcGFubm90YXRlLmNwcDogY29tcGxhaW4gbGVzcyB2ZXJib3NlbHkgaWYgdGhlIGlucHV0IGZpbGUKLQkgIGNvdWxkbid0IGJlIGZvdW5kCi0KLTIwMDUtMDQtMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL2dyb3dhYmxlX3ZlY3Rvci5oOgotCSogbGlicHAvZGlmZl9jb250YWluZXIuY3BwOiBmaXggZmlsbCgpCi0KLQkqIHBwL29wcmVwb3J0LmNwcDogZml4IG11bHRpcGxlIGFwcHMgZm9yIGRpZmYgb3V0cHV0Ci0KLTIwMDUtMDQtMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9pbnRlcmZhY2UuaDoKLQkqIGRhZW1vbi9vcGRfdHJhbnMuYzogcmVtb3ZlIGxlZ2FjeSBUUkFDRV9FTkQKLQotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmM6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9wcm9jLmM6IGF2b2lkIGF0dHJpYnV0aW5nICJubyBtYXBwaW5nIgotCSAgc2FtcGxlcyB0byB2bWxpbnV4IHdoZW4gdXNpbmcgLS1uby12bWxpbnV4IHZpYSBhIHNpY2sgaGFjawotCi0yMDA1LTA0LTEzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9ncm93YWJsZV92ZWN0b3IuaDogYWRkIGZpbGwoKQotCi0JKiBsaWJ1dGlsKysvZGlmZl9jb250YWluZXIuY3BwOiB1c2UgaXQKLQotCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOiBjb2RlIGNsZWFuIHVwCi0KLTIwMDUtMDQtMTMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvZGlmZl9jb250YWluZXIuaDoKLQkqIGxpYnBwL2RpZmZfY29udGFpbmVyLmNwcDogc3ltcyBkb2Vzbid0IG5lZWQgdG8gYmUgYSBtZW1iZXIKLQotMjAwNS0wNC0xMyAgTmF0aGFuIFRhbGxlbnQgIDxlcmF4eG9uQGNzLnJpY2UuZWR1PgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGZpeCB1bnF1b3RlZCB2YXJpYWJsZSByZWZlcmVuY2VzIGluICd0ZXN0JwotIAkgIGV4cHJlc3Npb25zCi0KLTIwMDUtMDQtMTMgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBza2lwIG51bGwtbmFtZSBzZWN0aW9uIHN5bWJvbHMKLQotMjAwNS0wNC0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IGZpeCBkb3VibGUgZm9ybWF0aW5nIHdoZW4gdmFsdWUgYXJlCi0JICBuZWdhdGl2ZQotCi0yMDA1LTA0LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaDoKLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6Ci0JKiBwcC9jb21tb25fb3B0aW9uLmNwcDogdmVyaWZ5IGRpZmYgcHJvZmlsZSBjbGFzc2VzIG1hdGNoCi0KLTIwMDUtMDQtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOiBkb2N1bWVudCBkaWZmIHByb2ZpbGVzCi0KLTIwMDUtMDQtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvZGlmZl9jb250YWluZXIuY3BwOiBmaXggZHVwbGljYXRlIHN5bXMgaW4gb3V0cHV0Ci0KLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIGxpYnBwL2RpZmZfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9kaWZmX2NvbnRhaW5lci5jcHA6IGltcGxlbWVudCB0aHJlc2hvbGRpbmcgZXRjLgotCi0yMDA1LTA0LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL01ha2VmaWxlLmFtOgotCSogbGlicHAvY291bnRfYXJyYXkuY3BwOgotCSogbGlicHAvY291bnRfYXJyYXkuaDoKLQkqIGxpYnBwL2RpZmZfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL2RpZmZfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9mb3JtYXRfZmxhZ3MuaDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5oOgotCSogbGlicHAvc3ltYm9sLmg6Ci0JKiBsaWJwcC9zeW1ib2xfZnVuY3RvcnMuY3BwOgotCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOgotCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKLQkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwrKy9ncm93YWJsZV92ZWN0b3IuaDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOgotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgotCSogcHAvY29tbW9uX29wdGlvbi5jcHA6Ci0JKiBwcC9jb21tb25fb3B0aW9uLmg6Ci0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDoKLQkqIHBwL29wYXJjaGl2ZS5jcHA6Ci0JKiBwcC9vcGFyY2hpdmVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGFyY2hpdmVfb3B0aW9ucy5oOgotCSogcHAvb3BkaWZmLmNwcDoKLQkqIHBwL29wZGlmZl9vcHRpb25zLmNwcDoKLQkqIHBwL29wZGlmZl9vcHRpb25zLmg6Ci0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGdwcm9mX29wdGlvbnMuaDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOiBpbXBsZW1lbnQgYW4gaW5pdGlhbCB2ZXJzaW9uIG9mIGRpZmYKLQkgIHByb2ZpbGluZwotCi0yMDA1LTA0LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBkb2Mvb3ByZXBvcnQuMS5pbjoKLQkqIGRvYy9vcGFubm90YXRlLjEuaW46Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6IGFkZCAtRCBhbmQgLSUKLQotMjAwNS0wNC0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcGFubm90YXRlLmNwcDogZml4IG9wYW5ub3RhdGUgbWF0Y2hpbmcgc2V2ZXJhbCBiaW5hcmllcwotCi0yMDA1LTA0LTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogZml4IGEgc2VnZmF1bHQgaWYgYSBiaW5hcnkgZmlsZSBjYW4ndCBiZQotCSAgYWNjZXNzZWQgKG9wcmVwb3J0IC1nbDsgb3Bhbm5vdGF0ZSkgcHJvYmxlbSBhbmQgc29sdXRpb24gcG9pbnRlZAotCSAgYnkgTWF5bmFyZCBQLiBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPi4KLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDogb3BfYmZkIG1lbWJlciBmdW5jdGlvbiBtdXN0IGNoZWNrIGZvciBhIE5VTEwKLQkgIGliZmQgYmVmb3JlIHVzaW5nIGl0LgotCi0yMDA1LTA0LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW06Ci0JKiBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW06Ci0JKiBsaWJkYi90ZXN0cy9NYWtlZmlsZS5hbToKLQkqIGxpYm9wL3Rlc3RzL01ha2VmaWxlLmFtOiBmaXggdGVzdHMgYnVpbGQKLQotMjAwNS0wNC0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBtNC9NYWtlZmlsZS5hbToKLQkqIG00L2JpbnV0aWxzLm00OgotCSogY29uZmlndXJlLmluOiBtb3ZlIGJpbnV0aWxzIHN0dWZmIGludG8gYSBtYWNybwotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCi0KLTIwMDUtMDQtMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IGhvaXN0IGltYWdlL2FwcCBuYW1lIGxvb2t1cAotCSAgb3V0c2lkZSBvZiB0aGUgbG9vcAotCi0yMDA1LTA0LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgd2l0aCBoYW5kbGluZwotCSAgc3ltYm9scwotCi0yMDA1LTA0LTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL3BvcHVsYXRlLmg6Ci0JKiBsaWJwcC9wb3B1bGF0ZS5jcHA6Ci0JKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKLQkqIGxpYnV0aWwrKy9jYWNoZWRfdmFsdWUuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6Ci0JKiBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW06Ci0JKiBsaWJ1dGlsKysvdGVzdHMvY2FjaGVkX3ZhbHVlX3Rlc3RzLmNwcDogdHdlYWsgQ1JDIGJ1ZmZlci4KLQlEbyBkZWxheWVkIGRlYnVnIGluZm8gc2VhcmNoaW5nIChtYWtlcyBubyBhY3R1YWwgZGlmZmVyZW5jZSkuCi0KLTIwMDUtMDQtMDUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IGFkZCBzZXBhcmF0b3IgYXQgZmlyc3QgZnVuY3Rpb24KLQkgIGZvciBvcHJlcG9ydCAtYwotCi0yMDA1LTA0LTA1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaDoKLQkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGltcGxlbWVudCAtaSAvIC1lIGZvcgotCSAgb3ByZXBvcnQgLWMKLQotMjAwNS0wNC0wNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBpbXBsZW1lbnQgLS1nbG9iYWwtcGVyY2VudAotCSAgZm9yIG9wcmVwb3J0IC1jCi0KLTIwMDUtMDQtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOgotCSogZG9jL01ha2VmaWxlLmFtOgotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGRvYy9vcHN0YWNrLjEuaW46Ci0JKiBkb2Mvb3ByZXBvcnQuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogcHAvLmN2c2lnbm9yZToKLQkqIHBwL01ha2VmaWxlLmFtOgotCSogcHAvb3ByZXBvcnQuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6Ci0JKiBwcC9vcHN0YWNrLmNwcDoKLQkqIHBwL29wc3RhY2tfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHN0YWNrX29wdGlvbnMuaDogcmVtb3ZlIG9wc3RhY2sgaW4gZmF2b3VyIG9mIG9wcmVwb3J0IC1jCi0KLQkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOiBmaXggZm9yIG5ldyBjYWxsLWdyYXBoIGNvZGUKLQotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGRvYy9vcGFyY2hpdmUuMS5pbjogZG9jdW1lbnQgLXgsIHJlLW9yZ2FuaXNlIG1hbnVhbAotCi0yMDA1LTA0LTA0IE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogZnVydGhlciBjaGVjayBmb3IgYmZkIHN5bnRoZXNpc2VkCi0JICBzeW1ib2xzIHN1cHBvcnQKLQotMjAwNS0wNC0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaDoKLQkqIGxpYnBwL2Zvcm1hdF9mbGFncy5oOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9zeW1ib2wuY3BwOgotCSogbGlicHAvc3ltYm9sLmg6Ci0JKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6Ci0JKiBsaWJwcC9zeW1ib2xfc29ydC5oOgotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6Ci0JKiBwcC9jb21tb25fb3B0aW9uLmNwcDoKLQkqIHBwL2NvbW1vbl9vcHRpb24uaDoKLQkqIHBwL29wc3RhY2suY3BwOgotCSogcHAvb3BzdGFja19vcHRpb25zLmNwcDoKLQkqIHBwL29wc3RhY2tfb3B0aW9ucy5oOiByZS13aGFjayBjYWxsLWdyYXBoIGNvbGxlY3Rpb24KLQkgIGFuZCBvdXRwdXQgZm9ybWF0Ci0KLTIwMDUtMDQtMDMgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KLQotCSogY29uZmlndXJlLmluOgotCSogbGlidXRpbCsrL29wX2JmZC5oOgotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHN5bnRoZXNpcyBkb3R0ZWQgc3ltYm9scwotCSAgaWYgbmVjZXNzYXJ5Ci0KLTIwMDUtMDMtMzEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogSEFDS0lORzoKLQkqIFRPRE86Ci0JKiBjb25maWd1cmUuaW46Ci0JKiBkb2MvTWFrZWZpbGUuYW06Ci0JKiBkb2Mvb3BfaGVscC4xLmluOgotCSogZG9jL29waGVscC4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGxpYmFiaS8uY3ZzaWdub3JlOgotCSogbGliYWJpL01ha2VmaWxlLmFtOgotCSogbGliYWJpL29waW1wb3J0LmNwcDoKLQkqIHV0aWxzLy5jdnNpZ25vcmU6Ci0JKiB1dGlscy9NYWtlZmlsZS5hbToKLQkqIHV0aWxzL29wY29udHJvbDoKLQkqIHV0aWxzL29waGVscC5jOiByZW5hbWUgb3BfaW1wb3J0LT5vcGltcG9ydCwKLQkgIG9wX2hlbHAtPm9waGVscC4gQWxsb3cgbm9ybWFsIHVzZXIgdG8gdXNlCi0JICBvcGNvbnRyb2wgLS1saXN0LWV2ZW50cwotCi0yMDA1LTAzLTMxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9pbnRlcm5hbHMueG1sOiBtb3JlIGludGVybmFscyBkb2NzCi0KLTIwMDUtMDMtMjkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5oOgotCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9zeW1ib2wuaDoKLQkqIGxpYnBwL3N5bWJvbF9zb3J0Lmg6Ci0JKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDogaGVhZGVyIGZpbGUgY2xlYW51cAotCi0yMDA1LTAzLTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIG00L2NvbmZpZ21vZHVsZS5tNDoKLQkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46Ci0JKiBtb2R1bGUveDg2L2hhbW1lcl9lbnRyeS5TOgotCSogbW9kdWxlL3g4Ni9oYW1tZXJfaWEzMmVudHJ5LlM6Ci0JKiBtb2R1bGUveDg2L2hhbW1lcl9vcF9zeXNjYWxscy5jOgotCSogbW9kdWxlL3g4Ni9oYW1tZXJfb3Byb2ZpbGVfbm1pLlM6Ci0JKiBtb2R1bGUveDg2L29wX2FwaWMuaDoKLQkqIG1vZHVsZS94ODYvb3BfYXJjaC5oOgotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcmVtb3ZlIHg4Ni02NCBzdXBwb3J0IGZvciAyLjQKLQkgIGtlcm5lbHMsIGFzIGl0J3Mgbm9uLWZ1bmN0aW9uYWwKLQotMjAwNS0wMy0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGhvbm91ciBvcHJvZmlsZWQgLXYgZmlyc3QsIGNvbXBsYWluCi0JaWYgLS1ldmVudHMgb3B0aW9uIGlzIG1pc3NpbmcgaW5zdGVhZCBvZiBjb3JlIGR1bXBpbmcKLQotCSogZG9jL29wcm9maWxlZC54bWw6IGV4cGxhaW4gb3ByZXBvcnQgLWQgYmVoYXZpb3VyIGZvcgotCSAgbm8tc3ltYm9sIGJpbmFyaWVzCi0KLTIwMDUtMDMtMTQgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+Ci0KLQkqIHV0aWxzL29wX2hlbHAuYzoKLQkqIGRvYy9vcHJvZmlsZS54bWw6IAotCSAgVXBkYXRlIFBQQzY0LXJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBpbmNsdWRlIFVSTCBsaW5rcyB0bwotCSAgSUJNIHB1YmxpY2F0aW9ucy4KLQotMjAwNS0wMy0yMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC45Y3ZzCi0KLTIwMDUtMDMtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjguMgotCi0yMDA1LTAzLTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBldmVudHMvaTM4Ni9wNC9ldmVudHM6Ci0JKiBldmVudHMvaTM4Ni9wNC91bml0X21hc2tzOgotCSogZXZlbnRzL2kzODYvcDQtaHQvZXZlbnRzOgotCSogZXZlbnRzL2kzODYvcDQtaHQvdW5pdF9tYXNrczogcmVtb3ZlIEZST05UX0VORF9FVkVOVCwgRVhFQ1VUSU9OX0VWRU5UCi0JICBhbmQgUkVQTEFZX0VWRU5ULgotCi0JKiBsaWJvcC90ZXN0cy9hbGxvY19jb3VudGVyX3Rlc3RzLmM6IHVwZGF0ZSB0ZXN0IGFjY29yZGluZyBldmVudHMKLQkgIHJlbW92YWwKLQotMjAwNS0wMy0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogdXRpbHMvb3Bjb250cm9sOiByZXZlcnQgbGFzdCBwYXRjaCwgYmFzaCBjYW4ndCBkbyBpbnRlZ2VyCi0JICBhcml0aG1ldGljIG9uIGhleGFkZWNpbWFsLgotCi0yMDA1LTAyLTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogZnVydGhlciB2YWxpZGF0aW9uIG9mIHRoZSBrZXJuZWwgcmFuZ2UgdG8KLQkgIHByZXZlbnQgYW4gdW5yZWxvY2F0ZWQgdm1saW51eCBiZWluZyB1c2VkCi0KLTIwMDUtMDItMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZXZlbnRzL2FybS94c2NhbGUxL3VuaXRfbWFza3M6IGZpeCAnemVybycgdW5pdCBtYXNrCi0KLTIwMDUtMDEtMjUgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KLQotCSogZG9jL29wcm9maWxlLnhtbDogQWRkIFBvd2VyUEMgNjQtYml0IHByb2Nlc3NvciBzdXBwb3J0IGluZm9ybWF0aW9uCi0KLTIwMDUtMDEtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBhbHdheXMgaW5pdGlhbGl6ZSBvcF9iZmRfc3ltYm9sOnN5bWJfaGlkZGVuCi0JIGFuZCBzeW1iX3dlYWssIG5vdCBhIGJ1ZyBmaXggYnV0IGEgY2xlYW51cC4KLQotMjAwNS0wMS0wNCAgQW5keSBGbGVtaW5nICA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KLQotCSogZXZlbnRzL01ha2VmaWxlLmFtOgotCSogZXZlbnRzL3BwYy9lNTAwL2V2ZW50czoKLQkqIGV2ZW50cy9wcGMvZTUwMC91bml0X21hc2tzOgotCSogbGlib3Avb3BfZXZlbnRzLmM6Ci0JKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgotCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKLQkqIHV0aWxzL29wX2hlbHAuYzogQWRkIFBQQyBlNTAwIHN1cHBvcnQKLQotMjAwNS0wMS0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGZpeCAjMTA5MzE2MiBieSBzaW1wbGlmeWluZyB0aGUgY29kZSwgdGhpcyB3YXMKLQkgIGxpa2VseSB0byBiZSBhIGNvbXBpbGVyIHByb2JsZW0gYnV0IHRoZSBuZXcgY29kZSBpcyBzaW1wbGVyLgotCi1TZWUgQ2hhbmdlTG9nLTIwMDQgZm9yIGVhcmxpZXIgY2hhbmdlbG9ncy4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy0yMDAxIGIvQ2hhbmdlTG9nLTIwMDEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYzViZTQuLjAwMDAwMDAKLS0tIGEvQ2hhbmdlTG9nLTIwMDEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzI3ICswLDAgQEAKLTIwMDEtMTItMzEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG1vZHVsZS9vcF9pbml0LmM6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogZXhwb3J0IGNwdSB0eXBlIHByZXBhcmluZyBmb3IgdXNlciBzcGFjZQotCSAgY3B1IGRldGVjdGlvbiBjaGFuZ2UKLQkqIG1vZHVsZS9vcHJvZmlsZS5oOiBwcmVwYXJhdG9yeSB3b3JrIHRvIGFkZCBzdXBwb3J0IGZvcgotCSAgcHJlZW1wdCBwYXRjaAotCi0JKiBwcC9vcHJvZnBwLmNwcDogY2xlYW51cCAjaWYgMCAuLi4gI2Vsc2UgLi4uICNlbmRpZgotCSogcHAvb3JvZnBwX3V0aWwuY3BwOiBhbGxvdyB0byBkZWR1Y2UgaW1hZ2UgbmFtZSBmcm9tCi0JICBzaGFyZWQgbGliIHNhbXBsZXMgZmlsZXMgbmFtZSBwcm9kdWNlZCB3aXRoCi0JICAtLXNlcGFyYXRlLXNhbXBsZXMKLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogbWlub3IgZml4Ci0KLTIwMDEtMTItMzEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHZhcmlvdXMgZmlsZXM6IHVzZSBvcF9jcHUgZW51bSBmb3IgY3B1IHR5cGUKLSAKLQkqIGFsbCAuY3ZzaWdub3JlOgotCSogUnVsZXMubWFrZS5pbjoKLQkqIGFsbCBNYWtlZmlsZS5pbjogaGlkZSAuZCBmaWxlcyBpbiAuZGVwcyBkaXJlY3RvcmllcwotCi0yMDAxLTEyLTMxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBNYWtlZmlsZS5pbjogbW92ZSBjb25maWcuaC5pbiB0byBtYWludGFpbmVyY2xlYW4gLSBpdCBpcyBpbmNsdWRlZAotCWluIGEgdGFyYmFsbCBzbyBhIGRpc3RjbGVhbiBzaG91bGRuJ3QgcmVtb3ZlIGl0Ci0gCi0yMDAxLTEyLTMxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLSAKLQkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOgotCSogZG9jL29wcm9maWxlLnNnbWw6Ci0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjogc21hbGwgdXBkYXRlcwotIAotCSogb3Byb2ZpbGUuYzogbW9yZSBkZXRhaWwgb24gbG9ja2luZyByZXF1aXJlbWVudHMgZm9yIHdha2VfdXAKLSAKLTIwMDEtMTItMzEgIE1pY2hlbCBEYWdlbmFpcyAgPG1pY2hlbC5kYWdlbmFpc0Bwb2x5bXRsLmNhPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0Lmg6IHNob3cgdG90YWwgc2FtcGxlcyBzbyBmYXIKLSAKLTIwMDEtMTItMjkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZS9vcF9zdGFydDogLS1zZXBhcmF0ZS1zYW1wbGVzIGlzIHdvcmtpbmcKLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgotCSogZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6IGhhbmRsZSBzZXBhcmF0aW5nIGZvcgotCSAgc2hhcmVkIGxpYnMsIG9mZiBieSBkZWZhdWx0LgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOiBkb2N1bWVudCAtLXNob3ctc2hhcmVkLWxpYnMKLQotCSogcHAvb3BmX2ZpbHRlci5oOgotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6IG5ldyBjbGFzcyBzYW1wbGVzX2ZpbGVzX3QKLQkgIHRvIGVhc2llciBhY2Nlc3MgdG8gc3Vic2V0IG9mIHN5bWJvbHMvc2FtcGxlcyBvcgotCSAgc291cmNlIGZpbGVuYW1lIGZyb20gbXVsdGlwbGUgaW1hZ2UKLQotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcHJvZnBwLmg6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBpbXBsZW1lbnQgLS1zaG93LXNoYXJlZC1saWJzIGV4Y2VwdAotCSAgZm9yIG9wZl9maWx0ZXIKLQotCSogdXRpbC9maWxlX21hbmlwLmg6Ci0JKiB1dGlsL2ZpbGVfbWFuaXAuY3BwOiBuZXcgZnVuY3Rpb24gdG8gbWFuaXB1bGF0ZSBzYW1wbGUKLQkgIGZpbGUgbmFtZSBhbmQgbGlzdCBvZiBzYW1wbGUgZmlsZSBuYW1lLgotCi0yMDAxLTEyLTI3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkYWUvb3Bfc3RvcDogYWx3YXlzIGRvIGFuIG9wX2R1bXAgYmVmb3JlIHN0b3BwaW5nCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBvcF9kdW1wIGJlZm9yZSBvcF9zdG9wCi0JICBubyBsb25nZXIgcmVxdWlyZWQKLQotMjAwMS0xMi0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogcHAvb3BmX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcGZfZmlsdGVyLmg6Ci0JKiBwcC9vcHJvZnBwLmg6Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDoJCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcF90aW1lLmM6IHJlbW92ZSBzb21lIHVzZSBvZiBnbG9iYWwgdmFyCi0JICBzYW1wbGVmaWxlIGFuZCBpbWFnZWZpbGUKLQotCSogcHAvb3Byb2ZwcC5jcHA6IGRvX2R1bXBfZ3Byb2YoKSBmcmVlIG1lbW9yeQotCSAgdG9vIHNvb24uICh3YXMgYnVnZ2VkIGZyb20gMjAwMS0xMi0wNSkKLQotCSogZG9jL29wcm9maWxlLnNnbWw6IHJlbW92ZSBtZW50aW9uIGFib3V0IG9wcm9mLXRocmVhZAotCi0yMDAxLTEyLTIzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiB1dGlsL3N0cmluZ19tYW5pcC5oOgotCSogdXRpbC9zdHJpbmdfbWFuaXAuY3BwOiBzZXBhcmF0ZV90b2tlbigpIG5ldyBmdW5jdGlvbgotCi0JKiBwcC9vcGZfZmlsdGVyLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKLQkqIGRvYy9vcHJvZmlsLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogYWRkIHN1cHBvcnQgZm9yIC0tZXhjbHVkZS1zeW1ib2wKLQotCSogVE9ETzogdXBkYXRlCi0KLTIwMDEtMTItMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRhZS9vcF9zdGFydDogYWRkIC0tc2VwYXJhdGUtc2FtcGxlcwotCSogZGFlL29wcm9maWxlZC5jOiBkaXR0bwotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3BkX3V0aWwuaDoKLQkqIGRhZS9vcGRfdXRpbC5jOgotCSogZGFlL29wcm9maWxlZC5oOiBpbXBsZW1lbnRhdGlvbiBvZiBhYm92ZQotCSogcHAvb3BfdGltZS5jcHA6IAotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3ByZmlsZS5zZ21sOiBoYW5kbGUgYW5kIGRvY3VtZW50IGFib3ZlCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBtaW5vciBjaGFuZ2UgcmVsYXRlZAotCi0JKiBkYWUvb3Byb2ZpbGVkLmM6IGJ1ZyBmaXggd2hpbGUgYmxvY2tpbmcgc2lnbmFsCi0KLQkqIGRvYy9NYWtlZmlsZS5pbjogYXZvaWQgdW5lY2Vzc2FyeSBidWlsZCBvZiBodG1sIGRvYwotCi0yMDAxLTEyLTIyICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPgotCi0JKiBjb25maWcuaC5pbjogUmVhZGQgdG8gQ1ZTLgotCi0yMDAxLTEyLTE4ICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPgotCi0JKiBNYWtlZmlsZS5pbjogTWFrZSBkb2N1bWVudGF0aW9uIGJ1aWxkIGFnYWluLgotCi0yMDAxLTEyLTE0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkYWUvb3BkX3Byb2MuYzogbWVtb3J5IGxlYWsgZml4IGluIG9wZF9pbml0X2ltYWdlcygpCi0KLTIwMDEtMTItMTIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG1vZHVsZS9vcHJvZmlsZS5oOiBjaGFuZ2Ugc2xpZ2h0bHkgb3BfaGFzaCgpCi0KLQkqIHV0aWwvZmlsZV9tYW5pcC5oOgotCSogdXRpbC9maWxlX21hbmlwLmNwcDoKLQkqIHV0aWwvc3RyaW5nX21hbmlwLmg6Ci0JKiB1dGlsL3N0cmluZ19tYW5pcC5jcHA6Ci0JKiB1dGlsL2NoaWxkX3JlYWRlci5oOgotCSogdXRpbC9jaGlsZF9yZWFkZXIuY3BwOiBjbGVhbnVwIEpvaG4ncyBGSVhNRQotCi0JKiBkYWUvb3BkX3V0aWwuaDoKLQkqIGRhZS9vcGRfdXRpbC5jOiBtb3ZlIGxpYmliZXJ0eSB0aGluZ3MgdG8gLi4uCi0JKiB1dGlsL21pc2MuaDoKLQkqIHV0aWwvbWlzYy5jOiBoZXJlCi0JKiB1dGlsL01ha2VmaWxlLmluOiB1cGRhdGUKLQkqIGRhZS9NYWtlZmlsZS5pbjoKLQkqIHBwL01ha2VmaWxlLmluOgotCi0JKiBkb2MvTWFrZWZpbGUuaW46IGluc3RhbGwgdGhlIGh0bWwgZG9jCi0KLTIwMDEtMTItMTAgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzogZml4IHNpZ3Byb2NtYXNrKCkgYmxvb3BlcgotIAotMjAwMS0xMi0wOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlIGFnYWluCi0gCi0JKiB1dGlsL2NoaWxkX3JlYWRlci5oOgotCSogdXRpbC9jaGlsZF9yZWFkZXIuY3BwOiAKLQkqIHV0aWwvZmlsZV9tYW5pcC5jcHA6Ci0JKiB1dGlsL3N0cmluZ19tYW5pcC5jcHA6IHBlZGFudGljIGNsZWFudXAgKyBGSVhNRXMKLQotMjAwMS0xMi0wOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBhZGQgRklYTUUgY29tbWVudAotCi0JKiB1dGlsL2ZpbGVfbWFuaXAuaDogYWRkIEZJWE1FIGNvbW1lbnQsIAotCSAgYXZvaWQgd2FybmluZyB3aXRoIC8vCi0gCi0yMDAxLTEyLTA5ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotMjAwMS0xMi0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZGFlL29wZF9wcm9jLmM6IHZlcmJwcmludGYoKSB3aGF0IGNhdXNlIHRoZQotCSAgZGVsZXRpb24gb2YgYSBzYW1wbGUgZmlsZSArIG1pbm9yIGNsZWFudXAKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBkb2N1bWVudCBzYW1wbGVzIGZpbGVzIGJhY2t1cAotCi0yMDAxLTEyLTA3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkYWUvb3Byb2ZpbGVkLmg6Ci0JKiBkYWUvb3BkX3Byb2MuYzogaGFuZGxlIGFuIGFjY2Vzc2VkIGZpZWxkIG9mCi0JICBkZWxldGVkIG9mIGRlbGV0ZWQgcHJvY3MgdG8gZGVmZXIgZGVsZXRpbmcKLQkgIHRoZSBwcm9jcy4gVGhpcyBncmVhdGx5IHJlZHVjZSB0aGUgTnIgb2YgbG9zdAotCSAgc2FtcGxlcyBkdWUgdG8gbm8gcHJvYyBpbmZvcm1hdGlvbi4KLQotMjAwMS0xMi0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZGFlL29wcm9maWxlZC5oOgotCSogZGFlL29wZF9wcm9jLmM6IHNlcGFyYXRlIHN0YXRzIGZvciBrZXJuZWwKLQkgIGFuZCBtb2R1bGVzIGFkZHJlc3Mgc3BhY2UgYW5kIG1pbm9yIGNsZWFudXAKLQotMjAwMS0xMi0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogUnVsZXMubWFrZS5pbjoKLQkqIGRhZS9NYWtlZmlsZS5pbjoKLQkqIGV2ZW50cy9NYWtlZmlsZS5pbjoKLQkqIHBwL01ha2VmaWxlLmluOiAKLQkqIHV0aWwvTWFrZWZpbGUuaW46IHRpZHkKLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjoKLQkqIGd1aS9NYWtlZmlsZS5pbjogdXNlIGF1dG8tZGVwcwotCi0JKiB1dGlsL2NoaWxkX3JlYWRlci5oOiBhbGxvdyB0byBjb21waWxlIHdpdGggLWFuc2kKLQkqIHV0aWwvY2hpbGRfcmVhZGVyLmNwcDogZml4IG1lbW9yeSBsZWFrIGZpeAotCSogcHAvb3Byb2ZwcC5jcHA6IGZpeCBtZW1vcnkgbGVhawotCi0JKiBUT0RPOiB1cGRhdGUKLQotMjAwMS0xMi0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogYXV0b2dlbi5zaDogdXNlIGF1dG9oZWFkZXIgdG8gY3JlYXRlIGNvbmZpZy5oCi0JKiBjb25maWd1cmUuaW46IGhhbmRsZSBtaXNzaW5nIGxpYmliZXJ0eS5oIGFuZAotCSAgbWlzc2luZyB4Y2FsbG9jIGluIGxpYmliZXJ0eS5hCi0JKiBkYWUvb3BkX3V0aWwuY3BwOgotCSogZGFlL29wZF9wcm9jLmM6IAotCSogZGFlL29wZF91dGlsLmg6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBldmV0cy9NYWtlZmlsZS5pbgotCSogcHAvb3Byb2ZfY29udmVydC5jOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiByZXBsYWNlIG9wZF9tYWxsb2MoKSBhbmQgcmVsYXRlZAotCSAgYnkgeG1hbGxvYy4KLQkqIHV0aWwvb3BfcG9wdC5jOiBhZGQgY2FsbCB0byB4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUoKQotCSogLi9jdnNpZ25vcmU6IGFkZCBjb25maWcuaCwgY29uZmlnLmguaW4KLQotMjAwMS0xMi0wNCAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KLQotCSogZXZlbnRzL29wX2V2ZW50c19kZXNjLmM6Ci0JICBBZGQgcmVjb2duaXRpb24gZm9yIGFsdGVybmF0aXZlIFBJSUkgc3RyaW5nLgotCSAgUmVwb3J0ZWQgYnkgTGV2IElzZXJvdmljaCA8bGV2QGNpcHJpY28uY29tPgotCQotMjAwMS0xMi0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZGFlL29wZF91dGlsLmM6Ci0JKiBkYWUvb3BkX3V0aWwuYzogbW92ZSBjb21tb24gZnVjdGlvbm5hbGl0eSB0byAuLi4KLQkqIHV0aWwvZmlsZV9tYW5pcC5oCi0JKiB1dGlsL2ZpbGVfbWFuaXAuYzogaGVyZQotCSogcHAvb3Byb2ZfY29udmVydC5jOiByZWZsZWN0IGFib3ZlIGNoYW5nZQotCSogcHAvb3Byb2ZfY29udmVydC5jOgotCSogcHAvb3BmX2ZpbHRlci5jcHA6IGRpdHRvICsgbWlub3IgY2xlYW51cAotCSogZ3VpL01ha2VmaWxlLmluOgotCSogcHAvTWFrZWZpbGUuaW46IHJlZmxlY3QgYWJvdmUgY2hhbmdlCi0KLTIwMDEtMTItMDIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wcm9mcHAuaDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBzbWFsbCB0aWRpZXMKLQotMjAwMS0xMi0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogTWFrZWZpbGUuaW46IGJ1aWxkIHV0aWwgc3ViLWRpciBmaXJzdAotCi0JKiBkYWUvb3BkX3V0aWwuaDoKLQkqIGRhZS9vcGRfdXRpbC5jOiBtb3ZlIG9wZF9HZXRDb250ZXh0KCkgLi4uCi0JKiB1dGlsL29wZF9wb3B0Lmg6Ci0JKiB1dGlsL29wZF9wb3B0LmM6IGluIHRoZXNlIG5ldyBmaWxlcwotCi0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6IGZyZWUgdGhlIHBvcHRDb250ZXh0ICsgY2xlYW51cCBwb3B0Ci0KLQkqIGV2ZW50cy9vcF9oZWxwLmM6Ci0JKiBldmVudHMvTWFrZWZpbGUuaW46IHVzZSB0aGUgcG9wdCBsaWJyYXJ5Ci0KLQkqIHBwL29wcm9mcHAuY3BwOiBhbGxvdyB0byB1c2UgLS1vdXRwdXQtbGluZW5yLWluZm8gd2l0aAotCSAgLS1saXN0LXN5bWJvbHMuCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiByZWZsZWN0IGl0Ci0KLTIwMDEtMTItMDEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOgotCSogZGFlL29wZF91dGlsLmM6Ci0JKiBkYWUvb3BkX3V0aWwuaDoKLQkqIGRhZS9vcHJvZmlsZWQuYzogYmFja3VwIGlmIG5lZWRlZCBvbGQgc2FtcGxlcyBmaWxlcwotCSAgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkKLQotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogY2xlYW51cCArIG1pbm9yIGJ1Z2xldCBmaXgKLQotCSogdXRpbC9maWxlX21hbmlwLmg6Ci0JKiB1dGlsL2ZpbGVfbWFuaXAuY3BwOiBjcmVhdGVfZmlsZV9saXN0KCkgbmV3IHRvIGNyZWF0ZQotCSAgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZSBpbiBhIGRpcmVjdG9yeQotCi0JKiBwcC9vcF90aW1lLmNwcDogbmV3IHV0aWxpdHkKLQkqIHBwL01ha2VmaWxlLmluOiBoYW5kbGUgb3BfdGltZQotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjogRG9jdW1lbnQgb3BfdGltZQotCi0yMDAxLTExLTMwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBjb25maWd1cmUuaW46IGN2cyBhZGQgUnVsZXMubWFrZS5pbi4KLQotMjAwMS0xMS0zMCAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KLQotCSogY29uZmlndXJlLmluOiBzdXBwcmVzcyByZWZlcmVuY2UgdG8gYW4gaW5leGlzdGFudAotCSAgUnVsZXMubWFrZS5pbgotCi0yMDAxLTExLTI5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBkbyBub3QgcmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZSB0bwotCSAgYXZvaWQgQysrIGRlbWFuZ2xpbmcgZmFpbHVyZQotCi0yMDAxLTExLTI3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBwcC9NYWtlZmlsZS5pbjogd29yay1hcm91bmQgZm9yIGdjYyAzLjAgYW5kIGJmZCBwcmUtMTk5OAotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogdHlwbwotCi0yMDAxLTExLTI2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBSdWxlcy5tYWtlLmluOiBuZXcgdG8gYWRkIGF1dG9kZXBzIGFuZCBzaGFyZSBjb21tb25zCi0JICBkZWZpbml0aW9ucwotCSogYWxsIE1ha2VmaWxlLmluIGV4Y2VwdCBtb2R1bGUsIGd1aTogdXNlIGF1dG9kZXBzCi0KLQkqIGRvYy9vcHJvZmlsZS4xLmluOiB0eXBvCi0KLQkqIHV0aWwvZmlsZW1hbmlwLmg6IG1pc3Npbmcgc3RkOjoKLQotMjAwMS0xMS0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogb3Byb2ZpbGUtdGVzdHMvdW5kZXJzdGFuZGluZy9wZXJzaXN0ZW50LmNwcDogbmV3Ci0JKiB1dGlsL3BlcnNpc3RlbnQuaDogbmV3LiBBbiBhdHRlbXB0IHRvIHByb3ZpZGUgYSBiZXR0ZXIKLQkgIGNvbmZpZ3VyYXRpb24gc2F2aW5nL3Jlc3RvcmluZyBsaWJyYXJ5LiBOb3QgeWV0IGxpbmtlZCB0bwotCSAgb3Byb2Zfc3RhcnQuCi0KLTIwMDEtMTEtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHRha2UgY2FyZSB0aGFuIGdldF9saW5lbnIoKSBnZXQKLQkgIGxpbmUgbnIgYW5kIGZpbGVuYW1lIGluZm8gZnJvbSBiZmQgZm9yIHRoZSByaWdodCBzeW1ib2wKLQkgIGFuZCBub3QgZm9yIHRoZSBuZWFyZXN0IHN5bWJvbCB3aXRoIGRlYnVnIGluZm8gKCM0ODQ2NjApCi0KLTIwMDEtMTEtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG1vZHVsZS9vcHJvZmlsZS5oOiB3b3JrIGFyb3VuZCBhZ2FpbnN0IGEgZ2NjCi0JICAyLjkxLjY2IGNvZGUgZ2VuZXJhdGlvbiBidWcgaW4gb3Byb2ZfZXhpdCgpCi0KLTIwMDEtMTEtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRhZS9vcF9zdGFydDogZG8gbm90IHBhc3MgYnVmc2l6ZSwgbm90ZV9idWZzaXplIGFuZAotCSAga2VybmVsX29ubHkgYXMgb3B0aW9uIHRvIHRoZSBkYWVtb24gYnV0IC4uLgotCSogZGFlL29wcm9maWxlZC5jOiByZWFkIHRoZW0gZnJvbSBzeXNjdGwKLQotCSogZGFlL29wZF9wcm9jLmM6IGluIG9wZF9oYW5kbGVfb2xkX3NhbXBsZV9maWxlKCkgZG8gbm90Ci0JICBkZWxldGUgc2FtcGxlIGZpbGUgaWYgbXRpbWUgZGlmZmVyIGJ1dCBiYWNrdXAgaXQuCi0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOgotCSogcHAvb3Byb2ZfY29udmVydC5jOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogcmVwbGFjZSBzZXNzaW9uIG51bWJlciBieQotCSAgYmFja3VwIG51bWJlcgotCi0JKiB1dGlsL3N0cmluZ19tYW5pcC5jcHA6IGZpeCBzdHVwaWQgYnVnIGluIHJ0cmltKCkKLQotMjAwMS0xMS0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZ3VpL29wcm9mX3N0YXJ0Lmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZGFlL29wZF91dGlsLmg6Ci0JKiBkYWUvb3BkX3V0aWwuY3BwOiBzbWFsbCBjbGVhbnVwCi0KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBzaW1wbGlmeSBhIGxpdHRsZSB3aGF0IHRoZQotCSAgbm1pIGhhbmRsZXIKLQotCSogZG9jL29wcm9maWxlLnNnbWw6IGNsYXJpZnkgb3BfdG9fc291cmNlIG9wdGlvbnMKLQotCSogcHAvY2hpbGRfcmVhZGVyLmNwcDoKLQkqIHBwL2NoaWxkX3JlYWRlci5oOiBtb3ZlIHRoZXNlIC4uLgotCSogdXRpbC9jaGlsZF9yZWFkZXIuY3BwOgotCSogdXRpbC9jaGlsZF9yZWFkZXIuaDogaGVyZQotCSogdXRpbC9maWxlX21hbmlwLmg6Ci0JKiB1dGlsL2ZpbGVfbWFuaXAuY3BwOiBuZXcKLQkqIGd1aS9NYWtlZmlsZS5pbjoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6Ci0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiB1c2UgY2hpbGRfcmVhZGVyIGFuZCBmaWxlX21hbmlwCi0KLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IGNoYW5nZSBvcmRlcmluZyBvZiBvcGVuaW5nIGluCi0JICBvcHBfYmZkIGN0ciB0byBhdm9pZCBjcnlwdGljIGVycm9yIG1lc3NhZ2UKLQotCSogVE9ETzogdXBkYXRlCi0KLTIwMDEtMTEtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGV2ZW50czogbmV3IGRpcmVjdG9yeQotCi0JKiBldmVudHMvTWFrZWZpbGUuaW46Ci0JKiBldmVudHMvb3BfZXZlbnRzLmM6Ci0JKiBldmVudHMvb3BfZXZlbnRzX2Rlc2MuYzoKLQkqIGV2ZW50cy9vcF9oZWxwLmM6IG5ldywgc3BsaXR0ZWQgZnJvbSBvcF9ldmVudHMuYwotCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBuZXcsIHNwbGl0dGVkIGZyb20gb3Byb2ZwcC5jcHAKLQotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcC5jOgotCSogb3BfdXNlci5oOgotCSogYWxsIE1ha2VmaWxlLmluOiB1cGRhdGUKLQkqIG9wX2V2ZW50cy5jOiByZW1vdmUKLQotMjAwMS0xMS0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogb3BfZXZlbnRzLmM6IGxhc3QgY29tbWl0IHdhcyBiYWQKLQkKLQkqIHBwL29wcm9mcHAuYzogdXNlIHNzdHJlYW0KLQotMjAwMS0xMS0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogdXRpbDogbmV3IGRpcmVjdG9yeQotCSogdXRpbC9zdHJpbmdfbWFuaXAuY3BwOgotCSogdXRpbC9zdHJpbmdfbWFuaXAuaDogbmV3Ci0JKiBNYWtlZmlsZS5pbjogaGFuZGxlIHV0aWwgZGlyZWN0b3J5Ci0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL29wZl9maWx0ZXIuaDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogZ3VpL01ha2VmaWxlLmluOgotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuaDogdXBkYXRlIHRvIHVzZSBzdHJpbmdfbWFuaXAuY3BwCi0KLQkqIG9wX2V2ZW50cy5jOgotCSogb3BfdXNlci5oOgotCSogcHAvb3BmX2ZpbHRlci5oOgotCSogcHAvb3BmX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDogcmVtb3ZlIGRlYWQgY29kZQotCi0yMDAxLTExLTExICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPgotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuW2N8aF06IENoYW5nZSBNU1IgZGVmaW5lcyBmcm9tCi0JICBNU1JfSUEzMl94eHggZnJvbSBNU1JfUDZfeHh4LCBiYXNlZCBvbiBpbmZvIG9uCi0JICBMaW51eCBrZXJuZWwgZnJvbSBNaWthZWwgUGV0dGVyc3NvbiB0aGF0IHRoZXNlIE1TUnMKLQkgIGRvbid0IGV4aXN0IG9uIFBlbnRpdW0gNC4KLQotMjAwMS0xMS0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogZml4IHJlY29yZF9jb25maWcoKQotCi0JKiBvcF91c2VyLmg6IGZpeCBvbmUgY29tbWVudAotCi0yMDAxLTExLTEwICBCb2IgTW9udGdvbWVyeSAgPGJvYl9tb250Z29tZXJ5QGhwLmNvbT4KLQotCSogbW9kdWxlL29wcm9maWxlLmM6IGZpeCBwaWQvcGdycCBmaWx0ZXIgdG8gcmVzZXQgY291bnRlciAKLQotMjAwMS0xMS0wOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjAuOGN2cwotIAotMjAwMS0xMS0wNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogYWNpbmNsdWRlLm00OgotCSogY29uZmlndXJlLmluOiBmaXhlcyBmb3IgY29uZmlndXJhdGlvbiB3aGVuIFF0MiBub3QgZm91bmQKLQotCSogY2hpbGRfcmVhZGVyLmg6Ci0JKiBjaGlsZF9yZWFkZXIuY3BwOiBjb21waWxlIHdpdGggZ2NjIDMuMAotIAotMjAwMS0xMS0wNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuMC43Ci0gCi0yMDAxLTExLTA3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuaDoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBmYWlsIGlmIGhhcmRfZ2V0X2N1cnJlbnQoKSBleGlzdHMKLQkgIC0gdGhpcyB3b24ndCB3b3JrCi0gCi0yMDAxLTExLTA2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjogcmVmb3JtYXQgb3B0aW9ucwotCSogZG9jL29wcm9maWxlLnNnbWw6IGNsYXJpZnkgb3B0aW9ucyB0aGF0IHJlcXVpcmUgYXJndW1lbnQuCi0JICBEb2N1bWVudCBzaG9ydCBvcHRpb24KLQotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOiBmaXggYmFzZW5hbWUoKQotCi0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL29wcm9mcHAuaDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBiZXR0ZXIgb3B0aW9ucyBoYW5kbGluZwotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogdXBkYXRlIG9uZSBjb21tZW50Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0yMDAxLTExLTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuaDoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBzdXBwb3J0IGZvciBoYXJkX2dldF9jdXJyZW50KCkKLSAKLTIwMDEtMTEtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9vcHJvZmlsZS5oOgotCSogbW9kdWxlL29wcm9maWxlLmM6IG1ha2UgYWxsb3dfdW5sb2FkIGV4aXN0IGZvciBVUAotCSAgdG9vIChkZWZhdWx0IHRvIDEpCi0gCi0yMDAxLTExLTA1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogbW9kdWxlL29wcm9maWxlLmM6IGZpeCBucl9pbnRlcnJ1cHRzIHN5c2N0bAotCi0yMDAxLTExLTA0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkYWUvb3Bfc3RhcnQ6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6Ci0JKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aTogaGFuZGxlIG5vdGUgdGFibGUgc2l6ZSBzeXNjdGwKLQotCSogbW9kdWxlL29wX3N5c2NhbGxzLmM6IGhhbmRsZSBkbmFtZSBoYXNoIGNvZGluZyBjb2xsaXNpb24gd2l0aAotCSAgYSBsaW5lYXIgc2VhcmNoLgotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzoKLQkqIG1vZHVsZS9vcHJvZmlsZS5oOgotCSogbW9kdWxlL29wX3N5c2NhbGxzLmM6IFVzZSBhIHN0cnVjdCB0byBob2xkIHRoZSB3aG9sZQotCSAgc3lzY3RsIHNldHRhYmxlIHRoaW5ncyByYXRoZXIgZ2xvYmFsIHZhci4KLQotMjAwMS0xMS0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogbW9kdWxlcy9vcHJvZmlsZS5oOiBhZGQgYSBzeXNjdGwgc3RydWN0IHRvIGhvbGQKLQkgIGFsbCBzeXNjdGwgc2V0LWFibGUgdmFyaWFibGUKLQkKLQkqIG1vZHVsZXMvb3Byb2ZpbGUuYzogdHdvIGJ1Z3MgZml4ZXMuCi0KLTIwMDEtMTEtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG1vZHVsZXMvb3Byb2ZpbGUuaDogbWlub3IgY2xlYW51cAotCSogbW9kdWxlcy9vcHJvZmlsZS5jOiBiZXR0ZXIgaGFuZGxpbmcgb2YgaXJxIHN0YXRpc3RpY3MKLQotMjAwMS0xMC0zMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbW9kdWxlL29wcm9maWxlLmM6IGFkZCBjb21tZW50IGFib3V0IHVuZml4YWJsZQotCSAgcmFjZXMuCi0gCi0yMDAxLTEwLTMwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBNb3ZlIG1vZHVsZSBjb2RlIGludG8gbW9kdWxlLyBzdWJkaXIuIEJ5ZQotCSAgYnllIENWUyBoaXN0b3J5IDovCi0gCi0yMDAxLTEwLTMwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcF94ODYuYzogY29tcGxhaW4gcHJvcGVybHkgYWJvdXQgbEFQSUMtbGVzcwotCSAgbWFjaGluZXMKLSAKLTIwMDEtMTAtMjYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotIAotMjAwMS0xMC0yNiAgSC4gSi4gTHUgPGhqbEB1c2Vycy5zZi5uZXQ+Ci0KLQkqIE1ha2VmaWxlLmluOiB1c2UgJChMRCkgbm90IGxkCi0gCi0yMDAxLTEwLTI1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBjb25maWd1cmUuaW46IGZpeCB2ZXJzaW9uLmggY2hlY2tpbmcgZm9yIGdjYyAyLjkxLjY2Ci0KLTIwMDEtMTAtMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIE1ha2VmaWxlLmluOgotCSogZG9jL01ha2VmaWxlLmluOgotCSogZGFlL01ha2VmaWxlLmluOgotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBndWkvTWFrZWZpbGUuaW46IGFkZCAkREVTVERJUiB0byBwcmVmaXggKHBhcnQgZnJvbQotCSAgSC5KLiBMdSkKLQotMjAwMS0xMC0yNSAgSC4gSi4gTHUgIDxoamxAdXNlcnMuc2YubmV0PgotCi0JKiBjb25maWd1cmUuaW46IGJldHRlciB2ZXJzaW9uLmggd29ya2Fyb3VuZAotCi0JKiBkb2MvKi4xOgotCSogZG9jL01ha2VmaWxlLmluOiBiZXR0ZXIgLnNvIG1hbnBhZ2UgaW5zdGFsbAotCi0yMDAxLTEwLTI1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogbWlub3IgY2hhbmdlLgotCSogcHAvb3BmX2ZpbHRlci5jcHA6IHJlcGFpciBzaG9ydCBvcHRpb24gLWEgYW5kIC1zCi0KLTIwMDEtMTAtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wX3RvX3NvdXJjZTogcmVtb3ZlIGZyb20gY3ZzCi0JKiBwcC9NYWtlZmlsZS5pbjogb3BmX2ZpbHRlciBhcHBsaWNhdGlvbiByZW5hbWVkIHRvIG9wX3RvX3NvdXJjZQotCSogcHAvY2hpbGRfcmVhZGVyLmg6IG5ldwotCSogcHAvY2hpbGRfcmVhZGVyLmNwcDogbmV3LCBhbGxvdyB0byBmb3JrIGEgY2hpbGQgYW5kIHJlYWQKLQkgIGl0cyBzdGRvdXQvc3RkZXJyCi0JKiBwcC9vcGZfZmlsdGVyLmg6Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDogdXNlIGNoaWxkX3JlYWRlciB0byBsYXVuY2ggb2JqZHVtcC4KLQkgIG9wX3RvX3NvdXJjZSAtYSBhbmQgLXMgbXVzdCBiZSBzcGVjaWZpZWQgd2l0aCBsb25nCi0JICBmb3JtIC0tYXNzZW1ibHkgYW5kIC0tc291cmNlLXdpdGgtYXNzZW1ibHkuIFRoaXMgYWxzbwotCSAgc3BlZWQtdXAgYXNzZW1ibHkgb3V0cHV0LiBEb2Mgbm90IHVwZGF0ZWQuCi0KLTIwMDEtMTAtMTggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogd29ya2Fyb3VuZCAjMiwgaG9wZWZ1bGx5IGZpeGluZwotCSAgTWFuZHJha2UgKGJ1ZyAjNDcxNDQ4KQotIAotMjAwMS0xMC0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogZG9uJ3QgbWFzayB3aGVuIHJlc3RvcmluZyBNU1IgdmFsdWVzCi0gCi0JKiBkb2MvTWFrZWZpbGUuaW46IGRvbid0IHVzZSBtYW4gc3ltbGlua3MKLSAKLTIwMDEtMTAtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wcm9maWxlLmM6IHNhdmUgb3JpZ2luYWwgY291bnRlciBzZXR1cAotCSAgYW5kIHJlc3RvcmUgb24gdW5sb2FkIChidWcgIzQ2NDA5NCkKLQotMjAwMS0xMC0xNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOgotCSogb3Byb2ZpbGUuaDogd29ya2Fyb3VuZCBmb3IgTWFuZHJha2UgcmFuZG9tbHkKLQkgIGJhY2stcG9ydGluZyB0aGluZ3MuCi0gCi0yMDAxLTEwLTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDoKLQkqIHBwL29wZl9jb250YWluZXIuY3BwOgotCSogcHAvb3BmX2ZpbHRlci5oOgotCSogcHAvb3BmX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcHJvZl9jb252ZXJ0LmNwcDogYWRkIG5vdGUgZGV2aWNlIHRvIGd1aSwKLQkgIGdlbmVyYWwgY2xlYW51cAotCSAKLTIwMDEtMTAtMTYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wcm9maWxlLmg6IGZpeCBsaWtlbHkoKSBtYWNybwotIAotMjAwMS0xMC0xNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0gCi0JKiBvcF9zeXNjYWxscy5jOgotCSogb3BfdXNlci5oOgotCSogb3Byb2ZpbGUuaDoKLQkqIG9wcm9maWxlLmM6Ci0JKiBkYWUvb3Bfc3RhcnQ6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcHJvZmlsZWQuaDoKLQkqIGRhZS9vcHJvZmlsZWQuYzogdXNlIGEgc2VwYXJhdGUgbWFwIGJ1ZmZlci4KLSAKLTIwMDEtMTAtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGFjaW5jbHVkZS5tNDogZG9uJ3QgZ2l2ZSB1cCBpZiB3ZSBjYW4ndCBmaW5kIG1vYwotIAotMjAwMS0xMC0xNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogbWVyZ2Ugbm8tdGhyZWFkIGNvZGUKLSAKLTIwMDEtMTAtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOgotCSogZGFlL29wcm9maWxlZC5jOgotCSogb3BfdXNlci5oOgotCSogb3Byb2ZpbGUuaDoKLQkqIG9wX3N5c2NhbGxzLmM6IHVzZSBzdHJpbmcgcG9vbC4gUHJpbWUgaGFzaCB0YWJsZQotCSAgd2l0aCBjb21tb24gZW50cmllcy4gQ29uc2lkZXIgcGFyZW50IGluIG5hbWVfaGFzaC4KLSAKLTIwMDEtMTAtMTMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBtaW5vciBjaGFuZ2UKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBiZXR0ZXIgd2FybmluZwotCi0yMDAxLTEwLTEzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46IDAuMC42IGhhcyBiZWVuIHJlbGVhc2VkIC0+IDAuMC43Y3ZzCi0gCi0yMDAxLTEwLTEyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogZG9jL29wcm9maWxlLnNnbWw6IG5ldyBkb2NzIGZvciBhbm5vdGF0aW9uIGZpbHRlcgotIAotMjAwMS0xMC0xMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3BmX2ZpbHRlci5jcHA6IG1ha2Ugb3V0cHV0IGZpbHRlcnMgbW9yZSBsaWtlIGRpZmYgKG5lZWRzIGRvYyksCi0JICBicmllZmVyIGluZm8gbWVzc2FnZQotIAotMjAwMS0xMC0xMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL01ha2VmaWxlLmluOiBhZGQgRklYTUUKLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogZml4IHN0ZDo6Ci0KLQkqIGFjaW5jbHVkZS5tNDogbW9yZSBmaXhlcwotIAotMjAwMS0xMC0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOiB1c2Ugc2VsZWN0KCkgcmF0aGVyIG5vbi1ibG9ja2luZwotCSAgbW9kZSB0byByZWFkIG91dHB1dCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzCi0KLTIwMDEtMTAtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOgotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBwcC9vcGZfZmlsdGVyOiBtYWtlIC0tb3V0cHV0IGFuZCAtLW5vLW91dHB1dCBtb3JlIGludHVpdGl2ZQotCi0yMDAxLTEwLTA5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOiBjbGFyaWZ5IGRvYwotCSogcHAvb3BmX2ZpbHRlci5jcHA6IGNvcm5lciBjYXNlIGZpeCBpbiAtLW91dHB1dC1kaXIgYW5kCi0JICAtLXNvdXJjZS1kaXIgaGFuZGxpbmcuCi0KLTIwMDEtMTAtMDggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGFjaW5jbHVkZS5tNDoKLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIGd1aS9NYWtlZmlsZS5pbjogZml4IGlkaW90IGNvbmZpZyBidWcgb2YgbWluZQotIAotMjAwMS0xMC0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogcHAvb3BmX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcF90b19zb3VyY2U6IHNtYWxsIGNsZWFudXAKLQotMjAwMS0xMC0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKLQkqIHBwL29wX3RvX3NvdXJjZToKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBpbXBsZW1lbnQgLS1vdXRwdXQgYW5kIC0tbm8tb3V0cHV0IHRvCi0gCSAgYWxsb3cgb3V0cHV0IGZpbGUgZ2VuZXJhdGlvbiBmaWx0ZXJpbmcKLQotMjAwMS0xMC0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0gCi0yMDAxLTEwLTAzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOgotCSogcHAvb3BfdG9fc291cmNlOgotCSogcHAvb3BmX2ZpbHRlci5jcHA6IGltcGxlbWVudCAtLXNvdXJjZS1kaXIgYW5kIC0tb3V0cHV0LWRpcgotCSAgdG8gZ2VuZXJhdGVkIHNlcGFyYXRlZCBhbm5vdGVkIHNvdXJjZSBmaWxlLgotCi0yMDAxLTEwLTAzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcHJvZnBwLmNwcAotCSogcHAvb3Byb2ZwcC5oCi0JKiBwcC9vcGZfZmlsdGVyLmNwcDogbWlub3IgY2xlYW51cAotCi0yMDAxLTEwLTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogTWFrZWZpbGUuaW46IHJlbW92ZSBnZW5lcmF0ZWQgZmlsZXMgb24gbWFrZSBkaXN0Y2xlYW4KLQotCSogYWNpbmNsdWRlLm00OiB1cGRhdGUgZnJvbSBzb3VyY2UKLSAKLTIwMDEtMTAtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wcm9mcHAuY3BwOiBmaXggYSBzaWxseSBidWcgaW4gZG9fbGlzdF9zeW1ib2xzIChvcHJvZnBwIC1sKQotCi0yMDAxLTEwLTAyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogZml4Ci0KLQkqIE1ha2VmaWxlLmluOiBkaXN0IGZpeAotIAotMjAwMS0xMC0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGNvbmZpZ3VyZS5pbjogLT4gMC4wLjUgZm9yIHJlbGVhc2UKLSAKLTIwMDEtMTAtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wZl9jb250YWluZXIuY3BwOgotCSogcHAvb3BmX2ZpbHRlci5oOiBjb21tZW50Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDogc3BlZWQtdXAKLQotMjAwMS0wOS0zMCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcC5oOiBjbGVhbnVwCi0KLTIwMDEtMDktMzAgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuaDoKLQkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiBjbGVhbnVwCi0KLTIwMDEtMDktMjkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBjaGVjayBpZiB3ZSBuZWVkIGRlYnVnIGluZm8gdG8gd29yay4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdXNlIG9uZSBjb25maWcgZmlsZSBieSBjb3VudGVyLiBTdG9yZQotCSAgc2VsZWN0ZWQgY291bnRlciBpbiBvcHJvZl9zdGFydF9jb25maWcKLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGd1aS9wZXJzaXN0ZW50X2NvbmZpZy5oOiByZW1vdmUgZGlydHkgZmxhZyBpbiAKLQkgIHBlcnNpc3RlbnRfY29uZmlnX3QgdGVtcGxhdGUgY2xhc3MKLQotMjAwMS0wOS0yOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0gCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL3VpL29wcm9mX3N0YXJ0X2Jhc2UudWk6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDogYWRkIHZlcmJvc2Ugb3B0aW9uCi0gCi0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBzb21lIEZJWE1FcyBhbmQgbGl0dGxlIGNsZWFudXBzCi0gCi0yMDAxLTA5LTI5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcHJvZnBwLmNwcDogYnVnIGZpeCB3aGVuIGNhbGxpbmcgdGhlIGJmZCBsaWIuCi0KLTIwMDEtMDktMjkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHR3byBtaW5vciBmaXhlcy4KLQotMjAwMS0wOS0yOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogdmFyaW91cyBmaWxlczogdGhlIGZvb3RlciBpcyBub3cgYSBoZWFkZXIgIQotCi0JKiBkYWUvb3BkX3N0YXJ0LmM6IGZpeCBtc3luYyAhIQotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuaDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogYmV0dGVyIGRlZmF1bHQgZXZlbnQgY291bnQKLQkgIHZhbHVlLiBTYXZlIENQVSB0eXBlIHRvIG9wcm9maWxlIGZpbGUuCi0KLTIwMDEtMDktMjggIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wZl9maWx0ZXIuYzogZml4IG9wX3RvX3NvdXJjZSBbLWFdIFstc10KLQotMjAwMS0wOS0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6IG9vcHMsIGNvcnJlY3QgYmFkIG1lcmdpbmcgd2l0aAotIAkgIEpvaG4ncyBsYXN0IHVwZGF0ZS4KLQotMjAwMS0wOS0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZG9jL29wcm9maWxlLjEuaW46IG1pbm9yIGNoYW5nZQotCSogb3BfZXZlbnRzLmM6IHJlbW92ZSAtLWd1aS1kZXNjcmlwdGlvbiBzdHVmZgotCSogcHAvb3BmX2ZpbHRlci5jcHA6IHJlbW92ZSB1c2Ugb2YgdGVtcG9yYXJ5IGFycmF5IHRvCi0JICBwYXNzIGFyZ3VtZW50IHRvIHRoZSBwb3B0IGxpYnJhcnkKLQotMjAwMS0wOS0yNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6IHVwZGF0ZXMKLQotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOiBmaXggY29tcGlsZSwgcmV2ZXJ0Ci0JICBnKysgZXh0ZW5zaW9uIChkaWZmZXJlbnQgb24gZysrIDMuMCkgCi0KLTIwMDEtMDktMjcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogdXNlIGcrKyBleHRlbnNpb24gdG8KLQkgIGF2b2lkIHVzaW5nIHRlbXBvcmFyeSBmaWxlcwotIAotMjAwMS0wOS0yNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOiBmaXggY3Jhc2hlciBidWcKLSAKLTIwMDEtMDktMjcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5oOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogZ2V0IHBlci1jb3VudGVyIGNvbmZpZyB3b3JraW5nCi0gCi0yMDAxLTA5LTI3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL29wcm9mcHAuYzoKLQkqIHBwL29wcm9mcHAuY3BwOiByZW5hbWUgZmlsZQotIAotMjAwMS0wOS0yNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcHJvZnBwLmg6Ci0JKiBwcC9vcHJvZnBwLmM6IHNwZWVkIGltcHJvdmVtZW50cwotIAotMjAwMS0wOS0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogY29uZmlndXJlLmluOiB0eXBvCi0KLQkqIHBwL29wcm9mcHAuYzogZml4IG9wcm9mcHAgLXMuCi0JICBVc2Ugc3RkOjpzdHJpbmcgKHdvcmsgbm90IHlldCBmaW5pc2gpCi0JKiBwcC9vcHJvZnBwLmg6CWRpdHRvCi0JKiBwcC9vcGZfZmlsdGVyLmNwcDogZGl0dG8KLQotMjAwMS0wOS0yNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogYWRkIG5yX2ludGVycnVwdHMKLSAKLQkqIGd1aS9vcHJvZl9zdGFydC5oOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS91aS9vcHJvZl9zdGFydF9iYXNlLnVpOiBhZGQgZGFlbW9uIHN0YXR1cwotCSAgZGlzcGxheSwgZml4IGJhc2VuYW1lKCkKLQkgCi0yMDAxLTA5LTI2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46IHJlbW92ZSBicm9rZW4gYml0Ci0KLQkqIHBwL01ha2VmaWxlLmluOiBmaXggb3B0aW9ucwotIAotCSogZG9jL29wcm9maWxlLnNnbWw6IG1pbm9yIGNoYW5nZXMKLSAKLTIwMDEtMDktMjYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL01ha2VmaWxlLmluOiBpbmNyZWFzZSBsZXZlbCBvZiB3YXJuaW5nCi0JKiBwcC9vcHJvZl9jb252ZXJ0LmM6IG1pbm9yIGZpeCB0byBhdm9pZCB3YXJuaW5nCi0JKiBkYWUvb3BkX3V0aWwuYzogZGl0dG8KLQkqIHBwL29wcm9mcHAuYzogZ2V0X2xpbmVucigpIG5ldmVyIHJldHVybiBudWxsIGluCi0JICBmaWxlbmFtZSAgKGZpeCBidWcgIzQ2NDQ4MikuIHN5bWNvbXAoKSBlbnN1cmUKLQkgIGNvcnJlY3Qgdm1hIGNvbXBhcmlzb24gKGZpeCAjNDY0MDkzKQotCSogZGFlL29wZF91dGlsLmM6IG1pbm9yIGZpeGUgaW4gb3BfcG9wdEdldENvbnRleHQoKQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogbWlub3IgY2xlYW51cAotCi0yMDAxLTA5LTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3Bfc3RvcDoKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOiB1c2UgcGlkb2YgaW5zdGVhZAotCi0yMDAxLTA5LTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDogZml4IGlzX3Byb2ZpbGVyX3N0YXJ0ZWQoKSB0b28gCi0gCi0yMDAxLTA5LTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3Bfc3RvcDogZml4IHRlcnJpYmx5IHN0dXBpZCBlcnJvcgotIAotMjAwMS0wOS0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3BfZXZlbnQuYzogd2hvb29wcwotIAotMjAwMS0wOS0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogc3RkOjogZml4Ci0gCi0JKiBkYWUvb3Bfc3RhcnQ6Ci0JKiBvcF9ldmVudHMuYzogcm9idXN0bmVzcyBmaXgKLQotMjAwMS0wOS0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogZml4IHNpbGx5IGJ1ZwotIAotMjAwMS0wOS0yNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3BmX2ZpbHRlci5jcHA6ICJmaXgiIGNvbXBpbGUgZXJyb3IKLSAKLTIwMDEtMDktMjQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGd1aS9vcHJvZmlsZToKLQkqIGd1aS9NYWtlZmlsZS5pbjogcmVtb3ZlIG9sZCBndWkKLSAKLTIwMDEtMDktMjQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcF9zdGFydDogbWFrZSBhIGxpdHRsZSBtb3JlIHJvYnVzdAotIAotMjAwMS0wOS0yNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogaW5jbHVkZS9zc3RyZWFtOgotCSogTWFrZWZpbGUuaW46Ci0JKiBjb25maWd1cmUuaW46Ci0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIGd1aS9NYWtlZmlsZS5pbjogY29uZmlndXJlL21ha2UgZml4ZXMKLQotCSogb3BfZXZlbnRzLmM6IHJlLW9yZGVyIGZvciBBdGhsb24gCi0JIAotMjAwMS0wOS0yMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3Byb2ZwcC5jOiBzbWFsbCBjbGVhbnVwCi0gCi0yMDAxLTA5LTIzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5oOgotCSogb3BfeDg2LmM6IHN1cHBvcnQgZm9yIDIuNC4xMAotIAotMjAwMS0wOS0yMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZ3VpL29wcm9mX3N0YXJ0Lmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiByZXdvcmsgdmFsaWRhdG9yIHN0dWZmIGEgYml0Ci0gCi0yMDAxLTA5LTIzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiB1c2Ugc3RkOjpmaW5kX2lmCi0gCi0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogbWlub3IgdGlkaWVzCi0gCi0yMDAxLTA5LTIzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BfZHVtcDoKLQkqIGRhZS9vcF9zdGFydDogZWNobyBlcnJvcnMgdG8gc3RkZXJyCi0gCi0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5oOgotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdXNlIGZvcmsvZXhlYyB0byBzcGF3biBjaGlsZHJlbgotCi0yMDAxLTA5LTIzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogZ3VpL01ha2VmaWxlLmluOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOiAKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOiAKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6IAotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOiAKLQkqIGd1aS9vcHJvZl9zdGFydC5oOiAKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IG5ldyBmaWxlIGZvciB1dGlsIGZ1bmN0aW9ucwotIAotMjAwMS0wOS0yMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wZF91dGlsLmM6Ci0JKiBkYWUvb3BkX3V0aWwuaDoKLQkqIGRhZS9vcHJvZmlsZWQuYzogCi0JKiBwcC9vcHJvZnBwLmM6IAotCSogcHAvb3BmX2ZpbHRlci5jcHA6IAotCSogY29uZmlndXJlLmluOiBlbmFibGUgX19idWlsdGluX2V4cGVjdCwgZml4IHBvcHQgcHJvYmxlbQotCi0JKiBwcC9vcHJvZl9jb252ZXJ0LmM6IHNtYWxsIGZpeGVzCi0gCi0JKiBvcF9ldmVudHMuYzogc2hvcnRlbiBldmVudCBkZXNjcmlwdGlvbnMgZm9yIEdVSSAKLQotCSogZ3VpLyo6IG1hbnkgbW9yZSB1cGRhdGVzCi0gCi0JKiBwcC9NYWtlZmlsZS5pbjogZml4Ci0gCi0yMDAxLTA5LTIxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BkX3Byb2MuYzogcmVtb3ZlZCBvdmVyLXZlcmJvc2UgbGluZQotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBvcHJvZmlsZS5oOgotCSogb3Byb2ZpbGUuYzogYWRkIGxpa2VseS91bmxpa2VseSwgdGFrZSBub3RlIGxvY2sgb24gZHVtcAotIAotMjAwMS0wOS0yMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogcHAvb3BmX2ZpbHRlci5oOiBtb3ZlIGRlY2xhcmF0aW9uIG9mIGNvdW50ZXJfYXJyYXlfdCB0bwotCSogcHAvb3Byb2ZwcC5oOiBoZXJlCi0JKiBwcC9vcHJvZnBwLmM6IGRlZmluZSBhbmQgdXNlIGNvdW50ZXJfYXJyYXlfdCArIG1pbm9yIGNsZWFudXAKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiByZW1vdmUgZGVmaW5pdGlvbiBvZiBjb3VudGVyX2FycmF5X3QKLQotMjAwMS0wOS0yMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogTWFrZWZpbGUuaW46IHJlbW92ZSBhY2xvY2FsLm00IGluIGRpc3RjbGVhbgotCSogcHAvTWFrZWZpbGUuaW46IHVzZSAkKENYWCkgYW5kICQoQ1hYRkxBR1MpCi0KLQkqIHBwL29wZl9jb250YWluZXIuY3BwOgotCSogcHAvb3BmX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcGZfZmlsdGVyLmg6Ci0JKiBwcC9vcHJvZnBwLmM6Ci0JKiBwcC9vcHJvZnBwLmg6IGNsZWFudXAKLQotMjAwMS0wOS0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogTWFrZWZpbGUuaW46IG1pbm9yIGNoYW5nZSBpbiBtb2R1bGUgYnVpbGRpbmcKLQkqIHBwL01ha2VmaWxlLmluOiBsaW5rIG9wcm9mcHAgd2l0aCBvcGZfZmlsdGVyCi0JKiBwcC9vcF90b19zb3VyY2U6IGF2b2lkIHBpcGUgZnJvbSBvcHJvZnBwIHRvIG9wZl9maWx0ZXIKLQkqIHBwL29wZl9maWx0ZXIuaDogcmVtb3ZlIGEgZmV3IG1lbWJlciBmdW5jdGlvbgotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6IGRpdHRvICsgbWlub3IgY2xlYW51cAotCSogcHAvb3BmX2ZpbHRlci5jcHA6IG9wcm9mcHAgaXMgbm8gbG9uZ2VyIHBpcGVkIHRvIG9wZl9maWx0ZXIKLQkgIGJ1dCBsaW5rZWQgd2l0aCBpdC4gTWFueSBjaGFuZ2UsIG5lZWRzIGFkZGl0aW9uYWwgY2xlYW51cAotCSogcHAvb3Byb2ZwcC5jOiBncm91cCBhbGwgc3R1ZmYgaW4gdHdvIGNsYXNzLiBSYXRoZXIgYQotCSAgYSBDIHdpdGggY2xhc3MgdGhhbiBhIGZ1bGwgQysrIGZpbGUgZm9yIG5vdy4gRml4IGEgYnVnCi0JICBpbiBmaWxlbmFtZSBoYW5kbGluZy4KLQkqIHBwL29wcm9mcHAuaDogYWRkIG9wcF9iZmQgYW5kIG9wcF9zYW1wbGVzX2ZpbGVzIGNsYXNzLgotCQotCSogZGFlL29wZF91dGlsLmM6IGFkZCBhIGZldyBleHBsaWNpdCBjYXN0IGZvciBDKysgY29tcGlsZQotCSogZGFlL29wZF91dGlsLmg6IHdyYXAgZnVuY3Rpb24gZGVjbGFyYXRpbyB3aXRoIGV4dGVybiAiQyIKLQotMjAwMS0wOS0xOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogZml4IHNpbGx5IHJlYWQgdmFsaWQgYnVnCi0gCi0yMDAxLTA5LTE5ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBNYWtlZmlsZS5pbjogd2hvb3BzLCBtaXNzZWQgb3BfdXRpbC5vIGZyb20gYnVpbGQKLSAKLTIwMDEtMDktMTkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzogZml4IGxpdHRsZSBidWcsIHRpZHkgYSBiaXQKLQotCSogVE9ETzogdXBkYXRlCi0gCi0yMDAxLTA5LTE4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBNYWtlZmlsZS5pbjoKLQkqIG9wX3N5c2NhbGxzLmM6Ci0JKiBvcF91dGlsLmM6Ci0JKiBvcHJvZmlsZS5oOiBtb3ZlIHNvbWUgY29kZSBhcm91bmQKLQotCSogb3Byb2ZpbGUuYzogZml4IGEgdGlueSBidWcKLQotMjAwMS0wOS0xOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmg6IGltcGxlbWVudCBoYXNoaW5nIG9mIGltYWdlcwotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogZml4IC0tIGlzc3VlIGFuZCB1c2UgPHNjcmVlbj4KLSAKLTIwMDEtMDktMTggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIC5jdnNpZ25vcmU6Ci0JKiBSRUFETUU6IHVwZGF0ZQotIAotCSogY29uZmlndXJlLmluOiBzbWFsbCBjbGVhbnVwCi0gCi0JKiBvcF9pbml0LmM6IGFkZCBjb21tZW50Ci0KLQkqIG9wcm9maWxlLmg6IAotCSogb3Bfc3lzY2FsbHMuYzoKLQkqIG9wX3g4Ni5jOiBtb3ZlIGZpeG1hcCBzdHVmZiwgcmVtb3ZlIGRpc2FibGUgQVBJQwotCi0JKiBvcHJvZmlsZS5jOiBpbml0IGZhaWx1cmUgZml4IAotIAotCSogZG9jL29wcm9maWxlLnNnbWw6Ci0JKiBkYWUvb3BkX3Byb2MuYzogZml4IGhhbmRsZV9vbGRfc2FtcGxlX2ZpbGVzKCkgYnVnLAotCSAgY2hlY2sgbXRpbWUgaGFzbid0IGNoYW5nZWQgb24gYSBuZXcgbWFwCi0gCi0yMDAxLTA5LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBhY2luY2x1ZGUubTQ6Ci0JKiBhdXRvZ2VuLnNoOgotCSogY29uZmlndXJlLmluOgotCSogZ3VpL01ha2VmaWxlLmluOgotCSogZ3VpL3VpL01ha2VmaWxlLmluOgotCSogZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuaDogYXV0b2NvbmZpc2NhdGlvbiBmb3IgUXQyCi0KLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOiBhZGQgY29tbWVudHMKLSAKLTIwMDEtMDktMTYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBmaXggdW5yZWNvZ25pemVkIGlucHV0Ci0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDogYmV0dGVyIGVycm9yIG1lc3NhZ2VzLiBwdXQKLQkgIG9wX25yX2NvdW50ZXJzIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlIChnY2MgMi45MQotCSAgd29yayBhcm91bmQpCi0KLTIwMDEtMDktMTYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wcm9mcHAuY3BwOiBzbWFsbCB0aWR5Ci0gCi0yMDAxLTA5LTE2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcGZfZmlsdGVyLmNwcDogbWlub3IgdGlkeQotCi0JKiBndWkvb3Byb2Zfc3RhcnQuYmFzZS51aTogbmV3IG9wcm9mX3N0YXJ0IGd1aQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogbmV3LCBkZXJpdmVkIGNsYXNzIG9mIG9wcm9mX3N0YXJ0X2Jhc2UKLQkqIGd1aS9vcHJvZl9zdGFydC5oOiBkaXR0bwotCSogZ3VpL29wcm9mX3N0YXJ0X2ltcGwuY3BwOiBpbXBsZW1lbnRhdGlvbiBvZiBvcHJvZl9zdGFydCBjbGFzcwotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IHV0aWxpdGllcyBmdW5jdGlvbiBmb3Igb3Byb2Zfc3RhcnQKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDogZGl0dG8KLQkqIGd1aS9wZXJzaXN0ZW50X2NvbmZpZy5oOiB1dGlsaXR5IHRlbXBsYXRlCi0JKiBndWkvb3Byb2Zfc3RhcnRfbWFpbi5jcHA6IG1haW4oKSBmb3Igb3Byb2Zfc3RhcnQKLQkqIGd1aS9NYWtlZmlsZS5pbjogaGFuZGxlIHRoaXMgc3R1ZmYKLQotMjAwMS0wOS0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3Byb2ZwcC5jOiBzb21lIGNsZWFudXAKLQotMjAwMS0wOS0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3Byb2ZwcC5jOiBhbGxvdyBub24tbWF0Y2hpbmcgbXRpbWVzIGluIG9yZGVyCi0JICB0byBhbGxvdyBwcCBvbiBkaWZmZXJlbnQgbWFjaGluZXMuIE1ha2UgY29uZmxpY3RpbmcKLQkgIGNvdW50ZXIgc3BlY2lmaWNhdGlvbnMgYSBmYXRhbCBlcnJvcgotCi0yMDAxLTA5LTE1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBhbGwgTWFrZWZpbGUuaW46IGluc3RhbGwgc2hvdWxkIGRlcGVuZCBvbiBhbGwKLQotCSogcHAvb3Byb2ZwcC5jOiBmaXhlcyBmb3IgQXRobG9uIDQgY291bnRlcnMuIEVuYWJsZSBkZWJ1ZyBpbmZvCi0JICBmb3IgbGlzdC1zeW1ib2wuIFNvbWUgc3RyaWN0ZXIgY2hlY2tpbmcKLQotMjAwMS0wOS0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogb3BfZXZlbnRzLmM6IHNvbWUgc3RhdGljIHZhcmlhYmxlIHRvIGdsb2JhbAotCSogb3BfdXNlci5oOiBleHBvcnQgdGhlc2UKLQotCSogb3Byb2ZpbGUuYzogdHlwbyBpbiBjb21tZW50Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOiBmaXggc2l6ZSBvZiBzYW1wbGVzIGZpbGVzCi0KLTIwMDEtMDktMTMgIERhdmUgSm9uZXMgIDxkYXZlakBzdXNlLmRlPgotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkgIFVwZGF0ZSBzbyBpdCBkb2Vzbid0IHNheSAnSW50ZWwgb25seScKLQkqIGRhZS9vcF9zdGFydDoKLQkgIEZpeCBvdXRwdXQgc28gdGhhdCBpdCBwcmludHMgWzAtM10gaW5zdGVhZCBvZiBbMC00WwotCi0yMDAxLTA5LTEyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcHJvZnBwLmM6IGZpeCBjcHUgdHlwZSBvdXRwdXQgZm9yIG9wZl9maWx0ZXIKLQotCSogZGFlL29wX3N0b3A6IHJldHVybiBlcnJvciBjb2RlIHByb3Blcmx5Ci0KLTIwMDEtMDktMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wcm9mcHAuYzogcHJpbnQgbmFtZSBvZiBjcHUgdHlwZQotIAotCSogZGFlL29wX3N0b3A6Ci0JKiBkYWUvb3Bfc3RhcnQ6IHJlLW9yZ2FuaXNlLCB0aWR5Ci0gCi0yMDAxLTA5LTEyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5jOiBmaXggc21hbGwgYnV0IHRyaWdnZXJhYmxlCi0JICBTTVAgZHVtcCByYWNlCi0gCi0yMDAxLTA5LTEyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5oOgotCSogb3Byb2ZpbGUuYzoKLQkqIG9wX3g4Ni5jOiBtb3ZlIHNvbWUgY29kZSBhYm91dAotIAotCSogb3Bfc3lzY2FsbHMuYzogYWRkIGNvbW1lbnQKLSAKLTIwMDEtMDktMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlIHdhcm5pbmcKLSAKLQkqIG9wX3VzZXIuaDogCi0JKiBvcF9ldmVudHMuYzogZml4IGFuZCBjbGVhbiB1cCBjcHUgdHlwZSBkZXRlY3Rpb24KLSAKLQkqIG9wX2luaXQuYzogZml4IGVtYWlsCi0gCi0JKiBvcHJvZmlsZS5jOiBhZGQgSVJRIHN0YXRzLiBOb3Qgc3VyZSB3aGV0aGVyIHRvIGtlZXAuLi4KLSAKLTIwMDEtMDktMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wcm9maWxlLmg6Ci0JKiBvcHJvZmlsZS5jOiB1c2UgY3B1X251bWJlcl9tYXAgKHBlZGFudHJ5IHRoaW5nKQotIAotMjAwMS0wOS0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogb3Byb2ZpbGUuYzogcmVtb3ZlIC9wcm9jLy4uLi9jcHVfdHlwZS4gQ2hlY2sgaWYgdXNlcgotCSAgbW9kZSBjcHUgdHlwZSBkZXRlY3Rpb24gaXMgaWRlbnRpY2FsIHRvIG1vZHVsZSBjcHUgdHlwZQotCSogb3BfZXZlbnRzLmg6Ci0JKiBvcF9ldmVudHMuYzogYWRkIG9wX2dldF9jcHVfdHlwZSgpLiBzY3JpcHQgY2FuIGdldCBjcHVfdHlwZQotCSAgYnkgb3BfaGVscCAtLWdldC1jcHUtdHlwZQotCSogZ3VpL29wcm9maWxlOiB1c2UgaXQJCi0JKiBkYWUvb3Byb2ZpbGVkLmM6IGRpdHRvCi0JKiBkYWUvb3Bfc3RhcnQ6IGRpdHRvLCBwYXNzIGV4cGVjdGVkX2NwdV90eXBlIHRvIG1vZHVsZQotCSogZG9jL29wcm9maWxlLnNnbWw6IHVwZGF0ZQotCSogZG9jL29wcm9maWxlLjEuaW46IHVwZGF0ZQotCSogcHAvb3Byb2ZwcC5jOiBnZXQgY3B1X3R5cGUgZnJvbSBzYW1wbGVzIGZpbGUKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBnZXQgY3B1IHR5cGUgZnJvbSBzdGRpbgotCi0yMDAxLTA5LTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BkX3Byb2MuYzogdXNlIGogbm90IGkgaW4gbXN5bmMgIQotIAotMjAwMS0wOS0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wX3N0YXJ0OiBtb3JlIHNhbml0eSBjaGVja2luZyBvZiBvcHRpb25zCi0gCi0yMDAxLTA5LTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogdXBkYXRlIGEgYml0Ci0gCi0yMDAxLTA5LTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiA8bW9zdCBmaWxlcz46IG1ha2Ugb3BfbnJfY291bnRlcnMgYSB2YXIgKG5vIHBwIHN1cHBvcnQgZm9yID4gMiB5ZXQpCi0JIAotCSogZGFlL29wcm9maWxlZC5jOiBkb24ndCBwcmludCBoZWxwIHdoZW4gY291bnRlciBldmVudCBldGMuIGFyZSB3cm9uZwotIAotMjAwMS0wOS0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuaDoKLQkqIG9wcm9maWxlLmM6IHVzZSBNT0RVTEVfTElDRU5TRQotIAotMjAwMS0wOS0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3BfdXNlci5oOiBhZGQgbWlzc2luZyBwcm90b3R5cGUKLQotCSogZGFlL29wX3N0YXJ0OiBmaXggY291bnRlciBleHRyYWN0aW9uCi0gCi0yMDAxLTA5LTA1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcHJvZnBwLmM6IGZpeCBhIGZldyBjb3JuZXIgY2FzZSwgY2xlYW51cC4KLQkqIGRhZS9vcGRfcHJvYzogZGl0dG8uCQotCi0JKiBkYWUvb3Bfc3RhcnQ6IGJldHRlciBoYW5kbGluZyBvZiBjb3VudGVyIG51bWJlcgotCi0JKiBkYWUvb3BkX3Byb2M6IG1pbm9yIGNoYW5nZS4KLQotCSogb3BfdXNlci5oOiBlbmFibGUgc3VwcG9ydCBmb3IgZm91ciBjb3VudGVycwotCSogb3Byb2ZpbGUuYzogZGl0dG8uIFNwbGl0IGZ1bmN0aW9ucwotCi0JKiBvcF9ldmVudHMuYzogZXhwb3NlIG9wX2dldF9jcHVfdHlwZV9zdHIoaW50KSB0byB3b3JsZC4KLQotMjAwMS0wOS0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuaDoKLQkqIG9wcm9maWxlLmM6IGRvbid0IHJlc3RvcmUgZGVsaXZlcnkgbW9kZSB0byBMVlRQQyAoY2F1c2VzCi0JQVBJQyBlcnJvciBvbiBTTVApLiBGaXggZm9yIHNpbGx5IHNlbSBoYW5nIHdpdGggZG9fZHVtcAotIAotMjAwMS0wOS0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wX3N0YXJ0OiBmaXggdHlwbyBidWcKLSAKLTIwMDEtMDktMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBzb21lIHNtYWxsIHRpZGllcwotIAotMjAwMS0wOS0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogY2hhbmdlIGx2dHBjX2FwaWNfcmVzdG9yZSB0byBiZSBtb3JlIGNhcmVmdWwgIQotIAotMjAwMS0wOS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogZG9uJ3QgYWxsb3cgdW5sb2FkIG9uIFNNUCB1bmxlc3MgYWxsb3dfdW5sb2FkCi0JICBpcyBzZXQuIFN0aWxsIG5lZWRzIGRvY3MgKG5vIHBvaW50IHRpbGwgU01QIHdvcmtzKS4KLSAKLTIwMDEtMDktMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcF9kdW1wOiBjb21wbGFpbiBpZiBub3Qgcm9vdCBtb3JlIGNsZWFybHkuCi0gCi0yMDAxLTA5LTAyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5jOiByZW1vdmUgYm9ndXMgc2V0dGluZyBmb3IgTk1JIG9vcHNlci4KLQkgIHNtcF9hcGljX3Jlc3RvcmUoKSAtPiBsdnRwY19hcGljX3Jlc3RvcmUoKQotCi0yMDAxLTA5LTAxICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBvcHJvZmlsZS5jOiBmaXggcG1jX3NldHVwKCkKLQotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBkYWUvTWFrZWZpbGUuaW46IGZpeCB1bmluc3RhbGwgcHJvYmxlbQotCi0yMDAxLTA4LTMxICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBvcHJvZmlsZS5oOgotCSogZGFlL29wcm9maWxlZC5oOgotCSogb3BfdXNlci5oOgotCSogb3Byb2ZwcC5oOgotCSogZGFlL29wZF91dGlsLmg6IHNoYXJlIGNvbW1tb24gZGVjbGFyYXRpb25zLCBwdXQgaXQgaW4KLQkgIG9wX3VzZXIuaCwgaW5jbHVkZSBvcF91c2VyLmggaW4gb3RoZXIgLmggd2hlbiBuZWNlc3NhcnkuCi0JKiBvcF9ldmVudHMuYzoKLQkqIGFsbCBNYWtlZmlsZS5pbjogdXBkYXRlIGRlcGVuZGFuY2llcy4KLSAKLTIwMDEtMDgtMzAgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG9wcm9maWxlLmM6IHVzZSBsb29wIGluc3RlYWQgb2YgZml4ZWQgY291bnRlciBudW1iZXIKLSAKLTIwMDEtMDgtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG9wX2V2ZW50cy5jOiBhZGQgb3B0aW9uIHRvIG9wX2hlbHAgZm9yIHRoZSBndWkKLQkqIGd1aS9vcHJvZmlsZTogdXNlIG9wX2hlbHAgdG8gYnVpbGQgZGVzY3JpcHRpb24KLQkgIG9mIGV2ZW50cywgYWNjZXB0IEF0aGxvbiAob25seSAyIGNvdW50ZXJzKQotIAotMjAwMS0wOC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogcHAvb3Byb2ZwcC5jOgotCSogZGFlL29wX3N0YXJ0OiB1c2UgbG9vcCBpbnN0ZWFkIG9mIGZpeGVkIG51bWJlciBvZiBjb3VudGVyLgotIAotMjAwMS0wOC0yNCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogcHAvb3Byb2ZfY29udmVydC5jOiBhZGQgdjQgLS0+IHY1IGNvbnZlcnNpb24KLSAKLTIwMDEtMDgtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG9wcm9maWxlLmM6IGNvcnJlY3Qgc29tZSBjb21tZW50LgotIAotMjAwMS0wOC0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogb3BfdXNlci5oOgotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3BkX3V0aWwuYzoKLQkqIGRhZS9vcGRfdXRpbC5oOgotCSogZGFlL29wcm9maWxlZC5oOgotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlL29wcm9maWxlZC5jOiByb3cgdG8gY29sdW1uIGZpbGUgZm9ybWF0LCBsb3Qgb2YgY2hhbmdlcy4KLSAKLTIwMDEtMDgtMjEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG9wX2V2ZW50cy5jOiBBZGQgQXRobG9uIHN0cmluZy91bml0IG1ha3MgZGVzY3JpcHRpb24KLSAKLTIwMDEtMDgtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG9wX2V2ZW50cy5jOiBjaGFuZ2UgaW4gaGFuZGxpbmcgb2Ygc2VhcmNoL2NoZWNrIGV2ZW50cwotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlL29wcm9maWxlZC5oOgotCSogb3Byb2ZpbGUuYzoKLQkqIG9wcm9maWxlLmg6Ci0JKiBwcC9vcHJvZnBwLmM6Ci0JKiBwcC9vcHJvZnBwLmg6CXJlZmxlY3RzIGNhbGxlci9wcm90b3R5cGUsIGxvdCBvZiBjaGFuZ2VzLgotCi0yMDAxLTA4LTMxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotICAKLQkqIE1ha2VmaWxlLmluOgotCSogb3BfeDg2LmM6Ci0JKiBvcHJvZmlsZS5oOgotCSogb3Byb2ZpbGUuYzogYSBwcm90b3R5cGUgZGV0ZWN0b3IgZm9yIFNNUCBoYXJkd2FyZSwKLQkgIHNvbWUgc21hbGwgY2xlYW51cAotIAotMjAwMS0wOC0yMCAgRGF2ZSBKb25lcyAgPGRhdmVqQHN1c2UuZGU+Ci0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOgotCSAgVXBkYXRlZCB0byByZWZsZWN0IG5ldyBBdGhsb24vRHVyb24gY2FwYWJpbGl0aWVzLgotCSogcHAvb3Byb2ZfY29udmVydC5jOgotCSogcHAvb3Byb2ZwcC5jOiB1c2UgRVhJVF9GQUlMVVJFIHwgRVhJVF9TVUNDRVNTCi0JICBpbiBleGl0KCkgY2FsbHMuCi0JKiBvcHJvZmlsZS5jOiBNYWtlIG5vbi1leHBvcnRlZCBmdW5jdGlvbnMgc3RhdGljCi0JICBhbmQgcmVtb3ZlIGR1cGxpY2F0ZSBkZWZpbml0aW9ucy4KLQotMjAwMS0wOC0xOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wX3N0YXJ0OiBoYW5kbGUgY2VsZXJpZXMgaW4gY3B1IHR5cGUKLQotMjAwMS0wOC0xOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3BfaW5pdC5jOgotCSogb3Byb2ZpbGUuaDoKLQkqIG9wcm9maWxlLmM6IHNtYWxsIHRpZGllcyBvZiB0aGUgQXRobG9uIHN1cHBvcnQKLQotMjAwMS0wOC0xOSAgRGF2ZSBKb25lcyAgPGRhdmVqQHN1c2UuZGU+Ci0KLQkqIG9wX2V2ZW50cy5jOgotCSogb3BfaW5pdC5jOiAKLQkqIG9wcm9maWxlLmg6Ci0JKiBvcHJvZmlsZS5jOgotCSogZGFlL29wX3N0YXJ0OgotCSogZGFlL29wcm9maWxlZC5oOgotCSogZGFlL29wcm9maWxlZC5jOiBpbml0aWFsIEF0aGxvbiBzdXBwb3J0Ci0KLTIwMDEtMDgtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG9wcm9maWxlLmM6IHVzZSBzeW1ib2xpYyBjb25zdGFudCBmb3IgYWxsIGFwaWMgc2V0dXAsIG5vIGdlbmVyYXRlZAotCSAgY29kZSBjaGFuZ2UKLQotMjAwMS0wOC0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLSAKLQkqIE1ha2VmaWxlLmluOgotCSogZGFlL01ha2VmaWxlLmluOgotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBkb2MvTWFrZWZpbGUuaW46Ci0JKiBndWkvTWFrZWZpbGUuaW46IGFkZCB1bmluc3RhbGwgdGFyZ2V0Ci0gCi0yMDAxLTA4LTE4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BkX3Byb2MuYzogdGlueSBjbGVhbnVwCi0gCi0yMDAxLTA4LTE3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIFRPRE86IG1pbm9yIGNsZWFudXAuCi0KLTIwMDEtMDgtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGd1aS9vcHJvZmlsZToKLQkqIGRhZS9vcF9zdGFydDoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOiBkb2N1bWVudCBhbmQgdXNlIG9wX2R1bXAKLQotMjAwMS0wOC0xNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBidW1wIHZlcnNpb24gdG8gMC4wLjVjdnMKLSAKLTIwMDEtMDgtMTYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGFsbCBNYWtlZmlsZS5pbjogbWtkaXIgaW5zdGFsbCBmaWxlcwotCi0yMDAxLTA4LTE1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkYWUvb3BkX3Byb2MuYzogZml4IGEgRklMRSogbGVhayBpbiBvcGRfZ2V0X2FzY2lpX21hcHMoKQotCi0yMDAxLTA4LTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcF9zeXNjYWxscy5jOiBkb24ndCByZXR1cm4gbmVnYXRpdmUgaGFzaGVzICEKLQkgIHJldmVydCBkbmFtZSBsZW4gImZpeCIKLQkgIHVzZSBhIG11Y2ggYmV0dGVyIGhhc2ggZnVuY3Rpb24KLQotCSogZGFlL29wZF9wcm9jLmM6IHByb3RlY3QgYWdhaW5zdCBuZWdhdGl2ZSBoYXNoZXMKLSAKLTIwMDEtMDgtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wX3N5c2NhbGxzLmM6IHNvbWUgc21hbGwgZml4ZXMKLQotCSogb3Byb2ZpbGUuYzogYWRkIGJhY2sgdW5tYXNraW5nIGNvZGUgZHVyaW5nIHNldF9nYXRlLCBidXQgb25seQotCSAgTFZUUEMKLSAKLTIwMDEtMDgtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wcm9maWxlLmg6IDIuNC44IGRvZXNuJ3QgZWl0aGVyLiAqc2lnaCouIGxvb2tzIGxpa2Ugd2UgbmVlZAotCSAgc29tZSBhdXRvY29uZmVyeSA6KAotIAotMjAwMS0wOC0xMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuaDogMi40LjctbGludXMgZG9lc24ndCBpbmNsdWRlIHRoZSBBbmRyZXcgTW9ydG9uCi0JICBjb21wbGV0ZV9hbmRfZXhpdCgpLiBIb3BlZnVsbHkgdGhpcyB3aWxsIG1ha2UgaXQgaW50byAyLjQuOCwKLQkgIEknbSBiYW5raW5nIG9uIHRoaXMuCi0KLTIwMDEtMDgtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcF9kdW1wOgotCSogZG9jL29wcm9maWxlLnNnbWw6Ci0JKiBkYWUvTWFrZWZpbGUuaW46IGEgbGl0dGxlIHV0aWxpdHkgZm9yIGR1bXBpbmcKLQotMjAwMS0wOC0xMSAgRGF2ZSBKb25lcyAgPGRhdmVqQHN1c2UuZGU+Ci0KLQkqIG9wcm9maWxlLmg6Ci0JKiBvcHJvZmlsZS5jOiBiYWNrLWNvbXBhdCBjb2RlIGFuZCB1c2Ugb2YgbmV3IHN0cnVjdCBjb21wbGV0aW9uCi0JICBmb3IgdGhlIHRocmVhZAotCi0yMDAxLTA4LTExICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5jOiBjb3JuZXIgY2FzZSB3aGVyZSBhbiBhIG1pc3MgYWdhaW5zdCBhIGZ1bGwgY291bnQsCi0JICB3ZSB3ZXJlIGF0dHJpYnV0aW5nIHdyb25nIChyZXBvcnRlZCBieSBCb2IgTW9udGdvbWVyeSkKLQotMjAwMS0wOC0xMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogdXNlIGEgc2ltcGxlIGNsaS9zdGkgd2hlbiBpbnN0YWxsaW5nIHRoZSBOTUkKLQkgIGhhbmRsZXIuIEl0IHNob3VsZCB3b3JrIGFuZCBhdm9pZHMgdGhlIHVubWFza2luZyBwcm9ibGVtLgotCi0yMDAxLTA4LTEwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3Byb2ZpbGVkLmg6IGZpeCBoZWFkZXIgaW5jbHVkZSAoZnJvbSBEYXZlIEpvbmVzKQotCi0JKiBvcF9zeXNjYWxscy5jOgotCSogb3Byb2ZpbGUuYzogZml4IHVuZGVmaW5lZCBzeW1ib2wgKGZyb20gRGF2ZSBKb25lcykKLQotMjAwMS0wOC0xMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogc21hbGwgdGlkeSBpbiBhcGljIHNldHVwCi0gCi0yMDAxLTA4LTAyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5jOiBmaXggbW9kIHVubG9hZCByYWNlLCBzbWFsbCBmaXhlcwotIAotCSogZGFlL29wX3N0YXJ0OiBtYWtlIHN5c2N0bCBlcnJvciBhY3R1YWxseSBhcHBlYXIKLSAKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBkb2N1bWVudCBuZWVkIGZvciBtb2R1dGlscyAyLjQuNgotCi0JKiBvcF9zeXNjYWxscy5jOiBmaXggc3R1cGlkIG1vZCB1c2UgY291bnQgcHJvYmxlbQotIAotMjAwMS0wNy0yOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wZF9wcm9jLmM6IGQnb2gsIGZhdC1maW5nZXJlZCBhIHNsb3cgbWVtbGVhayBpbiB0aGUKLQkgIGEta3N5bW9vcHMgbW9kdWxlcyBmaXgKLSAKLTIwMDEtMDctMjcgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wcm9mX2NvbnZlcnQuYzogZml4IGJ1ZyB3aGVuIGNvbnZlcnNpb24gc2tpcCBtb3JlIHRoYW4gb25lCi0JICB2ZXJzaW9uLgotCi0yMDAxLTA3LTI3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2MvTWFrZWZpbGUuaW46IGxuIC1zIC0+IGxuIC1zZgotCi0JKiBkYWUvb3BkX3V0aWwuYzogYWN0dWFsbHkgaW5jbHVkZSB0aGUgcmlnaHQgaGVhZGVyCi0gCi0JKiBkYWUvb3BkX3V0aWwuaDogY29tcGlsZSBmcmVlc3RhbmRpbmcgZnJvbSBvcHJvZmlsZWQuaAotCi0yMDAxLTA3LTI2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5jOiBmaXggY29tbWVudAotIAotCSogZG9jL29wcm9maWxlLnNnbWw6IGRvY3VtZW50IHN5bWJvbGxlc3MgbW9kdWxlcyBub3Qgd29ya2luZwotCi0JKiBkYWUvTWFrZWZpbGUuaW46Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcHJvZmlsZWQuaDogY2F0Y2ggbW9kdWxlcyB3aXRoIG5vIHN5bWJvbHMgdmlhIHF1ZXJ5X21vZHVsZSgpCi0JICBhbmQgaWdub3JlIHNhbXBsZXMgZm9yIHRoZW0gcXVpY2tseQotIAotMjAwMS0wNy0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZGFlL29wX3N0YXJ0OiBiZWF1dGlmeSB0aGUgb3V0cHV0IG9mIG9wX3N0YXJ0IC0taGVscAotCSogcHAvb3BfdG9fc291cmNlOiBkaXR0by4gYmV0dGVyIGFyZ3VtZW50IGNoZWNraW5nLgotCi0JKiBwcC9vcHJvZl9jb252ZXJ0LmM6Ci0JKiBwcC9vcHJvZnBwLmg6Ci0JKiBkYWUvb3Byb2ZpbGVkLmg6IGZpeCBwcm9ibGVtIHdpdGggb3BkX2Zvb3RlciwgZG9uJ3QgYnVtcCAKLQkgIG9wZF9mb290ZXIgdmVyc2lvbiBudW1iZXIgIQotCi0yMDAxLTA3LTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL29wcm9mX2NvbnZlcnQuYzogY29udmVydCB0byB2NAotIAotCSogcHAvb3Byb2ZwcC5jOiB1c2Ugb3BkX3N0cmR1cAotCSAKLTIwMDEtMDctMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcGRfdXRpbC5jOiBzbWFsbCB0aWR5Ci0gCi0yMDAxLTA3LTI0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkYWUvb3BkX3V0aWwuYzoKLQkqIGRhZS9vcGRfdXRpbC5oOiBhZGQgcmVsYXRpdmUgcGF0aCBuYW1lIHRvIGFic29sdXRlIHBhdGggbmFtZSBzdHVmZgotCSogcHAvb3Byb2ZwcC5jOiB1c2UgaXQuCi0JKiBwcC9vcF90b19zb3VyY2U6IHNpbXBsaWZ5IGNvZGUgdG8gcmVmbGVjdCBhYm92ZSBjaGFuZ2UuCi0KLTIwMDEtMDctMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOiBmaXggdW5pbml0aWFsaXNlZCBwb2ludGVyIGFjY2VzcyAocmVwb3J0ZWQgYnkKLQk8Ym9ibUBmYy5ocC5jb20+KSB0aGF0IGNvdWxkIHNlZ2ZhdWx0IG9wcm9maWxlIGluIGNhc2Ugb2YKLQltb2R1bGUgbG9hZC91bmxvYWQgYWN0aXZpdHkKLQotCSogTWFrZWZpbGUuaW46Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcGRfdXRpbC5jOgotCSogZGFlL29wZF91dGlsLmg6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmg6Ci0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL29wcm9mcHAuYzoKLQkqIHBwL29wcm9mcHAuaDogdXNlIG10aW1lKCkgaW5zdGVhZCBvZiBtZDVzdW0oKS4gU3RpbGwgZG9lc24ndCBoYW5kbGUKLQkgICIuL2E7IGdjYyAtbyBhIGEuYzsgLi9hIgotIAotMjAwMS0wNy0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKLQkqIHBwL29wZl9maWx0ZXIuaDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6IGltcGxlbWVudCBhbmQgZG9jdW1lbnQgZmlsdGVyaW5nIGZvciBhc3NlbWJseQotCSAgb3V0cHV0LgotCi0yMDAxLTA3LTIxICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotIAotCSogZG9jL29wcm9maWxlLnNnbWw6Ci0JKiBndWkvb3Byb2ZpbGU6Ci0JKiBvcHJvZmlsZS5jOiByZW1vdmUgZWRnZV9kZXRlY3Qgc3VwcG9ydC4KLSAKLQkqIHBwL29wcm9mcHAuYzogY2hlY2sgY291bnRlciByYW5nZSBmb3IgZWFjaCBldmVudCB0eXBlLgotCSogb3Byb2ZpbGUuYzogZGl0dG8uCi0JKiBndWkvb3Byb2ZpbGU6IGRpdHRvIGFuZCBzYXZlIHNldHVwIGZvciBlYWNoIGV2ZW50IHR5cGUuCi0JKiBvcHJvZmlsZS5oOiBvcF9jaGVja19yYW5nZSgpIDogZGlzcGxheSB0aGUgYWxsb3dlZCByYW5nZS4KLQotMjAwMS0wNy0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLSAKLQkqIGRhZS9vcF9zdGFydDogZGlzYWJsZSBhbGwgY291bnRlcnMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBzZXR1cC4KLQotMjAwMS0wNy0xOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6IGFkZCBpbiBiaXQgSSBmb3Jnb3QgYWJvdXQgbm90IHByb2ZpbGluZyByaW5nIDAgCi0gCi0yMDAxLTA3LTE4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogYWRkZWQgYSB3YXJuaW5nIGFib3V0IHZlcnkgbG93IGNvdW50ZXIgdmFsdWVzCi0JICAoZnJvbSBQaGlsaXBwZSwgbW9kaWZpZWQpCi0gCi0yMDAxLTA3LTE1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5jOgotCSogb3Byb2ZpbGUuaDoKLQkqIGRhZS9vcF9zdGFydDoKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiByZW1vdmUgYWJpbGl0eSB0byBzZXQgZGlmZmVyZW50IHZhbHVlcyBvbgotCSAgZGlmZmVyZW50IENQVXMKLSAKLTIwMDEtMDctMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHJlbW92ZSBkb25lIHRoaW5nCi0gCi0yMDAxLTA3LTE1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BkX3Byb2MuYzogYmFja3VwIG9sZCBzYW1wbGUgZmlsZXMgaWYgdGhlIHByb2ZpbGluZwotCSAgZGV0YWlscyAoY291bnQsIHVuaXQgbWFzayBldGMuKSBkaXNhZ3JlZS4gRml4ZXMgIzQzNTI0NQotIAotMjAwMS0wNy0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZGFlL29wcm9maWxlZC5jOiBmaXggb3Byb2ZpbGVkIC0tdmVyc2lvbiB0byB3b3JrIGV2ZW4gaWYgdGhlCi0JICBwcm9maWxlciBpcyBub3QgYWxyZWFkeSBzdGFydGVkLgotCi0JKiBndWkvb3Byb2ZpbGU6IG1hbnkgY2xlYW51cC4gRml4IGJ1ZyB0cmFjayAjNDM1MjQ4LiBNYWtlIHRoZSBndWkgbW9yZQotCSAgaW5kZXBlbmRhbnQgb24gdGhlIG51bWJlciBvZiBjb3VudGVyLgotCi0JKiBwcC9vcF90b19zb3VyY2U6IGZpeCBidWcgaW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBoYW5kbGluZy4KLQkKLQkqIHBwL29wZl9maWx0ZXIuaDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6IEFwcGx5IHNvbWUgY2xlYW51cCBzdWdnZXN0ZWQgYnkgSm9obiwgcHJpbmNpcGFsbHkKLQkgIGNoYW5nZSBmZXcgaW5oZXJpdGFuY2UgdG8gY29tcG9zaXRpb24uCi0KLQkqIHBwL29wcm9mX2NvbnZlcnQuYzogZml4IC0tdmVyc2lvbi4KLQotMjAwMS0wNy0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6Ci0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjogbWlub3IgZG9jIGZpeC4KLQotMjAwMS0wNy0xNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6IHNtYWxsIHRpZGllcwotIAotMjAwMS0wNy0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogZG9jdW1lbnQgb3BfdG9fc291cmNlLCBvcHJvZl9jb252ZXJ0IGFuZCB0aGUKLQkgIG9wcm9maWxlIGd1aQotCi0JKiBndWkvb3Byb2ZpbGU6IG9uU3RhcnRQcm9maWxpbmcoKSBjaGVjayB0aGF0IGNvdW50IGlzIGluIHRoZSBhbGxvd2VkCi0JICByYW5nZS4gb25TdG9wUHJvZmlsaW5nKCkgZmx1c2ggdGhlIHNhbXBsZXMKLSAKLTIwMDEtMDctMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIE1ha2VmaWxlLmluOiBkaXN0IGZpeAotCi0yMDAxLTA3LTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogbWFrZSBpdCBjbGVhciB3ZSB3YW50IHZtbGludXggbm90IHZtbGludXoKLQotCSogZG9jL2h0bWwvOiByZW1vdmUgZ2VuZXJhdGVkIGZpbGVzIGZyb20gQ1ZTCi0KLQkqIE1ha2VmaWxlLmluOiBjaGFuZ2VzIHRvIGNyZWF0ZSBIVE1MIGZpbGVzIG9uIGRpc3QgCi0gCi0yMDAxLTA2LTMwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBwcC9NYWtlZmlsZS5pbjogZml4IHRoZSBmaXgKLQotCSogcHAvb3BmX2ZpbHRlci5oOiB2ZXJ5IG1pbm9yIGNoYW5nZXMKLSAKLTIwMDEtMDYtMjkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL01ha2VmaWxlLmluOiBmaXggdXAgZm9yIG9wZl9maWx0ZXIKLQotCSogY29uZmlndXJlLmluOiBhZGQgQUNfUFJPR19DWFgKLQotMjAwMS0wNi0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogcHAvb3BmX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuaDoKLQkqIHBwL29wX3RvX3NvdXJjZTogbmV3IGZpbGUgd2hpY2ggcHJvdmlkZSBhIHNvdXJjZSBhbm5vdGF0aW9uIHV0aWxpdHkuCi0JKiBwcC9NYWtlZmlsZS5pbjogYnVpbGQgYW5kIGluc3RhbGwgb3BmX2ZpbHRlciAvIG9wX3RvX3NvdXJjZQotCi0yMDAxLTA2LTI5ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBkYWUvb3BkX3V0aWwuaDogaGlkZSBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKSB3YXJuaW5ncwotCSAgd2hlbiBuZWNlc3NhcnkuIERvY3VtZW50IC0td2l0aC1jYyBidWcuCi0gCi0yMDAxLTA2LTI5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBndWkvb3Byb2ZpbGU6IG1vcmUgc2F2aW5nIG9mIHRoZSB1c2VyIHNldHVwLgotCi0yMDAxLTA2LTI3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BkX3V0aWwuYzogZG9jdW1lbnQgZ2V0X2xpbmUoKSByZXN0cmljdGlvbgotIAotMjAwMS0wNi0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZGFlL29wcm9maWxlZC5jOiBmaXggY3B1X3NwZWVkX3N0ci9jcHVfc3BlZWQgdmFyaWFibGUgc2V0dXAgbG9naWMuCi0KLQkqIGd1aS9vcHJvZmlsZTogc2F2ZSBhZHZhbmNlZCBzZXR1cCBmb3JtIHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4KLQkgIEFkZCBtYW55IHZhbGlkYXRpb24uCi0KLTIwMDEtMDYtMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wX2V2ZW50cy5jOgotCSogcHAvb3Byb2ZfY29udmVydC5jOiBhZGQgbWlzc2luZyBoZWFkZXJzLCByZW1vdmUgQ1ZTIGJsaXAKLSAKLQkqIGRhZS9vcGRfdXRpbC5oOiBzcGVjaWZ5IG1hbGxvYyBhdHRyaWJ1dGUuIGdpdmVzIHdhcm5pbmdzIG9uCi0JICBvbGRlciBjb21waWxlcnMsIHdobyBjYXJlcy4gSSBkb3VidCB0aGlzIHdpbGwgaGVscCBidXQgaXQgY2FuJ3QKLQkgIGhhcm0KLSAKLTIwMDEtMDYtMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wcm9mX2NvbnZlcnQuYzogY29udGludWUgaWYgYW4gZXJyb3Igd2l0aCBvbmUgZmlsZSBvY2N1cnMKLSAKLQkqIGRhZS9vcF9zdG9wOiByZW1vdmUgcm1tb2QgYWdhaW4gLSBpdCBpcyB1c2VyJ3MgY2hvaWNlIG9uIHdoZW4vd2hldGhlcgotCSAgdG8gdW5sb2FkCi0gCi0yMDAxLTA2LTIzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcF9zdGFydDogYWRkIG1pc3Npbmcgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyB0aGUgbG9nIGZpbGVuYW1lLgotCSAgR2V0IGNvcnJlY3QgY3B1IHNwZWVkIGluZm9ybWF0aW9uIGZvciBzbXAgYXMgc3VnZ2VzdGVkIGJ5IEpvaG4uCi0KLQkqIGRhZS9vcHJvZmlsZWQuYzogQ29ycmVjdCBhIHdhcm5pbmcgd2l0aCBzb21lIG9sZGVyIHZlcnNpb24gb2YgdGhlCi0JICBwb3B0IGxpYnJhcnkuCi0JKiBwcC9vcHJvZnBwOiBhcyBhYm92ZS4KLQotCSogZ3VpL29wcm9maWxlOiBhZHZhbmNlZCBzZXR1cCBmb3JtIGFkZGVkLgotCi0JKiBwcC9vcHJvZl9jb252ZXJ0LmM6IHZlcnNpb24gYW5kIGhlbHAgb3B0aW9uIHN1cHBvcnQuCi0KLTIwMDEtMDYtMjMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwLy5jdnNpZ25vcmU6IGFkZCBvcHJvZl9jb252ZXJ0Ci0gCi0yMDAxLTA2LTIzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcHJvZl9jb252ZXJ0LmM6IG5ldyB1dGlsaXR5IHRvIGNvbnZlcnQgc2FtcGxlcyBmaWxlcyB3aGVuIHRoZSBvcGRfZm9vdGVyCi0JICBzdHJ1Y3QgaXMgY2hhbmdlZC4KLQkqIHBwL01ha2VmaWxlLmluOiByZWZsZWN0IHRoZSBhYm92ZSBjaGFuZ2UuIFRpZHkgc29tZSB1bm5lY2Vzc2FyeSBibGFuay4KLQkqIE1ha2VmaWxlLmluOiBUaWR5IHNvbWUgdW5uZWNlc3NhcnkgYmxhbmsvdGFidWxhdGlvbi4KLQotMjAwMS0wNi0yMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogUkVBRE1FOiB1cGRhdGUKLSAKLTIwMDEtMDYtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wcm9maWxlLmM6IGFsd2F5cyBoYXZlIHNtcF9hcGljX3Jlc3RvcmUoKQotIAotMjAwMS0wNi0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogdmFyaW91czogbWFkZSBzcGFjaW5nIG1vcmUgY29uc2lzdGVudCBpbiBDIHNvdXJjZSwKLQkgIHJlbW92ZWQgdW51c2VkIHV0aWxpdHkgZnVuY3Rpb25zLgotIAotMjAwMS0wNi0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogYWN0dWFsbHkgY2FsbCBzbXBfYXBpY19yZXN0b3JlKCkgb24gVVAKLQotCSogZGFlL29wX3N0YXJ0OiBkb24ndCByZW1vdmUgdGhlIG1vZHVsZSBpbW1lZGlhdGVseSBhZnRlcgotCSAgaW5zZXJ0aW5nIGl0ICEKLSAKLTIwMDEtMDYtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuaCwgcHAvb3Byb2ZwcC5oOiBjaGFuZ2UgdGhlIG9wZF9mb290ZXIgc3RydWN0LgotCSAgQnVtcCBPUERfVkVSU0lPTiB0byByZWZsZWN0IHRoZSBmaWxlIGZvcm1hdCBjaGFuZ2UuCi0JKiBwcC9vcHJvZnBwLmM6IHJlZmxlY3QgdGhlIGFib3ZlIGNoYW5nZQotCSogZGFlL29wcm9maWxlZC5jOiByZWZsZWN0IHRoZSBhYm92ZSBjaGFuZ2UsIG1hbnkgb3B0aW9ucyBzdXByZXNzZWQKLQkgIGJlY2F1c2Ugc2V0dXAgaXMgcmVhZCBmcm9tIHRoZSAvcHJvYy9zeXMvZGV2L29wcm9maWxlIGZpbGVzLgotCSogZGFlL29wZF9wcm9jOiBzdXBwcmVzcyBzb21lICJleHRlcm4gdmFyaWFibGUiIHdoaWNoIG5vIGxvbmdlciBleGlzdC4KLQkqIGRhZS9vcF9zdGFydDogcmVmbGVjdCB0aGUgYWJvdmUgY2hhbmdlCi0KLTIwMDEtMDYtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRhZS9vcF9zdGFydDogYWRkIC0tY3RyWzB8MV0tZWRnZS1kZXRlY3QKLQkqIGd1aS9vcHJvZmlsZTogYWRkIGVkZ2UgZGV0ZWN0IHN0dWZmCi0JKiBvcHJvZmlsZS5jOiBhZGQgZWRnZS1kZXRlY3Qgc3R1ZmYsIHRoZSBlZGdlLWRldGVjdCBpcyBhbgotCSAgZXhwZXJpbWVudGFsIGZlYXR1cmUgd2hpY2ggZG8gbm90IHdvcmsgYWN0dWFsbHkgKG5vIGVmZmVjdCBmb3Igbm93KS4KLQkgIEJlY2F1c2UgdGhpcyBpcyBleHBlcmltZW50YWwgbm8gZG9jdW1lbnRhdGlvbiBhcmUgcHJvdmlkZWQgb24gdGhpcwotCSAgb3B0aW9uLgotCi0yMDAxLTA2LTIyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBkYWUvb3Bfc3RvcDoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOgotCSogb3BfaW5pdC5jOgotCSogb3Bfc3lzY2FsbHMuYzoKLQkqIG9wcm9maWxlLmg6Ci0JKiBvcHJvZmlsZS5jOiBhZGQgYW5kIGRvY3VtZW50IHRoZSBhYmlsaXR5IAotCSAgdG8gbWFrZSB0aGUgbW9kdWxlIHVubG9hZGFibGUuIE5vdCB3ZWxsIHRlc3RlZAotCSAgKGJ1dCBzZWVtcyB0byB3b3JrKS4KLSAKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBkb2N1bWVudCBjb21waWxlLXRpbWUgb3B0aW9ucwotCSAgYmV0dGVyLCB0aGFuayBQaGlsaXBwZQotIAotMjAwMS0wNi0yMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuYzogcmVtb3ZlIHN0YWxlIGNvbW1lbnRzLiBmaXggdGhlb3JldGljYWwKLQkgIG1lbW9yeSBsZWFrcyB3aGVuIHNldHRpbmcgdXAgdGhlIHN5c2N0bHMgZmFpbHMsIHNtYWxsIHRpZHkKLSAKLTIwMDEtMDYtMTkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFJFQURNRTogCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKLQkqIGRvYy9odG1sLzogcy9zb3VyY2Vmb3JnZS9zZi8KLSAKLTIwMDEtMDYtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG9wX2V2ZW50cy5jOiBvcF9jaGVja19ldmVudHMoKSBmaXggdHdvIGJhZCB1c2Ugb2YgCi0JICBvcF9jaGVja191bml0X21hc2soKS4gb3BfZ2V0X3VtX2Rlc2MoKSBmaXggYSB0eXBvLgotCi0yMDAxLTA2LTE0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBvcF9ldmVudHMuYzogc3RydWN0IG9wX3VuaXRfbWFzaywgc3RydWN0IG9wX3VuaXRfZGVzYyBhbGxvdyB1cCB0bwotCSAgc2V2ZW4gdW5pdCBtYXNrcy4gUmVmbGVjdCB0aGlzIGNoYW5nZSBpbiBkYXRhLCBvcF9jaGVja191bml0X21hc2soKQotCSAgYW5kIGNhbGxlcnMgb2Ygb3BfY2hlY2tfdW5pdF9tYXNrKCkuCi0KLTIwMDEtMDYtMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHJlc3VsdHMvaW50cm86IHRpZHkgdXAKLQotCSogcmVzdWx0cy9rZXJuZWwtY29tcGlsZS90aW1lLWF2ZXMucGw6IGZpeCByZWdleHBzCi0gCi0JKiByZXN1bHRzL2xhdGV4LzogcmVzdWx0cyBmcm9tIHRoZSBMYVRlWCBydW5zCi0gCi0yMDAxLTA2LTA5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkYWUvb3Bfc3RhcnQ6IGF2b2lkIGNobW9kIHRvIGEgbm9uIGV4aXN0aW5nIGRpcmVjdG9yeSBhbmQgc2V0dXAgYWNjZXNzCi0JICBtb2RlIGZyb20gNzAwIHRvIDc1NS4gUmVwbGFjZSB1c2Ugb2YgdGhlIHN5c2N0bCB1dGlsaXR5IGJ5IGEKLQkgIGRvX3N5c2N0bCgpIGZ1bmN0aW9uLgotCi0JKiBndWkvb3Byb2ZpbGU6IHNvbWUgY2xlYW51cCBhbmQgYnVnZml4LgotCi0JKiBwcC9vcHJvZnBwLmM6IGFkZCBuZXcgb3V0cHV0IG9wdGlvbnMgLS1saXN0LWFsbC1zeW1ib2xzLWRldGFpbHMsCi0JICAtLW91dHB1dC1saW5lbnItaW5mbwotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiB1cGRhdGUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgbmV3IG9wcm9mcHAKLQkgIG9wdGlvbgotCi0yMDAxLTA2LTA5ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46IGZpeCBidWlsZCB3aXRoIENPTkZJR19NT0RWRVJTSU9OUwotCSAgZW5hYmxlZC4KLSAKLTIwMDEtMDYtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzogbW92ZSBsb2dmaWxlIG1lc3NhZ2UgdG8KLQkgIGJlZm9yZSBjbG9zZSgxKSB0byBub3QgbmVlZCB0byB1c2Ugc3RkZXJyCi0gCi0yMDAxLTA2LTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBndWkvOiBuZXcgZGlyZWN0b3J5Ci0KLQkqIE1ha2VmaWxlLmluOgotCSogY29uZmlndXJlLmluOgotCSogZ3VpLy5jdnNpZ25vcmU6Ci0JKiBndWkvTWFrZWZpbGUuaW46Ci0JKiBndWkvb3Byb2ZpbGU6IFBoaWxpcHBlJ3MgcHJvdG90eXBlIHRjbC90ayBzdGFydHVwCi0JICBzY3JpcHQuIFJlcXVpcmVzIG1vcmUgd29yay4KLSAKLTIwMDEtMDYtMDMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wcm9mcHAuaDogcmVtb3ZlIGxpYmliZXJ0eSBoZWFkZXIgdGhhdCB3YXMKLQkgIGFwcGFyZW50bHkgYnJlYWtpbmcgaW5zdGFsbCBvbiBzbGFja3dhcmUKLSAKLTIwMDEtMDYtMDMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFJFQURNRTogdXBkYXRlCi0gCi0yMDAxLTA2LTAzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBvcF9ldmVudHMuYzogYWxsb3cgdW5pdCBtYXNrIG9wdGlvbiB0byBiZSBiaXQgbWFzawotCi0yMDAxLTA2LTAxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BkX3Byb2MuYzogYWN0dWFsbHkgdXNlIG9wZF9nZXRfY291bnQgLQotCSAgZml4IGJ1ZyB3aXRoIGNvdW50ZXIgMSByZXBvcnRlZCByZXN1bHRzCi0KLQkqIGRhZS9vcF9zdGFydDogZml4IGJyb2tlbiBzaGVsbCBzY3JpcHRpbmcKLQotCSogZGFlL29wcm9mcHAuYzogZml4IGxpc3Qtc3ltYm9scyBvdXRwdXQKLQotMjAwMS0wNC0zMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wX3N0YXJ0OiBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nCi0KLQkqIGRhZS9vcGRfcHJvYy5jOiBmaXggaW5kZW50YXRpb24KLSAKLTIwMDEtMDQtMDggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogMC4wLjMgaGFzIGJlZW4gcmVsZWFzZWQuIEJ1bXAgY3ZzIHZlcnNpb24KLQkgIHRvIDAuMC40Ci0KLTIwMDEtMDQtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOiByZW1vdmUgZm9yY2VkIGR1bXBpbmcuIEl0IHdhcwotCWNhdXNpbmcgb3ZlcmhlYWQgc3Bpa2VzCi0KLQkqIGRvYy9odG1sL3Jlc3VsdHMuaHRtbDoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOgotCSogZGFlL29wX3N0YXJ0OiBIb3BlZnVsbHkgZG9jdW1lbnQgZHVtcCBjbGVhcmx5IGVub3VnaAotCi0yMDAxLTA0LTA1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5oOgotCSogb3Bfc3lzY2FsbHMuYzogMi40LjMgYW5kIGFib3ZlIGhhdmUgYSBydyBtbWFwX3NlbQotCi0yMDAxLTA0LTA1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2MvaHRtbC86IGFkZGVkIG1pc3NpbmcgZmlsZXMKLQotMjAwMS0wNC0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6Ci0JKiBkb2MvaHRtbC9yZXNvdXJjZXMuaHRtbDogYWRkIFVSTHMKLQotMjAwMS0wNC0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3Byb2ZwcC5jOiBmaXggZ3Byb2Ygb3V0cHV0IGJ1Zy4gSXQgd29ya3MgT0sgbm93LAotCSAgYnV0IE1VTFRJUExJRVIgPT0gMSB3aWxsIGJyZWFrIGZvciBzb21lIHJlYXNvbgotCi0yMDAxLTA0LTA1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKLQkqIGRvYy9odG1sLzogZmluaXNoIFNHTUwgZG9jdW1lbnRhdGlvbiAoZm9yIG5vdykKLQotMjAwMS0wNC0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL01ha2VmaWxlLmluOgotCSogZG9jL29wcm9maWxlLnNnbWw6Ci0JKiBkb2Mvb3Byb2ZpbGU6IHN0YXJ0IFNHTUwgZG9jdW1lbnRhdGlvbgotCi0yMDAxLTA0LTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBNYWtlZmlsZS5pbjoKLQkqIGRvYy9NYWtlZmlsZS5pbjoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOiBhZGQgYSBtYW5wYWdlCi0gCi0yMDAxLTA0LTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBwcC9vcHJvZnBwLmM6IGdldCBzb21lIHNvcnQgb2YgaGFsZi13b3JraW5nIG91dHB1dAotCWluIGdwcm9mIGZvcm1hdC4gQ3VycmVudGx5IHRoZSBudW1iZXJzIGFyZSBzY3Jld2VkIHVwLAotCW5lZWQgYSBtYWpvciB0cmF3bCB0aHJvdWdoIGdwcm9mIHNvdXJjZSB0byBzZWUgd2hhdCdzCi0JZ29pbmcgb24uIAotCi0yMDAxLTA0LTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvTWFrZWZpbGUuaW46Ci0JKiBkYWUvbWQ1LmM6Ci0JKiBkYWUvbWQ1Lmg6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcHJvZmlsZWQuaDoKLQkqIHBwL01ha2VmaWxlLmluOgotCSogcHAvb3Byb2ZwcC5jOgotCSogcHAvb3Byb2ZwcC5oOiB1c2UgbWQ1c3VtcyB0byB2ZXJpZnkgc2FtcGxlIGZpbGUKLQkgIGludGVncml0eS4gU3RvcmVkIGluIGVhY2ggc2FtcGxlIGZpbGUgZm9vdGVyIGFyZQotCSAgbWQ1c3VtcyBvZiB0aGUgYmluYXJ5LiBUaGVzZSBhcmUgY2hlY2tlZCBieSB0aGUgZGFlbW9uCi0JICB3aGVuIHJlLXVzaW5nIGFuIG9sZCBmaWxlLCBhbmQgYnkgdGhlIHBvc3QtcHJvY2Vzc29yLgotCSAgQnVtcCBPUERfVkVSU0lPTiB0byByZWZsZWN0IHRoZSBmaWxlIGZvcm1hdCBjaGFuZ2UuCi0KLQkqIGRhZS9vcHJvZmlsZWQuYzogbWFrZSBzdGFydCB1cCBtb3JlIGZyaWVuZGx5IAotCQotCSogZGFlL29wX3N0YXJ0OiBtYWtlIHNjcmlwdCBtb3JlIGZyaWVuZGx5Ci0KLTIwMDEtMDMtMTAgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOiBmaXhlZCBzb21lIGVycm9yIG1lc3NhZ2VzCi0KLQkqIHJlc3VsdHMva2VybmVsLWNvbXBpbGUvcmF3L2NjdS5nbnVwbG90OiBhZGQKLSAKLTIwMDEtMDItMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiByZXN1bHRzL2ludHJvOiB1cGRhdGUKLQotCSogcmVzdWx0cy9rZXJuZWwtY29tcGlsZS86IHVwZGF0ZSwgYWRkIEZJRyBmaWxlcwotCi0JKiByZXN1bHRzL2xtYmVuY2g6IGxtYmVuY2ggcmVzdWx0cwotCi0JKiByZXN1bHRzL291dHB1dC9rZXJuZWwtYWMxMi1vdXRwdXQ6IGFkZCByZWFkcHJvZmlsZSBvdXRwdXQKLQotMjAwMS0wMi0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIG9wX3N5c2NhbGxzLmM6IHNtYWxsIHJlLW9yZywgc29tZSBtaWNyby1vcHRpbWlzYXRpb25zCi0JICB0byBkb19oYXNoKCkKLQotCSogcHAvb3Byb2ZwcC5jOiBjbGVhbiB1cCAtLWxpc3Qtc3ltYm9sIG91dHB1dCBhIGxpdHRsZQotCi0JKiByZXN1bHRzL2tlcm5lbC1jb21waWxlL292ZXJoZWFkOiB1cGRhdGUgd2l0aCByZXN1bHRzCi0KLQkqIHJlc3VsdHMva2VybmVsLWNvbXBpbGUvdGltZS1hdmVzLnBsOiBhZGQgZ251cGxvdCBvdXRwdXQKLQotCSogcmVzdWx0cy9rZXJuZWwtY29tcGlsZS9yYXcvIDogcmF3IG91dHB1dCBmaWxlcwotCi0JKiByZXN1bHRzL291dHB1dC8gOiBuZXcgZGlyIGZvciBleGFtcGxlIG91dHB1dAotCi0JKiByZXN1bHRzL291dHB1dC9saWJjLTIuMS45Mi5zbzogb3V0cHV0IGZyb20gbGliYyBwcm9maWxlCi0KLQkqIHJlc3VsdHMvb3V0cHV0L2tlcm5lbC1hYzEyLW91dHB1dDogb3V0cHV0IGZyb20ga2VybmVsIHByb2ZpbGUKLQotCSogcmVzdWx0cy9vdXRwdXQvZG9fYW5vbnltb3VzX3BhZ2U6IGRldGFpbGVkIHN5bWJvbCBwcm9maWxlCi0KLQkqIHJlc3VsdHMvb3V0cHV0L29wcm9maWxlLm1vZHVsZTogb3V0cHV0IGZvciBvcHJvZmlsZSBtb2R1bGUKLQotMjAwMS0wMi0wMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIG9wcm9maWxlLmg6Ci0JKiBvcF9zeXNjYWxscy5jOiBtYWtlIGRvX2hhc2goKSBub24tcmVjdXJzaXZlCi0KLQkqIG9wcm9maWxlLmM6IG1ha2UgdGhyZWFkIHdha2UgdXAgaGFsZiBhcyBvZnRlbgotCi0JKiBkYWUvb3BkX3Byb2MuYzogcXVpZXNjZSBkdW1wIHN5c2N0bAotCSAgbWFrZSByZXNpbGllbnQgYWdhaW5zdCBicm9rZW4gc2FtcGxlIChkb24ndCBleGNlZWQgbW1hcCkKLQotCSogcHAvb3Byb2ZwcC5jOiAtLWdjYy1kZW1hbmdsZSAtPiAtLWRlbWFuZ2xlLCBqdXN0IHRvbwotCSAgYW5ub3lpbmcgdG8gbGl2ZQotIAotMjAwMS0wMi0wMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Byb2ZpbGUuaDogYWRkIG9wX3NhdmVfc3lzY2FsbHMoKQotCi0JKiBvcHJvZmlsZS5jOiBsZXQgaW50ZXJydXB0X3NsZWVwX29uKCkgZGllCi0JICBhZGQga2VybmVsX29ubHkgb3B0aW9uCi0JICBzeXNjdGwgZHVtcHMgZXZlcnl0aGluZyBpdCBjYW4gbm93Ci0gCi0JKiBvcF9zeXNjYWxscy5jOiBhZGQgb3Bfc2F2ZV9zeXNjYWxscygpIAotCi0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZS9vcF9zdGFydDogYWRkIC0ta2VybmVsLW9ubHkKLSAKLQkqIGRvYy9ndWlkZS5seXg6IG1lbnRpb24gLS1rZXJuZWwtb25seQotIAotCSogVE9ETzogdXBkYXRlCi0gCi0yMDAxLTAyLTAxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBNYWtlZmlsZS5pbjogc3BsaXQgb3V0IG9wX2luaXQuYwotCi0JKiBhdXRvZ2VuLnNoOiBuZXcgZmlsZQotCi0JKiBjb25maWd1cmUuaW46IGZpeCAtLXdpdGgtY2MuIFNwbGl0IG91dCBvcF9pbml0LmMKLQkKLQkqIG9wX2luaXQuYzogbmV3IGZpbGUsIHRvIGFsbG93IHJlc3QgLW1hcmNoPWk2ODYKLQotCSogb3Byb2ZpbGUuYzogY3V0IG91dCBpbml0IHN0dWZmIHRvIG9wX2luaXQuYyAKLQotCSogb3BkX3Byb2MuYzogbW9yZSB2ZXJib3NlCi0KLQkqIHJlc3VsdHMva2VybmVsLWNvbXBpbGUvdGltZS1hdmVzLnBsOiB3b3JrIHdpdGggb3RoZXIKLQkgIHRpbWUgZm9ybWF0IHRvbyAKLQkgCi0yMDAxLTAxLTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46IGFkZCAtLXdpdGgtY2Mgb3B0aW9uCi0KLQkqIHBwL29wcm9mcHAuYzogZml4IGNvbnN0IGRpc2NhcmQgd2FybmluZ3MKLQotMjAwMS0wMS0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBtdXN0IGNoZWNrIGZvciBsaWJlcnR5ICphZnRlcioKLQkgIGxpYmRsCi0KLTIwMDEtMDEtMjQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wcm9maWxlLmM6IHdlJ3JlIG5vdCB1c2luZyBvcF9jaGVja19jdHIoKQotCQlyZXR1cm4gdmFsdWUsIHNvIGRvbid0IGhhdmUgb25lCi0KLTIwMDEtMDEtMjMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIG9wX3N5c2NhbGxzLmM6Ci0JKiBvcHJvZmlsZS5jOgotCSogb3Byb2ZpbGUuaDogc3RyaXBwZWQgdGhlIE5NSSBlcnJvciBoYW5kbGluZyBzdHVmZgotCi0JKiBvcF9ldmVudHMuYzogZml4ZWQgc2lsbHkgYnVnIGluIHRoZSBvdGhlciBwbGFjZSB0b28gOlAKLQkKLQkqIGRhZS9vcHJvZmlsZWQuYzogaW1wcm92ZWQgZXJyb3IgbWVzc2FnZXMKLQotMjAwMS0wMS0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3BfZXZlbnRzLmM6IGZpeCBzaWxseSBidWcgc28geW91IGNhbiBzZXQgYm90aAotCQljb3VudGVycyBhdCBvbmNlCi0KLQkqIG9wcm9maWxlLmM6IGRvbid0IGRpc2FibGUvZW5hYmxlIGNvdW50ZXJzIGluCi0JCXRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gSXQncyBleHBlbnNpdmUgYW5kCi0JCWRvZXNuJ3QgcmVhbGx5IGJ1eSBhbnl0aGluZy4KLQkJRml4IGEgc2lsbHkgRUJVU1kgYnVnIHdoZW4gb3BlbiBmYWlscyBvbmNlLgotCi0JKiBkYWUvb3Bfc3RhcnQ6IGRvbid0IHJlbW92ZSBvbGQgc2FtcGxlIGZpbGVzCi0JCXBhc3MgY29ycmVjdCBldmVudCB0byBkYWVtb24gZm9yIGN0cjEKLQotMjAwMS0wMS0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3Bfc3lzY2FsbHMuYzpkb19oYXNoKCk6IHVzZSBzdHJjcHkgbm90IHN0cm5jcHkuIAotCQlJdCdzIHByb2JhYmx5IGZhc3RlciwgYW5kIGlmIGRfbmFtZS5sZW4gaXMgY29ycnVwdGVkCi0JCXRoZSBrZXJuZWwgaGFzIGJpZ2dlciB0aGluZ3MgdG8gd29ycnkgYWJvdXQuCi0KLTIwMDEtMDEtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9ndWlkZS5seXg6Ci0JKiBkYWUvZ3VpZGUuaHRtbDogdXBkYXRlIGRvY3MgYSBsaXR0bGUKLQotMjAwMS0wMS0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wX3N0YXJ0OgotCSogb3BfdXNlci5oOiBidW1wIHVwIGhhc2ggdGFibGUgc2l6ZQotCi0JKiByZXN1bHRzL2tlcm5lbC1jb21waWxlL292ZXJoZWFkOiBpbnRybyB0byBrZXJuZWwKLQkJY29tcGlsZSB0ZXN0cwotCi0JKiByZXN1bHRzL2tlcm5lbC1jb21waWxlL3RpbWUtYXZlcy5wbDogc2NyaXB0Ci0JCXRvIGdlbmVyYXRlIGF2ZXJhZ2VzICsgb3ZlcmhlYWRzCi0KLQkqIG9wX3N5c2NhbGxzLmM6IHRocmVlIGZpeGVzIHRvIGRvX2hhc2goKS4gSXQncwotCQlnb2luZyB0byBiZSBhIHBhaW4gdG8gbWFrZSBpdGVyYXRpdmUgOigKLQotMjAwMS0wMS0yMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcmVzdWx0cy86IFN0YXJ0ZWQgYSBjb2xsZWN0aW9uIG9mIHJlc3VsdHMKLQotMjAwMS0wMS0yMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGNvbmZpZ3VyZS5pbjogYWRkIGNvbW1lbnQKLQotCSogTWFrZWZpbGUuaW46IG1vdmVkIG9wcm9maWxlX2suYyB0byBvcF9zeXNjYWxscy5jLCBvcF91c2VyLmggYWRkZWQKLQotCSogb3Bfc3lzY2FsbHMuYzogcmVuYW1lIG9mIG9wcm9maWxlX2suYwotCQltYXAgYnVmZmVyIGlzIGRlYWQgbm93Ci0JCXVzZSB2bWFsbG9jKCkgYW5kIGZyaWVuZHMgZm9yIGhhc2ggbWFwCi0JCVJld29ya2luZyBvZiBoYXNoX21hcCBzdHVmZiBpbnRvIGFiYidzIGxpbmtlZAotCQloYXNoIG1hcCBzdHJ1Y3R1cmUKLQotCSogb3BfdXNlci5oOiBuZXcgZmlsZSByZXByZXNlbnRpbmcgc2hhcmVkIHN0cnVjdHMgZXRjLgotCQliZXR3ZWVuIGRhZW1vbiBhbmQga2VybmVsIG1vZHVsZQotCQlSZXdvcmtlZCBPUF8gZmxhZ3MgaW4gY291bnQuCi0JCVJld29ya2VkIGhhc2ggbWFwIHN0cnVjdHVyZQotCi0JKiBvcHJvZmlsZS5jOiBnZXQgYWxvbmcgd2l0aCB0aGUgbmV3IFVQIEFQSUMgc3R1ZmYgaW4gMi40LjBhYzkKLQkJcmVtb3ZlIGV4dHJhbmVvdXMgbG9ja19rZXJuZWwoKQotCQlkZWZhdWx0IGJ1ZmZlciBzaXplIGFkZGVkCi0JCW1hcCBidWZmZXIgZGllZAotCQlVc2UgdXBfYW5kX2V4aXQoKSBpbiBrZXJuZWwgdGhyZWFkIHRvIGZpeCB6b21iaWVzIDpQCi0JCVNldCBkaWV0aHJlYWRkaWUgPSAwIGluIHN0YXJ0X3RocmVhZCgpCi0JCW9wcm9mX3B1dF9tYXBwaW5nKCkgYWRkZWQKLQkJd2Ugd2VyZW4ndCB0dXJuaW5nIE9GRiBrZXJuZWwvdXNlciBjb3VudGluZyB3aGVuIGFza2VkIHRvCi0KLQkqIG9wcm9maWxlLmg6IG1vdmUgc2hhcmVkIHN0dWZmIHRvIG9wX3VzZXIuaAotCQlpbmNyZWFzZSB0aGUgd2F0ZXJtYXJrIHRvIGEgbXVjaCBzYWZlciA3NjgKLQotCSogZGFlL01ha2VmaWxlLmluOiBkZXBlbmRlbmNpZXMgb24gb3BfdXNlci5oIGFuZCB2ZXJzaW9uLmggCi0KLQkqIGRhZS9vcF9zdGFydDogaGlkZSBjb25mdXNpbmcgb3V0cHV0IG9mIG9wX3N0b3AKLQkJLS12ZXJib3NlIG9wdGlvbgotCQltYXAgYnVmZmVyIGRpZWQKLQotCSogZGFlL29wZF9wcm9jLmM6IC0tdmVyYm9zZSBvcHRpb24KLQkJZG9uJ3QgaW5zaXN0IG9uIG5ldyBzYW1wbGUgZmlsZXMKLQkJUmV3b3JrIG1hcHBpbmcgY29kZQotCQlCZSBhIGxpdHRsZSBtb3JlIGZvcmdpdmluZyB3aXRoIHVuc3RhdHRhYmxlIGltYWdlcyAKLQotCSogZGFlL29wZF91dGlsLmg6Ci0JKiBkYWUvb3BkX3V0aWwuYzogYWRkIGZhdGFsIGZsYWcgdG8gb3BkX2dldF9mc2l6ZSgpLgotCi0JKiBkYWUvb3Byb2ZpbGVkLmg6IC0tdmVyYm9zZSBvcHRpb24KLQkJbW92ZSBjb21tb24gY29kZSB0byBvcF91c2VyLmgKLQotCSogZGFlL29wcm9maWxlZC5jOiBhZGQgLS12ZXJib3NlIG9wdGlvbiAodmVyeSB2ZXJib3NlICEpCi0JCW1hcCBidWZmZXIgZGllZAotCQlBZGQgY29kZSBmb3IgdW5wYWNraW5nIG1hcHBpbmcgbm90aWZpY2F0aW9ucywgcmV3b3JrCi0JCW1hcHBpbmcgcmVjb2duaXRpb24KLQotCSogZG9jL2d1aWRlLmh0bWw6Ci0JKiBkb2MvZ3VpZGUubHl4OiBzb21lIHNtYWxsIHVwZGF0ZXMKLQotCSogcHAvb3Byb2ZwcC5jOiBmaXggc2VnZmF1bHQgb24gZmFpbHVyZSB0byBvcGVuIGJpbmFyeS4KLQkJYWRkIC0tdmVyYm9zZSBvcHRpb24KLQotCSogcHAvb3Byb2ZwcC5oOiBhZGQgLS12ZXJib3NlIG9wdGlvbgotCi0yMDAwLTAxLTEyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcHJvZmlsZS5jOiB1c2Ugc3RhbmRhcmQga2VybmVsIG5hbWVzIGZvciBNU1JzLgotCQlEb24ndCByZS1kbyBmaXhtYXAgaWYgVVAgb29wc2VyIHBhdGNoIGlzIGluc3RhbGxlZC4KLQkJQWxsb3cgVVAgb29wc2VyIHRvIHdvcmsgaWYgcGF0Y2hlcyBlbmFibGVkLCBkaXNhYmxlCi0JCW90aGVyd2lzZQotCi0JKiBvcHJvZmlsZS5oOiB1c2Ugc3RhbmRhcmQga2VybmVsIG5hbWVzIGZvciBNU1JzLgotCi0JKiBvcHJvZmlsZV9rLmM6IG9ubHkgaW5jbHVkZSBmaXhtYXAgY29kZSBpZiBuZWNlc3NhcnkKLQotCSogY29uZmlndXJlLmluOiBidW1wIG1pbm9yIHZlcnNpb24KLQotMjAwMC0xMi0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBkZWZhdWx0IHRvIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCi0JCWFzIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5Ci0KLQkqIGRvYy9ndWlkZS5seXg6Ci0JKiBkb2MvZ3VpZGUuaHRtbDogdXBkYXRlIGRvY3VtZW50YXRpb24KLQotMjAwMC0xMi0xMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBidW1wIG1pbm9yIHZlcnNpb24KLQotCSogb3Byb2ZpbGUuYzogYWRkZWQgS0VSTl88d2hhdGV2ZXI+IHdoZXJlIG5lZWRlZCwKLQkJZXhjbHVkZSB0aGUgUGVudGl1bSBJVgkKLQotCSogcHAvb3Byb2ZwcC5jOiBhbGxvdyAib3Byb2ZwcCAtbCAvYmluL212IiBhbmQgZnJpZW5kcywKLQkJc29tZSBtaW5vciBmaXhlcwotCi0yMDAwLTEyLTEyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBNYWtlZmlsZS5pbjoKLQkqIGNvbmZpZ3VyZS5pbjogYXBwcm94aW1hdGUgd29ya2luZyBtb2R2ZXJzaW9ucwotCQlhIGxpdHRsZSBtb3JlCi0KLQkqIG9wX2V2ZW50cy5jOiBvcF9oZWxwIElOU1RfUkVUSVJFRCB3aWxsIHByaW50IG91dAotCQl0aGUgdmFsdWUgbm93Ci0KLQkqIG9wX2lvY3RsLmg6Ci0JKiBvcHJvZmlsZS5jOgotCSogb3Byb2ZpbGUuaDoKLQkqIG9wcm9maWxlX2suYzoKLQkqIGRhZS9NYWtlZmlsZS5pbjoKLQkqIGRhZS9vcF9zdGFydDoKLQkqIGRhZS9vcF9zdG9wOgotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3Byb2ZjdGwuYzoKLQkqIGRhZS9vcHJvZmN0bC5oOgotCSogZGFlL29wcm9maWxlZC5oOiBpb2N0bCgpIGRpZG4ndCBsYXN0IGxvbmcuIFJlcGxhY2VkIHdpdGgKLQkJc3lzY3Rscy4gVGhpcyBoYXMgaGFkIGEga25vY2stb24gZWZmZWN0IG9mIG1vdmluZyB0aGUKLQkJc3RhcnQvc3RvcCBtZWNoYW5pc20gaW50byB0aGUgZHJpdmVyIG9wZW4vY2xvc2Ugcm91dGluZXMKLQkgCi0JKiBkYWUvb3Byb2ZpbGVkLmM6IG11c3Qgb3BlbiBkZXZpY2VzIGluICJyZXZlcnNlIiBvcmRlciBub3cKLQkgCi0JKiBvcHJvZmlsZV9rLmM6IGZpeCBYODZfRkVBVFVSRV9QR0UgdGVzdGluZwotCSAKLQkqIG9wcm9maWxlLmM6IHVzZSBkYWVtb25pemUoKQotCQotCSogcHAvb3Byb2ZwcC5jOiBmaXggd29ya2luZyBvbiBjb25zdGFudCBhcmd2Ci0KLTIwMDAtMTEtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wcm9maWxlLmM6IHdoYXQgaWYgc2lnbmFsIGhhcHBlbnMgbGF0ZXIgPwotCSogZGFlL29wZF91dGlsLmM6IGNsYXJpZnkgb3BkX3JlYWRfZGV2aWNlKCkgQVBJCi0KLTIwMDAtMTEtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIENoYW5nZUxvZzogc3RhcnRlZCBDaGFuZ2VMb2cgKGN1ZSBnYyBrb2FuKQotCSogb3BfaW9jdGwuaDogYWRkZWQgRklYTUUgY29tbWVudAotCSogb3Byb2ZpbGUuYzogc2xpZ2h0IGNsZWFudXAgCi0JKiBvcHJvZmlsZS5oOiBjbGVhbnVwcywgdXNlIHUxNiBmb3IgZGF0YS0+Y3RycywKLQkJZGF0YS0+bmV4dAotCQotCSogcHAvb3Byb2ZwcC5jOiBhZGRlZCBjb21tZW50cwotCSogcHAvb3Byb2ZwcC5oOiBmaXhlZCAjZGVmaW5lcwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLTIwMDIgYi9DaGFuZ2VMb2ctMjAwMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRiMjBlYS4uMDAwMDAwMAotLS0gYS9DaGFuZ2VMb2ctMjAwMgorKysgL2Rldi9udWxsCkBAIC0xLDQ0MTYgKzAsMCBAQAotMjAwMi0xMi0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBNYWtlZmlsZS5hbTogbGlzdCBtb2R1bGUgZmlsZXMgZXhwbGljaXRseSwgbmVlZGVkCi0JICBmb3IgbWFrZSBkaXN0IGZyb20gc2VwYXJhdGUgb2JqZGlyCi0KLQkqIGNvbmZpZ3VyZS5pbjogbWFrZSBib3RoIHg4Ni8gYW5kIGlhNjQvIGNoYW5nZWxvZ3MKLQotMjAwMi0xMi0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBtb2R1bGUvTWFrZWZpbGUuYW06Ci0JKiBjb25maWd1cmUuaW46IHJlbW92ZSB0aGUgbG4gLXMgYXJjaCBpbiBmYXZvdXIgb2YKLQkgIHVzaW5nIC1JIGFuZCBBQ19TVUJTVAotCi0JKiBtb2R1bGUvaWE2NC9hcmNoLmg6Ci0JKiBtb2R1bGUveDg2L2FyY2guaDogcmVuYW1lIHRvIG9wX2FyY2guaAotCi0JKiB1dGlscy9NYWtlZmlsZS5hbTogZml4IG1ha2UgdW5pbnN0YWxsCi0KLTIwMDItMTItMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvTWFrZWZpbGUuYW06IGZpeCBiYWNrLWNvbXBhdCBzY3JpcHRzIGluc3RhbGwKLQkgIGZvciAyLjUga2VybmVsCi0KLTIwMDItMTItMTkgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBSZXZpc2Uga2VybmVsIHJhbmdlIGNvbXB1dGF0aW9uLgotCQotMjAwMi0xMi0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3BfdGltZS5jcHA6IG1pbm9yIGZvcm1hdGluZyBmaXgKLQkqIHBwL29wcm9mcHAuY3BwOiBmaXggIzY1NjEyMyBjb3JuZXIgY2FzZSB3aXRoIC0tc2VwYXJhdGUtc2FtcGxlCi0KLTIwMDItMTItMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiByZW1vdmUgb3Byb2ZfcmVwb3J0IC0gYnJlYWtzIG1ha2UgZGlzdAotCi0yMDAyLTEyLTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJkYi8qLmMgKi5oOgotCSogbGlidXRpbC9vcF9maWxlaW8uYzoKLQkqIGRhZS9vcGRfcHJvYy5jOiBkb3h5Z2VuIGNvbW1lbnQgZml4Ci0KLTIwMDItMTItMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmM6Ci0JKiBtb2R1bGUveDg2L2hhbW1lcl9vcF9zeXNjYWxscy5jOgotCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOiB1MTYgcGlkIHRvIHUzMiwgdGVzdGVkL2NvbXBpbGVkIG9ubHkgd2l0aAotCSAgMzIgYml0cyB4ODYKLQotMjAwMi0xMi0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IG1pbm9yIGZpeAotCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDogY29tbWVudAotCi0yMDAyLTEyLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIHBwL2Zvcm1hdF9vdXRwdXQuaDoKLQkqIHBwL291dHN5bWJmbGFnLmg6Ci0JKiBwcC9vcHBfc3ltYm9sLmg6IGFkZCBhbiBhcHBfbmFtZSBmaWVsZCBpbiBmaWxlX2xvY2F0aW9uIGFuZAotCSAgZm9ybWF0ZXIgb3B0aW9ucyBmb3IgdGhpcyBmaWVsZC4KLQotCSogcHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgotCSogcHAvcHJvZmlsZV9jb250YWluZXIuaDogYWRkX3NhbXBsZXMoKSBhZGQgYXBwX25hbWUgcGFyYW1ldGVyCi0KLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wX3RpbWVfb3B0aW9ucy5oOiBob25vciBhcHBfbmFtZSBwYXJhbWV0ZXIuIE5vIHVzZXIgdmlzaWJsZQotCSAgY2hhbmdlIGV4Y2VwdCBmb3Igb3BfdGltZSAtbCB3aGVuIHByb2ZpbGluZyB3aXRoIC0tc2VwYXJhdGUtc2FtcGxlcwotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6IHVwZGF0ZSBkb2MKLQotMjAwMi0xMi0xMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBsb3RzIG9mIGZpeGVzLiBSZW1vdmUgc3lzY3RsIGRvY3VtZW50YXRpb24KLQkgIGFzIGl0cyByZWFsbHkgYW4gaW50ZXJuYWwgZmVhdHVyZSBhbmQgd2FzIGNsdXR0ZXJpbmcgdXAKLQkgIHRoZSB1c2VyIG1hbnVhbC4KLSAKLTIwMDItMTItMTMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDogc29tZSBjbGFyaWZpY2F0aW9ucyBvbiB0aW1lciBpbnRlcnJ1cHQgCi0gCi0yMDAyLTEyLTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIG9wY29udHJvbDogc2V0IG9uZV9lbmFibGVkIGlmIHRpbWVyIGludGVycnVwdC4gTm8KLQkgIGJlaGF2aW91ciBjaGFuZ2UsIGJ1dCAic2FmZXIiCi0gCi0yMDAyLTEyLTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL2Rlcml2ZV9maWxlcy5oOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wcF9zeW1ib2wuaDoKLQkqIHBwL3Byb2ZpbGUuaDoKLQkqIHBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiB1dGlscy9NYWtlZmlsZS5hbTogc21hbGwgcGVkYW50cmllcwotIAotMjAwMi0xMi0xMCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiB1dGlscy9vcF9kdW1wXzI1OiAKLQkqIHV0aWxzL29wY29udHJvbCAoZG9fZHVtcCk6IENvcnJlY3QgVE1QRklMRS4KLQotMjAwMi0xMi0xMCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmMgKGNvbXBsZXRlX2R1bXApOiBOZXcuCi0JKiBsaWJvcC9vcF9jb25maWcuaCAoT1BfRFVNUF9TVEFUVVMpOiBOZXcuCi0JKiB1dGlscy9vcF9kdW1wXzI1OiBOZXcgZmlsZS4KLQkqIHV0aWxzL01ha2VmaWxlLmFtOiBBZGQgb3BfZHVtcF8yNS4KLQkqIHV0aWxzL29wY29udHJvbCAoZG9fZHVtcCk6IFJldmlzZSBob3cgZHVtcCBwZXJmb3JtZWQuCi0KLTIwMDItMTItMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL3Byb2ZpbGUuY3BwIDogb3Byb2ZwcCByZXBvcnRlZCBpbmNvcnJlY3RseSBjb3VudGVyIHNldHRpbmcgd2hlbgotCSAgdXNpbmcgbXVsdGlwbGUgY291bnRlci4gRml4ICM2NTExODMKLQotMjAwMi0xMi0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3BfdGltZS5jcHA6IGhvbm9yIC0tZXhjdWRlLXN5bWJvbHMuIEZpeCAjNjUxMTY1Ci0KLTIwMDItMTItMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBzdHVwaWQgc2VnZmF1bHQgd2hlbiBmaWx0ZXJpbmcgaW5jbHVkZWQgc3ltYm9scwotCi0yMDAyLTEyLTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogcmVwbGFjZSBhIDAoTrIpIGJ5IGEgMChOKSBiZWhhdmlvcgotCi0JKiBwcC9vdXRwdXRfZm9ybWF0LmNwcDogYWN0dWFsaXplIGNvbW1lbnQKLQotMjAwMi0xMi0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvcHJvZmlsZS5jcHA6IHVzZSBzY29wZWRfcHRyPGNvdW50ZXJfcHJvZmlsZV90PgotCi0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDoKLQkqIHBwL2NvdW50ZXJfcHJvZmlsZS5jcHA6IG1pbm9yIGNsZWFudXAKLQotMjAwMi0xMi0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvY291bnRlcl9wcm9maWxlLmNwcDoKLQkqIHBwL2NvdW50ZXJfcHJvZmlsZS5oOiB1c2Ugc2NvcGVkX3B0cgotCi0yMDAyLTEyLTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9jb3VudGVyX3Byb2ZpbGUuaDoKLQkqIHBwL2NvdW50ZXJfcHJvZmlsZS5jcHA6IHJlbGF4IHNhbXBsZXNfZGJfdCBzb29uZXIKLQotMjAwMi0xMi0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3BwX3NhbXBsZXNfZmlsZXMuY3BwOgotCSogcHAvb3BwX3NhbXBsZXNfZmlsZXMuaDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOgotCSogcHAvc2FtcGxlc19maWxlLmg6IHJlbmFtZSBjbGFzcyBzYW1wbGVzX2ZpbGVfdCB0byBjb3VudGVyX3Byb2ZpbGVfdAotCSAgcmVuYW1lIGNsYXNzIG9wcF9zYW1wbGVzX2ZpbGVzIHRvIHByb2ZpbGVfdAotCSAgcmVuYW1lIGNsYXNzIHNhbXBsZXNfY29udGFpbmVyX3QgdG8gcHJvZmlsZV9jb250YWluZXJfdAotCSAgcmVuYW1lIGZpbGUgdXNpbmcgdGhlIG5ldyBjbGFzcyBuYW1lIGFzIGZpbGVuYW1lIHcvbyBfdCBzdWZmaXgKLQotCSogcHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBwcC9vcF9tZXJnZS5jcHA6Ci0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6Ci0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLmNwcDoKLQkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLmg6Ci0JKiBwcC9NYWtlZmlsZS5hbTogcmVmbGVjdCBhYm92ZSBjbGFzcy9maWxlIG5hbWUgY2hhbmdlCi0KLTIwMDItMTItMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYmRiL2RiX21hbmFnZS5jOgotCSogbGliZGIvZGJfaGFzaC5oOiBkYl9pbml0KCkgbmV3IHRvIHByb3Blcmx5IGluaXRpYWxpemUgYSBzYW1wbGVzX2RiX3QKLQotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlbW9uL29wZF9pbWdlLmM6IGVhcmxpZXIgaW5pdCBhIHNhbXBsZXNfZGJfdCBvYmplY3QgdXNpbmcKLQkgIGRiX2luaXQoKSByYXRoZXIgYSBtZW1zZXQuIFRoaXMgZml4IGEgcG90ZW50aWFsIGJvZ29zaXR5IGNhdXNlIHdlCi0JICBjbG9zZWQgYSBsb3Qgb2YgdGltZSBmaWxlIGRlc2NyaXB0b3IgMAotCi0yMDAyLTEyLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvb3BkX2ltYWdlLmM6Ci0JKiBkYWUvb3BkX2ltYWdlLmg6Ci0JKiBkYWUvb3BkX2tlcm5lbC5jOiB1c2UgaGFzaCB0YWJsZSBlbnRyeSAwIGZvciBrZXJuZWwgYW5kIG1vZHVsZSBpbWFnZQotCi0yMDAyLTEyLTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wcF9zeW1ib2wuaDoKLQkqIHBwL29wcF9zeW1ib2wuY3BwOgotCSogcHAvZm9ybWF0X291dHB1dC5oOgotCSogcHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBvdGhlcnMgZnJvbSBhYm92ZTogY3JlYXRlIGZvcm1hdF9vdXRwdXQgbmFtZXNwYWNlLCBzb21lCi0JICBjbGVhbiB1cAotIAotMjAwMi0xMi0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOiByZXZlcnQgbGFzdCBjaGFuZ2UsIGl0IGJyZWFrIGRhZW1vbi4uLgotCQotMjAwMi0xMi0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOiByZS1lbmFibGUgb3BkX2NoZWNrX2ltYWdlX210aW1lKCkgaXQncyBub3QKLQkgIHBlcmZlY3QgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcKLQotCSogbGlidXRpbCsrL2N2ZXJiLmNwcDogY29tbWVudCBmaXgKLQotMjAwMi0xMi0wNCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IFJldmlzZWQgY2hlY2tpbmcgdG8gZGV0ZXJtaW5lIGtlcm5lbAotCSAgaW50ZXJmYWNlLgotCi0KLTIwMDItMTItMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYmRiL2RiX3Rlc3QuYzogbWVhc3VyZSBzeXN0ZW0gKyB1c2VyIHRpbWUKLQotCSogZGFlL29wcm9maWxlZC5jOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZQotCSogZGFlbW9uL29wcm9maWxlZC5jOiB3cml0ZV9hYmkoKSBpcyBzdGF0aWMKLQotMjAwMi0xMi0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGliZGIvZGJfc3RhdC5jOgotCSogbGliZGIvZGJfZGVidWcuYzogQWxleCB3aGlzcCBtZSB0aGFuIGEgZmV3IGNvZGUgd2FzIG5vdCA2NCBiaXRzCi0JICBzaXplX3Qgc2FmZS4KLQotMjAwMi0xMi0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOgotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2MvTWFrZWZpbGUuYW06IHJlbW92ZSByZWZlcmVuY2VzIHRvIGRlcHJlY2F0ZWQgc3R1ZmYKLSAKLTIwMDItMTItMDMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBhZGQgLS12ZXJzaW9uCi0gCi0yMDAyLTEyLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wX3N0YXJ0OgotCSogdXRpbHMvb3Bfc3RhcnRfMjU6Ci0JKiB1dGlscy9vcF9zdG9wXzI1OgotCSogdXRpbHMvb3Bfc3RvcDogcHJpbnQgZGVwcmVjYXRpb24gbm90aWNlCi0gCi0yMDAyLTEyLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wX3Nlc3Npb24uYzoKLQkqIHV0aWxzL29wX2R1bXA6IHByaW50IGRlcHJlY2F0aW9uIG5vdGljZQotIAotMjAwMi0xMi0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGRvIG5vdCBzaHV0ZG93biBvbiAtLXJlc2V0LiBTZW5kCi0JICBzaWduYWwgb24gLS1yZXNldC8tLXNhdmUgbGlrZSBvcF9zZXNzaW9uLiBUcnkgdG8gZHVtcAotCSAgbGlrZSBvcF9zZXNzaW9uIHRvIGhhY2sgcmFjZSAiZml4IgotIAotMjAwMi0xMi0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGNvbXBsYWluIG9uIG9wY29udHJvbCAtLXNhdmUgCi0gCi0yMDAyLTEyLTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOgotCSogZGFlbW9uL29wZF9rZXJuZWwuaDogbWlub3IgY2xlYW51cAotCi0JKiBsaWJhYmkvYWJpLmNwcDoKLQkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6Ci0JKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogZml4IGJhZCBpbmNsdWRlIGZpbGVuYW1lLgotCi0yMDAyLTEyLTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJkYi8uY3ZzaWdub3JlOgotCSogbGliZGIvTWFrZWZpbGUuYW06Ci0JKiBsaWJkYi8qLmMgLS0+IGRiLWhhc2gtbmFtZS5jIHRvIGRiX25hbWUuYwotCi0JKiBkYWUvb3BkX2ltYWdlLmg6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmg6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuaDogaW5jbHVkZSBkYl9oYXNoLmgKLQotMjAwMi0xMi0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IGFsbG93IGRlZmF1bHQgdmFsdWUgY2hhbmdlIHcvbwotCSAgYnJlYWtpbmcgYWN0dWFsIHVzZXIuCi0KLTIwMDItMTItMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBkYWUvb3BkX2ltYWdlLmg6Ci0JKiBkYWUvb3BkX2tlcm5lbC5jOgotCSogZGFlL29wZF9rZXJuZWwuaDoKLQkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOgotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3BkX3Byb2MuaDoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmg6Ci0JKiBwcC9vcF9tZXJnZS5jcHA6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuaDoKLQkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6Ci0JKiBwcC9NYWtlZmlsZS5hbToKLQkqIGxpYmFiaS9NYWtlZmlsZS5hbToKLQkqIGxpYmFiaS9hYmkuY3BwOgotCSogbGliYWJpL2FiaV90ZXN0LmNwcDoKLQkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOiB1c2UgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiBsaWJkYgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6Ci0JKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aToKLQkqIHV0aWxzL29wX3N0YXJ0OgotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiByZW1vdmUgbW9kdWxlIGhhc2ggdGFibGUgc2l6ZQotCi0JKiBsaWJkYi8uY3ZzaWdub3JlOiB1cGRhdGUKLQkqIGxpYmRiL01ha2VmaWxlLmFtOiBidWlsZCBsaWJkYi1oYXNoLmEKLQkqIGxpYmRiL2RiLWhhc2guaDoKLQkqIGxpYmRiL2RiLWhhc2gtZGVidWcuYzoKLQkqIGxpYmRiL2RiLWhhc2gtbWFuYWdlLmM6Ci0JKiBsaWJkYi9kYi1oYXNoLXRlc3QuYzoKLQkqIGxpYmRiL2RiLWhhc2gtaW5zZXJ0LmM6Ci0JKiBsaWJkYi9kYi1oYXNoLXN0YXQuYzoKLQkqIGxpYmRiL2RiLWhhc2gtdHJhdmVsLmM6IG5ldyBmaWxlcyBpbXBsZW1lbnRpbmcgYSBncm93YWJsZSBoYXNoIHRhYmxlCi0JKiBsaWJkYi9NYWtlZmlsZS5hbTogdXBkYXRlCi0KLQkqIGxpYm9wL29wX2NvbmZpZ18yNC5oOiByZW1vdmUgbW9kdWxlIGhhc2ggdGFibGUuIEluY3JlYXNlCi0JICBPUF9QUkVfV0FURVJNQVJLLCBPUF9ERUZBVUxUX0JVRl9TSVpFLgotCSogbGlib3Avb3BfaW50ZXJmYWNlLmg6IHN0cnVjdCBvcF9zYW1wbGUgdXBkYXRlLgotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuaDoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiByZW1vdmUgaGFzaCB0YWJsZQotCi0yMDAyLTEyLTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlIGFubm95aW5nIEFDX1JFVklTSU9OKCkKLSAKLTIwMDItMTItMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBjb3VwbGUgb2YgbWlub3IgY2xlYW51cHMKLSAKLTIwMDItMTItMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBmaXggLS1kZWluaXQsIGNvbXBsYWluIG9uIG1pc3NpbmcKLQkgIGFyZ3VtZW50Ci0gCi0yMDAyLTEyLTAyICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGRvYy9NYWtlZmlsZS5hbTogR2VuZXJhdGUgb3Bjb250cm9sLgotCSogZG9jL29wcm9maWxlLjEuaW46IEFkZCBvcGNvbnRyb2wgaW5mb3JtYXRpb24uCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBBZGQgb3Bjb250cm9sIGluZm9ybWF0aW9uLgotCi0yMDAyLTEyLTAxICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIHV0aWxzL01ha2VmaWxlLmFtOiBBZGQgb3Bjb250cm9sLgotCSogdXRpbHMvb3Bjb250cm9sOiBOZXcuCi0KLTIwMDItMTItMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdmFyaW91cyBmaWxlczogZG9uJ3QgdXNlIGRiX3RyZWUgbmFtZSBvdXRzaWRlIG9mIGxpYmRiLAotCSAgaXQncyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgZm9yIG1vc3QgY2FzZQotIAotMjAwMi0xMS0yOSAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KLQotCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jOiBmaXggZHJvcHBlZCBvdmVyZmxvd3MuCi0KLTIwMDItMTEtMjYgIEdyYXlkb24gSG9hcmUgIDxncmF5ZG9uQHJlZGhhdC5jb20+Ci0KLQkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYzogZml4IENDQ1ItY2xlYXJpbmcgbG9naWMuCi0JKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IHJlLWVuYWJsZSBQZW50aXVtIElWLgotCi0yMDAyLTExLTI1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIG1vZHVsZS94ODYvY3B1X3R5cGUuYzogZGlzYWJsZSBQZW50aXVtIElWIHRpbGwgaXQgd29ya3MKLSAKLTIwMDItMTEtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IHN0YXJ0IGEgRkFRLiBDbGFyaWZ5IGRlYnVnIGluZm9ybWF0aW9uIHZzCi0JICBzeW1ib2wgaW5mb3JtYXRpb24uIEV4cGxhaW4gd2h5IHdlIGRvbid0IHVzZSBkeW5hbWljIHN5bWJvbAotCi0yMDAyLTExLTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIHV0aWxzL29wX3N0YXJ0XzI1OiBrZXJuZWxfb25seSBpcyBhIG5vLW9wIG9uIDIuNSwgbm8gcG9pbnQKLQkgIGluIGl0IGV4aXN0aW5nCi0gCi0yMDAyLTExLTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IC9kZXYvb3Byb2ZpbGUva2VybmVsX29ubHkgZG9lc24ndCBleGlzdHMKLQkgIGluIHRpbWVyIGludCBtb2RlIChzZWNvbmQgcGFzcyB0byBmaXggIzYzNzgwNCAuLi4pCi0KLTIwMDItMTEtMTcgIEdyYXlkb24gSG9hcmUgIDxncmF5ZG9uQHJlZGhhdC5jb20+Ci0KLQkqIG1vZHVsZS94ODYvb3BfYXBpYy5oOgotCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6IHJldmVydCwgdXNlIGNvcHkgb2Yga2VybmVsIGNvZGUuCi0KLTIwMDItMTEtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfa2VybmVsLmM6Ci0JKiBkYWUvb3BkX21hcHBpbmcuYzoKLQkqIGRhZS9vcGRfcHJvYy5jOgotCSogZGFlbW9uL29wZF9pbWFnZS5jOgotCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKLQkqIGxpYm9wKysvb3BfbWFuZ2xpbmcuaDoKLQkqIGxpYnV0aWwrKy9jdmVyYi5oOgotCSogcHAvb3BwX3NhbXBsZXNfZmlsZXMuY3BwOgotCSogcHAvc2FtcGxlc19maWxlLmNwcDogZG94eWdlbiBmaXgKLQkqIGRvYy9zcmNkb2MvRG94eWZpbGU6IGJ1bXAgdG8gMC41IGN2cwotCi0yMDAyLTExLTE0ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGd1aS9NYWtlZmlsZS5hbTogVXNlICQoYmluZGlyKS4KLQkqIG9wcm9mX3JlcG9ydC9NYWtlZmlsZS5hbTogVXNlICQoYmluZGlyKS4KLQotMjAwMi0xMS0xNSAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KLQotCSogbW9kdWxlL3g4Ni9jcHV0eXBlLmM6IE1ha2UgdGhlIEFNRCBjYXNlIGEgYml0IHNpbXBsZXIuCi0KLTIwMDItMTEtMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlL01ha2VmaWxlLmFtOgotCSogZGFlbW9uL01ha2VmaWxlLmFtOiBwcm9wZXIgZml4IGZvciBjKysgbGluawotCSAgYXMgc3VnZ2VzdGVkIGJ5IEFsZXhhbmRyZSBEdXJldC1MdXR6Ci0gCi0yMDAyLTExLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBNYWtlZmlsZS5hbTogd2UgaW5zdGFsbGVkIG1vZHVsZSBpbiB0aGUgd3JvbmcgZGlyZWN0b3J5LgotCi0yMDAyLTExLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsL29wX2ZpbGUuYzogb3Bfc2ltcGxpZnlfcGF0aF9uYW1lKCk6IHN0cmlwIGxlYWRpbmcgJy8nCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6IGZpeCBpbmNvcnJlY3Qgc3BlY2lmaWNhdGlvbiBvZiB2bWxpbnV4IGZpbGUKLQkgIHRocm91Z2ggLS12bWxpbnV4PS9mb28vL2JhciBmaXhpbmcgIzYzNzgwNQotCi0yMDAyLTExLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiB1dGlscy9vcF9zdGFydF8yNTogL2Rldi9vcHJvZmlsZS9rZXJuZWxfb25seSBkb2Vzbid0IGV4aXN0cwotCSAgaW4gdGltZXIgaW50IG1vZGUuIGZpeCAjNjM3ODA0Ci0KLTIwMDItMTEtMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlLyo6Ci0JKiBkYWVtb24vKjoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6IGRveHlnZW4gYW5hbGl0eQotIAotMjAwMi0xMS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDoKLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6IHBsYWNlIGluIHBvcHQKLQluYW1lc3BhY2UgdG8gYXZvaWQgY2xhc2ggd2l0aCBnZXRvcHQuaAotCi0JKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgotCSogbGliYWJpL29wX2ltcG9ydC5jcHA6Ci0JKiBwcC9vcF9tZXJnZS5jcHA6Ci0JKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgotCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgotCSogcHAvb3Byb2ZwcF9vcHRpb25zLmNwcDoKLQkqIHBwL3Nlc3Npb24uY3BwOiBmaXggZm9yIGFib3ZlCi0gCi0JKiBsaWJhYmkvYWJpLmNwcDoKLQkqIGxpYmFiaS9hYmkuaDogZysrIDMuMiBmaXhlcwotCi0JKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogdW5pbmxpbmUgZXh0cmFjdAotCi0JKiBkYWUvTWFrZWZpbGUuYW06Ci0JKiBkYWVtb24vTWFrZWZpbGUuYW06IGZpeCBjKysgbGluayBoYWNrIGZvciAtV2Vycm9yCi0gCi0yMDAyLTExLTEzICBHcmF5ZG9uIEhvYXJlICA8Z3JheWRvbkByZWRoYXQuY29tPgotCi0JKCB0aGlzIGNoYW5nZXNldCBpcyBtb3N0bHkgRGF2ZSBKb25lcycgd29yayApCi0KLQkqIFJFQURNRToKLQkqIFRPRE86Ci0JKiBjb25maWd1cmUuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOgotCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKLQkqIGxpYm9wL29wX2NwdV90eXBlLmg6Ci0JKiBsaWJvcC9vcF9ldmVudHMuYzoKLQkqIHV0aWxzL29wX2hlbHAuYzoKLQkqIG1vZHVsZS9jb21wYXQuaDoKLQkqIG1vZHVsZS9jb21wYXQyNC5oOgotCSogbW9kdWxlL29wX3V0aWwuYzoKLQkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46Ci0JKiBtb2R1bGUveDg2L2FwaWNfY29tcGF0Lmg6Ci0JKiBtb2R1bGUveDg2L2FyY2guaDoKLQkqIG1vZHVsZS94ODYvY3B1X3R5cGUuYzoKLQkqIG1vZHVsZS94ODYvb3BfZml4bWFwLmM6Ci0JKiBtb2R1bGUveDg2L29wX25taS5jOiBtaW5vciBhZGRpdGlvbnMgZm9yIGhhbW1lciBzdXBwb3J0LgotCi0JKiBtb2R1bGUveDg2L29wX2FwaWMuYzoKLQkqIG1vZHVsZS94ODYvb3BfYXBpYy5oOiBtYWpvciBjbGVhbnVwOyBhZGQgaGFtbWVyIHN1cHBvcnQuCi0JCi0JKiBtb2R1bGUveDg2L2hhbW1lcl9lbnRyeS5TOgotCSogbW9kdWxlL3g4Ni9oYW1tZXJfaWEzMmVudHJ5LlM6Ci0JKiBtb2R1bGUveDg2L2hhbW1lcl9vcF9zeXNjYWxscy5jOgotCSogbW9kdWxlL3g4Ni9oYW1tZXJfb3Byb2ZpbGVfbm1pLlM6IG5ldyBoYW1tZXIgc3VwcG9ydCBmaWxlcy4KLQotMjAwMi0xMS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGhhY2sgYXJvdW5kIGNhc2Ugd2hlcmUgY2xlYW4gY2hlY2tvdXQKLQkgIHRoZW4gLi9jb25maWd1cmUgLS13aXRoLWtlcm5lbC1zdXBwb3J0Ci0gCi0yMDAyLTExLTEyICBHcmF5ZG9uIEhvYXJlICA8Z3JheWRvbkByZWRoYXQuY29tPgotCi0JKiBhdXRvZ2VuLnNoOiBzdXBwb3J0IG92ZXJyaWRpbmcgYXV0b3Rvb2wgYmluYXJ5IG5hbWVzLgotCi0yMDAyLTExLTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBjb25maWd1cmUuaW46IGhvbm9yIC0td2l0aC1leHRyYS1saWJzCi0KLTIwMDItMTEtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYWRkIC1XIC1XYWxsIGFuZCBvcHRpb25uYWx5IC1XZXJyb3IgdG8gdXNlciBzcGFjZQotCSAgY29tcGlsYXRpb24KLQotMjAwMi0xMS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWUvTWFrZWZpbGUuYW06Ci0JKiBkYWVtb24vTWFrZWZpbGUuYW06IGRvbid0IGRpc3QgZHVtbXkuY3BwCi0gCi0yMDAyLTExLTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZS9NYWtlZmlsZS5hbToKLQkqIGRhZW1vbi9NYWtlZmlsZS5hbTogaGFjayB0byBmaXggLS1lbmFibGUtYWJpCi0gCi0yMDAyLTExLTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIGd1aS9NYWtlZmlsZS5hbToKLQkqIG9wcm9mX3JlcG9ydC9NYWtlZmlsZS5hbTogb25seSB1c2UgWCBsaWJzIHdoZXJlCi0JICB0aGV5J3JlIGFjdHVhbGx5IHdhbnRlZAotIAotMjAwMi0xMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IG1ha2UgaW5jbHVkZWQgc3N0cmVhbSB3b3JrIGFnYWluCi0gCi0yMDAyLTExLTA4ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IFVwZGF0ZSB3aXRoIElBNjQgaW5mb3JtYXRpb24uCi0KLTIwMDItMTEtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogTWFrZWZpbGUuYW06IHJlbW92ZSBvcHJvZl9yZXBvcnQgZnJvbSBTVUJESVJTIHRvCi0JICBhdm9pZCBzZXBhcmF0ZSBvYmpkaXIgcHJvYmxlbQotIAotMjAwMi0xMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBtb3N0IE1ha2VmaWxlLmFtOiBkbyB0aGUgZGlzdF9zb3VyY2VzIHRyaWNrCi0JICBwcm9wZXJseQotIAotMjAwMi0xMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIGRhZS9NYWtlZmlsZS5hbToKLQkqIGRhZW1vbi9NYWtlZmlsZS5hbToKLQkqIHV0aWxzL01ha2VmaWxlLmFtOiBzL1dJVEhfS0VSTkVMX1NVUFBPUlQva2VybmVsX3N1cHBvcnQKLQotCSogY29uZmlndXJlLmluOgotCSogZGFlL01ha2VmaWxlLmFtOgotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlbW9uL01ha2VmaWxlLmFtOgotCSogZGFlbW9uL29wcm9maWxlZC5jOgotCSogbGliYWJpL01ha2VmaWxlLmFtOiBhcHByb3hpbWF0ZSB3b3JraW5nIC0tZW5hYmxlLWFiaSBtb3JlCi0KLTIwMDItMTEtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlbW9uL29wcm9maWxlZC5jOiBhYmkgdGlkeQotIAotMjAwMi0xMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBhdXRvZ2VuLnNoOiBiZSB2ZXJib3NlCi0gCi0JKiBndWkvTWFrZWZpbGUuYW06Ci0JKiBndWkvdWkvTWFrZWZpbGUuYW06Ci0JKiBvcHJvZl9yZXBvcnQvTWFrZWZpbGUuYW06Ci0JKiBvcHJvZl9yZXBvcnQvdWkvTWFrZWZpbGUuYW06IHJlbW92ZSBkdXBsaWNhdGUKLQkgIHNldCBNT0MvVUlDCi0gCi0yMDAyLTExLTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOiBhZGQgY29tbWVudAotCi0JKiBjb25maWd1cmUuaW46IG5vIG5lZWQgdG8gc3Vic3QgT1BST0ZJTEVfMjUKLSAKLTIwMDItMTEtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogVE9ETzogdXBkYXRlCi0gCi0JKiBjb25maWd1cmUuaW46Ci0JKiBtb3N0IE1ha2VmaWxlLmFtOiBtYWtlIHNlcGFyYXRlIG9iamRpciB3b3JrLAotCSAgZXhjZXB0IGZvciBtb2R1bGUgKGltcG9zc2libGUgSSBzdXBwb3NlKQotCi0yMDAyLTExLTA5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGF1dG9nZW4uc2g6IHVzZSAtLWZvcmVpZ24KLSAKLTIwMDItMTEtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiBmaXggLS13aXRoLWtlcm5lbC1zdXBwb3J0Ci0gCi0JKiBkb2MvLmN2c2lnbm9yZTogYWRkICouMQotCi0JKiBsaWJhYmkvTWFrZWZpbGUuYW06IGRvbid0IGluc3RhbGwgYWJpX3Rlc3QKLSAKLTIwMDItMTEtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogYWxsIGN2c2lnbm9yZTogYWRkIE1ha2VmaWxlLmluCi0gCi0JKiBndWkvTWFrZWZpbGUuYW06IG1vdmUgRVhUUkFfRElTVCBvdXQgb2YgcXQgY2hlY2sKLQotCSogZ3VpL3VpL01ha2VmaWxlLmFtOgotCSogb3Byb2ZfcmVwb3J0L3VpL01ha2VmaWxlLmFtOiBmaXggQU1fQ1BQRkxBR1MgdHlwbwotIAotMjAwMi0xMS0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBhbGwgYnVpbGQgZmlsZXM6IHVzZSBhdXRvbWFrZSwgd3JpdHRlbiBieSBQaGlsCi0gCi0yMDAyLTExLTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBjaGVjayB0aGFuIHNhbXBsZXMgZmlsZXMgdmVyc2lvbgotCSAgbWF0Y2ggZXhwZWN0ZWQgdmVyc2lvbiBmaXhpbmcgIzYzNTc1OQotCi0yMDAyLTExLTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIG1vZHVsZS9jb21wYXQuaDogCi0JKiBtb2R1bGUvY29tcGF0MjQuaDoKLQkqIG1vZHVsZS9vcF9kbmFtZS5jOiAKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiAKLQkqIG1vZHVsZS94ODYvb3BfZml4bWFwLmM6IAotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcmVtb3ZlIDIuNSBzdXBwb3J0IGZyb20gb2xkCi0JICBtb2R1bGUgY29kZQotIAotMjAwMi0xMS0wNiAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBjb25maWd1cmUuaW46IFRlc3RzIGZvciBpYTY0IGFyY2hpdGVjdHVyZS4KLQkqIGRhZS9vcGRfbWFwcGluZy5jOiBBZGRlZCBpbmNsdWRlcy4KLQkqIG9wcm9maWxlL2RhZS9vcHJvZmlsZWQuYyAob3BkX2RvX3NhbXBsZXMpOiBUeXBlY2FzdC4KLQkqIGxpYm9wL29wX2NwdV90eXBlLmMgKGNwdV9uYW1lcywgY3B1X25yX2NvdW50ZXJzKTogQWRkIElBNjQgaW5mby4KLQkqIGxpYm9wL29wX2NwdV90eXBlLmggKG9wX2NwdSk6IEFkZCBJQTY0IGVudW1zLgotCSogbGlib3Avb3BfZXZlbnRzLmM6IEFkZCBkZWZpbmVzIGZvciBJQTY0IGFuZCBJQTY0IGV2ZW50cy4KLQkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuY3BwOiBDaGFuZ2UgaW5jbHVkZSBvcmRlciB0byB3b3JrIG9uIElBNjQuCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogSW5jbHVkZSAiYXJjaC5oIiBmaWxlLgotCShldmljdF9vcF9lbnRyeSk6IFVzZSBJUlFfRU5BQkxFRCBtYWNyby4KLQkob3BfZG9fcHJvZmlsZSk6IFVzZSBJTlNUX1BUUiBhbmQgU1RBVFVTIG1hY3Jvcy4KLQkob3Byb2ZfaW5pdF9kYXRhKTogRmFjdG9yIG91dCBjb21wdXRhdGlvbi4KLQkqIG1vZHVsZS9vcF91dGlsLmMgKHJ2bWFsbG9jLCBydmZyZWUpOiBUeXBlY2FzdHMuCi0JKiBtb2R1bGUveDg2L2FyY2guaDogTmV3LgotCSogUkVBRE1FOiBVcGRhdGUuCi0JKiB1dGlscy9vcF9oZWxwLmMgKG1haW4pOiBBZGQgSUE2NCBpbmZvcm1hdGlvbi4KLQotCSogbW9kdWxlL2lhNjQvYXJjaC5oOgotCSogbW9kdWxlL2lhNjQvY3B1X3R5cGUuYzoKLQkqIG1vZHVsZS9pYTY0L0lBNjRlbnRyeS5oOgotCSogbW9kdWxlL2lhNjQvSUE2NG1pbnN0YXRlLmg6Ci0JKiBtb2R1bGUvaWE2NC9JQTY0c3lzY2FsbHN0dWIuaDoKLQkqIG1vZHVsZS9pYTY0L01ha2VmaWxlLmluOgotCSogbW9kdWxlL2lhNjQvb3BfaWE2NF9tb2RlbC5oOiAKLQkqIG1vZHVsZS9pYTY0L29wX3BtdS5jOgotCSogbW9kdWxlL2lhNjQvb3Byb2ZpbGVfc3R1YnMuUzoKLQkqIG1vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmM6IE5ldy4KLQotMjAwMi0xMS0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotIAotCSogY29uZmlndXJlLmluOiAwLjVjdnMKLQotCSogTWFrZWZpbGUuaW46IG1lbnRpb24gZG94eWZpbGUgaW4gcmVsZWFzZSBzdGVwcwotIAotMjAwMi0xMS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3BfdG9fc291cmNlLmNwcDogb3BfdG9fc291cmNlIC0tc291cmNlLXdpdGgtYXNzZW1ibHk6IGF2b2lkCi0JICB0byBiZSBjb25mdXNlZCBieSBzb3VyY2UgbGluZSB3aGljaCBsb29rIGxpa2UgYW4gYXNtIGxpbmUgYW5kCi0JICBzdG9wIGluY29ycmVjdGx5IHRoZSBvdXRwdXQuIFRoaXMgY2hhbmdlIGdvIGluIDAuNCByZWxlYXNlCi0KLTIwMDItMTEtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuNCBpbiBwcmVwIGZvciByZWxlYXNlCi0KLTIwMDItMTEtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbW9kdWxlL3g4Ni9jcHVfdHlwZS5jOiBkZXRlY3QgaWYgd2UgYWN0dWFsbHkgYXJlCi0JICB1c2luZyBIVCAoZnJvbSBBbGV4IFQpCi0gCi0yMDAyLTExLTA1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IG1hbnVhbCBmaXhlcyBmcm9tIFdpbGwgQ29oZW4KLSAKLTIwMDItMTEtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOiBmaXggbG9va3VwX2Rjb29raWUgdXNhZ2UKLSAKLQkqIGxpYmFiaS8uY3ZzaWdub3JlOiBhZGQKLSAKLTIwMDItMTEtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS94ODYvb3BfYXBpYy5jOiByZXN0b3JlIGNvcnJlY3RseSB0aGUgbHZ0cGMgcmVnaXN0ZXIKLQotMjAwMi0xMS0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfaHdfY29uZmlnLmg6IGRlZmluZSBEQ09PS0lFX1NISUZUCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IHVzZSBpdAotCi0yMDAyLTExLTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9NYWtlZmlsZS5pbjogY2xlYW51cCwgYnVpbGQgYW5kIHVzZSBsaWJwcC5hCi0KLTIwMDItMTAtMzEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvY291bnRlcl9hcnJheS5jcHA6IHVzaW5nIG5hbWVzcGFjZSBzdGQKLSAKLTIwMDItMTAtMzEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS8uY3ZzaWdub3JlOgotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlL29wZF9rZXJuZWwuYzoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWUvb3BkX3N0YXRzLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgotCSogbGlib3Avb3BfY29uZmlnXzI0Lmg6IGNsZWFudXAsIGluY2x1ZGluZyBzb21lIGxpdHRsZSBtZXJnaW5nCi0JICBmcm9tIGRhZW1vbiB0byBkYWUKLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOiBjaGFuZ2UgZGNvb2tpZSBoYXNoaW5nIGZ1bmN0aW9uCi0JCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiB0eXBvCi0KLTIwMDItMTAtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBjbGVhbnVwCi0KLQkqIHBwL2NvdW50ZXJfYXJyYXkuaDoKLQkqIHBwL2NvdW50ZXJfYXJyYXkuY3BwOiBhZGQgYSBib29sIGVtcHR5KCkgbWVtYmVyIHRvIGNvdW50ZXJfYXJyYXlfdAotCSogcHAvc2FtcGxlX2NvbnRhaW5lcl9pbXAuY3BwOiB1c2UgaXQKLQotMjAwMi0xMC0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogY29uZmlndXJlLmluOiBtaW5vciBjbGVhbnVwLiBVc2UgY29uZmlnLmggcmF0aGVyIHRoYW4gZ2NjIC1EIG9wdGlvbgotCi0JKiBsaWJ1dGlsL29wX2xpYmliZXJ0eS5oOgotCSogbGlidXRpbCsrL29wX2JmZC5oOgotCSogcHAvb3BwX3N5bWJvbC5oOiAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLQkqIGxpYnV0aWwvTWFrZWZpbGUuaW46Ci0JKiBwcC9NYWtlZmlsZS5pbjogcmVtb3ZlIEJGRF9DWFhGTEFHUwotCi0yMDAyLTEwLTI0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDogYWxsb3cgdG8gc3BlY2lmeSBleHBsaWNldGx5IG9uIHdoaWNoIHN5bWJvbCB3ZQotCSAgd2FudCB0byB3b3JrLgotCi0JKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5oOgotCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDogaGFuZGxlIC0taW5jbHVkZS1zeW1ib2wsIGZvciBhc20gb3V0cHV0IG9ubHkKLQkgIG91dHB1dCBmb3Igc3ltYm9scyB3aXRoIHNhbXBsZWxzIG9yIHNlbGVjdGVkIHN5bWJvbHMuCi0KLQkqIHBwL29wcm9mcC5jcHA6Ci0JKiBwcC9zYW1wbGVzY19vbnRhaW5lci5jcHA6IG1pbm9yIGNoYW5nZSB0byByZWZsZWN0IG9wX2JmZCBhcGkgY2hhbmdlCi0KLTIwMDItMTAtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogcmV2ZXJ0IDY0IGJpdCBkY29va2llIHBhdGNoIGNvbW1pdGVkCi0JICBhY2NpZGVudGFsbHkgd2l0aCAyMDAyLTEwLTE4IGFiaSBwYXRjaC4KLQotMjAwMi0xMC0yMSAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KLQotCSogZG9jL29wcm9maWxlLnhtbDogRGVzY3JpYmUgb3BfaW1wb3J0IGFuZCAtLWVuYWJsZS1hYmkuCi0KLTIwMDItMTAtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL01ha2VmaWxlLmluOgotCSogcHAvc2Vzc2lvbi5jcHA6Ci0JKiBwcC9zZXNzaW9uLmg6Ci0JKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBoYW5kbGUgLS1zZXNzaW9uIG9wdGlvbnMKLQotMjAwMi0xMC0xOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IEFDX0hFTFBfU1RSSU5HIGlzIHRvbyBuZXcgZm9yIG15IGF1dG9jb25mCi0gCi0yMDAyLTEwLTE4ICBHcmF5ZG9uIEhvYXJlICA8Z3JheWRvbkByZWRoYXQuY29tPgotCi0JKiBsaWJhYmkvKjogQWRkIHN1cHBvcnQgZm9yIGFiaSBkZXNjcmlwdGlvbnMsIGZvciBwb3J0YWJpbGl0eS4KLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIGRhZS9vcHJvZmlsZWQuYzogRW1pdCBhYmkgZGVzY3JpcHRpb24gb24gc3RhcnR1cC4KLQkqIGNvbmZpZ3VyZS5pbjogQWRkIC0tZW5hYmxlLWFiaSBvcHRpb24uCi0JKiBtYWtlLmNvbW1vbi5pbjoKLQkqIE1ha2VmaWxlLmluOiBTdXBwb3J0IGJ1aWxkaW5nIGxpYmFiaS8KLSAKLTIwMDItMTAtMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLSAKLQkqIHV0aWxzL29wX3N0YXJ0XzI1OiBncmVwIC1vIGRvZXMgbm90IGV4aXN0IG9uIGFueSBvZgotCSAgbXkgc3lzdGVtcyAtIGZpeAotIAotMjAwMi0xMC0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGNhbGN1bGF0ZSBzeW1ib2wgc2l6ZSBhZnRlciByZW1vdmluZyBkdXBsaWNhdGUKLQkgIHN5bWJvbC4gRml4ICM2MjU2NzgKLQotMjAwMi0xMC0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmg6Ci0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6ICBhbGxvdyB0byBwYXNzIG11bHRpcGxlIG9wdGlvbnMgdG8gb2JqZHVtcAotCi0JKiBwcC9vcHBfc3ltYm9sLmg6Ci0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IHN0b3JlIHN5bWJvbCBzaXplIGluIHN5bWJvbF9lbnRyeSBvYmplY3QuCi0KLTIwMDItMTAtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuY3BwOiBJbiBzb21lIHBhdGhvbG9naWNhbCBjYXNlIGdldGxpbmUoKQotCSAgZmluaXNoZWQgdG9vIGVhcmx5IHdoZW4gY2hpbGQgcHJvY2VzcyB3cml0ZSBvbiBzdGRlcnIuCi0KLTIwMDItMTAtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWxsKysvY2hpbGRfcmVhZGVyLmNwcDogcmVhZF9ibG9jaygpIDogY3VtdWxhdGUgc3RkZXJyCi0JICBvdXRwdXQgcmF0aGVyIHRvIG92ZXJ3cml0ZSBhbHdheXMgdGhlIHNhbWUgYnVmZmVyIHNwYWNlIC4uLgotCi0yMDAyLTEwLTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wX3N0YXJ0XzI1OiBjaGVjayBpZiBtb3VudGVkLCBmcm9tIFdpbGwgQ29oZW4KLQlBbHNvIG1rZGlyIHRoZSBtb3VudHBvaW50IAotIAotMjAwMi0xMC0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogY29uZmlndXJlLmluOiBnZXQgbGludXggaW5jbHVkZSBwYXRoIGVhcmxpZXIKLQotMjAwMi0xMC0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlbW9uL29wcm9maWxlZDogc3RyZXJybm8gLS0+IHN0cmVycm9yCi0KLTIwMDItMTAtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL29wX2V2ZW50cy5jOiB0eXBvIGluIEwyX0RCVVNfQlVTWV9SRCBQUHJvIGV2ZW50IG5hbWUKLQotMjAwMi0xMC0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogUkVBRE1FOiB1cGRhdGUgY29udHJpYgotCSogVE9ETzogdXBkYXRlCi0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGJldHRlciBlcnJvciBtZXNzYWdlLCBmaXhtZSByZW1vdmFsCi0KLQkqIGxpYmRiL2RiLWluc2VydC5jOiBmaXggc2FtcGxlcyBjb3VudCBvdmVyZmxvdy4KLQotCSogbGliZGIvZGIuaDoKLQkqIGxpYmRiL2RiLW1hbmFnZS5jOgotCSogbGliZGIvZGItZGVidWcuYzogZG9uJ3QgdXNlIHBhZ2UgemVybywgdXNlIHRoaXMgdmFsdWUgYXMgbmlsIHBhZ2UKLQkgIG51bWJlciwgYXZvaWQgdG8gdG91Y2ggbW1hcGVkIG1lbW9yeSB3aGVuIGdyb3dpbmcgdGhlIHNhbXBsZXMgZmlsZS4KLQkqIGxpYm9wL29wX2NvbmZpZy5oOiBidW1wIE9QRF9WRVJTSU9OCi0KLTIwMDItMTAtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL3NhbXBsZXNfZmlsZS5oOgotCSogcHAvc2FtcGxlc19maWxlLmNwcDogbW92ZSBjbGFzcyBvcHBfc2FtcGxlc19maWxlcyAuLi4KLQkqIHBwL29wcF9zYW1wbGVzX2ZpbGVzLmg6Ci0JKiBwcC9vcHBfc2FtcGxlc19maWxlcy5jcHA6IHRvIHRoZXNlIG5ldyBmaWxlcwotCi0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6Ci0JKiBwcC9vcHJvZnBwLmNwcDogcmVmbGVjdCBhYm92ZSBjaGFuZ2UKLQotMjAwMi0xMC0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzogZml4bWUgcmVtb3ZlCi0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IG1pbm9yIGVycm9yIG1lc3NhZ2UgaW1wcm92ZW1lbnQKLQotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9zeW1ib2xfY29udGFpbmVyLmNwcDogZml4bWUgcmVtb3ZlCi0JCi0JKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOgotCSogcHAvc2FtcGxlX2ZpbGUuaDogcHJpdmF0aXplIG1vcmUgZGF0YSBtZW1iZXJzCi0KLTIwMDItMTAtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy91dGlsaXR5Lmg6IG9wX3JhdGlvKCkgbmV3Ci0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6Ci0JKiBwcC9vcHBfc3ltYm9sLmNwcDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDogdXNlIG9wX3JhdGlvKCkKLQotMjAwMi0xMC0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOgotCSogbGlidXRpbCsrL2ZpbGVuYW1lX21hdGNoLmNwcDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOgotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOiBmaXggZGlybmFtZSgpLCBiYXNlbmFtZSgpLCByZW1vdmUgcnRyaW0oKQotCi0yMDAyLTEwLTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuaDoKLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIGxpYm9wL29wX2ludGVyZmFjZV8yNS5oOiB1cGRhdGUgdG8gbGF0ZXN0IGludGVyZmFjZQotCi0yMDAyLTEwLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvb3BkX2ltYWdlLmM6IGFsbG93IHRvIGZyZWUoaW1hZ2UtPmFwcF9uYW1lKQotCi0yMDAyLTEwLTA1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWUvb3BkX2ltYWdlLmM6IHNwYWNpbmcKLQotCSogZGFlL29wZF9tYXBwaW5nLmM6Ci0JKiBkYWUvb3BkX21hcHBpbmcuaDoga2lsbCBvcF9ncm93X21hcHMoKSBzaW1wbGlmeSBhZGRpbmcgbWFwIHBhdGgKLQkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOiB1c2Ugb3BkX2FkZF9tYXBwaW5nKCkKLQotMjAwMi0xMC0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IG1vcmUgZG9jIGluIGludGVycHJldGluZyByZXN1bHRzCi0KLTIwMDItMTAtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcF9zeW1ib2xzLmNwcDoKLQkqIHBwL29wcF9zeW1ib2xzLmg6Ci0JKiBwcC9vdXRzeW1iZmxhZy5oOiBpbXBsZW1lbnQgJ3EnICdRJyBmb3JtYXQgZmxhZ3MuIEZpeCAjNjE4MTY1Ci0JKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOiByZWplY3QgdGhlc2UgZm9ybWF0cyBmb3Igb3BfdGltZQotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2N1bWVudCB0aGVtCi0KLTIwMDItMTAtMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogTWFrZWZpbGUuaW46IHVzZSAtUCB0byBzdHJpcCBkZWFkIGRpcnMgb24gZGlzdAotIAotCSogZGFlL29wZF9wYXJzZV9wcm9jLmM6IHNwYWNpbmcKLQotMjAwMi0xMC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGliZGIvZGItKi5jLyouaDogdHlwZWRlZiB0d2Vha2luZyBmb3IgNjQgYml0cyBhcmNoIChzaWduYWxlZAotCSAgYnkgRGF2ZSBKb25lcykKLQotCSogcmVtb3ZlIGxpYmRiL0NoYW5nZUxvZywgb2xkIGVudHJpZXMgYXJlOgotCi0JMjAwMi0wNC0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQkqIGRiLWluc2VydC5jOiBjaGVjayBmb3IgY291bnQgb3ZlcmZsb3cKLQotCTIwMDItMDQtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0JKiBkYi1tYW5hZ2UuYzogcHJvcGVybHkgaGFuZGxlIGFscmVhZHkgZXhpc3RpbmcgZGIgZmlsZQotCSogZGIuaDogZXh0ZXJuICJDIiB3cmFwcGVyCi0KLQkyMDAyLTA0LTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCSogKi5jOyouaDogbWFrZSBwbHVnaW4gZGIgaW4gb3Byb2ZpbGUgbW9yZSBlYXN5LgotCi0JMjAwMi0wNC0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQkqICouYzsqLmg6IHByZWZpeCBhbGwgcHVibGljIGlkZW50aWZpZXIgd2l0aCBkYl8uCi0JICBVc2UgdHlwZWRlZiBhcyBtdWNoIEkgY2FuIHJhdGhlciB0aGFuIHBsYWluIHVuc2lnbmVkIGludC4KLQotCTIwMDItMDQtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0JKiBkYi1kZWJ1Zy5jOgotCSogZGItaW5zZXJ0LmM6Ci0JKiBkYi1tYW5hZ2UuYzoKLQkqIGRidGVzdC5jOgotCSogZGItdHJhdmVsLmM6Ci0JKiBkYi5oOiBhZGQgZmlsZSBsb2NraW5nIGFuZCBuZWNlc3Nhcnkgc3R1ZmYgdG8gYWxsb3cKLQkgIHBsdWdnaW5nIGRiIGluIGFuIGltYmVkZGVkIGZpbGUgZm9ybWF0IGxpa2Ugb3Byb2ZpbGUKLQkgIHNhbXBsZXMgZmlsZXMuCi0KLQkyMDAyLTA0LTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCSogZGItbWFuYWdlLmM6IHNpbGx5IGJ1ZyBmaXgsIGRiIHdvcmtzIG5vdyB3aXRoCi0JICBtYWxsb2MvcmVhbGxvYyBvciBtbWFwL21yZW1hcCBtZW1vcnkgYWxsb2NhdGlvbgotCSAgc2VsZWN0ZWQgYXQgY29tcGlsZSB0aW1lLgotCi0JMjAwMi0wNC0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQkqIGZpcnN0IGltcG9ydCBzdGFuZGFsb25lIGNvZGUgdG8gdGVzdCBidHJlZSBzYW1wbGVzIGZpbGVzCi0KLTIwMDItMTAtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS94ODYvb3BfbXNyLmg6IEh5cGVyIHRocmVhZGluZyAjZGVmaW5lCi0JKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IGluY2x1ZGUgb3BfbXNyLmgKLQotMjAwMi0xMC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogKi8qLmNwcDogdXNpbmcgc3RkOjp4eHg7IC0tPiB1c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0yMDAyLTEwLTAxICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0gCi0JKiBtb2R1bGUveDg2L2NwdV90eXBlLmMgKHA0X3RocmVhZHMpOiBOZXcuCi0JICAoZ2V0X2NwdV90eXBlKTogVXNlIHA0X3RocmVhZHMoKS4KLQkqIGRvYy9vcHJvZmlsZS54bWw6IEFkZCBjb21tZW50IGFib3V0IFA0IEhUIHN1cHBvcnQuCi0KLTIwMDItMTAtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOiBmaXggbm9uIC0tc2VwYXJhdGUtc2FtcGxlcy4gU3RpbGwgYnJva2UuCi0gCi0yMDAyLTEwLTAxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wL29wX2NwdV90eXBlLmg6Ci0JKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBtYWtlIHRoaXMgd29yayBvbiAyLjUvbm9ybWFsIGJvdGguCi0JICBEb2VzIG5vdCByZXNwZWN0IGRpZmZlcmVudCBtb3VudGVkIG9wcm9maWxlZnMgKHlldCkKLSAKLTIwMDItMTAtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uLy5jdnNpZ25vcmU6IGFkZAotIAotCSogbGlib3Avb3BfaW50ZXJmYWNlXzI1Lmg6IAotCSogZGFlbW9uL29wZF9pbWFnZS5oOgotCSogZGFlbW9uL29wZF9pbWFnZS5jOgotCSogZGFlbW9uL29wcm9maWxlZC5jOiBmaXh1cHMgZm9yIG5ldyBlbmNvZGVkIGludGVyZmFjZS4gRml4Ci0JICAtLXNlcGFyYXRlLXNhbXBsZXMKLQotCSogdXRpbHMvb3Bfc3RhcnRfMjU6IHN0YXJ0dXAgZml4ZXMKLSAKLTIwMDItMDktMjYgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jOiBDb3JyZWN0IFRDX0RFTElWRVJfTU9ERSBjY2NyIHNlbGVjdC4KLSAKLTIwMDItMDktMjMgIEdyYXlkb24gSG9hcmUgIDxncmF5ZG9uQHJlZGhhdC5jb20+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZW1vbi9vcF9zYW1wbGVfZmlsZXMuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIHBwL29wX3RvX3NvdXJjZS5jOgotCSogdXRpbHMvb3BfaGVscC5jOiB1OCB1bml0IG1hc2sgLT4gdTE2IHVuaXQtbWFzay4gSSdtIG5vdCBzdXJlIHRoaXMKLQkgIGNhdGNoZXMgKmFsbCogdGhlIGluc3RhbmNlcywgYnV0IGl0IGRvZXMgYXBwZWFyIHRvIGJlIGFuIGltcHJvdmVtZW50Ci0KLTIwMDItMDktMzAgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHAgKHNhbXBsZV9maWxlbmFtZSk6IENvcnJlY3QgZGVjbGFyYXRpb24uCi0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5oOiBDb3JyZWN0IGFkZF9zYW1wbGVzKCkgZGVjbGFyYXRpb24uIAotCi0yMDAyLTA5LTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDogc2FtcGxlX2ZpbGVuYW1lKCkgbmV3Ci0JCi0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5oOiBhZGRfc2FtcGxlcygpIG5ldwotCQotCSogcHAvb3BfbWVyZ2UuY3BwOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6IHVzZSB0aGVtICsgbWlub3IgY2xlYW51cAotCi0yMDAyLTA5LTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOiBmaXggIzYxNTc2MCwgaW4gcmFyZSBjYXNlCi0JICBvcHJvZnBwIGNhbGxlZCB3aXRoIGxvdCBvZiBpbnZhbGlkIGFyZ3VtZW50cyBzZWdmYXVsdAotCSAgZHVyaW5nIHRoZSBoZWxwIHByaW50aW5nLiBBbGwgcG9zdC1wcm9maWxlIHRvb2xzIGFyZQotCSAgY29uY2VybmVkIGJ5IHRoaXMgZml4LgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBzbWFsbCBpbXByb3ZlbWVudHMKLQotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGltcHJvdmUgZXJyb3IgbWVzc2FnZSB3aGVuIGJmZF9vcGVucigpIGZhaWxzLgotCQotCSogVE9ETzogdXBkYXRlCi0KLTIwMDItMDktMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfaW1hZ2UuYzoKLQkqIGRhZS9vcGRfa2VybmVsLmM6Ci0JKiBkYWUvb3BkX3BhcnNlX3Byb2MuYzoKLQkqIGRhZS9vcGRfcGFyc2VfcGFyc2UuaDoKLQkqIGRhZS9vcGRfcHJvYy5jOgotCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKLQkqIGRhZW1vbi9vcGRfa2VybmVsLmM6Ci0JKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgotCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKLQkqIGxpYm9wL29wX2V2ZW50cy5jOgotCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuYzoKLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6Ci0JKiBsaWJ1dGlsL29wX2RldmljZWlvLmM6Ci0JKiBsaWJ1dGlsL29wX2ZpbGUuYzoKLQkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDoKLQkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmg6Ci0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6Ci0JKiBwcC9vcF90b19zb3VyY2UuY3BwOiBkb3h5Z2VuIGZpeAotCi0yMDAyLTA5LTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYWRkIC0td2l0aC1rZXJuZWwtc3VwcG9ydCBmb3IgMi41Ci0gCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGZpeCBjb21tZW50LCBnaXZlIGV4aXQgbWVzc2FnZSBvbiBzaWcKLQotCSogdXRpbHMvTWFrZWZpbGUuaW46Ci0JKiB1dGlscy9vcF9zdG9wXzI1OiBhZGQgMi41IG9wX3N0b3AsIG5vIDIuNSBvcF9kdW1wCi0KLQkqIHV0aWxzL29wX3N0YXJ0XzI1OiB1c2UgZW5hYmxlCi0gCi0yMDAyLTA5LTI1ICBCb2IgTW9udGdvbWVyeSAgPGJvYm1AZmMuaHAuY29tPgotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogYXZvaWQgdG8gZHVtcCB6ZXJvIHNhbXBsZXMgY291bnQsIGZpeCAjNjE1MDg3Ci0KLTIwMDItMDktMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfaW1hZ2UuYzogZml4ICM2MTUxNjYsIGVuc3VyZSB3ZSByZWNvZ25pemUgYW4KLQkgIGV4aXN0aW5nIGltYWdlIHN0cnVjdCBzbyB3ZSBkb24ndCB0cnkgdG8gY3JlYXRlIGRiX3RyZWVfdAotCSAgb2JqZWN0IGZvciB0aGUgc2FtZSBzYW1wbGVzIGZpbGVzLgotCSogZGIvZGItZGVidWcuYzogZGlzcGxheSBwYWdlIGluZGV4IHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcKLQkqIGRiL2RiLWluc2VydC5jOiBiZSBtb3JlIHN0cmljdCBvbiBhc3NlcnRpb24KLQotMjAwMi0wOS0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZG9jL01ha2VmaWxlLmluOiByZW1vdmUgZGVwZW5kZW5jaWVzIGZvciBkb2MvaHRtbC54c2wKLQotMjAwMi0wOS0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZG9jL3hzbC8uY3ZzaWdub3JlOiBuZXcKLQkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50IHdhdGNoZG9nIHByb2JsZW0KLQotMjAwMi0wOS0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBtb2R1bGUveDg2L29wX25taS5jOiBPUF9NQVhfQ1BVUyBpcyBub3QgbmVjZXNzYXJpbHkKLQkgIHN0YXRpYyBzbyB1c2UgTlJfQ1BVUyBmb3IgYXJyYXkgaW5zdGVhZC4gRml4IGEgcHJvdG90eXBlLgotIAotMjAwMi0wOS0yMyAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KLSAKLQkqIGRvYy9vcHJvZmlsZS54bWw6IEFkZCBzb21lIFA0IGRvY3VtZW50YXRpb24uCi0JKiBjb25maWd1cmUuaW46IEFkZCBkZXRlY3Rpb24gb2YgZGlmZmVyZW50IHN0eWxlc2hlZXQgcGF0aHMuCi0JKiBkb2MveHNsL3hodG1sLnhzbC5pbjogUGFyYW1ldGVyaXplIGJ5IGNvbmZpZ3VyZSdzIHJlc3VsdC4KLQkqIGRvYy94c2wveGh0bWwueHNsOiBSZW1vdmUuCi0JKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOiBDaGFuZ2UgdW5pdCBtYXNrIGZyb20gOCB0byAxNiBiaXRzLgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogQ2hhbmdlIG51bWJlciBvZiB1bml0IG1hc2tzIGZyb20gNyB0byAxNi4KLQkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiBMaWtld2lzZS4KLQkqIGxpYm9wL29wX2NwdV90eXBlLmM6IEFkZCBQNCBDUFUgdHlwZS4KLQkqIGxpYm9wL29wX2V2ZW50cy5oOiBDaGFuZ2UgdW5pdCBtYXNrIGJpdCB3aWR0aCwgbnVtYmVyLgotCSogbGlib3Avb3BfZXZlbnRzLmM6IEFkZCBQNCBldmVudHMsIHVuaXQgbWFza3MuCi0JKiBsaWJvcF9vcF9od19jb25maWcuaDogU2V0IE9QX01BWF9DT1VOVEVSUyB0byA4LgotCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5jcHA6IENoYW5nZSB1bml0IG1hc2sgYml0IHdpZHRoLgotCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5oOiBMaWtld2lzZS4KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBBZGQgZXh0cmEgc3lzY3RscyBmb3IgY291bnRlcnMgNS04LgotCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogQWRkIG9wX21vZGVsX3A0Lm8gdG8gb2JqIGxpc3QuCi0JKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IENoYW5nZSBDUFUgaWRlbnRpZmljYXRpb24gdG8gaGFuZGxlIFA0LgotCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6IChlbmFibGVfYXBpYyk6IEFQSUNfTUFYTFZUIDwgNCwgbm90ICE9IDQuCi0JKGNoZWNrX2NwdV9vayk6IEFjY2VwdCBDUFVfUDQuCi0JKiBtb2R1bGUveDg2L29wX21vZGVsX3A0LmM6IE5ldyBmaWxlLgotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogKGdldF9tb2RlbCk6IEhhbmRsZSBDUFVfUDQuCi0JQWRkIHN5c2N0bCBuYW1lcyBmb3IgY291bnRlcnMgNS04LgotCSogbW9kdWxlL3g4Ni9vcF94ODZfbW9kZWwuaDogRGVjbGFyZSBleHRlcm4gb3BfcDRfc3BlYy4KLQotMjAwMi0wOS0yNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlL29wZF9pbWFnZS5oOgotCSogZGFlL29wZF9rZXJuZWwuYzoKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZS9wX21vZHVsZS5oOgotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlL29wZF9rZXJuZWwuYzoKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZS9wX21vZHVsZS5oOiBzbWFsbCBibGFuay9jb21tZW50IGNoYW5nZSB0byBtaW5pbWl6ZQotCSAgZGlmZiBiZXR3ZWVuIGRhZW1vbiBhbmQgZGFlIGRpci4KLQotMjAwMi0wOS0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGZpeCBmb3IgMi41IHBhdGNoIHRvIGJ1aWxkCi0gCi0yMDAyLTA5LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL01ha2VmaWxlLmluOgotCSogdXRpbHMvb3Bfc3RhcnRfMjU6IDIuNSBwYXRjaCBzdGFydCBzY3JpcHQKLSAKLTIwMDItMDktMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLSAgCi0gIAkqIGRhZS9vcGRfaW1hZ2UuYzoKLQotCSogbGlib3Avb3BfY3B1X3R5cGUuYzogZml4IGFycmF5cwotIAotMjAwMi0wOS0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcF9zdGFydDogdXNlIHJpZ2h0IHZhbHVlIGZvciBSVEMgQ1BVCi0gCi0yMDAyLTA5LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wL29wX2NvbmZpZy5oOgotCSogbGlib3Avb3BfY29uZmlnXzI0Lmg6Ci0JKiBsaWJvcC9vcF9jb25maWdfMjUuaDogc3BsaXQgY29uZmlnIGZpbGUgdXAKLSAKLQkqIGRhZW1vbi9vcGRfa2VybmVsLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGluY2x1ZGUgb3BfY29uZmlnXzI1LmgKLQotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlL29wZF9rZXJuZWwuYzoKLQkqIGRhZS9vcGRfbWFwcGluZy5jOiBpbmNsdWRlIG9wX2NvbmZpZ18yNC5oCi0KLQkqIG1vZHVsZS9vcHJvZmlsZS5oOiBpbmNsdWRlIG9wX2NvbmZpZ18yNC5oCi0gCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IGZpeCBmcm9tIGFib3ZlCi0JICAob2xkIHN1cHBvcnQgb25seSByaWdodCBub3cpCi0KLQkqIGxpYm9wL29wX2NwdV90eXBlLmg6IGludHJvZHVjZSAyLjUtcGF0Y2ggQ1BVX1RJTUVSX0lOVAotCi0yMDAyLTA5LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wL29wX2ludGVyZmFjZV8yNS5oOiAyLjUgaW50ZXJmYWNlCi0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKLQkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6Ci0KLQkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuaDogZml4IGhlYWRlcgotCi0JKiBwcC9vcF90b19zb3VyY2UuY3BwOiBjaGFuZ2UgZnJvbSBhYm92ZQotCi0yMDAyLTA5LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi86IG5ldyAyLjUgcGF0Y2ggZGFlbW9uIGNvZGUuIFdJUAotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBNYWtlZmlsZS5pbjogZGV0ZWN0IDIuNSBwYXRjaCBhbmQgYnVpbGQgYXBwcm9wcmlhdGVseQotIAotMjAwMi0wOS0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBtb2R1bGUveDg2L29wX21zci5oOiBtYXRjaCBrZXJuZWwgbmFtaW5nCi0KLQkqIG1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmM6IGZyb20gYWJvdmUKLSAKLTIwMDItMDktMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYmRiL2RiLWluc2VydC5jOiBiYWQgY3V0JnBhc3RlLiBTaGFtZSBvbiBtZSwgSSBicm9rZSB0aGUgYnVpbGQuLi4KLQotMjAwMi0wOS0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGliZGIvZGItaW5zZXJ0LmM6IGhhbmRsZSBzYW1wbGVzIGNvdW50IG92ZXJmbG93LgotCQotCSogbGliZGIvTWFrZWZpbGUuaW46IGRiLXRlc3QgbmV3IHRhcmdldCBub3QgYnVpbHQgYnkgZGVmYXVsdC4KLQkqIGxpYmRiL2RiLWRlYnVnLmM6IG1vcmUgc3RyaWN0IGNoZWNraW5nCi0JKiBsaWJkYi9kYi10ZXN0LmM6IGFsbG93IGRiLXRlc3QgdG8gYmUgdXNlZCBhcyAiZGItdGVzdCBzYW1wbGVzX2Rpci8qIgotCi0yMDAyLTA5LTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZS9vcGRfc3RhdHMuYzogbmljaWZ5Ci0gCi0JKiBtb2R1bGUveDg2L29wX21vZGVsX3Bwcm9jLmM6Ci0JKiBtb2R1bGUveDg2L29wX21vZGVsX2F0aGxvbi5jOiBkcm9wIG1hY3JvIHByZWZpeGVzLCB3cyBmaXhlcwotCi0JKiBtb2R1bGUveDg2L29wX25taS5jOiBmaXggc2F2ZS9yZXN0b3JlIHBvc3NpYmxlIGNyYXNoLCBpbml0Ci0JICBwb3NzaWJsZSBsZWFrCi0gCi0yMDAyLTA5LTIyICBQaGlsaXBwZSBFbGllIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcHByb2MuYzogZml4IHA2X3N0YXJ0KCkKLQkqIG1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmM6IGZpeCBhdGhsb25fc3RhcnQoKQotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcG1jX3NhdmVfcmVnaXN0ZXJzKCkgdHlwbyB3aGVuIGNoZWNraW5nCi0JICBudWxsIGZvciBrbWFsbG9jIHJldHVybiB2YWx1ZQotIAotMjAwMi0wOS0yMCAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KLQotCSogbW9kdWxlL3g4Ni9vcF94ODZfbW9kZWwuaDogTmV3IGludGVyZmFjZSBmb3IgTVNScy4KLQkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6IFVzZSBpbnRlcmZhY2UuCi0JKiBtb2R1bGUveDg2L29wX21vZGVsX3Bwcm8uYzogTmV3LCBjb2RlIGZyb20gb3Bfbm1pLmMuCi0JKiBtb2R1bGUveDg2L29wX21vZGVsX2F0aGxvbi5jOiBOZXcsIGNvZGUgZnJvbSBvcF9ubWkuYy4KLQkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46IFJlZmxlY3QgbmV3IGZpbGVzLgotCi0yMDAyLTA5LTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBmaXggYSBidWcgd2hlcmUgd2UgYnJva2UKLQkgIHdpdGggbXVsdGlwbGUgZXhlY3V0YWJsZSBzZWN0aW9ucyBkdWUgdG8gc29ydGluZwotCSAgdGhlIHN5bWJvbHMgd3JvbmdseS4gRml4ICM2MTcyODggYW5kIHRoZSBkdXBsaWNhdGVkCi0JICAjNjE3MjY0Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDogZml4IGFuIG91dGRhdGVkIGNvbW1lbnQKLQotCSogZGFlL29wZF9pbWFnZS5jOiBmaXggY29tbWVudAotIAotMjAwMi0wOS0xOSAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KLQotCSogbGlib3Avb3BfZXZlbnRzLmg6Ci0JKiBsaWJvcC9vcF9ldmVudHNfZGVzYy5jOiBNb3ZlIGRlc2NyaXB0aW9ucyBmcm9tIGhlcmUuCi0JKiBsaWJvcC9vcF9ldmVudHNfZGVzYy5oOgotCSogbGlib3Avb3BfZXZlbnRzLmM6IFRvIGhlcmUuCi0JKHVtXyopOiBBZGQgbmV3IHN0YXRpYyB1bml0IG1hc2tzLgotCShvcF9ldmVudHMpOiBVc2UgcG9pbnRlcnMgdG8gc3RhdGljIHVuaXQgbWFza3MuCQotCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5oOgotCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuaDoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IAotCSogdXRpbHMvb3BfaGVscC5jOiBNYWtlIGNvbXBhdGlibGUgd2l0aCBzdHJ1Y3QgY2hhbmdlcy4KLQotMjAwMi0wOS0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcF9zdGFydDogZ2l2ZSBhbiBleGFtcGxlIGZvciB1bml0IG1hc2suCi0gCi0yMDAyLTA5LTE4ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGxpYm9wL29wX21hbmdsZS5jOiAob3BfbWFuZ2xlX2ZpbGVuYW1lKTogQ29ycmVjdCBsb2dpYyBmb3IKLQkgIGdlbmVyYXRpbmcgbWFuZ2xlZCBuYW1lLiBGaXggIzYxMTEwNwotCQotMjAwMi0wOS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcC9vcF9ldmVudC5jOiBmaXggY29tbWVudAotIAotMjAwMi0wOS0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbW9kdWxlL3g4Ni9jcHVfdHlwZS5jOiBhbGxvdyB0byBmb3JjZSBSVEMgbW9kZS4KLQkqIGRhZS9vcHJvZmlsZWQuYzogY2hlY2tpbmcgd2hlbiB3ZSBuZWVkIHRvIGJhY2t1cCBzYW1wbGVzCi0JICBkaXIgaW4gUlRDIG1vZGUgd2FzIGJyb2tlbi4KLQotMjAwMi0wOS0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfY29uZmlnLmg6IHJlbW92ZSBPUF9NSU4vTUFYX1BJRCwgT1BfTUlOL01BWF9QR1JQCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBwaWRfZmlsdGVyL3BncnBfZmlsdGVyIGFjY2VwdCBhbGwgaW50ZWdlcgotCi0yMDAyLTA5LTEzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGFjaW5jbHVkZS5tNDogYW5vdGhlciB0d2VhawotIAotMjAwMi0wOS0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogTWFrZWZpbGUuaW46IG5ldmVyIHJlbW92ZSBkb2Mvb3Byb2ZpbGUuaHRtbC4KLQkqIGFjaW5jbHVkZS5tNDogc21hbGwgd29yay1hcm91bmQgZm9yIHNlZC1yZWxhdGVkIHByb2JsZW0KLQotMjAwMi0wOS0xMiAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBNYWtlZmlsZS5pbjogU2VwYXJhdGUga2VybmVsIGFuZCB1c2VyIGNvZGUgYnVpbGQgcnVsZXMuCi0KLTIwMDItMDktMTIgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLSAKLQkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuaCAoY2hpbGRfcmVhZGVyKTogQWRkIG1pc3NpbmcgInN0ZDo6Ii4KLQkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuY3BwIChlcnJvcl9zdHIpOiBEaXR0by4KLSAKLTIwMDItMDktMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogYWNpbmNsdWRlLm00OiB1cGRhdGUgZnJvbSB1cHN0cmVhbQotIAotMjAwMi0wOS0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBhY2luY2x1ZGUubTQ6IGZpeCBtb2MyL21vYyBjb25mbGljdCwgY2FjaGUgdmFsCi0gCi0yMDAyLTA5LTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvY2hpbGRfcmVhZGVyLmNwcDoKLQkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuaDogZml4IGZvciBjaGlsZCB0ZXJtaW5hdGVkIGJ5IGEgc2lnbmFsCi0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6Ci0JKiBwcC9vcF90b19zb3VyY2UuY3BwOiB1c2UgdGhlIHRoZSBuZXcgY2hpbGRfcmVhZGVyIGludGVyZmFjZQotCi0yMDAyLTA5LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGFjaW5jbHVkZS5tNDoKLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIGd1aS9NYWtlZmlsZS5pbjogcmVwbGFjZSB3aXRoIG5ldyBRdCBjb25maWd1cmUgc2NyaXB0Ci0gCi0yMDAyLTA5LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBhY2luY2x1ZGUubTQ6IGZpeCBxdDMgZGV0ZWN0aW9uIGluIHNvbWUgY29ybmVyIGNhc2UuCi0KLTIwMDItMDktMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6IENoZWNrIGF0IHJ1biB0aW1lIHdlIGRvbid0IHRyeSB0byB1c2UgYW4KLQkgIHVuaXRpYWxpemVkIHNhbXBsZXNfY29udGFpbmVyX3QuCi0KLTIwMDItMDktMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wX3RpbWUuY3BwOiBleGl0IHNvb25lciB3aGVuIG5vIHNhbXBsZXMgZmlsZXMgYXJlIGF2YWlsYWJsZS4KLQotMjAwMi0wOS0wOSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBkYWUvb3BkX2tlcm5lbC5jIChzdHJ1Y3Qgb3BkX21vZHVsZSk6IAotCSAgKGtlcm5lbF9zdGFydCwga2VybmVsX2VuZCk6Ci0JICAob3BkX3BhcnNlX2tlcm5lbF9yYW5nZSk6Ci0JICAob3BkX2Ryb3BfbW9kdWxlX3NhbXBsZSk6Ci0JICAob3BkX2ZpbmRfbW9kdWxlX2J5X2VpcCk6Ci0JICAob3BkX2hhbmRsZV9tb2R1bGVfc2FtcGxlKToKLQkgIChvcGRfaGFuZGxlX2tlcm5lbF9zYW1wbGUpOgotCSAgKG9wZF9laXBfaXNfa2VybmVsKToKLQkqIGRhZS9vcGRfa2VybmVsLmggKG9wZF9oYW5kbGVfa2VybmVsX3NhbXBsZSk6Ci0JICAob3BkX2VpcF9pc19rZXJuZWwpOgotCSogZGFlL29wZF9tYXBwaW5nLmMgKG9wZF9wdXRfbWFwcGluZyk6Ci0JKiBkYWUvb3BkX21hcHBpbmcuaCAoc3RydWN0IG9wZF9tYXApOgotCSAgKG9wZF9pc19pbl9tYXApOgotCSAgKG9wZF9tYXBfb2Zmc2V0KToKLQkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jIChvcGRfYWRkX2FzY2lpX21hcCk6Ci0JKiBkYWUvb3BkX3Byb2MuYyh2ZXJiX3Nob3dfc2FtcGxlKToKLQkgIChvcGRfcHV0X2ltYWdlX3NhbXBsZSk6Ci0JKiBkYWUvb3BkX3Byb2MuaCAob3BkX3B1dF9pbWFnZV9zYW1wbGUpOiBDaGFuZ2UgdGhpbmdzIHJlZmVycmluZwotCSAgdG8gYWRkcmVzc2VzIHRvIHVuc2lnbmVkIGxvbmcgZm9yIG9wZXJhdGlvbiBvbiA2NC1iaXQgbWFjaGluZXMuCi0gCi0yMDAyLTA5LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBhbGwgc291cmNlIGZpbGUgOiByZW1vdmUgZW1haWwgYWRkcmVzcyBmcm9tIEBhdXRob3IKLQotMjAwMi0wOS0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfaW50ZXJmYWNlLmg6IChvcF9zYW1wbGUsIG9wX25vdGUpOiBNYWtlIGNvbXBhdGlibGUgd2l0aAotCSAgNjQtYml0IHRhcmdldHMuCi0JKiBkYWUvb3BkX3Byb2MuYzogKG9wZF9wdXRfc2FtcGxlKTogQWRqdXN0IHZlcmJwcmludGYgYXJndW1lbnRzLgotCSAgKG9wZF9oYW5kbGVfZm9yayk6IERpdHRvLgotCSogZGFlL29wcm9maWxlZC5jOiAob3BkX2RvX3NhbXBsZXMpOiBEaXR0by4KLQotMjAwMi0wOS0wNCAgICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIG1vZHVsZS9vcF9ydGMuYzogbW92ZSB0byAuLi4KLQkqIG1vZHVsZS94ODYvb3BfcnRjLmM6IGhlcmUKLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjoKLQkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46IHJlZmxlY3QgZmlsZSBtb3ZlCi0KLTIwMDItMDktMDMgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogbW9kdWxlL29wcm9maWxlLmg6IChyZWdwYXJtMyk6IHJlbW92ZSwgdXNlIEZBU1RDQUxMIGluc3RlYWQuCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogKG9wX2RvX3Byb2ZpbGUpOiBFbGltaW5hdGUgcmVncGFybTMuCi0KLTIwMDItMDktMDMgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogbW9kdWxlL29wcm9maWxlLmM6IChvcHJvZl9yZWFkLCBvcHJvZl9ub3RlX3JlYWQpOiBSZXR1cm4gc3NpemVfdC4KLQotMjAwMi0wOC0zMCAgV2lsbCBDb2hlbiA8d2NvaGVuQG5jLnJyLmNvbT4KLQotCSogTWFrZWZpbGUuaW46Ci0JKiBtYWtlLmNvbW1vbi5pbjogbW9yZSBERVNURElSIGNoYW5nZQotCi0yMDAyLTA5LTAyICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPgotCi0JKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IHN1cHBvcnQgaGFtbWVyIGluIGlhMzIgbW9kZQotCi0yMDAyLTA5LTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IG1lbnRpb24gUXQgMwotIAotMjAwMi0wOC0zMCAgV2lsbCBDb2hlbiA8d2NvaGVuQG5jLnJyLmNvbT4KLQotCSogZG9jL01ha2VmaWxlLmluOiBTZXQgTUFORElSIGFuZCBDQVRESVIgYmFzZWQgb24gREVTVERJUi4KLQotMjAwMi0wOC0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wZF9rZXJuZWwuYzoKLQkqIGRhZS9vcGRfa2VybmVsLmg6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcGRfcHJvYy5oOgotCSogZGFlL29wcm9maWxlZC5jOgotCSogbGlib3Avb3BfaHdfY29uZmlnLmg6Ci0JKiBsaWJvcC9vcF9pbnRlcmZhY2UuaDoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOgotCSogbW9kdWxlL29wcm9maWxlLmg6IGNoYW5nZSB0aGUgbGF5b3V0IG9mIGRhdGEgdXNlZCBiZXR3ZWVuCi0JICBkYWVtb24vbW9kdWxlICgzMiBiaXRzIHBpZCBmaXggZm9yIDIuNS4zMSkKLQotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOiB1c2UgcGlkX3QKLQotCSogbGlidXRpbC9vcF9maWxlaW8uYzogb3BfcmVhZF9maWxlKCksIG9wX3dyaXRlX2ZpbGUoKSwgdXNlICVsdQotCSAgYW5kIGNhc3QsIHVnbGllciBzb2x1dGlvbiBidXQgbW9yZSBwb3J0YWJsZSB0aGFuIGxhc3QgZml4Ci0KLQkqIHV0aWxzL29wX3N0YXJ0OiB0eXBvCi0KLTIwMDItMDgtMTQgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AbmMucnIuY29tPgotIAotCSogbGlidXRpbC9vcF9maWxlaW8uYyAob3BfcmVhZF9maWxlKTogQ2hhbmdlIGZwcmludGYgc3BlY2lmaWVyLgotCShvcF93cml0ZV9maWxlKTogRGl0dG8uCi0KLTIwMDItMDgtMDggIFdpbGwgQ29oZW4gIDx3Y29oZW5AbmMucnIuY29tPgotCi0JKiB1dGlscy9vcF9zdGFydDogRG8gbm90IGNvbXB1dGUgcXVhbnRpdHkgb2YgY291bnRlcnMgZnJvbQotCSAgQ1BVVFlQRS4gR2V0IGNvdW50ZXIgbmFtZXMgZGlyZWN0bHkgZnJvbSAvcHJvYy9zeXMvZGV2L29wcm9maWxlLgotCi0yMDAyLTA4LTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBNYWtlZmlsZS5pbjoKLQkqIGRvYy9NYWtlZmlsZS5pbjogZGVsZXRlIGdlbmVyYXRlZCBkb2Mgb25seSBvbiBhIG1ha2UgbWFpbnRhaW5lcmNsZWFuCi0KLQkqIHBwL29wcF9zeW1ib2wuY3BwOiBzbWFsbCBjbGVhbnVwCi0KLTIwMDItMDgtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfcGFyc2UuYzoKLQkqIGRhZS9vcGRfcHJvYy5jOgotCSogZGFlL29wZF9wcm9jLmg6IGZpeCAjNTkxMjc1IHdoaWNoIGlzIGEgcmUtaGFzaCBvZiAjNTg0NzIzIHdlIGNhbgotCSAgbm93IHNhZmVseSBhc3N1bWUgdGhhbiBwcm9jLT5tYXBzWzBdIGlzIHRoZSBwcmltYXJ5IGltYWdlLgotCSAgUHJvYmxlbSByZXBvcnRlZCBieSBXaWxsaWFtIGNvaGVuCi0KLTIwMDItMDgtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBzZXBhcmF0ZV90b2tlbigpIHRyZWF0IGVzY2FwZSBzZXF1ZW5jZQotCi0yMDAyLTA3LTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBhcHBseSBtaXNzc2luZyBwYXJ0IGZyb20gdGhpcyBwYXRjaAotCSAgMjAwMi0wNy0yNyAgV2lsbCBDb2hlbiAgPHdjb2hlbkBuYy5yci5jb20+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogdXRpbC9vcHJvZl9zdGFydDoKLQkqIGRvYy9vcHJvZmlsZS54bWw6IGNsYXJpZnkgdGhhbiBwZ3JwIGZpbHRlciBpcyB0aGUgdHR5IHByb2dyYW0KLQkgIGdyb3VwIGlkCi0KLTIwMDItMDctMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL29wX2NwdV90eXBlLmM6Ci0JKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgotCSogbGlib3Avb3BfZXZlbnRzLmg6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBvcF9nZXRfY3B1X25yX2NvdW50ZXJzKCkgLyBvcF9nZXRfbnJfY291bnRlcnMoKQotCSAgbWVyZ2UKLQotCSogbW9kdWxlL2NvbXBhdDIyLmg6Ci0JKiBtb2R1bGUveDY4L29wX2FwaWMuYzogX19jbGkoKS9fX3N0aSgpIHJlbW92YWwsIHRoaXMgZml4IGJ1aWxkIHVwCi0JICB0byAyLjUuMjkKLQotCSogbW9kdWxlL29wX2ZpeG1hcC5jOiBmaXggdGVzdF9iaXQoKSB3YXJuaW5nCi0KLTIwMDItMDctMjcgIFdpbGwgQ29oZW4gIDx3Y29oZW5AbmMucnIuY29tPgotIAotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IGNvbmZpZ19zZXR0aW5nOjpjb25maWdfc2V0dGluZygpCi0JICB1c2VzIHVuYW1lIHRvIGd1ZXNzIHBhdGggdG8gdm1saW51eC4gCi0KLTIwMDItMDctMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlL29wZF9zdGF0cy5oOgotCSogZGFlL29wZF9zdGF0cy5jOiAKLQkqIGRhZS9vcGRfcHJvYy5jOiBsb2cgdW5pcXVlIHNhbXBsZXMgdnMuIHNhbXBsZSBlbnRyaWVzCi0gCi0yMDAyLTA3LTI3ICBXaWxsIENvaGVuICA8d2NvaGVuQG5jLnJyLmNvbT4KLSAKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgotCSogbGlib3Avb3BfY3B1X3R5cGUuYzogb3BfZ2V0X25yX2NvdW50ZXIoKSBuZXcsIGxvY2FsaXplCi0JICBvcF9ucl9jb3VudGVyIGNvbXB1dGF0aW9ucy4KLQotMjAwMi0wNy0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIHV0aWxzL29wX3N0YXJ0OiBmaXggIzU4NzA5Mywgc29tZSBvcHRpb24gb2Ygb3Bfc3RhcnQKLQkgIHdhcyBpbmNvcnJlY3RseSBjaGVja2VkCi0KLTIwMDItMDctMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wX3RpbWVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJvZnBwX29wdGlvbnMuY3BwOiBvdXRwdXQgZm9ybWF0IGhlYWRlciBvciBkZXRhaWxzIGFyZSBpbGxlZ2FsCi0JICBpZiBub3QgY29tYmluZWQgd2l0aCBvdGhlciBvdXRwdXQgZm9ybWF0IGZsYWcKLQotCSogcHAvb3BwX3N5bWJvbC5jcHA6Ci0JKiBwcC9vcHBfc3ltYm9sLmg6Ci0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL291dHN5bWJmbGFnLmg6IG1pbm9yIGNsZWFudXAKLQotMjAwMi0wNy0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuNGN2cwotIAotMjAwMi0wNy0yNCAgS2V2aW4gUHVldHogIDxwdWV0emtAaWFzdGF0ZS5lZHU+Ci0KLQkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiBmaXggcmVzaXplCi0gCi0yMDAyLTA3LTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsL29wX2ZpbGVpby5jOgotCSogbGlidXRpbC9vcF9maWxlaW8uaDogb3BkX2dldF9saW5rKCkgbmV3LCByZWFkIGEgc3ltbGluayBmaWxlbmFtZQotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOgotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDogb3BkX3JlYWRfbGluaygpIHVzZSB0aGUgYWJvdmUgZnVuY3Rpb24KLQotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlL29wZF9wYXJzZV9wcm9jLmM6IGZpeCAjNTg0NzIzIHdlIGNhbiBub3QgYXNzdW1lIHRoYW4gdGhlIGZpcnN0Ci0JICBtYXAgaW4gL3Byb2MvcGlkL21hcHMgaXMgdGhlIHRoZSBtYXAgZm9yIHRoZSBiaW5hcnkgaW1hZ2UKLQotMjAwMi0wNy0yMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuMwotIAotMjAwMi0wNy0xNyAgV2lsbGlhbSBDb2hlbiAgPHdjb2hlbkBuYy5yci5jb20+Ci0gCi0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IGdldCBIWiBmcm9tIHN5c2NvbmYKLQotMjAwMi0wNy0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6IHJldmVydCBwYXRjaCAyMDAyLTA3LTEzLCByZWFwcGx5Ci0JICB0aGUgc2FtZSBtb2RpZmljYXRpb24gd2l0aCBRVDIgZGVzaWduZXIgcmF0aGVyIFFUMyBkZXNpZ25lcgotCi0yMDAyLTA3LTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBNYWtlZmlsZS5pbjogc2V0IEtWRVJTIHByb3Blcmx5Ci0gCi0JKiBkYWUvb3Byb2ZpbGVkLmM6IHJlbW92ZSBlaXAgPT0gMCBjaGVja2luZwotIAotCSogbW9kdWxlL29wcm9maWxlLmM6IGRvIGNoZWNrIGluIGV2aWN0X29wX2VudHJ5KCkgaW5zdGVhZCwKLQkgIGFzIHN1Z2dlc3RlZCBieSBQaGlsaXBwZQotIAotMjAwMi0wNy0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIG1ha2UuZGVwczoKLQkqIGd1aS9NYWtlZmlsZS5pbjogZml4IGluY2x1ZGUgc2VhcmNoIHBhdGggZm9yIGRlcGVuZGVuY2llcyBnZW5lcmF0aW9uCi0KLTIwMDItMDctMTMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzogZG9uJ3QgdGhyb3cgYXdheSBsYXN0IHNhbXBsZXMgb24gc2h1dGRvd24KLQkgIG5vdGlmaWNhdGlvbgotIAotMjAwMi0wNy0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKLQkqIGd1aS9vcHJvZl9zdGFydC5iYXNlLnVpOiByZW1vdmUga2VybmVsLXJhbmdlIHNwZWNpZmljYXRpb24gVUkKLQotMjAwMi0wNy0xMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0gCi0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBsaWJvcC9vcF9pbnRlcmZhY2UuaDogCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogCi0JKiBtb2R1bGUvb3Byb2ZpbGUuaDoKLQkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6IAotCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOiByZXBsYWNlIHBhcnRpYWxfc3RvcCxxdWl0dGluZyxwcm9mX29uCi0JICB3aXRoIHNpbmdsZSBzdGF0ZSB2YXJpYWJsZSwgYW5kIGNsZWFuIHVwIGhvdyBzaHV0ZG93biBpcyB0cmlnZ2VyZWQuCi0gCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogYWx3YXlzIGluaXQgZGF0YS0+ZW50cmllcyBldGMuIGZvciBldmVyeSBDUFUKLSAKLTIwMDItMDctMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIE1ha2VmaWxlLmluOiB0eXBvIGluIGNsZWFuIHRhcmdldAotCi0JKiBtb2R1bGUvY29tcGF0Lmg6Ci0JKiBtb2R1bGUvY29tcGF0MjQuaDoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOgotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogc3VwcG9ydCBmb3Igb25saW5lL29mZmxpbmUgY3B1IGZvciAyLjUuMjMrCi0KLTIwMDItMDctMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIE1ha2VmaWxlLmluOgotCSogbW9kdWxlL01ha2VmaWxlLmluOgotCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogbW92ZSBhbGwgZ29hbCB0byB0aGUgdG9wZGlyIE1ha2VmaWxlCi0KLTIwMDItMDctMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBwcC9vcF90aW1lLmNwcDogIGVycm5vIGZvciBmaWxlIHBlcm1pc3Npb24gcHJvYmxlbSBpcwotCSAgRUFDQ0VTIG5vdCBFUEVSTSAuLi4KLQotCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6Ci0JKiBtb2R1bGUveDg2L29wX2ZpeG1hcC5jOgotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcmV2ZXJ0IHBhcnRpYWxseSB0aGUgMjAwMi0wNi0yNiBwYXRjaCwgcHJlZW1wdAotCSAgbmVlZCByYXRoZXIgdG8gYmUgZml4ZWQgYmVmb3JlL2FmdGVyIGNhbGxpbmcgdGhlCi0JICBvcF9pbnRfb3BlcmF0aW9uIGZ1bmN0aW9ucyBwb2ludGVyLgotCi0yMDAyLTA3LTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiB1c2UgPGN0aW1lPiBub3QgPHRpbWUuaD4KLQkqIGxpYnV0aWwvb3BfbGliaWJlcnR5LmM6IGRvbid0IGFzc3VtZSB0aGFuIHN0cmluZy5oIGlzIGluY2x1ZGVkCi0JICAgYnkgbGliaWJlcnR5LmggYXMgaW4gb2xkIGdjYyByZWxlYXNlCi0KLTIwMDItMDctMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBwYXNzIHZlY3RvciBieSBjb25zdCByZWZlcmVuY2UgcmF0aGVyCi0JICB0aGFuIGJ5IHZhbHVlCi0KLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IGFsd2F5cyBvdXRwdXQgZmlsZSBldmVuIGlmIHRoZSBjb3JyZXNwb25kaW5nCi0JICBzb3VyY2UgZmlsZSBkb2VzIG5vdCBleGlzdAotCi0yMDAyLTA3LTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOiBwcm92aWRlIGEgZHRvciBpbiBkZXJpdmVkIGNsYXNzCi0KLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDogLS1vdXRwdXQgLS1uby1vdXRwdXQgYXJlIG1lYW5pbmdmdWxsCi0JICBpbiBhbGwgY2FzZS4KLQotMjAwMi0wNy0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIHBwL3NhbXBsZV9jb250YWluZXJfaW1wLmNwcDoKLQkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IGZpeCBhbiBJU08gY29ybmVyIGNhc2UgKDMuNC4yICMyKQotCi0yMDAyLTA3LTA1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvZmlsZW5hbWVfbWF0Y2guaDoKLQkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5jcHA6IGNvbnN0aWZ5Ci0KLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjogc21hbGwgdHlwbwotCSogTWFrZWZpbGUuaW46IGRvIG5vdCBtYWtlIHVuaW5zdGFsbCBpbiBtb2R1bGUvYXJjaAotCi0JKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5oOgotCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDogZ2VuZXJhbCBjbGVhbnVwLCByZW1vdmUgdGhlIG91dHB1dCBjbGFzcyBhbmQKLQkgIHVzZSBmcmVlIGZ1bmN0aW9uIGluc3RlYWQsIGRveHlnZW4naXplIHRoZW0uCi0KLTIwMDItMDctMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL29wX2V2ZW50cy5jcHA6Ci0JKiBsaWJvcC9vcF9ldmVudHMuaDoKLQkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6IG9wX2NoZWNrX2V2ZW50cygpIG5vIGxvbmdlciBhY2NlcHQgMCBhcyB2YWxpZCBldmVudHMKLQotCSogcHAvb3BwX3N5bWJvbC5jcHA6IHNtYWxsIGRlYWQgY29kZSByZW1vdmFsCi0JKiBwcC9vcHBfc3ltYm9sLmg6IGRveHlnZW4gY29tbWVudCBmaXgKLQotCSogY29uZmlndXJlLmluOiBkbyBub3QgdXNlIEFDX0NIRUNLX0ZJTEU6IHRoaXMgbWFjcm8gZ2VuZXJhdGUKLQkgIHNwdXJpb3VzIHdhcm5pbmcgd2l0aCBhdXRvY29uZiAyLjIuMTMKLQotCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuaDoKLQkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6Ci0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6IGltcGxlbWVudCAtLW9iamR1bXAtcGFyYW1zPSdwYXJhbXNfc3RyaW5ncycKLQkgIGFsbG93aW5nIHRvIHBhc3MgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIG9iamR1bXAuCi0KLTIwMDItMDctMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwvb3BfZmlsZWlvLmM6IHJlbW92ZSBhIEZJWE1FLCBpdCdzIG5vdCB3b3J0aHdoaWxlIHRvIHRyeSB0bwotCSAgdXNlIEdOVSBnZXRsaW5lKCkgaW5zdGVhZCBvZiBvcF9nZXRfbGluZSgpCi0KLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wX3RpbWVfb3B0aW9ucy5oOgotCSogcHAvb3Byb2ZwcC5jcHA6IHJlbW92ZSBtaW5vciBGSVhNRQotCi0JKiBwcC9vcHBfc3ltYm9sLmg6IGNsYXNzIG91dHV0X3N5bWJvbDogY2xhcmlmeSB3aHksIHdpdGggdGhlIGN1cnJlbnQKLQkgIGRlc2lnbiwgc29tZSBmdW5jdGlvbiBhcmUgcHVibGljIG1lbWJlciByYXRoZXIgcHJpdmF0ZS4KLQotMjAwMi0wNy0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogY29uZmlndXJlLmluOgotCSogbW9kdWxlL2NvbXBhdC5oOiBmaXggY29tcGlsZSBlcnJvciB3aXRoIGtlcm5lbCA8PSAyLjIuMTcKLQotMjAwMi0wNy0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogbWlub3IgdXBhZHRlCi0KLQkqIGNvbmZpZ3VyZS5pbjogc3VwcG9ydCAyLjUuMjAKLQotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50Lmg6Ci0JKiBsaWJ1dGlsL29wX3BvcHQuYzoKLQkqIHBwL29wX21lcmdlLmNwcDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKLQkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLmNwcDoKLQkqIHBwL3N5bWJvbF9mdW5jdG9ycy5oOiBtaW5vciAjaW5jbHVkZSB0d2VhawotCi0yMDAyLTA2LTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJkYi9kYi5oOgotCSogbGliZGIvZGItbWFuYWdlLmM6IGNvbnN0aWZ5IGRiX3N5bmMoKSBwYXJhbWV0ZXIuCi0KLQkqIGRhZS9vcGRfaW1hZ2UuYzogZml4ICM1NzQ0NTkgInZtbGludXggc2FtcGxlcyBmaWxlIG5vdCBiYWNrZWQgdXAKLQkgIGJ5IG9wX3Nlc3Npb24iLiBTbWFsbCBjbGVhbnVwIGJ5IGFkZGluZyBvcGRfZm9yX2VhY2hfaW1hZ2UoKQotCi0yMDAyLTA2LTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogbGlidXRpbCsrL2ZpbGVuYW1lX21hdGNoLmNwcDoKLQkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5oOiBhZGQgYSBjb252ZW5pZW5jZSBjdG9yLgotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBvcF90aW1lLmNwcDogYmV0dGVyIGVycm9yIG1lc3NhZ2UgZm9yIEVQRVJNIHByb2JsZW0KLQkqIG9wX3RpbWVfb3B0aW9ucy5oOgotCSogb3BfdGltZV9vcHRpb25zLmNwcDogYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBleHBsaWNpdGVseSBvbiB3aGljaAotCSAgZmlsZW5hbWUgaGUgd2FudCB0byB3b3JrCi0KLTIwMDItMDYtMjkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBhY2luY2x1ZGUubTQ6Ci0JKiBjb25maWd1cmUuaW46Ci0JKiBtYWtlLmNvbW1vbi5pbjoKLQkqIGd1aS9NYWtlZmlsZS5pbjoKLQkqIGd1aS91aS9NYWtlZmlsZS5pbjogYmV0dGVyIHF0MyBoYW5kbGluZwotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6IGZpeCBvcHJvZl9zdGFydCAtLW9wdGlvbj1ibGFoCi0KLTIwMDItMDYtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIC5jdnNpZ25vcmU6IG1pbm9yIGZpeAotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBhY2luY2x1ZGUubTQ6IHVnbHkgdGVtcG9yYXJ5IGhhY2sgdG8gY29tcGlsZSB3aXRoIGtkZTMvcXQzCi0JKiBvcHJvZl9zdGFydC5jcHA6Ci0JKiBvcHJvZl9zdGFydF9jb25maWcuY3BwOiBnY2MtMy4xIGFuZCBxdDMgZml4IChxdDMgaGF2ZSBhbgotCSAgaGV4KCkgc29tZXdoZXJlIC4uLikKLQotCSogbW9kdWxlL3g4Ni9vcF9maXhtYXAuYzogbWlub3IgY29tbWVudCBmaXgKLQotMjAwMi0wNi0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIG1vZHVsZS9jb21wYXQuaDoKLQkqIG1vZHVsZS94ODYvb3BfYXBpYy5jOgotCSogbW9kdWxlL3g4Ni9vcF9maXhtYXAuYzoKLQkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6IHByZWVtcHRpYmxlIGtlcm5lbCBzdXBwb3J0LiBUaGlzIGZpeCBwb2ludAotCSAgIzIgb2Yga2VybmVsX3NyYy9Eb2N1bWVudGF0aW9uL3ByZWVtcHQtbG9ja2luZy50eHQKLQotMjAwMi0wNi0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgb3Bfc3RhcnQgLS1rZXJuZWwtcmFuZ2Ugb3B0aW9uCi0JKiBndWkvb3ByZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuaDoKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOiAKLQkqIGd1aS91aS9vcHJvZl9zdGFydF9iYXNlLnVpOgotCSogdXRpbHMvb3Bfc3RhcnQ6IGltcGxlbWVudCAtLWtlcm5lbC1yYW5nZQotCi0JKiBndWkvTWFrZWZpbGUuaW46IGZvcmNlIHVpIHN1Yi1kaXIgYnVpbGQKLQkKLTIwMDItMDYtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBjb25maWd1cmUuaW46IG5ldyBBWF9LRVJORUxfVkVSU0lPTigpICB0byBhbGxvdyBrZXJuZWwgdmVyc2lvbiBjaGVjaywKLQkgIHVzZSBpdCB0byBjaGVjayBtaW5pbWFsIGtlcm5lbCB2ZXJzaW9uIGFuZCBmaXggMi41LjE5IGJyZWFrYWdlCi0JKiBtb2R1bGUvLmN2c2lnbm9yZToKLQkqIG1vZHVsZS94ODYvLmN2c2lnbm9yZTogYWRkIC4qLmNtZAotCSogbW9kdWxlL01ha2VmaWxlLmluOgotCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogZml4IDIuNS4xOSBtYWtlIHRocm91Z2ggRVhUUkFfQ0ZMQUdTX01PRFVMRQotCSogbW9kdWxlL2NvbXBhdDIyLmg6IGZpeCBtaXNzaW5nIEJVRygpIGRlZmluaXRpb24gaW4gMi4yIGtlcm5lbAotCSogbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUzogZml4IG1pbm9yIDIuMiBjb21waWxlIHByb2JsZW0KLQotCSogcHAvb3BfdG9fc291cmNlLmNwcDogbWlub3IgY29tbWVudCBmaXgKLQotMjAwMi0wNi0xOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogdXRpbHMvb3Bfc3RhcnQ6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuaDoKLQkqIGxpYm9wL29wX2NvbmZpZy5oOgotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOgotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlL29wZF9rZXJuZWwuaDoKLQkqIGRhZS9vcGRfa2VybmVsLmM6IGRvbid0IHBhcnNlIFN5c3RlbS5tYXAgYW55IG1vcmUsCi0JICBub3cgd2Ugd29yayBiYXNlZCBvZmYgdm1saW51eCBhbG9uZQotCSAKLQkqIGRhZS9vcGRfcHJvYy5jOiBtb3ZlIGVpcF9pc19rZXJuZWwoKSBpbnRvIG9wZF9rZXJuZWwuYwotIAotMjAwMi0wNi0xOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogUkVBRE1FOgotCSogZG9jL29wcm9maWxlLnhtbDogdXBkYXRlIGNyZWRpdHMKLSAKLTIwMDItMDYtMTYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wX3RpbWVfb3B0aW9ucy5oOgotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDogbW92ZSBwcml2YXRlIHN0dWZmIG91dCBvZgotCSAgb3B0aW9ucyBuYW1lc3BhY2UKLSAKLTIwMDItMDYtMTYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL2NvdW50ZXJfdXRpbC5jcHA6IHN0b3Agd2hlbiB3ZSByZWFjaCB0aGUgZmlyc3QKLQkgIGF2YWlsYWJsZSBjb3VudGVyIGZvciBzb3J0aW5nCi0KLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IHVzZSBhYnNvbHV0ZSBzYW1wbGUgZmlsZSBuYW1lIAotCi0JKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZQotCi0yMDAyLTA2LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiB2YXJpb3VzOiByZW1vdmUgc3B1cmlvdXMgPT0gZmFsc2UsID09IHRydWUKLSAKLTIwMDItMDYtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGxpYm9wL29wX2ludGVyZmFjZS5oOgotCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5oOgotCSogbW9kdWxlL29wcm9maWxlLmM6IGRlZmluZSBhIGJ1ZmZlciBoZWFkIGZvciB0aGUgbW9kdWxlCi0JICBidWZmZXIgaW50ZXJmYWNlLCBhbmQgdXNlIGl0Ci0gCi0JKiBtb2R1bGUvTWFrZWZpbGUuaW46IG9vcHMsIGluc3RhbGwgdGhlIG1vZHVsZSBwcm9wZXJseQotIAotMjAwMi0wNi0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbGlib3AvTWFrZWZpbGUuaW46Ci0JKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgotCSogbGlib3Avb3BfY3B1X3R5cGUuYzogbmV3IGZpbGVzIHNwbGl0IG91dCwgZGVmaW5lcwotCSAgY2hhbmdlZAotCi0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogbGlib3Avb3BfZXZlbnRzLmg6IAotCSogbGlib3Avb3BfZXZlbnRzLmM6IAotCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuaDoKLQkqIGxpYm9wL29wX2V2ZW50c19kZXNjLmM6IAotCSogbGlib3Avb3BfaW50ZXJmYWNlLmg6Ci0JKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50Lmg6IAotCSogbW9kdWxlL29wcm9maWxlLmg6Ci0JKiBtb2R1bGUveDg2L29wX25taS5jOiBjaGFuZ2VzIGZyb20gYWJvdmUKLSAKLTIwMDItMDYtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIE1ha2VmaWxlLmluOiBjb21waWxlIG1vZHVsZSBlYXJseSBhcyBpdCdzIG1vc3QKLQkgIGxpa2VseSB0byBmYWlsCi0gCi0JKiBUT0RPOiB1cGRhdGUKLSAKLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBjb25maWd1cmUuaW46IHJlbW92ZSB1bm5lZWRlZCAtLXdpdGgtY2MKLSAKLQkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46IHVzZSBVU0VfU1RBTkRBUkRfQVNfUlVMRQotIAotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogYWRkIHByZWVtcHRpb24gZXhjbHVzaW9uCi0KLTIwMDItMDYtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOiByZW1vdmUgRklYTUUuIFdlIGFyZSBmaW5lIHRvCi0JICBhc3N1bWUgZmlyc3QgZW50cnkgaW4gbWFwcyBpcyB0aGUgZXhlY3V0YWJsZSwgYmVjYXVzZQotCSAgdGhpcyBpcyBleGFjdGx5IHdoYXQgdGhlIGtlcm5lbCBkb2VzIChzZWUgL3Byb2MvcGlkL2V4ZSkKLSAKLTIwMDItMDYtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wcm9mcHAuY3BwOiBjYWxsIGNoZWNrX210aW1lKCkgY29ycmVjdGx5Ci0JICBmb3Igc2hhcmVkIGxpYnJhcmllcwotIAotMjAwMi0wNi0xNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbGlib3Avb3BfZXZlbnRzLmM6IGFkZCB3YXJuaW5nCi0gCi0JKiBtb2R1bGUvTWFrZWZpbGUuaW46IGxpbmsgYWdhaW5zdCBsaWJvcC5hIGxpa2UgSSBtZWFudCB0bwotIAotCSogbW9kdWxlL29wcm9maWxlLmg6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogcmVhZGFiaWxpdHkgY2xlYW51cAotIAotMjAwMi0wNi0xMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbW9kdWxlL2NvbXBhdC5oOgotCSogbW9kdWxlL3g4Ni9hcmNoX2NvbXBhdC5oOiByZW1vdmUgYXJjaF9jb21wYXQuaCwKLQkgIGFkZCBCVUdfT04oKQotCi0JKiBtb2R1bGUvb3BfdXRpbC5jOiByZXR1cm4gLUVJTlZBTCBub3QgMSBmcm9tIGNoZWNrX3JhbmdlKCkgCi0KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiB1c2UgQlVHX09OKCkgaW4gcmVsZWFzZSBmdW5jdGlvbnMsCi0JICBmaXggdXNlIG9mIGNoZWNrX3JhbmdlLCByZW1vdmUgc3B1cmlvdXMgY2hlY2sgZm9yIG1hbGxvYwotCSAgZmFpbHVyZSAoYWxyZWFkeSBjaGVja2VkKQotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuaDogY2xhcmlmeSBBUEkgCi0KLQkqIG1vZHVsZS94ODYvb3BfbXNyLmg6IG5ldyBmaWxlLCBNU1IgYmFjay1jb21wYXQKLQotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzoKLQkqIG1vZHVsZS94ODYvb3BfYXBpYy5jOiB1c2UgaXQKLSAKLTIwMDItMDYtMTAgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotIAotCSogY29uZmlndXJlLmluOiByZW1vdmUgb2xkIGNoZWNrcyB3ZSBkb24ndCBuZWVkLgotCSAgQWRkIHRvIEVYVFJBX0NGTEFHUyBub3QgS0NGTEFHUyAKLQotCSogbW9kdWxlL01ha2VmaWxlLmluOiB1cGRhdGUgdG8gdXNlIFJ1bGVzLm1ha2UgYW5kCi0JICBrZXJuZWwgcnVsZXMuCi0gCi0JKiBtb2R1bGUvb3BfaW5pdC5jOiBtYWtlIHRoaXMgb25lIGluY2x1ZGUga2VybmVsIG1vZHZlcnNpb24KLQkgIHN0dWZmIGZvciAyLjIKLSAKLQkqIG1vZHVsZS9vcHJvZmlsZS5oOiByZW1vdmUgX19jYWNoZWxpbmVfYWxpZ25lZCBpbiB3cm9uZyBwbGFjZQotCi0JKiBtb2R1bGUveDg2L01ha2VmaWxlLmluOiB1c2UgUnVsZXMubWFrZSAoaGFja3kpCi0KLQkqIG1vZHVsZS94ODYvYXJjaC5tYWs6IHJlbW92ZQotIAotCSogbW9kdWxlL3g4Ni9vcF9maXhtYXAuYzogYWRkIG1pc3NpbmcgaGVhZGVyCi0gCi0JKiBtb2R1bGUveDg2L29wX3N5c2NhbGxzLmM6IG15X3N5c19leGl0IGlzIG5vdCBzdGF0aWMKLSAKLTIwMDItMDYtMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9jdmVyYi5oOgotCSogbGlidXRpbCsrL2N2ZXJiLmNwcDogY3ZlcmIgb3N0cmVhbSBpbml0aWFsaXphdGlvbnMKLQkqIHBwL29wX21lcmdlLmNwcDoKLQkqIHBwL29wX3RpbWVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJvZnBwX29wdGlvbnMuY3BwOiB1c2UgaXQKLQotCSogdXRpbHMvTWFrZWZpbGUuaW46IGZpeCBhIHR5cG8gaW4gbGliIGRlcGVuZGVuY2llcwotCi0yMDAyLTA2LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogcHAvc2FtcGxlc19jb250YWluZXIuY3BwOgotCSogcHAvc2FtcGxlc19jb250YWluZXIuaDogYWRkIGFuIGhpbnQgcGFyYW1ldGVyIHRvIGFkZCgpCi0JICB1c2VkIHRvIGF2b2lkIHJlY29yZGluZyBhbGwgc2FtcGxlcy4KLQkqIHBwL29wcm9mcHAuY3BwOiB1c2UgaXQgZm9yIHRoZSAtcyBvcHRpb24uIFRoaXMgY2hhbmdlCi0JICBzbGlnaHRseSBiZWhhdmlvciBvZiBvcHJvZnBwIC1zLCBub3cgcGVyY2VudCBhcmUgcmVsYXRpdmUKLQkgIHRvIHRoZSBzZWxlY3RlZCBzeW1ib2wsIG5vdCB0byB0aGUgd2hvbGUgc2FtcGxlcyBmaWxlLgotCSAgUGVyZm9ybWFuY2Ugb2Ygb3Byb2ZwcCAtcyBhcmUgaW1wcm92ZWQgYSBsb3QgKDQwIHRpbWVzIG9uIHZtbGludXgpCi0KLQkqIHV0aWxzL01ha2VmaWxlLmluOiBtaXNzaW5nIGxpYnMgZGVwZW5kZW5jaWVzCi0KLTIwMDItMDYtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL01ha2VmaWxlLmluOgotCSogZGFlL01ha2VmaWxlLmluOgotCSogZ3VpL01ha2VmaWxlLmluOiB1cGRhdGUgZGVwZW5kZW5jaWVzIGZvciBsaWJyYXJ5Ci0KLTIwMDItMDYtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6Ci0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDogbWVtb3J5IGxlYWsgZml4Ci0KLTIwMDItMDYtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9NYWtlZmlsZS5pbjogZml4IGJmZCBjb21waWxhdGlvbiBwcm9ibGVtCi0JICB3aXRoIGdjYyA+PSAzLjAgYW5kIG9sZCBiZmQuaAotCSogbW9kdWxlL01ha2VmaWxlLmluOgotCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogZml4IC1XZXJyb3IgdHlwbwotCSogcHAvb3BfbWVyZ2UuY3BwOgotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6IHdvcmsgYXJvdW5kIGZvciBjdmVyYgotCSAgaW5pdGlhbGlzYXRpb25zIGFuZCBnY2MgMi45MS4KLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IHVzZSB0aGUgcmlnaHQgY29tYW5kIGxpbmUgYXJndW1lbnQuCi0KLTIwMDItMDYtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBsaWJ1dGlsKysvdXRpbGl0eS5oOiBmaXggc3R1cGlkIGJ1ZywgYWRkIHNjb3BlZF9hcnJheQotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogdXNlIGl0Ci0KLTIwMDItMDYtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGxpYnV0aWwrKy91dGlsaXR5Lmg6IGFkZCBhIHNjb3BlZF9wdHIKLQotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6Ci0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IHVzZSBpdAotCi0yMDAyLTA2LTA3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BkX2tlcm5lbC5jOiByZW1vdmUgc29tZSBkdXBsaWNhdGUgY29kZQotIAotMjAwMi0wNi0wNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3BwX3N5bWJvbC5jcHA6IGtpbGwgbGFzdCBvZiB0aGUgYWNjdXJzZWQgY2hhcgotCSAgYXJyYXlzCi0KLTIwMDItMDYtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgotCSogbGlidXRpbCsrL29wX2JmZC5oOgotCSogbGlidXRpbCsrL3ZlcmJvc2Vfb3N0cmVhbS5oOgotCSogcHAvb3BfbWVyZ2UuY3BwOgotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5jcHA6IHJlbW92ZSB2ZXJib3NlX29zdHJlYW0KLQkgIGluIGZhdm91ciBvZiBhIG11Y2ggc2ltcGxlciBzb2x1dGlvbgotIAotCSogbW9kdWxlL29wcm9maWxlLmg6IHJlbW92ZSBkZWFkIHByb3RvdHlwZQotIAotMjAwMi0wNi0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjoKLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjogcmVtb3ZlIDIuOTEgY2hlY2ssIGFkZCAyLjUgY2hlY2sKLSAKLQkqIG1vZHVsZS9jb21wYXQyMi5oOgotCSogbW9kdWxlL2NvbXBhdDI0Lmg6Ci0JKiBtb2R1bGUvYXBpY191cF9jb21wYXQuaDogbW92ZSB0byAuLi4KLQotCSogbW9kdWxlL3g4Ni9vcF9hcGljLmg6Ci0JKiBtb2R1bGUveDg2L2FwaWNfY29tcGF0Lmg6IC4uLiBoZXJlCi0gCi0JKiBtb2R1bGUvY29tcGF0Lmg6IG1vdmUgYXJjaCBzdHVmZiB0byAuLi4KLQotCSogbW9kdWxlL3g4Ni9hcmNoX2NvbXBhdC5oOiAuLi4gaGVyZQotIAotMjAwMi0wNi0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogY29uZmlndXJlLmluOiByZW1vdmUgZ2NjIDIuOTEgY2hlY2sKLQkqIG1ha2UuY29tbW9uLmluOiB1c2UgLVdlcnJvciBldmVuIGZvciBnY2MgMi45MQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgotCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IHNtYWxsIHR3ZWFrIGZvciBnY2MgMi45MSBhbmQgLVdlcnJvcgotCi0yMDAyLTA2LTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvb3BfcnRjLmM6IHVzZSBjaGVja19yYW5nZQotIAotMjAwMi0wNi0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBmaXggdHlwbyBzbyBub24tMi45MSBpcyBkZXRlY3RlZAotIAotCSogbW9kdWxlL01ha2VmaWxlLmluOgotCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogZW5hYmxlIC1XZXJyb3IKLQotCSogbW9kdWxlL29wX2RuYW1lLmM6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuaDoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOgotCSogbW9kdWxlL29wX3V0aWwuaDoKLQkqIG1vZHVsZS9vcF91dGlsLmM6Ci0JKiBtb2R1bGUveDg2L29wX25taS5jOiBhZGQgb3BfdXRpbC5oLCBtYWtlCi0JICBvcF9jaGVja19yYW5nZSBhIGZ1bmN0aW9uIGNoZWNrX3JhbmdlCi0gCi0yMDAyLTA2LTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvTWFrZWZpbGUuaW46IHVzZSBAQ0NALCBhZGQgY2xlYW4gZm9yIHg4NgotCi0JKiBtb2R1bGUvY29tcGF0MjQuaDogYWRkIHBhdGhfaGFzaCBwcm90b3R5cGUgCi0gCi0JKiBtb2R1bGUveDg2L01ha2VmaWxlLmluOiB1c2UgQENDQCwgbWFrZSBzdXJlCi0JICBvcHRpb25zIGdldCBwaWNrZWQgdXAKLSAKLTIwMDItMDYtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGxpYnV0aWwvb3BfZ2V0X3RpbWUuYzogcmV0dXJuICIiIG5vdCBOVUxMCi0JICBvbiBmYWlsdXJlLCBzbyB3ZSBkb24ndCB0cnkgdG8gcHJpbnRmIE5VTEwKLSAKLQkqIG1vZHVsZS9vcF9kbmFtZS5jOiBkb19wYXRoX2hhc2hfMl80IHNob3VsZCBub3QgYmUgc3RhdGljIG5vdyAKLQotCSogbW9kdWxlL29wcm9maWxlLmM6IGFkZCBjb25zdAotIAotMjAwMi0wNi0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbW9kdWxlL3g4NjogbmV3IGRpcmVjdG9yeSwgZm9yIG5vdyBzb21lIHNtYWxsIHBvcnRpb24KLQkgIG9mIHg4NiBkZXBlbmRhbnQgY29kZSByZW1haW5zIGluIG1vZHVsZS8qIG1haW5seSBpbgotCSAgb3Byb2ZpbGUuW2NoXS4gVGhpcyBwYXRjaCBhbHNvIGRvbid0IHRha2UgY2FyZSBhYm91dAotCSAgbGlib3AvKiB3aGljaCBhcmUgYXJjaGl0ZWN0dXJlIGRlcGVuZGFudAotCi0JKiBtb2R1bGUvb3BfYXBpYy5jOgotCSogbW9kdWxlL29wX25taS5jOgotCSogbW9kdWxlL29wX3N5c2NhbGxzLmM6Ci0JKiBtb2R1bGUvb3Byb2ZpbGVfbm1pLlM6Ci0JKiBtb2R1bGUvb3BfZml4bWFwLmM6IG1vdmUgdGhpcyBmaWxlIHRvIC4uLgotCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6Ci0JKiBtb2R1bGUveDg2L29wX25taS5jOgotCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOgotCSogbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUzoKLQkqIG1vZHVsZS94ODYvb3BfZml4bWFwLmM6IHRoZXNlIG5ldyBmaWxlcwotCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6IHg4NiBzdHVmZgotCSogbW9kdWxlL3g4Ni9hcmNoLm1hazogc3BlY2lmaWMgYXJjaCBtYWtlZmlsZSBmcmFnbWVudAotCSogbW9kdWxlL29wX2luaXQuYzogbW92ZSBjcHUgZGV0ZWN0aW9uIGNvZGUgLi4uCi0JKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IGhlcmUKLQkqIG1vZHVsZS9NYWtlZmlsZTogaGFuZGxlIGFyY2ggc3ViLWRpcgotCSogbW9kdWxlL3g4Ni8uY3ZzaWdub3JlOiBuZXcKLQkqIG1vZHVsZS9vcHJvZmlsZS5oOiBkZWNsYXJlIHRoZSBpbnRlcmZhY2UgdG8gdGhlCi0JICBhcmNoaXRlY3R1cmUgZGVwZW5kYW50IGNvZGUKLQotCSogTWFrZWZpbGUuaW46Ci0JKiBjb25maWd1cmUuaW46IGhhbmRsZSBtb2R1bGUvYXJjaAotCSogbWFrZS5jb21tb24uaW46IGF2b2lkIC1XZXJyb3Igd2l0aCBnY2MgMi45MQotCSogbWFrZS5kZXBzOiBzbWFsbCB0d2VhayBhbGxvd2luZyB0byB1c2UgaXQgaW4gbW9kdWxlCi0KLTIwMDItMDYtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogdXNlIENYWElOQ0xVREVTIG5vdCBDWFhGTEFHUwotCWZvciBpbmNsdWRpbmcgc3N0cmVhbQotIAotCSogbWFrZS5jb21tb24uaW46IHJlbW92ZSBkdXBsaWNhdGUgLWcgLU8yCi0gCi0JKiBpbmNsdWRlL3NzdHJlYW06IGZpeCBjb21waWxlciB3YXJuaW5nIHRvCi0JICBhbGxvdyAtV2Vycm9yCi0gCi0JKiBsaWJ1dGlsL29wX2ZpbGUuYzoKLQkqIGxpYnV0aWwvb3BfZmlsZWlvLmg6Ci0JKiBsaWJ1dGlsL29wX2ZpbGVpby5jOiBtb3JlIEFQSSBmaXhhZ2UKLQotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBhZGQgbWlzc2luZyBoZWFkZXIKLSAKLTIwMDItMDYtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1ha2UuY29tbW9uLmluOiBlbmFibGUgLVdlcnJvciBmb3IgQ1ZTIGJ1aWxkcwotCShub3QgaW4gbW9kdWxlLykKLSAKLQkqIGRhZS9vcGRfaW1hZ2UuYzoKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGxpYnV0aWwvb3BfZGV2aWNlaW8uaDoKLQkqIGxpYnV0aWwvb3BfZGV2aWNlaW8uYzogQVBJIGZpeGVzCi0KLQkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmg6Ci0JKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6IAotCSogbGlidXRpbCsrL29wX2JmZC5oOgotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6Ci0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOiAKLQkqIGxpYnV0aWwvb3BfbG9ja2ZpbGUuYzogCi0JKiBsaWJ1dGlsL29wX2ZpbGUuaDoKLQkqIGxpYnV0aWwvb3BfZmlsZS5jOiBhZGQgb3BfZmlsZV9yZWFkYWJsZSgpLAotCSAgQVBJIGZpeGVzIAotIAotMjAwMi0wNi0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogdXRpbHMvb3Bfc3RvcDogZmFpbCBlYXJseSBpZiAhIHJvb3QKLSAKLTIwMDItMDYtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwLyo6IHMvT3V0cHV0U3ltYm9sL291dHB1dF9zeW1ib2wvLAotCSAgcy9PdXRTeW1iRmxhZy9vdXRzeW1iZmxhZy8KLSAKLTIwMDItMDYtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wX3RpbWVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcF90aW1lX29wdGlvbnMuaDoKLQkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmg6Ci0JKiBwcC9vcHJvZnBwX29wdGlvbnMuaDogZG9jdW1lbnQKLQotMjAwMi0wNi0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBwcC9jb3VudGVyX3V0aWwuaDoKLQkqIHBwL2NvdW50ZXJfdXRpbC5jcHA6IG1vdmUgZnJvbSAuLi4KLQotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogLi4uIGhlcmUgKHJlbW92ZWQpCi0KLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDogCi0JKiBwcC9vcF90b19zb3VyY2UuY3BwOiAKLQkqIHBwL29wcF9zeW1ib2wuaDogCi0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL29wcm9mcHBfb3B0aW9ucy5oOiAKLQkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6IAotCSogcHAvc2FtcGxlc19jb250YWluZXIuaDogCi0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IAotCSogcHAvc2FtcGxlc19maWxlLmg6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBjaGFuZ2VzIGZyb20gYWJvdmUKLQotMjAwMi0wNi0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDoKLQkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDogbW92ZSBvcHJvZmlsZSBzcGVjaWZpYyBzdHVmZgotCSAgdG8gLi4uCi0gCi0JKiBsaWJvcCsrL29wX21hbmdsaW5nLmg6Ci0JKiBsaWJvcCsrL29wX21hbmdsaW5nLmNwcDogLi4uIGhlcmUKLQotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBwcC9vcF9iZmQuaDoKLQkqIHBwL29wX2JmZC5jcHA6IG1vdmUgdG8gLi4uCi0gCi0JKiBsaWJ1dGlsKysvTWFrZWZpbGUuaW46Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogLi4uIGhlcmUgCi0gCi0JKiBsaWJ1dGlsKysvdmVyYm9zZV9vc3RyZWFtLmg6IGFkZAotIAotCSogcHAvb3BfbWVyZ2UuY3BwOgotCSogcHAvb3BfdGltZS5jcHA6IAotCSogcHAvb3BfdGltZV9vcHRpb25zLmg6Ci0JKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDogCi0JKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5oOgotCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgotCSogcHAvb3Byb2ZwcC5oOiAKLQkqIHBwL29wcm9mcHAuY3BwOiAKLQkqIHBwL29wcm9mcHBfb3B0aW9ucy5oOgotCSogcHAvb3Byb2ZwcF9vcHRpb25zLmNwcDoKLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuaDogdmFyaW91cyBjaGFuZ2VzIGFuZAotCSAgY2xlYW51cHMgZnJvbSBhYm92ZQotIAotCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDogcmVtb3ZlIG5vdyBkdXBsaWNhdGUgY29kZQotIAotMjAwMi0wNi0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDoKLQkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDogc2ltcGxpZnkgYnV0IGRvbid0Ci0JICBicmVhayBhbHJlYWR5IGFic29sdXRlIHBhdGhzLCByZW1vdmUgZGVhZCBjb2RlCi0gCi0JKiBwcC9vcF90aW1lX29wdGlvbnMuaDoKLQkqIHBwL29wX3RpbWVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcF90aW1lLmNwcDogcmVtb3ZlIGRlYWQgY29kZQotIAotCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuaDogCi0JKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJvZnBwX29wdGlvbnMuaDoKLQkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6IHZhcmlhYmxlIG5hbWUgdHdlYWtzCi0KLQkqIHBwL01ha2VmaWxlLmluOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDogCi0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL29wcm9mcHAuaDoKLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6Ci0JKiBwcC9kZXJpdmVfZmlsZXMuaDoKLQkqIHBwL2Rlcml2ZV9maWxlcy5jcHA6IGZhY3RvciBjb21tYW5kLWxpbmUgZmlsZQotCSAgZGVyaXZhdGlvbiBndWVzc2luZyBvdXQKLSAKLTIwMDItMDYtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuY3BwOgotCSogcHAvb3BfYmZkLmg6IAotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDogCi0JKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5jcHA6IAotCSogcHAvb3Byb2ZwcF9vcHRpb25zLmNwcDogZml4ZXMgZm9yIHN0ZAotIAotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBwcC9vcHJvZnBwLmg6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOgotCSogcHAvc2FtcGxlc19maWxlLmNwcDoKLQkqIHBwL29wcF9zeW1ib2wuaDoKLQkqIHBwL2NvdW50ZXJfYXJyYXkuaDoKLQkqIHBwL2NvdW50ZXJfYXJyYXkuY3BwOiBmYWN0b3Igb3V0IGNvdW50ZXJfYXJyYXkKLSAKLTIwMDItMDYtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wcm9mcHAuaDoKLQkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiByZW1vdmUgYSBzYW5pdHkgY2hlY2sKLQkgIHRoYXQgd2Fzbid0IHBhcnRpY3VsYXJseSB1c2VmdWwKLSAKLTIwMDItMDYtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGxpYm9wKysvTWFrZWZpbGUuaW46Ci0JKiBsaWJvcCsrL29wX21hbmdsaW5nLmg6Ci0JKiBsaWJvcCsrL29wX21hbmdsaW5nLmNwcDoKLQkqIHBwL29wX21lcmdlLmNwcDoKLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6IAotCSogcHAvb3Byb2ZwcC5oOiAKLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IG1vdmUgbWFuZ2xlL3VubWFuZ2xlIHRvIGxpYm9wKysKLSAKLTIwMDItMDYtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL01ha2VmaWxlLmluOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wcF9zeW1ib2wuY3BwOgotCSogcHAvZGVtYW5nbGVfc3ltYm9sLmg6Ci0JKiBwcC9kZW1hbmdsZV9zeW1ib2wuY3BwOiBtb3ZlIHRoaXMgLi4uCi0gCi0JKiBsaWJ1dGlsKysvTWFrZWZpbGUuaW46Ci0JKiBsaWJ1dGlsKysvZGVtYW5nbGVfc3ltYm9sLmg6Ci0JKiBsaWJ1dGlsKysvZGVtYW5nbGVfc3ltYm9sLmNwcDogLi4uIHRvIGhlcmUKLQotMjAwMi0wNi0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbWFrZS5jb21tb24uaW46IAotCSogbWFrZS5kZXBzOiBzcGxpdCBvdXQgQ1hYSU5DTFVERVMKLSAKLQkqIE1ha2VmaWxlLmluOgotCSogY29uZmlndXJlLmluOgkKLQkqIGxpYm9wKysvTWFrZWZpbGUuaW46Ci0JKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50Lmg6Ci0JKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50LmNwcDoKLQkqIHBwL01ha2VmaWxlLmluOgotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKLQkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6IHN0YXJ0IGxpYm9wKysgbGlicmFyeSwKLQkgIG1vdmUgb3BfcHJpbnRfZXZlbnQgdGhlcmUKLQotCSogcHAvb3BfYmZkLmg6Ci0JKiBwcC9vcF9iZmQuY3BwOiAKLQkqIHBwL29wX3RpbWUuY3BwOiAKLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IAotCSogcHAvb3Byb2ZwcC5jcHA6IAotCSogcHAvc2FtcGxlc19maWxlLmg6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiByZW1vdmUgYWxsIGtub3dsZWRnZSBvZgotCSAgaXNfa2VybmVsIGZyb20gb3BfYmZkLCBzb21lIG1pbm9yIGNsZWFudXBzCi0gCi0yMDAyLTA2LTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBwcC9vcF9iZmQuaDoKLQkqIHBwL29wX2JmZC5jcHA6Ci0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IGtpbGwgYW5vdGhlciBjaGFyKgotIAotCSogcHAvb3V0c3ltYmZsYWcuaDogcmVkdWNlIGZha2UgZGVwZW5kZW5jaWVzIHdpdGgKLQkgIG5ldyBmaWxlLCBsaXR0bGUgY2xlYW51cAotCi0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL2RlbWFuZ2xlX3N5bWJvbC5jcHA6Ci0JKiBwcC9vcF9tZXJnZS5jcHA6Ci0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wX3RpbWVfb3B0aW9ucy5oOgotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6Ci0JKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5oOgotCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgotCSogcHAvb3BwX3N5bWJvbC5oOgotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcHJvZnBwX29wdGlvbnMuaDoKLQkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBTb21lIG1vcmUgcmVmYWN0b3JpbmcuIE1vcmUgd29yawotCSAgbmVlZGVkLi4uCi0gCi0yMDAyLTA2LTAxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2MvTWFrZWZpbGUuaW46IGZpeCBET0NESVIgKGZyb20gQWwgU3RvbmUpCi0gCi0yMDAyLTA2LTAxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOgotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBjbGFyaWZ5IEFQSQotIAotCSogcHAvb3Byb2ZwcC5jcHA6IGZpeCBidWcgNTYzMzI0IHJlc3VsdGluZyBmcm9tIGFib3ZlCi0KLTIwMDItMDYtMDEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1ha2UuY29tbW9uLmluOiBtYWtlIC0td2l0aC1leHRyYS1saWIgd29yayBhZ2FpbgotCi0JKiBkYWUvb3BkX2ltYWdlLmg6Ci0JKiBkYWUvb3BkX2ltYWdlLmM6IGNvbW1lbnQgdHlwb3MKLQotCSogZG9jL3NyY2RvYy9Eb3h5ZmlsZTogZ2VuZXJhdGUgUE5HIG5vdCBHSUYgCi0gCi0yMDAyLTA1LTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkb2Mvc3JjZG9jL0RveHlmaWxlOgotCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcDoKLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5oOgotCSogcHAvc3ltYm9sX2NvbnRhaW5lcl9pbXBsLmg6IHNtYWxsIGRveHlnZW4gdHdlYWsuCi0KLTIwMDItMDUtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzogbWlub3IgYnVnIHdoZW4gYmFja2luZyB1cCBzYW1wbGVzIGRpcgotCi0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDoKLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6IGF2b2lkIHRvIGZvcmNlIGNsaWVudCBjb2RlIHRvCi0JICBleHBsaWNpdGx5IHNlbGVjdCB0aGUgb3B0aW9uIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucy4KLQotCSogcHAvb3BfbWVyZ2UuY3BwOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcF90b19zb3VyY2UucHA6Ci0JKiBwcC9vcHJvZnBwLmNwcDogd2Ugbm8gbG9uZ2VyIG5lZWQgZXhwbGljaXQgdGVtcGxhdGUKLQkgIGluc3RhbnRpYXRpb25zIGZvciBvcHRpb25zCi0KLTIwMDItMDUtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcm9mcHAuY3BwOiBmaXggYSBtaXNzaW5nIFNBTVBMRVNfRElSIHByZXBlbmQKLQotMjAwMi0wNS0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbGliL3V0aWwvb3BfZmlsZS5jOgotCSogdXRpbHMvb3Bfc2Vzc2lvbi5jOiByZXN0b3JlIGFjY2lkZW50YWxseSBsb3N0Ci0JICBjb21taXRzIDoKLQotCTIwMDItMDUtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkJKiBkYWUvb3Bfc2Vzc2lvbi5jOiB0d2VhayBlcnJvciBtZXNzYWdlIHdoZW4gc2Vzc2lvbiBhbHJlYWR5Ci0JCSAgZXhpc3QuIEF2b2lkIHRvIG9wX2R1bXAgd2hlbiBwcm9maWxlciBpcyBub3Qgc3RhcnRlZC4KLQotCTIwMDItMDUtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkJKiBkYWUvb3Bfc2Vzc2lvbi5jOiBkbyBub3QgY3JlYXRlIGVtcHR5IHNlc3Npb24gZGlyZWN0b3J5Ci0JCSAgYW5kIGJhY2t1cCBvcHJvZmlsZWcubG9nIHRvbwotCQkqIGRhZS9vcGRfdXRpbC5jOgotCQkqIG9wX3VzZXIuaDogbWlub3IgcmVsYXRlZCBjaGFuZ2UKLQotMjAwMi0wNS0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlLyo6IGNvbXBsZXRlIHJlLW9yZ2FuaXNhdGlvbiBvZiBmaWxlcwotIAotCSogbGlib3Avb3BfY29uZmlnLmg6IGFkZCBWTUFfT0ZGU0VUIGFuZCBNQVhfTU9EVUxFUwotCSAgdHVuYWJsZXMKLSAKLTIwMDItMDUtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGd1aToKLQkqIGxpYmRiOgotCSogbGlib3B0Kys6Ci0JKiBsaWJ1dGlsOgotCSogbGlidXRpbCsrOgotCSogb3Byb2ZfcmVwb3J0OgotCSogcHA6IGFsbCBDL2MrKyBzb3VyY2UvaGVhZGVyIGZpbGUsIGZpeCBhIGZldyBkb3h5Z2VuIHdhcm5pbmcsCi0JICBtYW55IGNvbnN0IHR5cGUgdG8gIHR5cGUgY29uc3QgKyBvdGhlciBtaW5vciBjb21lc3RpYyBjaGFuZ2UuCi0KLTIwMDItMDUtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6IG15IHVzdWFsIGJvcmluZyBzaGl0Ci0gCi0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDogZG9jdW1lbnQKLQotCSogbGlidXRpbC9vcF9wb3B0Lmg6IFBPUFRfVEFCTEVFTkQgbWlzc2luZyBpbiBzb21lIHBvcHQuaAotIAotCSogVE9ETzogdXBkYXRlCi0gCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBhZGQgc29tZSB0byBhY2suaHRtbAotIAotCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuYzogZml4IGxvbmctc3RhbmRpbmcgdHlwbwotIAotMjAwMi0wNS0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogY29uZmlndXJlLmluOgotCSogTWFrZWZpbGUuaW46Ci0JKiBsaWJvcHQrKy8qOiBuZXcgZGlyZWN0b3J5LCBjb21tYW5kIGxpbmUgb3B0aW9ucyBoYW5kbGluZwotCQotCSogbWFrZS5jb21tb24uaW46Ci0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL29wX21lcmdlLmNwcDoKLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogdXNlIGxpYnBvcHQrKwotCi0yMDAyLTA1LTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotMjAwMi0wNS0xOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3BfYmZkLmNwcDogZml4IGJ1ZyBjb21pbmcgZnJvbSBtaXMtcGxhY2VkCi0Jc3RybGVuKCkgYnJhY2tldHMKLSAKLQkqIHBwL29wX2JmZC5oOgotCSogcHAvb3BfYmZkLmNwcDoga2lsbCBzb21lIG1vcmUgY2hhcltdcyB0byBhdm9pZCBzaWxseQotCSAgYnVncyBsaWtlIHRoZSBhYm92ZQotIAotCSogUkVBRE1FOiBzb21lIG1pbm9yIGNoYW5nZQotIAotMjAwMi0wNS0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbW9kdWxlL2NvbXBhdC5oOgotCSogbW9kdWxlL29wX2ZpeG1hcC5jOgotCSogbW9kdWxlL29wX3N5c2NhbGxzLmM6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuYzoKLQkqIG1vZHVsZS9vcHJvZmlsZS5oOgotCSogbW9kdWxlL29wcm9maWxlX25taS5TOiBmaXggbW9kdWxlIHVwIHRvIGtlcm5lbCAyLjUuMTUKLQotCSogbW9kdWxlL2NvbXBhdDIyLmg6IHNtYWxsIGZpeCBmb3IgMi4yCi0KLTIwMDItMDUtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS9vcF9maXhtYXAuYzogcmV2ZXJ0IG15IGxhc3QgY2hhbmdlIDovLiBTb21ldGhpbmcgaXMKLQkgIHdyb25nIHdpdGggb3Byb2ZpZWwgYW5kIDIuNS4xNSBidXQgZWxzZXdoZXJlCi0KLTIwMDItMDUtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS9vcF9maXhtYXAuYzogZml4IGEgbG9uZyB0aW1lIG91dHN0YW5kaW5nIGJ1ZywKLQkgIHdlIHRlc3RlZCBiaXQgaW4gdGhlIGFkZHJlc3Mgb2YgeDg2X2NhcGFiaWxpdHkKLQkgIHJhdGhlciB0aGUgY2FwYWJpbGl0eSBpdHNlbGYuCi0KLTIwMDItMDUtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOiBmcm9tIGEgdHlwbyBpbiBvcGRfcHV0X2ltYWdlX3NhbXBsZXMgZmlyc3QKLQkgIGluY29taW5nIHNhbXBsZXMgZm9yIGVhY2ggaW1hZ2Ugd2FzIGFsd2F5cyBpZ25vcmVkLiBBcwotCSAgYSBzaWRlIGVmZmVjdCBpZiBvcGRfb3Blbl9zYW1wbGVfZmlsZSgpIGZhaWwgdGhlIGRhZW1vbgotCSAgd2lsbCBkaWUgd2l0aCBhIHNlZyBmYXVsdC4gVGhpcyBiZWhhdmlvciBpcyBpbiAwLjIgcmVsZWFzZS4KLQkgIGZpeCAjNTU2OTE4Ci0KLTIwMDItMDUtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHV0aWxzL29wX3N0YXJ0OiB0eXBvIGluIGRldGVjdCBzdGFsZSBsb2NrIGZpbGUKLQotMjAwMi0wNS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvKjogZ2NjIDMuMSBjb21waWxhdGlvbi4KLQotMjAwMi0wNS0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wZF9wcm9jLmM6IGNsb3NlIHNhbXBsZXMgZmlsZXMgYXQgY2xlYW51cAotCi0JKiBsaWJkYi9kYi1pbnNlcnQuY3BwOiBpZiB3ZSBkb24ndCBsb2NrIHRoZSBmaWxlIHdoZW4gY3JlYXRpbmcKLQkgIHRoZSByb290IHdlIG11c3QgZW5zdXJlIHRoYW4gaW5pdGlhbGl6YXRpb24gaXMgYXRvbWljCi0KLQkqIHBwL29wX2JmZC5jcHA6Ci0JKiBwcC9vcF9iZmQuaDoKLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKLQkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuaDogbW92ZSBhbGwgY29oZXJlbmN5IGNoZWNrIGJldHdlZW4gYSBvcF9iZmQgYW5kCi0JICBpdCdzIHJlbGF0ZWQgb3BwX3NhbXBsZXNfZmlsZXMgb3V0c2lkZSB0aGVzZSBjbGFzcwotCi0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IHNtYWxsIG1vZGlmaWNhdGlvbiBhbGxvd2luZyB0byBwcml2YXRpemUKLQkgIG9wX2JmZDo6aWJmZCBwb2ludGVyLgotCi0yMDAyLTA1LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBsaWJ1dGlsL29wX2xvY2tmaWxlLmM6IGRldGVjdCBhbmQgcmVtb3ZlIHN0YWxlCi0JICBsb2NrIGZpbGVzCi0KLQkqIHV0aWxzL29wX3N0YXJ0OiBkZXRlY3Qgc3RhbGUgbG9jayBmaWxlCi0gCi0yMDAyLTA1LTE1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvc2FtcGxlc19jb250YWluZXIuaDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKLQkqIHBwL3NhbXBsZV9jb250YWluZXJfaW1wLmg6Ci0JKiBwcC9zYW1wbGVfY29udGFpbmVyX2ltcC5jcHA6Ci0JKiBwcC9zeW1ib2xfY29udGFpbmVyX2ltcC5oOgotCSogcHAvc3ltYm9sX2NvbnRhaW5lcl9pbXAuY3BwOgotCSogcHAvc3ltYm9sX2Z1bmN0b3JzLmg6IHNvbWUgbW9yZSBmaWxlLXJlZmFjdG9yaW5nLCBhbmQgc29tZQotCSAgbWlub3IgY2hhbmdlcwotIAotMjAwMi0wNS0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3Byb2ZwcC5jcHA6IG9ubHkgYWxsb3cgLXIgd2l0aCAtbAotCSogZG9jL29wcm9maWxlLjEuaW46IGRvY3VtZW50IC1yIGZvciBvcHJvZnBwCi0gCi0yMDAyLTA1LTE1ICBXaWxsaWFtIENvaGVuICA8d2NvaGVuQG5jLnJyLmNvbT4KLSAKLQkqIHBwL29wcm9mcHAuY3BwOiBBZGRlZCAiLXIiIHJldmVyc2Ugc29ydCBvcHRpb24uCi0KLTIwMDItMDUtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy91dGlsaXR5Lmg6IGZpeCBhIGNvcHlyaWdodCBwcm9ibGVtLCB3b3JrLWFyb3VuZAotCSAgYSAocHJvYmFibGUpIGdjYyAyLjkxIGJ1Zy4KLQotCSogcHAvb3BfYmZkLmNwcDogdmFsZ3JpbmQgZXhwb3NlZCBhIGRlbGV0ZSBwcm9ibGVtLgotCi0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6Ci0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6Ci0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5oOiBjaGFuZ2UgdGhlIGhhbmRsaW5nIG9mIHNoYXJlZCBsaWIsCi0JICB3ZSBubyBsb25nZXIgYWxsb3cgc2FtcGxlc19jb250YWluZXJfdCB0byBhdXRvIGxvYWQgcmVsYXRlZAotCSAgc2FtcGxlcyBmaWxlcyBiZWxvbmdpbmcgdG8gYSBzaGFyZWQgbGliIGJ1dCB3ZSBjcmVhdGUgYXQgYSBoaWdoZXIKLQkgIGxldmVsIGFuIGV4cGxpY2l0IGxpc3Qgb2Ygc2FtcGxlcyBmaWxlcyA6IGZpeCAjNTU1Mjc2Ci0KLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6Ci0JKiBwcC9zYW1wbGVfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wcF9zeW1ib2wuY3BwOiBkZW1hbmdsZSBzeW1ib2wgb25seSB3aGVuIHdlIG91dHB1dAotCSAgc3ltYm9sIG5hbWUsIG5vdCB3aGVuIHdlIHN0b3JlIHN5bWJvbCBuYW1lIGluIGludGVybmFsCi0JICByZXByZXNlbnRhdGlvbiBvZiBzeW1ib2wuCi0KLTIwMDItMDUtMTQgIENsaWZmIFdvb2xsZXkgIDxqd29vbGxleUBhcGFjaGUub3JnPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBhbGxvdyBRdDMgY29tcGlsYXRpb24KLQotMjAwMi0wNS0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZG9jL29wcm9maWxlLnhtbDogY2xhcmlmeSBSVEMgdXNlLCBmaXggIzU1NTMwMgotCi0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IG1pc3NpbmcgY2xvc2VkaXIoKS4gRml4ICM1NTUyNjgKLQkgIFRoYW5rcyB0byBXaWxsaWFtIENvaGVuIGZvciBoaXMgcHJlY2lzZSByZXBvcnQuCi0KLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjogZml4ICM1NTUzMDQsIGEgbm9uLW5hdGl2ZSBjb21waWxlciBjYW4KLQkgIGZhaWwgdG8gY29tcGlsZSBvcHJvZmlsZQotCi0JKiBsaWJ1dGlsKysvdXRpbGl0eS5oOiBjbGFzcyBub25jb3B5YWJsZQotCSogcHAvc2FtcGxlc19maWxlLmg6IHVzZSBpdAotCi0yMDAyLTA1LTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJvcC9vcF9ldmVudHNfZGVzYy5jOgotCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuaDoKLQotCSogcHAvb3BfYmZkLmg6Ci0JKiBwcC9vcF9iZmQuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wcm9mcHAuaDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKLQkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6Ci0JKiBwcC9zYW1wbGVzX2ZpbGUuaDoKLQkqIHBwL3NhbXBsZXNmaWxlLmg6IGZpeCBzb21lIEZJWE1FCi0KLTIwMDItMDUtMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzogZGVsZXRlIGxvY2tmaWxlIG9uIFNJR1RFUk0KLSAKLQkqIHBwL3NhbXBsZXNfZmlsZS5oOgotCSogcHAvc2FtcGxlc19maWxlLmNwcDogbWlub3IgY2hhbmdlcwotCi0yMDAyLTA1LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcF9iZmQuY3BwOgotCSogcHAvb3BfYmZkLmg6IGVoYW5jZSBvcF9iZmRfc3ltYm9sIC4uLgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IG1vdmUgaGFuZGxpbmcgb2YgaW1hZ2Ugdy9vIHN5bWJvbAotCSAgaW4gb3BfYmZkCi0KLQkqIHBwL3NhbXBsZXNfZmlsZS5oOiBlaGFuY2UgY29tbWVudCAoSm9obidzIHdvcmspCi0KLTIwMDItMDUtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wX2JmZC5jcHA6Ci0JKiBwcC9vcF9iZmQuaDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvc2FtcGxlc19maWxlcy5jcHA6IG1pbm9yIGNsZWFudXAKLQotMjAwMi0wNS0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3BfYmZkLmg6Ci0JKiBwcC9vcF9iZmQuY3BwOgotCSogcHAvb3BwX3N5bWJvbC5oOgotCSogcHAvb3BwX3N5bWJvbC5jcHA6Ci0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6Ci0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IG1vcmUgdHlwZWRlZiBmb3IgaW5kZXhlZCB0aGluZ3MKLQotMjAwMi0wNS0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvKjogc3BsaXQgb3Byb2ZwcF91dGlsLmNwcCwgb3Byb2ZwcC5oIHRvIHRoZXNlIC4uCi0JKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBuZXcgZmlsZQotCSogcHAvc2FtcGxlc19maWxlLmg6IG5ldyBmaWxlCi0JKiBwcC9vcF9iZmQuY3BwOiBuZXcgZmlsZQotCSogcHAvb3BiZmQuaDogbmV3IGZpbGUKLQotCSogcHAvKjogYWRkIGEgc3ltYm9sX2luZGV4X3QgdHlwZWRlZgotCi0yMDAyLTA1LTEwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkb2Mvc3JjZG9jL01ha2VmaWxlOiBhbHdheXMgY2xlYW4gYmVmb3JlIGJ1aWxkaW5nCi0JKiBkb2Mvc3JjZG9jL0RveHlmaWxlOiBlaGFuY2UgZmlsZSBmaWx0ZXJpbmcKLQotCSogcHAvb3Byb2ZwcC5oOiBzbWFsbCB0eXBvIGZpeAotCi0yMDAyLTA1LTEwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgkKLQotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOgotCSogcHAvc2FtcGxlc19jb250YWluZXIuY3BwOiBnZW5lcmFsaXplIGluZnJhc3R1Y3R1cmUgZm9yIHN5bWJvbAotCSAgdm1hL3NpemUKLQotCSogcHAvb3BfdGltZS5jcHA6IGFsbG93IHRvIGV4Y2x1ZGUgc3ltYm9sIHdpdGggb3BfdGltZSAtbAotCi0yMDAyLTA1LTA5ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2MveGh0bWwtY2h1bmsueHNsOgotCSogZG9jL3hodG1sLWNvbW1vbi54c2w6Ci0JKiBkb2MveGh0bWwueHNsOgotCSogZG9jL01ha2VmaWxlLmluOiBzb21lIHNtYWxsIGltcHJvdmVtZW50cwotIAotCSogZG9jL3NyYy9kb2MvRG95eGZpbGU6IGFkZCBGSVhNRQotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuaDoKLQkqIGxpYm9wL29wX2V2ZW50c19kZXNjLmM6Ci0JKiBsaWJ1dGlsL2ZpbGVuYW1lX21hdGNoLmg6IAotCSogb3Byb2ZfcmVwb3J0L29wcm9mcHBfdmlldy5oOiAKLQkqIHBwL29wX3RpbWUuY3BwOiAKLQkqIHBwL29wcF9zeW1ib2wuaDoKLQkqIHBwL29wcm9mcHAuaDoKLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6Ci0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IAotCSogcHAvc2FtcGxlc19jb250YWluZXIuaDogbW9yZSBkb3h5Z2VuIGV0Yy4gZml4ZXMKLSAKLTIwMDItMDUtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBwcC9vcF9zeW1ib2wuY3BwOiBiZXR0ZXIgY29sdW1uIGhhbmRsaW5nIHdpdGggb3Byb2ZwcCAtTAotCi0yMDAyLTA1LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvTWFrZWZpbGUuaW46Ci0JKiBndWkvTWFrZWZpbGUuaW46Ci0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHV0aWxzL01ha2VmaWxlLmluOiBmaXggbWFrZSB1bmluc3RhbGwKLQotMjAwMi0wNS0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQkKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBtb3ZlIHRvIC4uLgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wZl9jb250YWluZXIuY3BwOiBtb3ZlIHRvIC4uCi0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcGZfZmlsdGVyLmg6IG1vdmUgdG8gLi4uCi0JKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5oOgotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBwcC8uY3ZzaWdub3JlOiB1cGRhdGUKLQotCSogb3Byb2ZfcmVwb3J0L2hvdHNwb3R2aWV3LmNwcDoKLQkqIG9wcm9mX3JlcG9ydC9ob3RzcG90dmlldy5oOgotCSogb3Byb2ZfcmVwb3J0L29wX3ZpZXcuaDoKLQkqIG9wcm9mX3JlcG9ydC9vcHJvZl9yZXBvcnQuY3BwOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5oOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3ZpZXcuY3BwOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3ZpZXcuaDoKLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuaDoKLQkqIHBwL29wcF9zeW1ib2wuY3BwOgotCSogcHAvb3BwX3N5bWJvbC5oOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcHJvZnBwLmg6IHNhbXBsZXNfZmlsZXNfdCAtPiBzYW1wbGVzX2NvbnRhaW5lcl90Ci0KLQkqIHVpLy5jdnNpZ25vcmU6IHVwZGF0ZQotCi0JKiBwcC9vcGZfZmlsdGVyLmNwcDogbW92ZSBmaWxlbmFtZV9tYXRjaCAuLi4KLQkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5jcHA6IGhlcmUKLQkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5jcHA6Ci0JKiBsaWJ1dGlsKysvTWFrZWZpbGUuaW46Ci0KLQkqIHBwL01ha2VmaWxlLmluOiBmaXggdHlwbyB0aGF0IHByZXZlbnQgb3BfdG9fc291cmNlCi0JICB0byBiZSByZWNvbXBpbGVkCi0KLTIwMDItMDUtMDggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBkb2MvTWFrZWZpbGUuaW46IG1ha2UgY2xlYW4gZGVsZXRlICouaHRtbAotIAotCSogbGliZGIvZGItZGVidWcuYzogcGVkYW50cnkKLSAKLQkqIGxpYnV0aWwvb3BfZmlsZWlvLmg6Ci0JKiBsaWJ1dGlsL29wX2ZpbGVpby5jOgotCSogcHAvb3Byb2ZwcC5jcHA6IHJlbW92ZSB1bnVzZWQgY29kZSBhbmQgY2hhbmdlCi0JICBmdW5jdGlvbiBuYW1lcwotIAotMjAwMi0wNS0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbC9vcF9saWJpYmVydHkuaDogZml4IGNvbXBpbGUgZXJyb3IgKG1pc3NpbmcKLQkgIHNpemVfdCBkZWZpbml0aW9uKQotCi0yMDAyLTA1LTA4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBNYWtlZmlsZS5pbjogbWlzc2luZyBiYWNrc2xhc2gKLSAKLTIwMDItMDUtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIDx2YXJpb3VzPjogT0sgSSBsaWVkLiBGaXggc29tZSBkb3h5Z2VuIHdhcm5pbmdzLAotCSAgYW5kIHNvbWUgY2hhciBjb25zdCAqYSAtPiBjb25zdCBjaGFyICogYQotIAotCSogZG9jL3NyY2RvYy9NYWtlZmlsZTogYWRkCi0gCi0yMDAyLTA1LTA3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiA8YWxsPjogb2ssIGZpeCB0aGUgaGVhZGVycyBwcm9wZXJseS4gTGFzdCB0ZWRpb3VzCi0JICBwYXRjaCwgSSBwcm9taXNlLgotIAotCSogZGFlL29wZF91dGlsLmg6IGZpbmFsbHkgcmVtb3ZlICEKLSAKLTIwMDItMDUtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIDx2YXJpb3VzPjogbW92ZSB0byBuZXcgaGVhZGVyIHN0eWxlLCBkb3h5Z2VuCi0JICBzaG91bGQgdXNlIEBwYXJhbSBibGFoIG5vdCBAYmxhaDogb3IgXHBhcmFtIGJsYWggCi0KLQkqIGRvYy9zcmNkb2MvRG94eWZpbGU6IG5ldyBmaWxlIGZvciBhcGkgZG9jcwotCi0JKiBzY3JpcHRzL0RveHlmaWxlOgotCSogc2NyaXB0cy9kb2RvYzogcmVtb3ZlCi0gCi0yMDAyLTA1LTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46IGRvbid0IGFkZCBLSU5DIHRvIEJLQ0ZMQUdTIGRpcmVjdGx5Ci0gCi0JKiBtb2R1bGUvTWFrZWZpbGUuaW46IHJlLXdyaXRlCi0gCi0JKiBUT0RPOiB1cGRhdGUKLSAKLTIwMDItMDUtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQlNYXNzaXZlIHJlLW9yZ2FuaXNhdGlvbiBvZiBjb2RlICsgYnVpbGQuIE1vc3QKLQlmaWxlcyBoYXZlIGJlZW4gY2hhbmdlZC4gU29tZSBzbWFsbCBjb3NtZXRpYwotCWNoYW5nZXMuCi0gCi0JKiBsaWJ1dGlsLzoKLQkqIGxpYnV0aWwrKy86IGdlbmVyYWwtcHVycG9zZSB1dGlsaXR5IGxpYnMKLQotCSogbGlib3AvOiBvcHJvZmlsZS1zcGVjaWZpYyB1dGlsaXR5IGxpYgotCi0JKiB1dGlscy86IG1vdmVkIG9wX3N0YXJ0IGV0IGFsIHRvIHRoaXMgZGlyCi0KLQkqIGV2ZW50cy86Ci0JKiB1dGlsLzogcmVtb3ZlZAotCi0JKiBsaWJ1dGlsKysvY2hpbGRfcmVhZGVyLmNwcDogbWFrZSBzdXJlIHRvIHNldAotCSAgbWVtYmVyICJwaWQiLCBub3QgbG9jYWwgdmFyaWFibGUKLQotMjAwMi0wNS0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wX3Nlc3Npb24uYzogdHdlYWsgZXJyb3IgbWVzc2FnZSB3aGVuIHNlc3Npb24gYWxyZWFkeQotCSAgZXhpc3QuIEF2b2lkIHRvIG9wX2R1bXAgd2hlbiBwcm9maWxlciBpcyBub3Qgc3RhcnRlZC4KLQotMjAwMi0wNS0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlOgotCi0JKiBkYWUvb3Bfc2Vzc2lvbi5jOiBkbyBub3QgY3JlYXRlIGVtcHR5IHNlc3Npb24gZGlyZWN0b3J5Ci0JICBhbmQgYmFja3VwIG9wcm9maWxlZy5sb2cgdG9vCi0JKiBkYWUvb3BkX3V0aWwuYzoKLQkqIG9wX3VzZXIuaDogbWlub3IgcmVsYXRlZCBjaGFuZ2UKLQotMjAwMi0wNS0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnhtbDogdXBkYXRlIGNvcHlyaWdodCBmb3IgMjAwMgotCi0JKiBkb2MveHNsL3hodG1sLWNodW5rLnhzbDogaW5kZW50PXllcwotIAotMjAwMi0wNS0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0JCi0JKiBNYWtlZmlsZS5pbjogdXBkYXRlIG15IHJlbGVhc2Ugc3RlcHMKLSAKLTIwMDItMDUtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogLT4wLjNjdnMKLQotCSogcmVzdWx0cy86IGhtbSwgcmVtb3ZlIC9hbGwvIHRoZSBmaWxlcyAKLSAKLTIwMDItMDUtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjIKLSAKLTIwMDItMDUtMDQgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AbmMucnIuY29tPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBhZGQgbm90ZSBvbiBwb3dlciBtYW5hZ2VtZW50Ci0gCi0yMDAyLTA1LTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2MvTWFrZWZpbGUuaW46Ci0JKiBkb2MveHNsL3hodG1sLWNvbW1vbi54c2w6Ci0JKiBkb2MveHNsL3hodG1sLnhzbDoKLQkqIGRvYy94c2wveGh0bWwtY2h1bmsueHNsOiB1c2Ugc29tZSB4c2wgdG8gZml4Ci0JICBzb21lIG9mIHRoZSBwcm9ibGVtcyAobm90IGFsbCA6KCkKLSAKLTIwMDItMDUtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotIAotMjAwMi0wNS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wX3Nlc3Npb24uYzogY291cGxlIG9mIGltcHJvdmVtZW50cwotIAotCSogZGFlL29wZF91dGlsLmM6IGZpeCB3YXJuaW5nCi0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IHNvbWUgZG9jcyBvbiBvcF9zZXNzaW9uCi0KLQkqIHBwL29wX3RpbWUuY3BwOiBpbnRyb2R1Y2UgLXMgcGFyYW1ldGVyIChzaG91bGQgYmUKLQkgIGluIGFsbCB1dGlscykKLSAKLTIwMDItMDUtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wcm9mX3JlcG9ydC9NYWtlZmlsZS5pbjogZGlzYWJsZSBmb3IgcmVsZWFzZQotIAotMjAwMi0wNS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcmVzdWx0cy86IG51a2UgdGhpcyBpbiBmYXZvdXIgb2Ygb3Byb2ZpbGUtdGVzdHMKLQkgIG1vZHVsZQotIAotMjAwMi0wNS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0gCi0JKiBvcF91c2VyLmg6Ci0JKiBkYWUvb3Bfc3RhcnQ6IAotCSogZGFlL29wX3N0b3A6IAotCSogZGFlL29wZF91dGlsLmg6Ci0JKiBkYWUvb3BkX3V0aWwuYzogCi0JKiBkYWUvb3Byb2ZpbGVkLmM6IAotCSogZGFlL29wcm9maWxlZC5oOiAKLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDogCi0JKiBndWkvb3Byb2Zfc3RhcnQuaDoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS91aS9vcHJvZl9zdGFydF9iYXNlLnVpOiAKLQkqIG9wcm9mX3JlcG9ydC9vcHJvZl9yZXBvcnQuY3BwOiAKLQkqIHBwL29wX21lcmdlLmNwcDogCi0JKiBwcC9vcF90aW1lLmNwcDogCi0JKiBwcC9vcGZfZmlsdGVyLmNwcDogCi0JKiBwcC9vcHJvZnBwLmNwcDogCi0JKiBwcC9vcHJvZnBwLmg6IAotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogcmVtb3ZlIHVzZWxlc3MgY29tbWFuZCBsaW5lCi0JICBvcHRpb25zIGluIGFudGljaXBhdGlvbiBvZiB0aGUgbmV3IHNwZWMKLQkgCi0JKiBsaWJkYi9kYi1tYW5hZ2UuYzogcmVzZXQgYmFzZV9tZW1vcnkgYW5kIGZkCi0JICBvbiBjbG9zZQotIAotCSogZGFlLy5jdnNpZ25vcmU6IAotCSogZGFlL01ha2VmaWxlLmluOgotCSogZGFlL29wX3Nlc3Npb24uYzoKLQkqIGRhZS9vcGRfcHJvYy5jOiAKLQkqIGRhZS9vcGRfcHJvYy5oOgotCSogZGFlL29wcm9maWxlZC5oOgotCSogZGFlL29wcm9maWxlZC5jOiB1c2UgbG9jayBmaWxlIGZvciBkYWVtb24uCi0JICBJbXBsZW1lbnQgbmFtZWQgc2Vzc2lvbnMKLSAKLTIwMDItMDUtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcHJvZnBwLmg6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBmaXggc2VjdF9vZmZzZXQgcHJvYmxlbS4gbm93IGFsbAotCSAgY2xhc3Mgd29yayBvbiB2bWEgZXhjZXB0IHNhbXBsZXNfZmlsZV90IHdoaWNoIG9mZnNldCB2bWEKLQkgIHRvIHNhbXBsZXMgZmlsZXMgb2Zmc2V0Ci0KLTIwMDItMDUtMDEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOgotCSogbGliZGIvZGItbWFuYWdlLmM6Ci0JKiBsaWJkYi9kYi10ZXN0LmM6Ci0JKiBsaWJkYi9kYi5oOgotCSogcHAvb3BfbWVyZ2UuY3BwOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBhbGxvdyByZWFkLW9ubHkgc2FtcGxlCi0JICBmaWxlIHJlYWRpbmcKLQkKLQkqIG9wcm9mX3JlcG9ydC9ob3RzcG90X3ZpZXcuY3BwOiBmaXggd2FybmluZwotIAotMjAwMi0wNS0wMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wX3N0YXJ0OgotCSogZGFlL29wcm9maWxlZC5jOgotCSogZG9jL29wcm9maWxlLjEuaW46IAotCSogZG9jL29wcm9maWxlLnhtbDogCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiAKLQkqIG1vZHVsZS9vcF9ubWkuYzoKLQkqIG1vZHVsZS9vcF9ydGMuYzoKLQkqIG1vZHVsZS9vcF9zeXNjYWxscy5jOiAKLQkqIG1vZHVsZS9vcHJvZmlsZS5oOgotCSogbW9kdWxlL29wcm9maWxlLmM6IG1vdmUgcGlkL3BncnAgZmlsdGVyIGludG8KLQkgIHVzZXJzcGFjZSBvbmx5LiBSZW1vdmUgLS1pZ25vcmUtbXlzZWxmCi0gCi0yMDAyLTA0LTMwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBvcF91c2VyLmg6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IGZpcnN0IHBhcnQgb2YgcmVtb3ZpbmcKLQkgIE9QRF9LRVJORUxfT0ZGU0VUCi0KLTIwMDItMDQtMzAgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9vcF9ubWkuYzogYWxzbyBhbGxvdyB1c2VyIHRvIHNlZSAwLyAxLyBjb250ZW50cwotIAotMjAwMi0wNC0zMCAgV2lsbGlhbSBDb2hlbiAgPHdjb2hlbkBuYy5yci5jb20+Ci0KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBBbGxvdyBub24tcm9vdCBleGFtaW5hdGlvbiBvZgotCSAgL3Byb2Mvc3lzL2Rldi9vcHJvZmlsZSBhbmQgaW5pdGlhdGlvbiBvZiBkdW1wLiAKLQotCSogZGFlL29wX2R1bXA6IG1vZGlmeSBtZXNzYWdlIGZvciBhYm92ZQotCi0yMDAyLTA0LTMwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLSAKLQkqIGxpYmRiL01ha2VmaWxlOiByZW1vdmUgZnJvbSBDVlMKLSAKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiAKLQkqIG1vZHVsZS9vcHJvZmlsZS5oOiB1c2UgYmV0dGVyIGhhc2ggZnVuY3Rpb24uCi0JICBGb2xkIHVudXNlZC9mdWxsIGVudHJ5IGNhc2UgaW50byBldmljdGlvbiBjYXNlCi0JICBmb3IgZmFzdGVyIGNvbW1vbiBwYXRoCi0gCi0yMDAyLTA0LTI3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46IGZpeCBsaXR0bGUgYmxvb3BlciB0aGF0IHNob3dzIHVwCi0JICB3aGVuIENPTkZJR19NMzg2IGlzIGNob3NlbgotIAotMjAwMi0wNC0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiB5ZXQgYW5vdGhlciBidWcgZml4IGZvciAtLXNvcnQ9Ci0JICBhbmQgY291bnRlciBuciBjb21tYW5kIGxpbmUgc3BlY2lmaWNhdGlvbiAuLi4KLQotMjAwMi0wNC0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wZF9wcm9jLmM6IG9wZF9hbGFybSgpIGZsdXNoIHByb3Blcmx5IHNhbXBsZXMgZmlsZXMKLQotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6IHVzZSB0aGUgcmlnaHQgZmlsZW5hbWUKLQkgIHdoZW4gc2VsZWN0aW5nIGEgc2hhcmVkIGxpYiBwcm9maWxlZCB3aXRoIC0tc2VwYXJhdGUtc2FtcGxlcwotCi0yMDAyLTA0LTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcF9tZXJnZS5jOiBpbXBsZW1lbnQgbWVyZ2luZyBvZiB0aGUgbmV3IGZpbGUgZm9ybWF0IGZpbGVzLgotCi0yMDAyLTA0LTIxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBvcHJvZl9yZXBvcnQvTWFrZWZpbGUuaW46Ci0JKiBvcHJvZl9yZXBvcnQvb3Byb2ZfcmVwb3J0LmNwcDogdXNlIGRiCi0KLTIwMDItMDQtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOiBPUERfS0VSTkVMX09GRlNFVCB0aGluZwotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKLQotMjAwMi0wNC0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wZF9wcm9jLmM6IG1pbm9yIHdhcm5pbmcgc3VwcHJlc3Npb24KLQotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDoKLQkqIHBwL29wcm9mcHAuaDogaGFuZGxlIHRoZSBuZXcgZGIgZmlsZSBmb3JtYXQsIHRoaXMgc3R1ZmYgaXMKLQkgIG5vdCB5ZXQgZXh0ZW5zaXZlbHkgdGVzdGVkCi0KLQkqIHBwL29wX21lcmdlLmM6IG5vdCBhbHJlYWR5IHVwZGF0ZWQsIGV4aXQgYXQgcnVuIHRpbWUKLQkgIHdpdGggYW4gZXJyb3IgbWVzc2FnZQotCi0yMDAyLTA0LTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvb3BkX3Byb2MuaDoKLQkqIGRhZS9vcHJvZmlsZWQuaDogZW5hYmxlIGRiIHNhbXBsZXMgZmlsZSBmb3JtYXQKLQotMjAwMi0wNC0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGliZGIvKjogaW5pdGlhbCBpbXBvcnQgZnJvbSBvcHJvZmlsZS10ZXN0cyBtb2R1bGUKLQkgIG5vdGUgdGhhbiB0aGlzIGRpcmVjcm90eSBoYXZlIGl0J3Mgb3duIENoYW5nZUxvZyBmaWxlCi0JKiBkYWUvTWFrZWZpbGUuaW46IHVzZSBsaWJkYi5hCi0JKiBkYWUvb3BkX3V0aWwuaDogdXNlIGRiLmguIFRoZXNlIGNoYW5nZSBkbyBub3QgeWV0IGVuYWJsZQotCSAgdGhlIGRiIHNhbXBsZXMgZmlsZXMgZm9ybWF0LgotCi0yMDAyLTA0LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOgotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIHBwL29wcm9mX2NvbnZlcnQuYzoKLQkqIHV0aWwvbWlzYy5oOgotCSogdXRpbC9taXNjLmM6Ci0JKiB1dGlsL2ZpbGVfbWFuaXAuaDoKLQkqIHBwL01ha2VmaWxlLmluOiBraWxsIG9wcm9mX2NvbnZlcnQKLQkgCi0yMDAyLTA0LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wcm9mcHAuaDoKLQkqIHBwL2RlbWFuZ2xlX3N5bWJvbC5oOgotCSogcHAvZGVtYW5nbGVfc3ltYm9sLmNwcDoKLQkqIHBwL01ha2VmaWxlLmluOiBtb3ZlIGRlbWFuZ2xlX3N5bWJvbCBpbnRvIG93bgotCSAgZmlsZQotIAotCSogVE9ETzogdXBkYXRlIHNvbWUuLi4KLSAKLTIwMDItMDQtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBmaXggYSBtZW1vcnkgbGVhayB1bmNvdmVyZWQKLQkgIGJ5IHZhbGdyaW5kIDxodHRwOi8vZGV2ZWxvcGVyLmtkZS5vcmcvfnNld2FyZGo+Ci0KLTIwMDItMDQtMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuaDogbW92ZSBkZWZpbml0aW9uIG9mIGxpbmtlZCBsaXN0IHRvIC4uLgotCSogZGFlL29wZF9saXN0Lmg6IHRoaXMgbmV3IGZpbGUKLQkKLQkqIGRhZS9vcGRfcHJvYy5jOiBpdGVyYXRlIG9uIG9wZW5lZCBzYW1wbGUgZmlsZQotCSAgcmF0aGVyIG9uIGltYWdlIGxpc3QgdG8gc3luYyBtbWFwJ2VkIGZpbGUKLQotMjAwMi0wNC0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Byb2ZwcC5oOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6Ci0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wZl9jb250YWluZXIuY3BwOgotCSogcHAvb3BmX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6IHVzZSBzYW1wbGVzX2ZpbGVfdCBhcyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbgotCSAgb2Ygb3BwX3NhbXBsZXNfZmlsZXMuIE5vdyBhbGwgc2FtcGxlcyBmaWxlcyByZWFkIGFyZSBtYWRlCi0JICB0aHJvdWdoIHNhbXBsZXNfZmlsZV90IG9iamVjdC4KLQotMjAwMi0wNC0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wX3N0YXJ0OiBmaXggYmFzaDEgZGV0ZWN0aW9uCi0KLQkqIGRvYy9NYWtlZmlsZS5pbjogZml4IGluc3RhbGwgdGFyZ2V0Ci0KLTIwMDItMDMtMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogc29tZSBwcmVsaW1pbmFyeSBzdHVmZiBmb3IgTkdQVAotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogZG9jL01ha2VmaWxlLmluOgotCSogZG9jL29wcm9maWxlLnNnbWw6Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBtb3ZlIHRvIERvY0Jvb2svWE1MCi0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50IEJhc2ggMiBkZXBlbmRlbmN5Ci0gCi0JKiBkYWUvb3Bfc3RhcnQ6IGZpeCBmb3IgL2Jpbi9iYXNoIGJlaW5nIGJhc2ggdjEgLSB1bnRlc3RlZAotIAotMjAwMi0wNC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcHJvZnBfdXRpbC5jcHA6IGRlYnVnIGFuZCB1c2Ugb3BwX2JmZDo6c3ltYm9sX3NpemUoKQotCi0yMDAyLTAzLTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBDaGFuZ2VMb2c6IGNoYW5nZSBteSBlbWFpbCBhZGRyZXNzCi0KLTIwMDItMDMtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRhZS9vcF9zdGFydDogZGVmYXVsdCBidWZmZXIgc2l6ZSB0byB6ZXJvIGFuZCBsZXQgbW9kdWxlCi0JICBvdmVycmlkZSB0aGUgZGVmYXVsdC4KLQotCSogbW9kdWxlL29wX3J0Yy5jOgotCSogbW9kdWxlL29wcm9maWxlLmg6Ci0JKiBvcF91c2VyLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6IGFuIGFub3RoZXIgY29oZXJlbmN5IGZpeCwgdW5ob3BlZnVsbHkKLQkgIHRoaXMgYnVnIGZpeCBkb2VzIG5vdCBmaXggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAoc2VlICMgKQotCi0JKiBwcC9vcHJvZnBwLmNwcDogZm9yIGdwcm9mIGR1bXAgZG8gbm90IHByaW50IGV2ZW50cyBzZXR0aW5ncwotCi0JKiBwcC9vcHJvZnBwLmg6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBwcmVwYXJlIHVzaW5nIHN5bWJvbCBzaXplCi0KLTIwMDItMDMtMjEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBmYWN0b3JpemUgZXZlbnQgc2V0dGluZ3Mgb3V0cHV0Ci0JKiBwcC9vcHJvZnBwLmg6IGRpdHRvICsgZG9fbGlzdF94eHgvZG9fZHVtcF9ncHJvZiA6IHN0YXRpYwotCSAgZnJlZSBmdW5jdGlvbiByYXRoZXIgdGhhbiBtZW1iZXIgZnVuY3Rpb24uCi0KLTIwMDItMDMtMjEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG9wX3VzZXIuaDoKLQkqIHBwL29wcm9mcHAuaDogbW9yZSBkb3h5Z2VuIGNvbW1lbnRzCi0KLQkqIGRhZS9vcGRfa2VybmVsLmM6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcGRfdXRpbC5jOgotCSogZGFlL29wcm9maWxlZC5jOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogZXhpdCgpOiB1c2Uge0VYSVRfRkFJTFVSRXxFWElUX1NVQ0NFU1N9Ci0KLTIwMDItMDMtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wZl9maWx0ZXIuaDogc2ltcGxpZnkgc2xpZ2h0bHkgaW50ZXJmYWNlIG9mIHNhbXBsZXNfZmlsZXNfdAotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6Ci0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wZl9jb250YWluZXIuY3BwOgotCSogcHAvb3BmX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcHJvZnAuY3BwOiByZWZsZWN0IHRoZSBuZXcgaW50ZXJmYWNlLgotCi0JKiBwcC9vcHBfc3ltYm9sLmNwcDogUGFyc2VPdXRwdXRPcHRpb24gLS0+IHN0YXRpYyBtZW1iZXIgb2YKLQkgIE91dHB1dFN5bWJvbCAuLi4KLQotCSogcHAvb3BwX3N5bWJvbC5oOgotCSogdXRpbC9maWxlX21hbmlwLmg6Ci0JKiB1dGlsL3N0cmluZ19tYW5pcC5oOiBkb3h5Z2VuIGNvbW1lbnRzCi0KLTIwMDItMDMtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHNjcmlwdHMvRG94eWZpbGU6IHNtYWxsIHR3ZWFrCi0JKiBvcF91c2VyLmg6Ci0JKiBwcC9vcHBfc3ltYm9sLmg6Ci0JKiBwcC9vcHJvZnBwLmg6Ci0JKiB1dGlsL2NoaWxkX3JlYWRlci5oOiBkb3h5Z2VuIGNvbW1lbnRzLgotCi0yMDAyLTAzLTE5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcGZfZmlsdGVyLmg6Ci0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDogcmVtb3ZlIGRlbGVnYXRpb24KLQkgIHtzeW1ib2x8c2FtcGxlc31fY29udGFpbmVyX3QgLT4geHh4X2ltcGwsIG5vIGZ1bmN0aW9ubmFsIGNoYW5nZQotCi0JKiBwcC8qOiBzdGFydCBhIG1vcmUgc2VyaW91cyBkb3h5Z2VuaXphdGlvbi4gZmlyc3Qgc3RlcAotCSAgaW5jbHVkZSBmaXhpbmcgcHJvdG90eXBlIGFuZCBhIGNsaWVudCBkb2N1bWVudGF0aW9uIGZvcgotIAkgIG9wcF9iZmQKLQkqIHNjcmlwdC9Eb3h5ZmlsZTogZG94eWdlbiBzY3JpcHQgZm9yIHBwLyouaCwgdXRpbC8qLmgKLQkKLTIwMDItMDMtMTkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9vcF9maXhtYXAuYzogaW5jbHVkZSBwYWdlbWFwLmgsIHNvCi0Jd2UgcGljayB1cCBoaWdobWVtLmgsIHdoaWNoIGlzIG5lZWRlZCB3aXRoCi0Jc29tZSBrZXJuZWxzIChtaXNzaW5nIGttYXBfcGFnZXRhYmxlIGRlZmluZQotCXZpYSBwdGVfb2Zmc2V0KQotCi0yMDAyLTAzLTE4ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIGRvYy9vcHJvZmlsZTEuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBhbGxvdyByZXZlcnNlIHNvcnQgaW4gYWxsIGNhc2UKLQotCSogcHAvb3BwX3N5bWJvbC5oOgotCSogcHAvb3BwX3N5bWJvbC5jcHA6IHJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0Ci0KLQkqIG9wcm9mX3JlcG9ydC9vcHJvZl9yZXBvcnQuY3BwOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5oOgotCSogb3Byb2ZfcmVwb3J0Lypfdmlldy4qOiByZXZlcnQgcGFydGlhbGx5IDIwMDItMDMtMTcgcGF0Y2gsCi0JICBtYWtpbmcgYWdhaW4gZGF0YSBjaGFuZ2Ugbm90aWZpY2F0aW9uIGluIHR3byBzdGVwLgotCi0yMDAyLTAzLTE3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBjbGFyaWZ5IGJpbnV0aWxzIGJ1ZyB3b3JrYXJvdW5kCi0gCi0yMDAyLTAzLTE3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBvcHJvZl9yZXBvcnQvb3Bfdmlldy5oOgotCSogb3Byb2ZfcmVwb3J0L2hvc3Rwb3N0X3ZpZXcuY3BwOgotCSogb3Byb2ZfcmVwb3J0L2hvc3Rwb3N0X3ZpZXcuaDoKLQkqIG9wcm9mX3JlcG9ydC9vcHJvZl9yZXBvcnQuY3BwOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5oOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3ZpZXcuY3BwOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3ZpZXcuaDogc2ltcGxpZnkgdmlydHVhbCBpbnRlcmZhY2UgKwotCSAgbWlub3IgZ3JhcGhpYyBidWcgZml4Ci0KLTIwMDItMDMtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBvcHJvZl9yZXBvcnQvaG90c3BvdF92aWV3LmNwcDogbmV3Ci0JKiBvcHJvZl9yZXBvcnQvaG90c3BvdF92aWV3Lmg6IG5ldyBIb3RzcG90VmlldyBjbGFzcwotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6Ci0JKiBvcHJvZl9yZXBvcnQvb3Byb2ZfcmVwb3J0Lmg6ICB1c2UgSG90c3BvdFZpZXcKLQkqIG9wcm9mX3JlcG9ydC9NYWtlZmlsZS5pbjogcmVmbGVjdCBhYm92ZQotCi0JKiBwcC9vcF90aW1lLmNwcDogc21hbGwgdGlkeQotCi0yMDAyLTAzLTE1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogZGFlL29wcm9maWxlZC5jOiBmaXggLS12ZXJzaW9uIHdoZW4gbW9kdWxlIGlzIG5vdCBsb2FkZWQKLQotCSogcHAvb3BwX3N5bWJvbC5jcHA6Ci0JKiBwcC9vcHBfc3ltYm9sLmg6IGF2b2lkIHRvIHBhZGQgdGhlIGxhc3QgZmllbGQsIHVzZSBhIHBvc2l0aXZlCi0JICBmb3JtIGZvciBvc2ZfaGVhZGVyCi0KLQkqIHBwL29wcm9mcHAuaDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3BmX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcHByb2ZwcF91dGlsLmNwcDoKLQkqIHBwL29wX3RpbWUuY3BwOiBmaXggLS1zb3J0IG9wdGlvbgotCi0yMDAyLTAzLTE0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDoKLQkqIHBwL29wcF9zeW1ib2wuY3BwOgotCSogcHAvb3Byb2ZwcF8uY3BwOgotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogaGFuZGxlIC1jMCwxIGFuZCAtLXNvcnQgI25yX2N0cgotCSAgZm9yIGFsbCBwb3N0LXByb2ZpbGUgdG9vbHMgYWxsb3dpbmcgYSBtb3JlIHByZWNpc2Ugd2F5Ci0JICB0byBzcGVjaWZ5IG9uIHdoaWNoIGNvdW50ZXJzIHRvb2xzIG11c3Qgd29yawotCi0yMDAyLTAzLTEzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBnZXRfbGluZW5yKCkgYmV0dGVyIGhhbmRsaW5nCi0JICBvZiBiZmRfZmluZF9uZWFyZXN0X2xpbmUuIEZpeCAjNTI5NjIyCi0KLQkqIHBwL29wZl9jb250YWluZXIuY3BwOiBzaW1wbGlmeSBzeW1ib2xfY29udGFpbmVyX2ltcGwKLQotCSogcHAvb3BwX3N5bWJvbC5jcHA6IHVzZSBvc3RyaW5nc3RyZWFtIG9ubHkgd2hlbiBuZWNlc3NhcnkKLQotMjAwMi0wMy0wOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6IHNvbWUgbGFwdG9wcyBoYXZlIGEgdXNhYmxlIGxvY2FsIEFQSUMKLSAKLTIwMDItMDMtMDkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG9wcm9mX3JlcG9ydDogbmV3IGRpcmVjdG9yeSwgb3Byb2ZwcC9vcF90aW1lIGxpa2UgR1VJCi0JKiBvcHJvZl9yZXBvcnQvb3Bfdmlldy5oOiBiYXNlIGNsYXNzIGZvciB2aWV3Ci0JKiBvcHJvZl9yZXBvcnQvb3Byb2ZfcmVwb3J0X21haW4uY3BwOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5oOgotCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6IG1haW4gY2xhc3MKLQkqIG9wcm9mX3JlcG9ydC9vcHJvZnBwX3ZpZXcuaDoKLQkqIG9wcm9mX3JlcG9ydC9vcHJvZnBwX3ZpZXcuY3BwOiBvcHJvZmZwIGxpa2UgdmlldwotCSogb3Byb2ZfcmVwb3J0L01ha2VmaWxlLmluOgotCSogb3Byb2ZfcmVwb3J0L3VpL29wcm9mX3JlcG9ydC5iYXNlLnVpOiBvcHJvZl9yZXBvcnQgVUkKLQkqIG9wcm9mX3JlcG9ydC91aS9NYWtlZmlsZS5pbjoKLQotCSogTWFrZWZpbGUuaW46Ci0JKiBjb25maWd1cmUuaW46IGhhbmRsZSBvcHJvZl9yZXBvcnQKLQotCSogdWkvTWFrZWZpbGUuaW46IGNsYXJpZnkgaG93IGRlcGVuZGVuY2llcyB3b3JrCi0KLTIwMDItMDMtMDggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjJjdnMKLQotCSogVE9ETzogdXBkYXRlCi0gCi0yMDAyLTAzLTA3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDogaGFuZGxlIG9zZl9zaG9ydF9saW5yX2luZm8KLQkqIHBwL29wcF9zeW1ib2wuY3BwOiB0d2VhayBvdXRwdXQgb3V0cHV0IHdoZW4KLQkgIGxpbmVuci9maWxlbmFtZSBpcyBub3QgYXZhaWxhYmxlCi0KLTIwMDItMDMtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHV0aWwvTWFrZWZpbGUuaW46IHJlbW92ZSAtcGVkYW50aWMgKFBoaWwgZG9uJ3QgeW91Ci0JICByZWFkIGNvbW1lbnRzID8gOykKLSAKLTIwMDItMDMtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBwcC86IHVzZSAiaW52YWxpZCIgbm90ICJpbGxlZ2FsIgotIAotMjAwMi0wMy0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0gCi0yMDAyLTAzLTA2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcGZyb3BwX3V0aWwuY3BwOiBtb3JlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2VzCi0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBjbGFyaWZ5IHByb2JsZW0gYWJvdXQgc3BhcnNlCi0JICBzYW1wbGVzIGZpbGVzIGFuZCBmaWxlc3lzdGVtLgotCi0JKiB1dGlsL2ZpbGVfbWFuaXAuaDoKLQkqIHV0aWwvZmlsZV9tYW5pcC5jcHA6IGNyZWF0ZV9maWxlX2xpc3QoKSBhbGxvdyByZWN1cnNpdmUKLQkgIGZpbGUgbGlzdCBjcmVhdGlvbi4KLQkqIHBwL29wX3RpbWUuY3BwOiBhZGQgb3B0aW9uIC1wLy1QIHRvIGFsbG93IHNwZWNpZnlpbmcKLQkgIGFsdGVybmF0ZSBwYXRoIG5hbWUgd2hlcmUgdG8gc2VhcmNoIGZvciBpbWFnZSBuYW1lCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiB1cGRhdGUgb3B0aW9uIGZvciBvcF90aW1lCi0KLTIwMDItMDMtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHJlbW92ZSBtdWx0aXBsZSBzeW1ib2xzIGJlbG9uZ2luZwotCSAgdG8gdGhlIHNhbWUgdm1hIChGaXggIzUyNjA5OCkKLQkgIEFjY2VwdCBhbHNvIGFsbCBzeW1ib2wgdHlwZXMsIHdlIGZpbHRlciB0aGVtIGJ5IG5hbWUuCi0KLTIwMDItMDMtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHV0aWwvbWlzYy5oOiBtaW5vciBjb21tZW50IGZpeAotCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiB0d2VhayB0aGUgbGFzdCBjb21taXQKLQotMjAwMi0wMy0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogd2VsY29tZSBpbiB0aGUgbG9jYWwgc3ltYm9scyAuLi4KLSAKLTIwMDItMDMtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wZl9maWx0ZXIuaDoKLQkqIHBwL29wZl9jb250YWluZXIuY3BwOiBzYW1wbGVzX2ZpbGVzX3Q6OmFkZCgpIGFkZCBhbiBoaW50Ci0JICBwYXJhbWV0ZXIgb24gd2hhdCBpbmZvcm1hdGlvbiB3aWxsIG5lZWRlZC4KLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDogdXNlIGl0Ci0JCi0JKiBwcC9vcF90aW1lLmNwcDogd2hlbiBhIHNhbXBsZXMgZmlsZXMgZm9yIG9uZSBjb3VudGVyCi0JICBkb2VzIG5vdCBleGlzdCBhdm9pZCB0byBsb2FkIGl0IChvcF90aW1lIC1sKSBmaXggIzUyNTIzNwotCi0yMDAyLTAzLTAyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9NYWtlZmlsZS5pbjogYWRkIC1wZWRhbnRpYyB0byBDWFhGTEFHUwotCSogcHAvb3Byb2ZwcC5oOiByZXBsYWNlIG1hY3JvIHZlcnBicmludGYgd2l0aCBhIGZ1bmN0aW9uCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBpbXBsZW1lbnQgaXQKLQkqIHBwL29wcF9zeW1ib2wuaDoKLQkqIHBwL29wX3RpbWUuY3BwOiBmaXggcGVkYW50aWMgd2FybmluZwotCi0JKiBwcC9vcGV2ZW50cy5jcHA6Ci0JKiBvcF91c2VyLmg6IG9wX2dldF9jcHVfbnJfY291bnRlcnMoKSBuZXcKLQotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogcHAvb3BmX2ZpbHRlci5oOgotCSogcHAvb3BwX3N5bWJvbC5jcHA6Ci0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHJlbW92ZSBnbG9iYWwgdmFyIG9wX25yX2NvdW50ZXJzCi0KLTIwMDItMDMtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG1vZHVsZS9vcF9zeXNjYWxscy5jOiBkbyBub3QgcHJlLWFsbG9jYXRlIHNvbWUgZG5hbWUKLQkgIGhhc2ggbWFwIGVudHJ5IGZvciBjb21tb24gcGF0aG5hbWUgYnV0IHByZSBhbGxvYyBlbnRyeQotCSAgemVybyB0byByZXNlcnZlIGl0Ci0KLQkqIHBwL29wX3RpbWUuY3BwOiBhZGQgaW1hZ2UgbmFtZSB0byB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0Ci0KLQkqIG1vZHVsZS9jb21wYXQyMi5oOiBtb3ZlIGNhY2hlbGluZV9hbGlnbmVkIG1hY3JvIHRvIC4uLgotCSogbW9kdWxlL29wX2NhY2hlLmg6IHRoaXMgbmV3IGZpbGUKLQkqIG1vZHVsZS9jb21wYXQuaDogdXNlIGl0Ci0JKiBtb2R1bGUvY29tcGF0MjIuaDoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiByZXBsYWNlIHNvbWUgX19jYWNoZWxpbmVfYWxpZ25lZCBieQotCSAgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKLQotMjAwMi0wMy0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZGFlL29wZF9rZXJuZWwuYzoKLQkqIGRhZS9vcGRfcHJvYy5jOiBzaW1wbGlmeSBoYW5kbGluZyBvZiBrZXJuZWwgc2FtcGxlcwotCi0JKiBwcC9vcHRfdGltZS5jcHA6Ci0JKiBwcC9vcHBfc3ltYm9sLmNwcDoKLQkqIHBwL29wcF9zeW1ib2wuaDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcC5oOiB0aWR5LCBnaXZlcyBhIG5lZ2F0aXZlIGZvcm0gdG8gaGVhZGVyIG91dHB1dAotCSAgZm9ybWF0Ci0KLQkqIHZlcnNpb24uaC5pbjogbmV3IG1hY3JvIHNob3dfdmVyc2lvbigpIHRvIG91dHB1dCB2ZXJzaW9uCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogZG9jdW1lbnQgaXQKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGV2ZW50cy9vcF9oZWxwLmM6Ci0JKiBwcC9vcF9tZXJnZS5jcHA6Ci0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6IHVzZSBpdAotCi0yMDAyLTAzLTAxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogbW9kdWxlL29wcm9maWxlLmM6Ci0JKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzogbWVyZ2Ugbm90ZS9tYXAgbG9jayAKLSAKLTIwMDItMDItMjcgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIFRPRE86IHVwYWR0ZQotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOgotCSogcHAvb3BwX3N5bWJvbC5oOgotCSogcHAvb3BwX3N5bWJvbC5jcHA6Ci0JKiBwcC9vcHJvZnBwLmNwcDogdXNlIGNvbHVtbmVkIG91dHB1dCBmb3Igb3Byb2ZwcCAtTCwgLXMKLQotCSogcHAvb3Byb2ZwcC5jcHA6IGNvbW1hbmQtbGluZSBjb3VudGVyIHNwZWNpZmljYXRpb24KLQkgIHdhcyBicm9rZW4gYnkgbXkgbGFzdCBwYXRjaAotCSogcHAvb3BmX2ZpbHRlci5jcHA6IGRpdHRvIGJ1dCBidWcgY29tZXMgZnJvbSB0aGUgZmFyIHBhc3QKLQotMjAwMi0wMi0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogcHAvb3BfbWVyZ2UuY3BwOiBzbWFsbCB0aWR5Ci0KLQkqIHBwL29wX3RpbWUuY3BwOgotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcGZfZmlsdGVyLmg6Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogcmVtb3ZlIHRoZSBuYXN0eSBnbG9iYWwgdmFyIGludCBjdHI7Ci0JICBwYXNzIGl0IGFzIHBhcmFtZXRlciB0byBlYWNoIHJlbGV2YW50IGZ1bmN0aW9uIHVzaW5nIGl0LgotCi0JKiBtb2R1bGUvY29tcGF0Lmg6IHN1cHBvcnQgZm9yIDIuNS41LiAyLjQuMTggYWxzbyB0ZXN0ZWQKLQotCSogcHAvb3BwX3N5bWJvbC5oOgotCSogcHAvb3BwX3N5bWJvbC5jcHA6IG5ldywgbWFpbmx5IGZvciBpbXBsZW1lbnRpbmcgLS1vdXRwdXQtZm9ybWF0Ci0JKiBwcC9vcF90aW1lLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOiB1c2Ugb3V0cHV0IGZvcm1hdCBzdHVmZgotCSogcHAvTWFrZWZpbGUuaW46IHJlZmxlY3QgYWJvdmUgY2hhbmdlCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBkb2N1bWVudCAtLW91dHB1dC1mb3JtYXQKLQotMjAwMi0wMi0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIG1vZHVsZS9jb21wYXQyMi5oOgotCSogbW9kdWxlL2NvbXBhdDI0Lmg6Ci0JKiBtb2R1bGUvb3Byb2ZpbGVfbm1pLlM6IHNtYWxsIHRpZHkKLQotCSogbW9kdWxlL29wX2FwaWMuYzoKLQkqIG1vZHVsZS9vcF9maXhtYXAuYzoKLQkqIG1vZHVsZS9vcF9ubWkuYzoKLQkqIG1vZHVsZS9vcHJvZmlsZS5oOiBhdm9pZCBtZW1vcnkgbGVhayBvZiBhcGljIG1hcHBpbmcKLQotMjAwMi0wMi0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHVzZSBzdGFibGUgc29ydCBhbmQgY29ycmVjdCB0aGUgY29tcGFyaXNvbgotCSAgZnVuY3Rpb24gb24gc3ltYm9sIHZtYQotCSogcHAvb3BmX2ZpbHRlci5jcHA6IHJlbW92ZSBhIGJvcmluZyBuZXcgbGluZSBpbiBvdXRwdXQKLQotCSogbW9kdWxlL21ha2VmaWxlLmluOiBvcHRpbWl6ZSBmb3IgNjg2IGJ1dCBkbyBub3QgdXNlIGFueSBzcGVjaWZpYwotCSAgNjg2IGluc24uCi0KLQkqIGNvbmZpZ3VyZS5pbjogY2hlY2sgYWdhaW5zdCBDT05GSUdfUFJFRU1QVAotCi0yMDAyLTAyLTEwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBldmVudHMvb3BfZXZlbnRzX2Rlc2MuYzogcmVtb3ZlIGRlYWQgY29kZQotIAotCSogbW9kdWxlL2NvbXBhdC5oOiBSZWRIYXQgYmFja3BvcnRlZCBNT0RVTEVfTElDRU5TRSgpCi0gCi0JKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzoKLQkqIG1vZHVsZS9vcF91dGlsLmM6IHJlbW92ZSBGSVhNRXMKLSAKLTIwMDItMDItMDkgIEJvYiBNb250Z29tZXJ5ICA8Ym9ibUBmYy5ocC5jb20+Ci0KLQkqIG1vZHVsZS9vcF9ydGMuYzogcmlnaHQgYWN0dWFsIFJUQyB2YWx1ZSBiYWNrCi0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBkb2N1bWVudCB0aGF0Ci0KLTIwMDItMDItMDkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9vcF9pbml0LmM6IHNldCBydGMgY3B1IHR5cGUgZGlyZWN0bHkKLSAKLTIwMDItMDItMDggIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBtb2R1bGUvb3Byb2ZpbGVfbm1pLlM6IGN1dCBhbmQgY29weSBmcm9tIG9wcm9maWxlX25taTI0LnMKLQkqIG1vZHVsZS9vcHJvZmlsZV9ubWkyMi5TOiByZW1vdmUKLQkqIG1vZHVsZS9vcHJvZmlsZV9ubWkyMi5TOiByZW1vdmUKLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjogcmVmbGVjdCB0aGVtCi0KLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBkbyBub3QgcHJpbnQgdW5pdCBtYXNrIGZvciBSVEMgY3B1IHR5cGUKLQotCSogZG9jL29wcm9maWxlLnNnbWw6IGRvY3VtZW50IHBvc3QtcHJvZmlsZSB0b29scyBjb21tb25zIG9wdGlvbnMKLQotMjAwMi0wMi0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogVE9ETzogdXBkYXRlIG1haW5seSBieSBtb3ZpbmcgdGhpbmdzIHRvIDAuMQotCi0JKiBwcC9vcGZfZmlsdGVyLmg6Ci0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDogc21hbGwgY2xlYW51cCArIG1pbm9yIHR3ZWFrIHRvIGdldAotCSAgbW9yZSByZWxpYWJsZSBzb3J0IG9yZGVyIG9uIGZpbGVuYW1lLgotCi0yMDAyLTAyLTA1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcGZfZmlsdGVyLmg6IGRlY2xhcmUgY3JlYXRlX2FydGlmaWNpYWxfc3ltYm9sKCkKLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHNob3cgaG93IGVsZiBzeW1ib2xzIHNpemUgY291bGQKLQkgIGJlIGhhbmRsZWQuCi0KLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IGFkZCBCU0ZfR0xPQkFMIHN5bWJvbHMgdG8KLQkgIHN5bWJvbHMgb2YgaW50ZXJlc3QuCi0KLTIwMDItMDItMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBhZGQgW3VuXWxvY2tfc3lzY3RsCi0gCi0yMDAyLTAyLTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3Byb2ZpbGVkLmg6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWUvb3BkX3Byb2MuYzogZnJlZSBzdHVmZiBvbiBzaHV0ZG93biAodG8KLQkgIGNsZWFuIGRtYWxsb2MgcmVwb3J0cykKLSAKLTIwMDItMDItMDMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjEKLQotCSogVE9ETzogdXBkYXRlCi0gCi0yMDAyLTAyLTAyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC4wLjkKLSAKLTIwMDItMDItMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9vcF9ubWkuYzogZml4IHN0dXBpZCBidWcgc3BvdHRlZCBieSBCb2IKLQkgIE1vbnRnb21lcnkKLSAKLTIwMDItMDItMDEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG1vZHVsZS9jb21wYXQuaDogZGVmaW5lIFJFTUFQX1BBR0VfUkFOR0UKLQkqIG1vZHVsZS9vcF9zeXNjYWxscy5jOiB1c2UgaXQgKDIuNS4zIHN1cHBvcnQpCi0KLTIwMDItMDEtMzAgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG1vZHVsZS9jb21wYXQuaDoKLQkqIG1vZHVsZS9vcF9ubWkuYzogcmUtYWRkIGV4cGxpY2l0IGNvbnN0YW50IGZvciBhbGwgTVNSXwotCSAgY29uc3RhbnRzLgotCi0yMDAyLTAxLTMwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKLQkqIG1vZHVsZS9jb21wYXQyMi5oOiByZW1vdmUgc3VwcG9ydCBmb3Iga2VybmVsIHZlcnNpb24KLQkgIHByaW9yIHRvIDIuMi4xMQotCi0JKiBtb2R1bGUvb3BfZml4bWFwLmM6Ci0JKiBtb2R1bGUvY29tcGF0Lmg6IHNtYWxsIGNsZWFudXAKLQotCSogbW9kdWxlL29wcm9maWxlLmM6IGF2b2lkIG11bHRpLWxpbmUgbGl0ZXJhbCBzdHJpbmcKLQotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogYmV0dGVyIHRvIGdldF9zeW1ib2xzKCkgOykKLQotMjAwMi0wMS0yOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbW9kdWxlL29wX2ZpeG1hcC5jOiByZW1hcCBmYWtlIG1hcHBpbmcgb24gMi4yIGFzIHdlbGwKLQkgIHdoZW4gbmVjZXNzYXJ5Ci0gCi0yMDAyLTAxLTI3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBtb2R1bGUvTWFrZWZpbGUuaW46IHNvcnJ5LCAtV2Vycm9yIGlzIG9ubHkgdXNlZnVsbAotCSAgZm9yIHRlc3QuCi0KLQkqIGRvYy9vcHJvZmlsZS4xLmluOiBhIGZldyB3b3JkcyBhYm91dCBvcF9zdG9wCi0KLQkqIG1vZHVsZS9jb21wYXQuaDoKLQkqIG1vZHVsZS9jb21wYXQyMi5oOgotCSogbW9kdWxlL2NvbXBhdDI0Lmg6IGNoYW5nZSBwdGVfcGFnZV9hZGRyZXNzIGRlZmluaXRpb24KLQkgIGZvciAyLjIuMjAKLQotCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6IG5vIHdhcm5pbmcgd2hlbiBjcmVhdGluZyBhcnRpZmljaWFsIHN5bWJvbHMKLQkqIHBwL29wcm9mcHBfdHVpbC5jcHA6IG5vIHdhcm5pbmcgZm9yIGltYWdlIHdpdGhvdXQgc3ltYm9scwotCi0yMDAyLTAxLTI3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogcHAvb3BfbWVyZ2UuY3BwOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDogc3RkIG5hbWVzcGFjZSBmaXhlcy4KLSAKLTIwMDItMDEtMjcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wX3RpbWUuY3BwOiBzbWFsbCBoYWNreSBvdXRwdXQgY2xlYW51cAotIAotMjAwMi0wMS0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGRhZS9vcGRfcHJvYy5jOiBzbWFsbCBjbGVhbnVwCi0KLQkqIGRvYy9vcGZfY29udGFpbmVyLmNwcDogaGFuZGxlIGltYWdlIHdpdGhvdXQgc3ltYm9scwotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOgotCSogZG9jL29wX3RpbWUuY3BwOiBpbXBsZW1lbnQgYW5kIGRvY3VtZW50IC0tZGVtYW5nbGUKLQkgIGFuZCAtLXNob3ctaW1hZ2UtbmFtZQotCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBhZGQgdXNpbmcgZWxmIHN5bWJvbHMgc2l6ZSBidXQKLQkgIGRpc2FibGUgaXQKLQotMjAwMi0wMS0yNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGRhZS9vcGRfcHJvYy5jOiB0aW55IGNsZWFuCi0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBzcGVsbCBmaXgKLSAKLTIwMDItMDEtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBwcC9vcF9tZXJnZS5jOiByZW1vdmUgRklYTUUKLQkqIHBwL29wX3RpbWUuY3BwOiBtaW5vciBmaXgKLQkKLQkqIHBwL29wZl9maWx0ZXIuaDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6Ci0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDogU2hvdyBtb3JlIGNsZWFybHkgdGhhbgotCSAgc2FtcGxlc19maWxlc190IHN1cHBvcnQgYWRkaW5nIGFueSBudW1iZXIgb2Ygc2FtcGxlcwotCSAgZmlsZXMgdG8gdGhlIHVuZGVybGluZWQgY29udGFpbmVyLgotCi0yMDAyLTAxLTI2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBhbGxvdyB0byBsb2FkIGltYWdlIHdpdGhvdXQgc3ltYm9scwotCi0JKiBwcC9NYWtlZmlsZS5pbjoKLQkqIHBwL29wX3RpbWU6IGltcGxlbWVudCAtbCBvcHRpb24gdGhhdCBzaG93IHN5bWJvbHMgZGV0YWlscy4KLQkgIEN1cnJlbnRseSB3aXRoIHNlcGFyYXRlLXNhbXBsZXMgZmlsZXMgc3ltYm9scyBhcmUgc2hvd2VkCi0JICBtb3JlIHRoYW4gb25lIHRpbWUuIFRoaXMgaXMgYSBidWcgcmF0aGVyIGEgZmVhdHVyZS4KLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogZG9jL29wcm9maWxlLnNnbWw6IGRvY3VtZW50IG9wX3RpbWUgLWwKLQotCSogZGFlL29wZF9wcm9jLmM6IGJ1ZyBmaXggZnJvbSBsYXN0IGNoYW5nZQotCi0yMDAyLTAxLTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOgotCSogZGFlL29wZF9wcm9jLmM6IHNlYXJjaCBtYXBzIGluIHJldmVyc2Ugb3JkZXIgc28gd2UgcHJlZmVyCi0JICBuZXdlciBtYXBwaW5ncy4KLSAKLTIwMDItMDEtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHBwL29wX21lcmdlLmNwcDogbWlub3IgZml4ICsgY29tbWVudAotCSogcHAvb3BfdGltZS5jcHA6IGNvbW1lbnQsIHVzZSBzYW1wbGVzX2ZpbGVfdAotCSogcHAvb3Byb2ZwcC5oOgotCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogbWlub3IgY2hhbmdlCi0KLTIwMDItMDEtMjQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOiByZW1vdmUgc3RhbGUgY29tbWVudAotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogbW9kdWxlL2NvbXBhdC5oOgotCSogbW9kdWxlL2NvbXBhdDIyLmg6Ci0JKiBtb2R1bGUvY29tcGF0MjQuaDogZml4IGZvciBwdGVfcGFnZSBvbiAyLjIuMjArCi0gCi0yMDAyLTAxLTI0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBvcF9tZXJnZS5jcHA6Ci0JKiBvcHJvZnBwLmg6Ci0JKiBvcHJvZnBwX3V0aWwuY3BwOiBjb2RlIG1vdmUgKyBjbGVhbnVwCi0KLTIwMDItMDEtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIHV0aWwvc2hhcmVkX3B0ci5oOiBhIHRlbXBsYXRpemVkIHNoYXJlZCBwb2ludGVyLgotCi0JKiBwcC9vcF9tZXJnZS5jOiBuZXcgdG8gbWVyZ2Ugc2FtcGxlcyBmaWxlcwotCSogcHAvTWFrZWZpbGUuaW46Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuaDoKLQkqIHBwL29wcm9mcHAuaDoKLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IG1pbm9yIGNoYW5nZSB0byBhZGQgb3BfbWVyZ2Ugc3VwcG9ydAotCi0JKiBkb2MvTWFrZWZpbGUuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmxlLnNtZ2w6IGRvY3VtZW50IG9wX21lcmdlCi0KLTIwMDItMDEtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjogY2FuIG9ubHkgZGVwbW9kIGlmIHdlIHJ1biB0aGF0IGtlcm5lbAotIAotCSogbW9kdWxlL29wX2ZpeG1hcC5jOiBkZWFsIHdpdGggbm8gQVBJQyBjb25maWcgZm9yCi0JICAyLjQuMTArCi0gCi0yMDAyLTAxLTIyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvTWFrZWZpbGUuaW46Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuaDoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOgotCSogbW9kdWxlL29wX3g4Ni5jOgotCSogbW9kdWxlL29wX2FwaWMuYzoKLQkqIG1vZHVsZS9vcF9maXhtYXAuYzogc3BsaXQgb3BfeDg2LmMuIFZhcmlvdXMgY2hhbmdlcyB0bwotCSAgb25seSBlbmFibGUgdGhlIEFQSUMgaWYgaXQncyBub3QsIGFuZCB0byByZW1hcCAvIG1hcCB0aGUgQVBJQwotCSAgYXMgaXMgbmVjZXNzYXJ5LgotCi0JKiBtb2R1bGUvYXBpY191cF9jb21wYXQuaDogCi0JKiBtb2R1bGUvY29tcGF0Lmg6Ci0JKiBtb2R1bGUvY29tcGF0MjIuaDogY2xlYW4gdXAgVl8qKCkgbWFjcm9zCi0KLQkqIG1vZHVsZS9vcF9pbml0LmM6IHJlbW92ZSBGT1JDRV9SVEMKLSAKLTIwMDItMDEtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBkYWUvb3BkX3Byb2MuYzogdXNlIHJlbW92ZSBub3QgdW5saW5rCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiB1c2UgcmVtb3ZlIG5vdCBzeXN0ZW0oInJtIHh4eCIpCi0KLQkqIGRvYy9NYWtlZmlsZS5pbjogc2xpZ2h0bHkgaW1wcm92bWVudAotCSogZG9jL29wcm9maWxlLjEuaW46IG1vdmUgLS1oZWxwIC0tdmVyc2lvbiB0byBhIGNvbW1vbiBzZWN0aW9uCi0KLTIwMDItMDEtMjEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9jb21wYXQyMi5oOiBmaXggbWlzc2luZyBjbGkoKQotIAotMjAwMi0wMS0yMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbW9kdWxlL29wcm9maWxlLmM6IAotCSogbW9kdWxlL2NvbXBhdDIyLmg6Ci0JKiBtb2R1bGUvY29tcGF0MjQuaDogZml4IE5NSSB3YWtlLXVwIGZvciAyLjIgU01QCi0gCi0JKiBtb2R1bGUvb3BfZGNhY2hlLmg6IGFkZCBLRVJOX0VSUgotIAotCSogbW9kdWxlL29wX3g4Ni5jOiBjbGVhbnVwIGEgbGl0dGxlCi0gCi0yMDAyLTAxLTIxICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogbWlub3IgY2hhbmdlCi0KLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjogYXV0by1kZXBlbmRlbmNpZXMgZm9yIGNvbXBhdC5jCi0KLQkqIG1vZHVsZS9jb21wYXQuYzoKLQkqIG1vZHVsZS9jb21wYXQyMi5oOiBGSVhNRSByZW1vdmUgZm9yIHZtYWxsb2NfMzIKLQotMjAwMi0wMS0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogZml4IGNvbmZpZ3VyYXRpb24gc2F2aW5nIHdoZW4KLQkgIHN3aXRjaGluZyBvZiBjcHVfdHlwZS4KLQotCSogbW9kdWxlL01ha2VmaWxlLmluOgotCSogbW9kdWxlL2NvbXBhdC5jOiBtaW5vciBjaGFuZ2UKLQotCSogY29tcGF0Lmg6IGFkZCBtaW5vciBtYWNybwotCSogb3Byb2ZpbGUuYzogdXNlIG1pbm9yIGluc3RlYWQgTUlOT1IgKDIuNS4yIHN1cHBvcnQpCi0KLQkqIG9wX3g4Ni5jOiBjaGVjayBTUElWIChtaXNzaW5nIGZyb20gYSBwcmV2aW91cyBwYXRjaCkKLQotMjAwMi0wMS0yMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogcHVudCBzb21lIHRoaW5ncyB0byBuZXh0IHJlbGVhc2UKLQotCSogZGFlL29wZF9wcm9jLmM6IGZpeCBwcmludGYgb2YgbnVsbAotIAotMjAwMi0wMS0yMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0gCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogYWRkIGNvbW1lbnQKLSAKLQkqIG1vZHVsZS9jb21wYXQyMi5oOgotCSogbW9kdWxlL2NvbXBhdDI0Lmg6Ci0JKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzogZml4IGxvY2tpbmcgZm9yIG91dF9tbWFwCi0gCi0yMDAyLTAxLTIwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBtb2R1bGUvb3BfeDg2LmM6IGNoZWNrIE1TUiArIFNQSVYgZm9yIGVuYWJsaW5nIEFQSUMKLSAKLQkqIG1vZHVsZS9jb21wYXQuYzogZG9uJ3QgYXR0ZW1wdCB0byBnZXQgcm9vdAotCi0JKiBtb2R1bGUvY29tcGF0Lmg6IE5FRURfRklYTUFQIGZpeGVzCi0gCi0yMDAyLTAxLTE4ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogbW9kdWxlL2NvbXBhdC5oOgotCSogbW9kdWxlL2NvbXBhdDI0Lmg6IG1vdmUgdGhpbmdzIG5lZWRlZCBmb3IgMi4yLzIuNCBpbiBjb21wYXQuaAotCi0yMDAyLTAxLTE4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvY29tcGF0MjIuaDogbmV2ZXIgd2FrZSB1cCBmcm9tIE5NSQotCSAgb24gMi4yIFNNUCBmb3Igbm93IDooCi0gCi0yMDAyLTAxLTE4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvY29tcGF0Lmg6Ci0JKiBtb2R1bGUvY29tcGF0MjIuaDogCi0JKiBtb2R1bGUvY29tcGF0MjQuaDogcy9WQVRMRUFTVC9WX0FUX0xFQVNULwotIAotCSogbW9kdWxlL29wcm9maWxlLmM6IHJlbW92ZSBkZWFkIGNvZGUKLSAKLTIwMDItMDEtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9jb21wYXQuYzogZG9uJ3QgbmVlZCB0byByZS10YWtlIEJLTCBmb3IKLQkgIGRfcGF0aCBvbiAyLjIKLSAKLTIwMDItMDEtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9jb21wYXQyMi5oOgotCSogbW9kdWxlL2NvbXBhdDI0Lmg6Ci0JKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzogd2UgbXVzdG4ndCB0YWtlIHRoZSBtbWFwIHNlbQotCSAgdW5kZXIgMi4yCi0gCi0yMDAyLTAxLTE3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvY29tcGF0MjIuaDoKLQkqIG1vZHVsZS9jb21wYXQyNC5oOgotCSogbW9kdWxlL29wX3N5c2NhbGxzLmM6IHdob29wcywgaGFuZHkgdG8gbG9jayB0aGUKLQkgIEJLTCB3aGVuIGl0IGlzIG5lY2Vzc2FyeS4KLSAKLQkqIGRhZS9vcHJvZmlsZWQuYzogZml4IHdhcm5pbmcKLQotMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogb3BfdXNlci5oOgotCSogZGFlL29wX3N0YXJ0OgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgotCSogbW9kdWxlL29wcm9maWxlLmg6IGJ1bXAgbm90ZSBzaXplIGFuZCB3YXRlcm1hcmssCi0JICBJIHdhcyBnZXR0aW5nIHByb2JsZW1zIG9uIG15IGR1YWwgU01QIGJveCBpbiBrZXJuZWwgY29tcGlsZXMKLSAKLTIwMDItMDEtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjoKLQkqIG1vZHVsZS9vcHJvZmlsZV9ubWkuUzoKLQkqIG1vZHVsZS9vcHJvZmlsZV9ubWkyMi5TOgotCSogbW9kdWxlL29wcm9maWxlX25taTI0LlM6IHNwbGl0IGFzc2VtYmx5IGZvciAyLjIvNCAKLQotCSogbW9kdWxlL2NvbXBhdC5oOgotCSogbW9kdWxlL2NvbXBhdDIyLmg6Ci0JKiBtb2R1bGUvY29tcGF0MjQuaDogcy9BRlRFUi9BVExFQVNULwotIAotMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbW9kdWxlL2NvbXBhdDI0Lmg6IGRlZmluZSB0byBoYXZlIC0+b3duZXIKLSAKLTIwMDItMDEtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5oOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdmFsaWRhdGUgdGhlIFJUQyBtYXggY291bnQKLQotMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIG9wcm9maWxlLmM6Ci0JKiBtb2R1bGUvY29tcGF0MjQuaDogCi0JKiBtb2R1bGUvY29tcGF0MjIuaDogZml4IGNvbXBpbGUsIG5taSB3YWtlIHVwIGNoZWNrCi0JIAotCSogbW9kdWxlL29wX3J0Yy5jOiB1c2VyL2tlcm5lbCBwcm9maWxpbmcgZmVhdHVyZQotIAotMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6IGNsYXJpZmljYXRpb24KLSAKLQkqIG1vZHVsZS9jb21wYXQyMi5oOgotCSogbW9kdWxlL2NvbXBhdDI0Lmg6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogLT5vd25lciBmaXhlcwotIAotMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbW9kdWxlL29wcm9maWxlLmg6IGNsZWFuIHVwCi0gCi0JKiBtb2R1bGUvY29tcGF0Lmg6Ci0JKiBtb2R1bGUvY29tcGF0MjIuaDoKLQkqIG1vZHVsZS9jb21wYXQyNC5oOiBzcGxpdCBoZWFkZXIgZmlsZXMgdXAKLQkgIGZvciByZWFkYWJpbGl0eQotIAotMjAwMi0wMS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBzcGVhY2ggYWJvdXQgYXNzZW1ibGVyCi0KLQkqIG1vZHVsZS9jb21wYXQuaDogc21hbGwgdHdlYWsgZm9yIDIuMiwgbm8gaW1wYWN0IG9uIDIuNAotCi0yMDAyLTAxLTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBjb25maWd1cmUuaW46IGxvb2sgZm9yIHJ0Y19sb2NrCi0gCi0JKiBtb2R1bGUvY29tcGF0Lmg6IHVzZSBydGNfbG9jayBpZiB0aGVyZQotCi0yMDAyLTAxLTE2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBtb2R1bGUvY29tcGF0Lmg6Ci0JKiBtb2R1bGUvYXBpY191cF9jb21wYXQuaDogY2xlYW51cCArIGFsbG93IGNvbXBpbGUKLQkgICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgb24gMi40LzIuNS4gKG9ubHkgY29tcGlsZQotCSAgdGVzdGVkKQotCi0yMDAyLTAxLTE1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBldmVudHMvb3BfZXZlbnRzLmM6IGF2b2lkIGd1aSBjcmFzaDogZXZlbnQgbmFtZSBtdXN0Ci0JICBjb250YWluIG9ubHkgb25lIHdvcmQuIElmIHlvdSB0ZXN0IFJUQyBwYXRjaCBkZXN0cm95Ci0JICB+Ly5vcHJvZmlsZS9vcHJvZl9zdGFydF9ldmVudCMwCi0KLTIwMDItMDEtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9jb21wYXQuaDoKLQkqIG1vZHVsZS9jb21wYXQuYzoKLQkqIG1vZHVsZS9vcF9ydGMuYzogMi4yIG1vZHZlcnNpb25zIGZpeAotIAotMjAwMi0wMS0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIG1vZHVsZS9jb21wYXQuaDoKLQkqIG1vZHVsZS9jb21wYXQuYzoKLQkqIG1vZHVsZS9vcF9ydGMuYzogZml4IDIuMiBjb21waWxlCi0KLTIwMDItMDEtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjogd2hvb3BzLCBmb3Jnb3QgdG8gY29tbWl0IHRoaXMKLSAKLTIwMDItMDEtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHNvbWUgaW1wcm92ZW1lbnRzIGZvciBSVEMKLSAKLTIwMDItMDEtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcF9zdG9wOiBmaXggIm9wX3N0YXJ0ICYmIG9wX3N0b3AiIGJ1ZyB1c2luZyBtdWx0aXBsZQotCSAgZHVtcF9zdG9wIHdyaXRlcy4KLQotMjAwMi0wMS0xNCAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KLQotCSogcHAvb3BfdGltZS5jcHA6IGZpeCBmb3IgcHJpbnRpbmcgKE5hTiUpIGluIHRoZSB6ZXJvIHNhbXBsZSBjYXNlLgotCi0yMDAyLTAxLTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvb3BfcnRjLmM6IHJlbW92ZSB1bm5lZWRlZCBjaGVjawotCi0yMDAyLTAxLTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3Bfc3RhcnQ6IGZpeCBmb3IgUE1DIGNhc2UKLSAKLTIwMDItMDEtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBkYWUvb3Bfc3RhcnQ6IHRha2UgLS1ydGMtdmFsdWUKLQotCSogZGFlL29wcm9maWxlZC5jOiBzZXQgaGVhZGVycyBzZW5zaWJseSBmb3IgUlRDCi0KLQkqIGRvYy9vcHJvZmlsZS4xLmluOiB1cGRhdGUKLQotCSogZG9jL29wcm9maWxlLnNnbWw6IFJUQyB1cGRhdGUKLQotCSogZXZlbnRzL29wX2V2ZW50c19kZXNjci5jOiAKLQkqIGV2ZW50cy9vcF9ldmVudHMuYzogZ29vZCBuYW1lIGZvciBSVEMgZXZlbnQgCi0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGJhc2ljIHN1cHBvcnQgZm9yIFJUQwotCi0JKiBtb2R1bGUvb3BfcnRjLmM6IGltcGxlbWVudCBhbmQgdXNlIHJ0Y192YWx1ZQotCi0yMDAyLTAxLTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogZGFlL29wX3N0YXJ0OiBsb2FkIG1vZHVsZSBhdCBzdGFydC4gSGFuZGxlIENQVV9SVEMuCi0JICBBdm9pZCBzeXNjdGwgZm9yIG5vdyBvbiBSVEMgY2FzZS4KLQotCSogZGFlL29wcm9maWxlZC5jOiBvbmx5IHJlYWQgc3lzY3RscyBpZiBQTUMuIE5lZWRzIGNsZWFuLgotCi0JKiBldmVudHMvb3BfZXZlbnRzLmM6IGFkZCBSVEMgZXZlbnQuCi0KLQkqIGV2ZW50cy9vcF9ldmVudHNfZGVzYy5jOiBnZXQgQ1BVIHR5cGUgZnJvbSBtb2R1bGUuIAotCi0JKiBtb2R1bGUvb3BfaW5pdC5jOiBkZXRlY3QgQ1BVX1JUQy4KLQotCSogbW9kdWxlL29wX25taS5jOiBzZXR1cCBjb2RlIG1vdmVkIGZyb20gb3BfaW5pdC5jCi0KLQkqIG1vZHVsZS9vcF9ydGMuYzogZW5hYmxlIGludGVycnVwdCwgZml4ZWQgYXQgMTI4IGZvciBub3cuCi0KLQkqIG1vZHVsZS9vcF94ODYuYzogYWRkIEF0aGxvbiB0byBuZWVkc19hcGljX3NldHVwIGNoZWNrcwotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogdXNlIGNvcnJlY3QgaW50ZXJydXB0IGhhbmRsZXIgYmFzZWQgb24KLQkgIENQVSB0eXBlCi0KLTIwMDItMDEtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBvcF91c2VyLmg6IGFkZCBDUFVfUlRDCi0KLQkqIG9wX2luaXQuYzogYWRkIEZJWE1FcwotCi0JKiBvcF9ubWkuYzoKLQkqIG9wX3J0Yy5jOgotCSogb3Byb2ZpbGUuaDoKLQkqIG9wcm9maWxlLmM6IGltcGxlbWVudCBhYnN0cmFjdCBpbnRlcnJ1cHQgaGFuZGxlciBjb2RlCi0KLTIwMDItMDEtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOiBmaXggdm1saW51eC9zeXN0ZW0ubWFwIGRlZmF1bHRzCi0gCi0yMDAyLTAxLTEzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBjb25maWd1cmUuaW46IHJlamVjdCB1bnN1cHBvcnRlZCBrZXJuZWwgdmVyc2lvbgotCSogbW9kdWxlL2FwaWNfdXBfY29tcGF0Lmg6Ci0JKiBtb2R1bGUvY29tcGF0Lmg6IHNtYWxsIGNsZWFudXAKLQkqIG1vZHVsZS9vcF94ODYuYzogZGl0dG8sIGFsd2F5cyBwdXQgYXBpYyBtZW1vcnkgcGFnZSBhcwotCSAgbm9uIGNhY2hhYmxlCi0KLTIwMDItMDEtMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IGltcGxlbWVudCB3aGl0ZWxpc3QgZm9yIGFyZ3VtZW50cwotCSAgdG8gb3Bfc3RhcnQKLSAKLQkqIFRPRE86IHVwZGF0ZQotCi0yMDAyLTAxLTEzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBtb2R1bGUvY29tcGF0Lmg6Ci0JKiBtb2R1bGUvYXBpY191cF9jb21wYXQuaDoKLQkqIG1vZHVsZS9vcF94ODYuYzogYWxsb3cgdG8gcnVuIG9wcm9maWxlIHdoZW4KLQkgICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgb24gMi4yLngga2VybmVsCi0KLTIwMDItMDEtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG1vZHVsZS9jb21wYXQuaDogZml4IHNvbWUgRklYTUUKLQkqIG1vZHVsZS9vcF94ODYuYzogZG8gbm90IGhhbmcgU01QIGtlcm5lbCBVUCBib3ggd2l0aCAyLjIueAotCi0yMDAyLTAxLTExICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBtb2R1bGUvY29tcGF0Lmg6IHN1cHBvcnQgZm9yIFVQIGZyb20gMi4yLjAsIGZvciBTTVAKLQkgIGZyb20gMi4yLjguIEl0IGlzIHdvcnRod2hpbGUgdG8gdHJ5IG1vcmUgc3VwcG9ydC4KLQkgICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgbm90IHlldCBzdXBwb3J0ZWQuCi0KLTIwMDItMDEtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRvYy9vcHJvZmlsZS5zZ21sOgotCSogcHAvb3BfdGltZS5jcHA6IGFkZCBGSVhNRXMKLSAKLTIwMDItMDEtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBuZXZlciByZXR1cm4gMCB1bmxlc3Mgd2UncmUKLQkgIHJlYWxseSBjbG9zaW5nIGRvd24KLSAKLTIwMDItMDEtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotIAotCSogZ3VpL01ha2VmaWxlLmluOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdXNlIGFic29sdXRlIHBhdGhzCi0gCi0yMDAyLTAxLTExICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogYWRkIG5vdGUgYWJvdXQgLS13aXRoLWxpbnV4Ci0gCi0yMDAyLTAxLTExICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBSdWxlcy5tYWtlLmluOgotCSogZ3VpL01ha2VmaWxlLmluOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IHJlbW92ZSBrZXJuZWwgaGVhZGVycwotCSAgZnJvbSB1c2VybGFuZCAhCi0KLTIwMDItMDEtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlIGRlYWQgY2hlY2tzLiBjb21tZW50IG91dCBBUElDIGNoZWNrLAotCSAgaGlkZSBncmVwIG91dHB1dAotCi0JKiBtb2R1bGUvTWFrZWZpbGUuaW46IGFkZCBjb21wYXQuYwotCi0JKiBhcGljX3VwX2NvbXBhdC5oOiBVUCAyLjIgbWlzc2luZyBkZWZpbmVzLiBOZWVkIHRvIGludmVzdGlnYXRlCi0JICBmaXhtYXAgc2l0dWF0aW9uLiAKLQotCSogY29tcGF0LmM6IG1vdmUgMi4yIGRjYWNoZSBjb2RlIGhlcmUKLQotCSogY29tcGF0Lmg6IGRjYWNoZSBjb21wYXQgc3VwcG9ydC4gY2hlY2sgZm9yIHdoZXRoZXIgd2UKLQkgIHNob3VsZCBjaGVjayBmb3IgbXB0YWJsZS4gRG9uJ3QgZG8gZml4bWFwIGhhY2sgb24gMi4yIAotCi0JKiBvcF9kY2FjaGUuaDogc2hhcmVkIGRjYWNoZSBpbmxpbmUgZnVuY3Rpb25zCi0KLQkqIG9wX3N5c2NhbGxzLmM6IGNsZWFuIHVwIGRjYWNoZSBjb2RlIGZvciAyLjIvMi40IAotCi0JKiBvcF94ODYuYzogdXBkYXRlIGFwaWNfbmVlZF9zZXR1cCBmb3IgMi4yIGFuZCB0aGUgcG9zc2liaWxpdHkKLQkgIG9mIG5vdCBlbmFibGluZyBBUElDIHN1cHBvcnQgb24gMi40IHRvby4gTmVlZHMgY2hlY2tpbmcgISBBbHNvCi0JICBkb24ndCBkbyBtcHRhYmxlIGNoZWNrIG9uIDIuMgotCi0JKiBvcHJvZmlsZS5oOiBhZGQgbWlzc2luZyBpbmNsdWRlIGd1YXJkIDspCi0gCi0yMDAyLTAxLTExICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvY29tcGF0Lmg6IG1pbm9yIGZpeGVzCi0gCi0yMDAyLTAxLTExICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBtb2R1bGUvY29tcGF0Lmg6IG1hbnkgY2hhbmdlLCBjYW4gYmUgdXNlZCBkb3duIHRvIDIuMi44Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuaDogbW92ZSAjaWZkZWYgb24ga2VybmVsIHZlcnNpb24gdG8gY29tcGF0LmgKLQkqIG1vZHVsZS9vcF91dGlsLmM6Ci0JKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzogbWlub3IgY2hhbmdlCi0JKiBjb25maWd1cmUuaW46IGNvbW1lbnQgdW5uZWNlc3Nhcnkgc3R1Zi4KLQotCSogbW9kdWxlL01ha2VmaWxlLmluOiBtaXNzaW5nIGluY2x1ZGUgcGF0aCBmb3Igb3Byb2ZpbGUucwotCi0yMDAyLTAxLTEwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBNYWtlZmlsZS5pbjogdXBkYXRlIGNoZWNrbGlzdCBmb3IgZGlzdAotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuaDogYWRkIGFwcGFyZW50bHkgbmVlZGVkIHZlcnNpb24uaAotIAotMjAwMi0wMS0xMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogY29uZmlndXJlLmluOiBmaXggYWNjaWRlbnRhbCB0cmFzaGluZyBvZiBCS0NGTEFHUwotCi0JKiBtb2R1bGUvb3BfdXRpbC5jOiBpbmNsdWRlIHJpZ2h0IGhlYWRlcgotCi0JKiBtb2R1bGUvY29tcGF0Lmg6IHVzZSBjb3JyZWN0IHNtcF9jYWxsX2Z1bmN0aW9uCi0gCi0yMDAyLTAxLTEwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBtb2R1bGUvY29tcGF0Lmg6IG5ldyBmaWxlIGluY2x1ZGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eQotCSAgc3R1ZmYKLQotMjAwMi0wMS0wOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6IHVwZGF0ZSBpbmZvZHJhZ29uJ3MgZW1haWwKLQkgIGFkZHJlc3MKLSAKLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjAuOWN2cwotCi0yMDAyLTAxLTA4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogY29uZmlndXJlLmluOiBmaXggY2FzZSB3aGVuIFggaXNuJ3QgaW5zdGFsbGVkLiBCdW1wIHRvIDAuMC44Ci0gCi0yMDAyLTAxLTA3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiB1dGlsL01ha2VmaWxlLmluOiAiZml4IiBsYXN0IGcrKyAzLjAgcHJvYmxlbQotCSAgd2l0aCBsaWJpYmVydHkuaCBhbmQgc3RyaW5nLmggY2xhc2hpbmcgcHJvdG90eXBlcwotCSAgYnkgZGlzYWJsaW5nIC1wZWRhbnRpYyBmb3IgdGhpcyBkaXJlY3RvcnkKLSAKLTIwMDItMDEtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIHBwL29wZl9jb250YWluZXIuY3BwOgotCSogcHAvb3BmX2ZpbHRlci5oOgotCSogcHAvb3Byb2ZwcC5jcHA6IAotCSogcHAvb3Byb2ZwcC5oOiAKLQkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IAotCSogdXRpbC9maWxlX21hbmlwLmg6Ci0JKiB1dGlsL2ZpbGVfbWFuaXAuY3BwOiAKLQkqIHV0aWwvc3RyaW5nX21hbmlwLmg6IGZpeCBtb3N0IGcrKyAzLjAgcHJvYmxlbXMKLQotMjAwMi0wMS0wNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogVE9ETzogdXBkYXRlCi0gCi0yMDAyLTAxLTA1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBkb2Mvb3Byb2ZpbGUuc2dtbDogQXZvaWQgdG8gdXNlIC0tIGluc2lkZQotCSAgc2dtbCBjb21tZW50Ci0KLTIwMDItMDEtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcF9zdGFydDoKLQkqIGRhZS9vcF9zdG9wOiAodmVyeSkgaGFja3kgbG9vcCB0byB3YWl0IGZvcgotCWRhZW1vbiBzdGFydCBhbmQgc3RvcAotIAotMjAwMi0wMS0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbW9kdWxlL29wcm9maWxlLmM6IHJldmVydCBteSBicm9rZW4gc3RvcCBmaXgsCi0JICBhbmQgZml4IHRoZSBvbGQgKG5ldykgb25lCi0gCi0yMDAyLTAxLTA1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvb3BkX2tlcm5lbC5jOgotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3BkX3Byb2MuaDoKLQkqIGRhZS9vcGRfdXRpbC5jOgotCSogZGFlL29wcm9maWxlZC5jOiAKLQkqIGRhZS9vcHJvZmlsZWQuaDogZnVydGhlciBtaW5vciBjbGVhbnVwcwotCi0yMDAyLTAxLTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogY2hhbmdlIGxhc3QgY2hhbmdlIHRvIGhhdmUgYW4KLQkgIGV4cGxpY2l0IGNoZWNrIGluIHRoZSBzeXNjdGwgZHVtcCwgcmF0aGVyIHRoYW4gZ2VuZXJhbGlzZWQKLQkgIGNvZGUuCi0KLTIwMDItMDEtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBkbyBub3QgcmUtZW5hYmxlIGNvdW50ZXIgZHVyaW5nCi0JICBzaHV0ZG93bgotCi0JKiBkYWUvTWFrZWZpbGUuaW46IGZpeCBvcGRfa2VybmVsLmMgZGVwZW5kYW5jeQotCi0yMDAyLTAxLTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBkYWUvTWFrZWZpbGUuaW46Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcGRfa2VybmVsLmM6IG1vdmUga2VybmVsL21vZHVsZSBzdHVmZiBpbnRvCi0JICBuZXcgZmlsZS4gU29tZSBtaW5vciBjaGFuZ2VzLgotIAotMjAwMi0wMS0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wcm9maWxlZC5jOiByZW1vdmUgZXh0cmEgZHVtcAotIAotMjAwMi0wMS0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wZF9wcm9jLmM6IG1pbm9yIGNyYXAKLSAKLTIwMDItMDEtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmg6Ci0JKiBkYWUvb3BkX3Byb2MuYzogcHJpbnQgc3RhdHMgb24gc2h1dGRvd24gdG9vCi0KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBhZGRpdGlvbmFsIGNoZWNrIGFnYWluc3QgZGFlbW9uIGhhbmdpbmcgb24gc2h1dGRvd24gOigKLSAKLTIwMDItMDEtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcF9zdG9wOgotCSogZGFlL29wcm9maWxlZC5jOgotCSogZG9jL29wcm9maWxlLnNnbWw6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuaDoKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBpbXBsZW1lbnQgbmV3IGNsZWFuIHNodXRkb3duIHZpYQotCSAgc3lzY3RsIGR1bXBfc3RvcAotCi0yMDAyLTAxLTA0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogYWRkIGEgd2FybmluZyB3aGVuIG5vdGUgYnVmZiBvdmVyZmxvdy4KLQotMjAwMi0wMS0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogbW9kdWxlL29wcm9maWxlLmM6IHBpbiBub3RlIGF0IHRoZSBlbmQgb24gb3ZlcmZsb3cKLSAKLTIwMDItMDEtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOiBBcG9sb2dpZXM6IHN0dXBpZCBidWcuIE5ldmVyIGZvcmdldAotCSAgdGhhbiBMUlUgbGlzdCBvZiBzYW1wbGVzIGZpbGVzIG11c3Qgbm90IGNvbnRhaW4gYWxyZWFkeQotICAJICB1bm1hcGVkIGZpbGVzCi0KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBhbm90aGVyIHNpbGx5IGJ1ZywgZGV0ZWN0ZWQgY3B1IHdhcwotCSAgb3ZlcndyaXR0ZW4uLi4KLQotMjAwMi0wMS0wMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6IHNvbWUgZml4ZXMsIGNvbW1lbnRzCi0KLTIwMDItMDEtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+Ci0KLQkqIGRvYy9vcHJvZmlsZS5zZ21sOiBpbXByb3ZlIGRvY3VtZW50YXRpb24sIGNvcnJlY3RlZAotCSAgYnkgSm9obiBMZXZvbgotCi0yMDAyLTAxLTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuaDoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aTogcmVtb3ZlIHRoZSBjb25maWcgYnV0dG9ucwotCSAgYW5kIHNhdmUgb24gYSBoaWRlIGZyb20gdGhlIFdNCi0gCi0yMDAyLTAxLTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgotCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogbWFrZSBzdXJlIG5vdGVfcG9zIG5ldmVyIGdvZXMKLQkgIHBhc3QgdGhlIGJ1ZmZlciA6UAotIAotMjAwMi0wMS0wMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZGFlL29wZF91dGlsLmM6IGFsbG93IEVBR0FJTnMgdGhyb3VnaCBhcyB3ZWxsCi0gCi0yMDAyLTAxLTAyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgotCi0JKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wZl9maWx0ZXIuY3BwOiBtaW5vciBjaGFuZ2UKLQotMjAwMi0wMS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KLQotCSogZG9jL29wcm9maWxlLnNnbWw6IHZhcmlvdXMgZG9jcyBpbXByb3ZlbWVudHMKLSAKLTIwMDItMDEtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzogYmV0dGVyIGVuYWJsZSB0aGUgYWN0dWFsCi0JICBwcm9maWxpbmcgYWdhaW4gOlAKLSAKLTIwMDItMDEtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGNvbmZpZy5oLmluOiByZW1vdmUgdGhpcyBhZ2FpbiBmcm9tIENWUy4KLSAKLTIwMDItMDEtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIGRhZS9vcF9zdG9wOiBzZW5kIFNJR1VTUjEgdG8gc3RvcCBwcm9maWxlcgotIAotCSogZGFlL29wZF9wcm9jLmM6IHJlZm9ybWF0IGEgbGl0dGxlCi0gCi0JKiBkYWUvb3BkX3V0aWwuaDoKLQkqIGRhZS9vcGRfdXRpbC5jOiBjaGFuZ2Ugb3BkX3JlYWRfZGV2aWNlIHNlbWFudGljcwotIAotCSogZGFlL29wcm9maWxlZC5jOiBjbGVhbiBzaHV0ZG93biBmcm9tIFNJR1VTUjEKLSAKLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBoYW5kbGUgbm9uLWJsb2NraW5nIHJlYWRzCi0gCi0JKiBwcC9vcGZfZmlsdGVyLmg6Ci0JKiBwcC9vcGZfZmlsdGVyLmNwcDogc2xpZ2h0IGNsZWFudXBzCi0gCi0JKiBUT0RPOiB1cGRhdGUKLSAKLTIwMDItMDEtMDEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+Ci0KLQkqIG9wcm9maWxlLnNnbWw6IGNsYXJpZnkgdGhhdCAtZyBpcyBub3QgbmVjZXNzYXJ5IGZvcgotCSAgYmFzaWMgcHJvZmlsaW5nIChyZXBvcnRlZCBieSBKZWZmIEVwbGVyIDxqZXBsZXJAaW5ldG5lYnIuY29tPikKLQotU2VlIENoYW5nZUxvZy0yMDAxIGZvciBlYXJsaWVyIGNoYW5nZWxvZ3MuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2ctMjAwMyBiL0NoYW5nZUxvZy0yMDAzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzU2YWJlLi4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZy0yMDAzCisrKyAvZGV2L251bGwKQEAgLTEsNjI1MSArMCwwIEBACi0yMDAzLTEyLTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBjb25maWd1cmUuaW46IG15X29wX3ByZWZpeCBpcyBub3QgbmVjZXNzYXJpbHkgc3VmZml4ZWQgYnkgYSAnLycKLQotMjAwMy0xMi0yOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBkb2MvKi4xLmluOiBhZGQgSFRNTCBkb2NzIHRvIFNFRSBBTFNPCi0KLTIwMDMtMTItMjkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wY29udHJvbC4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDogbWlub3IgbGFuZ3VhZ2UgY2xlYW51cHMKLQotCSogdXRpbHMvb3Bjb250cm9sOiBvbmx5IGFsbG93IC0tdmVyYm9zZSB3aGVuIGl0IG1ha2VzIHNlbnNlCi0KLTIwMDMtMTItMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcDogZW5zdXJlIGZpbGVuYW1lIHBhc3NlZCB0bwotCSAgb3BfcmVhbHBhdGgoKSBleGlzdHMKLQotMjAwMy0xMi0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2MvaW50ZXJuYWxzLnhtbDoKLQkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmg6IGZpeCB0eXBvcwotCi0yMDAzLTEyLTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGVycm9yIG1lc3NhZ2UgcmV3b3JkaW5nCi0KLTIwMDMtMTItMTYgIENhcmxvIFdvb2QgIDxjYXJsb0BhbGlub2UuY29tPgotCi0JKiBsaWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbTogYXZvaWQgdG8gaW5zdGFsbCBtYW5nbGVkLW5hbWUgdGVzdCBmaWxlCi0KLTIwMDMtMTEtMjAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicmVnZXgvb3BfcmVnZXguY3BwOiBtb3ZlIGdsb2JhbCBjdG9yIG91dCBvZiBuYW1lc3BhY2UKLQlhbm9uIChidWcgIzg0NTYxNikKLQotMjAwMy0xMS0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IG1lcmdlIGFsbCB1bml0IG1hc2sgYmVmb3JlIGdlbmVyYXRpbmcKLQkgIGV2ZW50IGRlc2NyaXB0aW9uIHN0cmluZwotCi0yMDAzLTExLTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogcHV0IHVuaXRtYXNrIGluIHRoZSBzYW1lIGF4aXMgYXMKLQkgIGV2ZW50OmNvdW50LCBtZWFuaW5nIHRoYW4gdW5pdG1hc2sgaXMgbm93IGEgcGFydCBvZiB0aGUgZXZlbnQKLQkgIHNwZWNpZmljYXRpb24uCi0KLTIwMDMtMTItMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogd2UgcmV2ZXJzZWQgdG8vZnJvbSBwYyBpbiBjYWxsIGdyYXBoIHNhbXBsZQotCi0yMDAzLTExLTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wcm9maWxlLmg6Ci0JKiBwcC9vcGdwcm9mLmNwcDogb29wcyBhIHNpbXBsaWZ5IGEgYml0IHRvbyBjZyBoYW5kbGluZyBpbiBteSBsYXN0Ci0JICBwYXRjaCwgaXQgd2FzIHNlZ2ZhdWx0aW5nIGVhY2ggdGltZSBubyBjZyBmaWxlIHdhcyBmb3VuZC4uLgotCi0yMDAzLTExLTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcGdwcm9mLmNwcDogc2ltcGxpZnkgYSBiaXQgY2cgaGFuZGxpbmcsIHdlIGRvbid0IG5lZWQgdG8ga25vdwotCSAgaWYgd2UgcmV0cmlldmVkIHNvbWUgY2cgZmlsZXMgc2luY2UgdGhlIHByb2ZpbGVfdCB3aWxsIGJlIGVtcHR5Ci0JICBpbiB0aGlzIGNhc2UKLQotMjAwMy0xMS0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcHJvZmlsZS5oOiBpdGVyYXRvcjo6dm1hKCkgbXVzdCByZXR1cm4gdGhlIGZ1bGwga2V5IG5vdCBvbmx5Ci0JICBhbiB1bnNpZ25lZCBpbnQuCi0JKiBwcC9vcGdwcm9mLmNwcDogaW1wbGVtZW50IG1lcmdpbmcgb2YgY2cgZmlsZXMuCi0KLTIwMDMtMTEtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX3NwZWMuaDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGZpbHRlciBjYWxsIGdyYXBoIHNhbXBsZXMgZmlsZXMKLQotMjAwMy0xMS0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOiBvb3BzLCBpdCdzIGJldHRlciB0byByZWFsbHkgb3BlbiB0aGUgY2cgZmlsZQotCi0JKiBkYWVtb24vb3BkX3NmaWxlLmM6Ci0JKiBkYWVtb24vb3BkX3N0YXRzLmM6Ci0JKiBkYWVtb24vb3BkX3N0YXRzLmg6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5jOgotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfMjRfc3RhdHMuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuYzogbG9nIHNhbXBsZSBsb3N0IGR1ZSB0byBzYW1wbGUgZmlsZSBvcGVuCi0JICBmYWlsdXJlCi0KLTIwMDMtMTEtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3BhcnNlX3Byb2MuYzogYWx3YXlzIHByb3ZpZGUgYW4gaW1hZ2UgbmFtZQotCSAgZm9yIHBhcnNlZCBwcm9jZXNzIGluIC9wcm9jCi0KLTIwMDMtMTEtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBzL2hhbW1lci9BTUQ2NCBwcm9jZXNzb3JzLyBmb3IgdXNlciB2aXNpYmxlCi0JICBuYW1lLgotCi0yMDAzLTExLTEzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwvb3BfZmlsZS5oOgotCSogbGlidXRpbC9vcF9maWxlLmM6IHJlbW92ZSBvcF9jX2Rpcm5hbWUoKSwKLQlvcF9yZWxhdGl2ZV90b19hYnNvbHV0ZV9wYXRoKCksIG9wX2lzX2RpcmVjdG9yeSgpLAotCW9wX2ZvbGxvd19saW5rKCksIGluIGZhdm91ciBvZiB1c2luZyByZWFscGF0aCgzKQotCi0JKiBsaWJ1dGlsL3Rlc3RzL2ZpbGVfdGVzdHMuYzogZml4ZXMgZm9yIGFib3ZlIGNoYW5nZXMKLQotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDoKLQkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDogY2hhbmdlcyBmcm9tIGFib3ZlLiBBZGQKLQlvcF9yZWFscGF0aCgpLgotCi0JKiBsaWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5jcHA6IGNoYW5nZXMgZnJvbSAKLQlhYm92ZS4KLQotCSogZGFlbW9uL29wcm9maWxlZC5jOgotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcGFyc2VfcHJvYy5jOgotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOgotCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGNoYW5nZXMgZnJvbSBhYm92ZQotCi0yMDAzLTExLTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjhjdnMKLQotMjAwMy0xMS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC43LjEKLQotMjAwMy0xMS0xMSAgSm9zZXBoIFZhbkFuZGVsICA8dW5rbm93bkB1bmtub3duLm9yZz4KLQotCSogZGFlbW9uL2xpYmxlZ2FjeS9pbml0LmM6IGZpeCAjODQwMDQ2IChzZWdmYXVsdCB3aGVuIHN0YXJ0aW5nIHByb2ZpbGVyCi0JIHdpdGggLS1uby12bWxpbnV4IHNldHVwKSwgdGhpcyBidWcgd2FzIHByZXNlbnQgaW4gMC43LjAuCi0KLTIwMDMtMTEtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlCi0JKiBsaWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5jcHA6IGNvcm5lciBjYXNlIHRlc3QgYWRkZWQKLQkgIGZvciBkaXJuYW1lCi0KLTIwMDMtMTEtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiByZXBvcnRfZXJyb3IoKSBzaG93cyBvbmx5IGRpc3RpbmN0Ci0JICBjb25mbGljdGluZyBuYW1lLgotCi0yMDAzLTExLTEwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkb2Mvb3Bjb250cm9sLjEuaW46IHJldmVyc2Uga2VybmVsOnVzZXIgaW4gZXZlbnQgc2V0dGluZyBkZXNjcmlwdGlvbi4KLQkgIEZpeCAjODM4OTY4Ci0KLTIwMDMtMTEtMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9pbml0LmM6Ci0JKiBkYWVtb24vbGlibGVnYWN5L2luaXQuYzogbW92ZSBvcGRfcmVhZF9mc19pbnQgLi4uCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmg6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGhlcmUKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmM6IGR1bXAga2VybmVsIG5vdGUgYnVmZmVyIG92ZXJmbG93IGFuZAotCSAgYnVmZmVyIG92ZXJsb3cKLQotMjAwMy0xMS0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogdXRpbHMvb3BfaGVscC5jOiBkbyBub3QgdXNlIE9QX01BWF9DT1VOVEVSUyBidXQgZ2V0IGNvdW50ZXIgbnVtYmVyCi0JICBhdCBydW50aW1lCi0KLTIwMDMtMTEtMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy90ZXN0cy9zdHJpbmdfbWFuaXBfdGVzdHMuY3BwOiBydHJpbS9sdHJpbS90cmltIHRlc3RzCi0KLTIwMDMtMTEtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL3Rlc3RzL01ha2VmaWxlLmFtOgotCSogbGlib3AvdGVzdHMvbWFuZ2xlX3Rlc3RzLmM6IG5ldyB0ZXN0czogc2FtcGxlIGZpbGVuYW1lIG1hbmdsaW5nCi0KLTIwMDMtMTEtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS94ODYvb3Bfc3lzY2FsbHMuYzogZml4IGJ1aWxkIHdpdGggMi4yIGtlcm5lbAotCi0yMDAzLTExLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBNYWtlZmlsZS5hbTogdXNlIC5QSE9OWSBmb3IgbW9kdWxlIGdvYWwgdG8gbm90IHN0YXRpc2Z5IHRoaXMgZ29hbAotCSAgd2l0aCB0aGUgc3ViZGlyIG5hbWVkIG1vZHVsZQotCSogbTQvZmluZGtlcm5lbC5tNDogbWlub3IgZml4LgotCi0yMDAzLTExLTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOiBtaW5vciBjbGVhbnVwCi0KLTIwMDMtMTEtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZ3VpL01ha2VmaWxlLmFtOiByZW1vdmUgdW51c2VkIC1ES1ZFUlNJT04KLQotMjAwMy0xMS0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGFkZCAtLWRpc2FibGUtd2Vycm9yIGFuZCAtLWRpc2FibGUtb3B0aW1pemF0aW9uCi0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50IGFib3ZlLiBSZW1vdmUgZG9jcyBmb3IKLQkqIC0tZW5hYmxlLWdjb3YgKG9ubHkgdXNlZnVsIHRvIGRldmVsb3BlcnMpCi0KLTIwMDMtMTEtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9vcGRfa2VybmVsLmM6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuYzogYmUgbGVzcyBwYXJhbm9pZCBhYm91dCBrZXJuZWwgcmFuZ2UsCi0JICB0aGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIHRoZSBwYXRjaCBUaG9tYXMgU3BhdHppZXIgdGVzdGVkIGJ1dAotCSAgaXQgY2FuJ3QgaHVydCAoZmFtb3VzIGxhc3Qgd29yZHMgLi4uKS4gVGhpcyBmaXhlcyBzMzkweCB3aGVyZSBrZXJuZWwKLQkgIHN0YXJ0IGNhbiBiZSB6ZXJvIGFuZCB3YXMgcmVqZWN0ZWQuCi0KLTIwMDMtMTEtMDYgIFRob21hcyBTcGF0emllciAgPHRzcGF0QGRlLmlibS5jb20+Ci0KLQkqIGRhZW1vbi9vcGRfY29va2llLmM6IGNoYW5nZWQgYW4gI2lmIGRlZmluZWQgZm9yIHNlbGVjdGluZyByaWdodAotCSAgc3lzdGVtIGNhbGwgZm9yIElCTSBzMzkwIG9yIHMzOTB4LCByZXNwZWN0aXZlbHkKLQkgIAotMjAwMy0xMS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL3BhdGhfZmlsdGVyLmNwcDogcmVtb3ZlIDIgaWRlbnRpY2FsIEZJWE1FCi0JKiBsaWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5jcHA6Ci0JKiBsaWJ1dGlsKysvdGVzdHMvcGF0aF9maWx0ZXJfdGVzdHMuY3BwOiByZWZsZWN0IHRoZSBiZWhhdmlvciBieQotCSAgbmV3IHRlc3RzCi0KLTIwMDMtMTEtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYmRiL2RiX21hbmFnZS5jOgotCSogbGlib3Avb3BfZXZlbnRzLmg6IC1wZWRhbnRpYyBmaXgKLQotMjAwMy0xMS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL29wZF9zZmlsZS5jOgotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmM6Ci0JKiBsaWJ1dGlsL29wX2NwdWZyZXEuYzoKLQkqIGxpYnV0aWwvb3BfZmlsZS5jOiBhIGZldyBzL2dvdG8vYnJlYWsvCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogcGFkZGluZyBuZXZlciB1c2VkIGFmdGVyIGluaXRpYWxpemF0aW9uCi0KLTIwMDMtMTEtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9jb21tYV9saXN0Lmg6IGRvbid0IGFjY2VwdCBjdW11bGF0aXZlIGJlaGF2aW9yCi0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogc2VwYXJhdGVfdG9rZW4oKSByZXR1cm4gYnkgdmFsdWUKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOgotCSogbGlicHAvcGFyc2VfZmlsZW5hbWUuY3BwOgotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKLQkqIGxpYnV0aWwrKy9jb21tYV9saXN0Lmg6Ci0JKiBsaWJ1dGlsKysvc3RyaW5nX2ZpbHRlci5jcHA6Ci0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKLQkqIGxpYnV0aWwrKy90ZXN0cy9jb21tYV9saXN0X3Rlc3RzLmNwcDoKLQkqIGxpYnV0aWwrKy90ZXN0cy9zdHJpbmdfbWFuaXBfdGVzdHMuY3BwOiB1cGRhdGUgYWNjb3JkaW5nCi0JKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiByZW1vdmUgYWxsIHRyYWNlIG9mIGRlZnVuY3Qgb3BfYWxpYXMKLQotMjAwMy0xMS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYzoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX2ltYWdlLmg6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9tYXBwaW5nLmM6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9tYXBwaW5nLmg6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9wcm9jLmM6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0Lmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDoKLQkqIGxpYm9wL29wX2NvbmZpZ18yNC5oOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgotCSogbGlicHAvcHJvZmlsZS5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5oOgotCSogbGlicHAvc3ltYm9sLmg6Ci0JKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6Ci0JKiBsaWJ1dGlsKysvc3RyZWFtX3V0aWwuY3BwOgotCSogbGlidXRpbCsrL3N0cmVhbV91dGlsLmg6Ci0JKiBsaWJ1dGlsKysvdXRpbGl0eS5oOgotCSogcHAvY29tbW9uX29wdGlvbi5jcHA6Ci0JKiBwcC9jb21tb25fb3B0aW9uLmg6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDoKLQkqIHBwL29wZ3Byb2YuY3BwOgotCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5oOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6Ci0JKiBwcC9wb3B1bGF0ZS5jcHA6IHJlbW92ZSBzb21lIC5oIGRlcGVuZGVuY2llcwotCi0yMDAzLTExLTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW06Ci0JKiBsaWJ1dGlsKysvdGVzdHMvdXRpbGl0eV90ZXN0cy5jcHA6IG5ldyB0ZXN0IGZpbGVzIGNvbnZlcmluZyBtb3N0IG9mCi0JICB1dGlsaXR5LmggYW5kIG9wX2V4Y2VwdGlvbi5oCi0KLTIwMDMtMTEtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL3BhcnNlX2ZpbGVuYW1lLmNwcDogYXZvaWQgcmVwZXRpdGl2ZSB2ZWN0b3I6OmVyYXNlKHYuYmVnaW4oKSkKLQkqIGxpYnJlZ2V4L3N0bC5wYXQuaW46Ci0JKiBsaWJyZWdleC90ZXN0cy9tYW5nbGVkLW5hbWUuaW46IGFkZCAoaXxvKXN0cmVhbSBvcGVyYXRvcig+Pnw8PCkKLQotMjAwMy0xMS0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9wcm9jLmM6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9zYW1wbGVfZmlsZXMuYzogc3BhcnNlIHNhbXBsZSBmaWxlIGFycmF5Ci0JICBhbGxvY2F0ZWQgYnkgbGluZS4KLQotMjAwMy0xMS0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL2dsb2JfZmlsdGVyLmg6Ci0JKiBsaWJ1dGlsKysvcGF0aF9maWx0ZXIuaDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmg6IGNvbW1lbnQgZml4IHRvIG1hdGNoIGltcGxlbWVudGF0aW9uCi0JKiBsaWJ1dGlsKysvdGVzdHMvcGF0aF9maWx0ZXJfdGVzdHMuY3BwOiBuZXcgZmlsZSB0ZXN0Ci0JKiBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW06IHVwYXRlIGJ1aWxkCi0JKiBsaWJ1dGlsKysvdGVzdHMvc3RyaW5nX2ZpbHRlcl90ZXN0cy5jcHA6IHRlc3Qgd2hpdGUgc3BhY2UgYXQgc3RhcnQKLQkgIG9mIHBhdHRlcm4KLQotMjAwMy0xMS0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IGZvcm1hdF9kb3VibGUgY2FuIG9ubHkgZm9ybWF0IHBlcmNlbnQKLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgotCSogbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19tYW5pcF90ZXN0cy5jcHA6Ci0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogcy9mb3JtYXRfZG91YmxlL2Zvcm1hdF9wZXJjZW50LwotCi0yMDAzLTExLTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvZ2xvYl9maWx0ZXIuaDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmg6Ci0JKiBsaWJ1dGlsKysvdGVzdHMvc3RyaW5nX2ZpbHRlcl90ZXN0cy5jcHA6IG1pbm9yIHRpZHkKLQotCSogbGlidXRpbCsrL3Rlc3RzL2dsb2JfZmlsdGVyX3Rlc3RzLmNwcDogbmV3IGZpbGUKLQkqIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbTogdXBkYXRlIGJ1aWxkCi0KLTIwMDMtMTEtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiB0eXBvCi0JKiBsaWJ1dGlsKysvZ2VuZXJpY19zcGVjLmNwcDogcmVtb3ZlZCBmaWxlCi0JKiBsaWJ1dGlsKysvTWFrZWZpbGUuYW06IHVwZGF0ZSBhY2NvcmRpbmcKLQkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuaDogZW5zdXJlIGdlbmVyaWNfc3BlYzxzdHJpbmc+IHdpbGwgbm90IGxpbmsKLQkqIGxpYnV0aWwrKy9wYXRoX2ZpbHRlci5jcHA6IG1pbm9yIHRpZHkKLQotMjAwMy0xMS0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19tYW5pcF90ZXN0cy5jcHA6IGVoYW5jZSBvdXRwdXQgb24gZmFpbHVyZQotCSogbW9kdWxlL29wcm9maWxlLmg6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogdHdvIG5ldyByZWFkLW9ubHkgc3lzY3RsOiBucl9idWZmZXJfb3ZlcmZsb3cgYW5kCi0JICBucl9ub3RlX2J1ZmZlcl9vdmVyZmxvdwotCi0yMDAzLTExLTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW06Ci0JKiBsaWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5jcHA6IGRvbid0IHVzZSBnZXRjd2Qgbm9yIF9fRklMRV9fCi0JICBidXQgJHt0b3BkaXJ9IGFuZCBoYXJkIGNvZGVkIGZpbGVuYW1lCi0KLTIwMDMtMTEtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcGFyc2VfcHJvYy5jOiB1c2Ugb3BfZm9sbG93X2xpbmsKLQotCSogbGlidXRpbC9vcF9maWxlLmM6Ci0JKiBsaWJ1dGlsL29wX2ZpbGUuaDogbWFrZSBvcF9nZXRfbGluaygpIHN0YXRpYywgcmVuYW1lCi0Jb3BfYmFzZW5hbWUgdG8gb3BfY19iYXNlbmFtZQotCi0JKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6Ci0JKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOiByZW5hbWUgdG8gb3BfYmFzZW5hbWUoKS9vcF9kaXJuYW1lKCkuCi0JVXNlIG9wX2ZvbGxvd19saW5rKCkgZm9yIGZvbGxvd19saW5rKCkuCi0KLQkqIGxpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDoKLQkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOgotCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDoKLQkqIGxpYnV0aWwrKy9wYXRoX2ZpbHRlci5jcHA6Ci0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogZml4dXAgZnJvbSBhYm92ZSBjaGFuZ2VzCi0KLTIwMDMtMTEtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDogaGFzX2RlYnVnX2luZm8oKSBuZXcgbWVtYmVyCi0JKiBwcC9wb3B1bGF0ZS5oOgotCSogcHAvcG9wdWxhdGUuY3BwOiAKLQkqIHBwL29wYW5ub3RhdGUuY3BwOiB1c2UgaXQgdG8gZXJyb3Igb3V0IHdoZW4gLS1hc3NlbWJseSBpcyBub3QKLQkgIHJlcXVlc3RlZCBhbmQgbm8gZGVidWcgaW5mb3JtYXRpb24gZXhpc3RzCi0KLTIwMDMtMTAtMzEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiBkb24ndCBleGl0KCkgaWYgbWVyZ2VfYnkubGliIGlzIHNldCB0aHJvdWdoCi0JICAhYWxsb3dfbGliCi0KLTIwMDMtMTAtMzEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBtb3ZlIGhhbmRsZV9tZXJnZV9vcHRpb24oKSAuLi4KLQkqIHBwL2NvbW1vbl9vcHRpb24uaDogCi0JKiBwcC9jb21tb25fb3B0aW9uLmNwcDogaGVyZQotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDogdXNlIGl0IGJ1dCBkaXNhbGxvdyAtLW1lcmdlPWxpYgotCi0yMDAzLTEwLTMxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsL29wX2ZpbGUuYzoKLQkqIGxpYnV0aWwvb3BfZmlsZS5oOiBpbXBsZW1lbnQgZGlybmFtZSgpLCBpc19kaXJlY3RvcnkoKSBhbmQKLQkgIG9wX2ZvbGxvd19saW5rKCkKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogZm9sbG93IHN5bWxpbmsgZm9yIGltYWdlIGZpbHRlcgotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOgotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6ICByZW5hbWUgb3BfZm9sbG93X2xpbmsoKSB0byBmb2xsb3dfbGluaygpCi0KLTIwMDMtMTAtMzEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwvdGVzdHMvZmlsZV90ZXN0cy5jOiAiLy91c3IiIC0tPiAiLy91c3IiCi0JKiBsaWJ1dGlsKysvdGVzdHMvLmN2c2lnbm9yZToKLQkqIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcDogbmV3IHRlc3RzIGZpbGUuCi0KLTIwMDMtMTAtMzEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IGZpeCBjb21waWxhdGlvbgotCi0yMDAzLTEwLTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IGludHJvZHVjZSBhIGhlbHBlciBmdW5jdGlvbgotCXRvIG1ha2UgdGhlIGNvbW1hX2xpc3QgbWF0Y2hpbmcgY2xlYXIKLQotMjAwMy0xMC0zMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL2NvbW1hX2xpc3QuaDogaXNfc2V0KCkgbmV3IG1lbWJlcgotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogZml4IG1hdGNoaW5nIGxvZ2ljIGZvciBjcHUvdGlkL3RnaWQKLQotMjAwMy0xMC0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJ1dGlsKysvZ2VuZXJpY19zcGVjLmg6IGFkZCB2YWx1ZSgpIGFuZAotCWlzX3NldCgpLCByZW1vdmUgYm9vbCBwYXJhbWV0ZXIgZnJvbSBUIHZhbHVlCi0JbWF0Y2goKSAoaXQgd2FzIG5ldmVyIHNldCB0byB0cnVlKQotCi0JKiBsaWJ1dGlsKysvY29tbWFfbGlzdC5oOiBkbyBub3QgYWNjZXB0Ci0JZ2VuZXJpY19zcGVjLCB0aGUgYmVoYXZpb3VyIHdhcyB0byBpbXBsaWNpdGx5Ci0Jbm90IG1hdGNoIGFuICJhbGwiIGdlbmVyaWNfc3BlYy4gSW5zdGVhZDoKLQotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogZW5jb2RlIHRoZSBtYXRjaGluZwotCWJlaGF2aW91ciBleHBsaWNpdGx5LCBhbmQgYWRkIGEgY29tbWVudC4KLQotCSogbGlidXRpbCsrL3Rlc3RzL2NvbW1hX2xpc3RfdGVzdHMuY3BwOiBmaXggdG8KLQltYXRjaCB0aGUgYWJvdmUKLQotMjAwMy0xMC0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBNYWtlZmlsZS5hbTogcmUtb3JkZXIgYnVpbGQgc3ViZGlycwotCi0JKiBsaWJhYmkvTWFrZWZpbGUuYW06IG9ubHkgYnVpbGQgYWJpdGVzdCBvbgotCW1ha2UgY2hlY2sKLQotCSogcHAvTWFrZWZpbGUuYW06IHBwX2NvbW1vbiBub3QgcHBfY29tbW9ucwotCi0yMDAzLTEwLTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwrKy90ZXN0cy9jb21tYV9saXN0X3Rlc3RzLmNwcDogQWRkLgotCi0yMDAzLTEwLTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9NYWtlZmlsZS5hbTogaW1wcm92ZSBjaHVuayBydWxlcwotCi0yMDAzLTEwLTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwrKy90ZXN0cy9zdHJpbmdfZmlsdGVyX3Rlc3RzLmNwcDogQWRkLgotCi0JKiBsaWJ1dGlsKysvdGVzdHMvc3RyaW5nX21hbmlwX3Rlc3RzLmNwcDogZml4IGhlYWRlciBpbmNsdWRlCi0KLTIwMDMtMTAtMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19tYW5pcF90ZXN0cy5jcHA6IGZpeCB0b2Jvb2wgdGVzdAotCSgiMzMiIGlzIG5vdCBjYXN0YWJsZSB0byBib29sKQotCi0yMDAzLTEwLTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDogcmVtb3ZlIHRvc3RyKCkvdG9ib29sL3RvdWludCgpLCByZW5hbWUKLQkgIGxleGljYWxfY2FzdF9ub193czw+IHRvIG9wX2xleGljYWxfY2FzdDw+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOgotCSogbGlicHAvZmlsZW5hbWVfc3BlYy5jcHA6Ci0JKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgotCSogbGlidXRpbCsrL2NvbW1hX2xpc3QuaDoKLQkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuaDoKLQkqIGxpYnV0aWwrKy90ZXN0cy9zdHJpbmdfbWFuaXBfdGVzdHMuY3BwOiB1c2Ugb3BfbGV4aWNhbF9jYXN0PD4KLQotMjAwMy0xMC0yOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9jb21tb25fb3B0aW9uLmg6IHVzZSBzdGQgbmFtZXNwYWNlCi0KLTIwMDMtMTAtMjggIEphc29uIEx1bnogIDxsdW56QGZhbG9vbGV5Lm9yZz4KLQotCSogZG9jL29wcm9maWxlLjEuaW46IGRvY3VtZW50IGNwdSx0aWQsdGdpZCBpbiBwcm9maWxlCi0Jc3BlYwotCi0yMDAzLTEwLTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiBlcnJvciBvdXQgZm9yIGFsbCB0YWc6dmFsdWUgc3BlY2lmaWVkCi0JICBtb3JlIHRoYW4gb25jZS4KLQotMjAwMy0xMC0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZG9jL29wYW5ub3RhdGUuMS5pbjoKLQkqIGRvYy9vcHJlcG9ydC4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGxpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHA6Ci0JKiBsaWJyZWdleC9kZW1hbmdsZV9zeW1ib2wuaDoKLQkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOgotCSogcHAvY29tbW9uX29wdGlvbi5oOgotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6IHJlbW92ZSAtLW5vLWRlbWFuZ2xlLCAtLXNtYXJ0LWRlbWFuZ2xlIGFuZAotCSAgLS1kZW1hbmdsZSwgcmVwbGFjZSB0aGVtIHdpdGggLS1kZW1hbmdsZT1ub25lfHNtYXJ0fG5vcm1hbAotCi0yMDAzLTEwLTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvdGVzdHM6IG5ldyBkaXJlY3RvcnkKLQkqIGxpYnV0aWwrKy90ZXN0cy9zdHJpbmdfbWFuaXBfdGVzdHMuY3BwOiBuZXcgdGVzdHMgZmlsZQotCSogY29uZmlndXJlLmluOgotCSogbGlidXRpbCsrL01ha2VmaWxlLmFtOgotCSogbGlidXRpbCsrL3Rlc3RzLy5jdnNpZ25vcmU6Ci0JKiBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW06IGhhbmRsZSBuZXcgdGVzdAotCi0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6Ci0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBvZiBzZXBhcmF0ZV90b2tlbgotCSAgdG8gbWF0Y2ggdGhlIGRvY3VtZW50YXRpb24KLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX2ltYWdlLmM6IGZpeCBjb21tZW50Ci0KLTIwMDMtMTAtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2NvdW50X2FycmF5LmNwcDoKLQkqIGxpYnBwL2NvdW50X2FycmF5Lmg6Ci0JKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmg6Ci0JKiBsaWJwcC9wYXJzZV9maWxlbmFtZS5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGUuaDoKLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6Ci0JKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6IG1pbm9yIHRpZHkKLQotMjAwMy0xMC0yOCAgSmFzb24gTHVueiAgPGx1bnpAZmFsb29sZXkub3JnPgotCi0JKiBkb2Mvb3Bjb250cm9sLjEuaW46IGJldHRlciB3b3JkaW5nIGZvciAtLXNlcGFyYXRlPQotCSogZG9jL29wcm9maWxlLjEuaW46IHR5cG8KLQotMjAwMy0xMC0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL2xpYmxlZ2FjeS9pbml0LmM6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5jOgotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfMjRfc3RhdHMuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9pbWFnZS5oOgotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmM6Ci0JKiBkYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX21hcHBpbmcuYzoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX21hcHBpbmcuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3BhcnNlX3Byb2MuYzoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3BhcnNlX3Byb2MuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuYzoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jOgotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmg6IG1vdmUgZG95Z2VuIGNvbW1lbnQgZnJvbSAqLmMgdG8KLQkgICouaC4gQWRkIHNvbWUgZG94eWdlbiBjb21tZW50LgotCi0yMDAzLTEwLTI3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5jOgotCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX2ltYWdlLmg6IG5yX2ltYWdlcyBzdGF0aWMKLQotMjAwMy0xMC0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Bjb250cm9sLjEuaW46IGRvY3VtZW50IC0taW1hZ2U9Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiB1dGlscy9vcGNvbnRyb2w6IG1ha2UgdXNlciBzcGVjaWZ5ICItLWltYWdlPWFsbCIKLQl0byByZXNldC4gQ2xlYW4gdXAgaGVscCBtZXNzYWdlLiBFbnN1cmUgbm90ZSB0YWJsZQotCXNpemUgaXMgZ2l2ZW4gYSB2YWx1ZS4gQWRkICctdCcgZm9yICctLXN0b3AnLCBhbmQKLQknLWknIGZvciAnLS1pbWFnZScuCi0KLTIwMDMtMTAtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgb3Bjb250cm9sIC0taW1hZ2U9Ci0KLTIwMDMtMTAtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9ldmVudHMuaDoKLQkqIGRhZW1vbi9vcGRfZXZlbnRzLmM6IG1vdmUgY29kZSBmb3IgaGFuZGxpbmcKLQlldmVudCBkZXNjcmlwdGlvbnMgaGVyZSwgYW5kIHNoYXJlIGZpbmRfY291bnRlcl9ldmVudCgpLAotCXBsdXMgZmlsbF9oZWFkZXIoKQotCi0JKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6Ci0JKiBkYWVtb24vb3BkX3BlcmZtb24uYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuYzoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jOiBjaGFuZ2VzIGZyb20KLQlhYm92ZQotCi0yMDAzLTEwLTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogZml4IGhlbHAgdGV4dAotCi0JKiBkYWVtb24vbGlibGVnYWN5L2luaXQuYzoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuaDoKLQkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuYzogY2xlYW4gdXAgaGVhZGVycwotCWEgYml0Ci0KLTIwMDMtMTAtMjcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGNoZWNrIHdlIGNhbiBnZXQga2VybmVsIGludGVyZmFjZQotCi0yMDAzLTEwLTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUuYW06IHJlbW92ZSB1bm5lZWRlZAotCS1JIGZvciBhYmkKLQotMjAwMy0xMC0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vaW5pdC5jOgotCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IG1vdmUgdGltZXIgaW50ZXJydXB0IGNoZWNrcwotCWludG8gcGVyZm1vbgotCi0yMDAzLTEwLTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogdXNlIG9wX2dldF9pbnRlcmZhY2UoKQotCi0JKiBsaWJvcC9vcF9nZXRfaW50ZXJmYWNlLmM6IHNpbXBsaWZ5Ci0KLTIwMDMtMTAtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydC5oOiBjaGVjayBzZXBhcmF0ZV9saWIgY2hlY2tib3ggd2hlbgotCSAgc2VwYXJhdGVfa2VybmVsX2NiIGlzIGNoZWNrZWQKLQotMjAwMy0xMC0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBhbGxvdyB0byByZXNldCAtLWltYWdlIHRocm91Z2ggZW1wdHkgLS1pbWFnZT0KLQkgIG9yIC0taW1hZ2UKLQotMjAwMy0xMC0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2Nvb2tpZS5jOiByZWR1Y2UgdGhlIGhhc2ggdGFibGUgc2l6ZSBzb21ld2hhdAotCi0JKiB2YXJpb3VzOiBmaXhlcyBmb3IgZG94eWdlbgotCi0yMDAzLTEwLTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIEhBQ0tJTkc6Ci0JKiBjb25maWd1cmUuaW46Ci0JKiBNYWtlZmlsZS5hbToKLQkqIGRhZS86IG1vdmUgYWxsIG9mIDIuNCBkYWVtb24gY29kZSB0byAuLi4KLQotCSogZGFlbW9uL2xpYmxlZ2FjeS86IGhlcmUKLQotCSogZGFlbW9uL01ha2VmaWxlLmFtOgotCSogZGFlbW9uL29wZF91dGlsLmg6Ci0JKiBkYWVtb24vb3BkX3V0aWwuYzogbW92ZSB0byAuLi4KLQotCSogZGFlbW9uL29wcm9maWxlZC5oOgotCSogZGFlbW9uL29wcm9maWxlZC5jOiBoZXJlLCBhbmQgY2FsbCB0aGUgcmlnaHQgb3BlcmF0aW9ucwotCWRlcGVuZGluZyB1cG9uIG9wcm9maWxlIGtlcm5lbCB2ZXJzaW9uLgotCi0JKiBkYWVtb24vaW5pdC5jOgotCSogZGFlbW9uL2xpYmxlZ2FjeS9pbml0LmM6IGluaXQgYW5kIHJ1bm5pbmcgZm9yIGVhY2ggdmVyc2lvbgotCi0yMDAzLTEwLTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcGRfY29va2llLmM6IG1ha2Ugc3VyZSB0byBjcmVhdGUgdGhlCi0JY29va2llIGZvciB0aGUgaWdub3JlIHZhbHVlIGlmIGl0J3Mgbm90IGZvdW5kCi0KLQkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogc2ltcGxpZnkgaWdub3JlZCBsb2dpYwotCi0yMDAzLTEwLTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9pbnRlcm5hbHMueG1sOgotCSogZG9jL2J1ZmZlcnMucG5nOiBhZGQgYSBkaWFncmFtCi0KLTIwMDMtMTAtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQlpbXBsZW1lbnQgaW1hZ2UgZmlsdGVyaW5nOgotCi0JKiBkYWUvb3BkX2ltYWdlLmg6IGFkZCBhIGZpZWxkIGZpbHRlcmVkCi0JKiBkYWUvb3BkX2ltYWdlLmM6IHNldCBpdCBhdCBpbWFnZSBjcmVhdGlvbgotCSogZGFlL29wZF9wcm9jLmM6IGRvbid0IHJlY29yZCBzYW1wbGUgd2hlbiAhaW1hZ2UtPmZpbHRlcmVkCi0KLQkqIGRhZW1vbi9vcGRfY29va2llLmg6IGFkZCBhIGZpZWxkIGZpbHRlcmVkCi0JKiBkYWVtb24vb3BkX2Nvb2tpZS5jOiBzZXQgaXQgYSBjb29raWVfZW50cnkgY3JlYXRpb24uCi0JKiBkYWVtb24vb3BkX3NmaWxlLmg6IGFkZCBhIGZpZWxkIGZpbHRlcmVkCi0JKiBkYWVtb24vb3BkX2ZpbGUuYzogc2V0IGl0IGEgb3BkX3NmaWxlIHN0cnVjdCBjcmVhdGlvbgotCSogZGFlbW9uL29wZF90cmFucy5jOiByZWNvcmQgc2FtcGxlIGlmIGZpbHRlcmVkCi0KLQkqIGRhZW1vbi9vcGRfdXRpbC5oOiBleHBvcnQgb3BkX2hhc2hfbmFtZSgpLCBpc19pbWFnZV9maWx0ZXJlZCgpCi0JKiBkYWVtb24vb3BkX3V0aWwuYzogaW1wbGVtZW50IC0taW1hZ2U9eHh4Ci0KLQkqIG9wcm9maWxlZC5jOiAjaW5jbHVkZSAiY29uZmlnLmgiIG5vdCA8PgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGhhbmRsZSAtLWltYWdlCi0KLTIwMDMtMTAtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDogcmVtb3ZlIHNvbWUgb3V0ZGF0ZWQgc3R1ZmYKLQotMjAwMy0xMC0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2MvaW50ZXJuYWxzLnhtbDogbW9yZSBkb2NzCi0KLTIwMDMtMTAtMjUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IGNsZWFudXBzCi0KLTIwMDMtMTAtMjQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL2ludGVybmFscy54bWw6IHdyaXRlIHNvbWUgbW9yZQotCi0yMDAzLTEwLTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjcuMWN2cwotCi0yMDAzLTEwLTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wL3Rlc3RzL01ha2VmaWxlLmFtOgotCSogbGlib3AvdGVzdHMvbG9hZF9ldmVudHNfZmlsZXNfdGVzdHMuYzoKLQkqIGxpYm9wL3Rlc3RzL2FsbG9jX2NvdW50ZXJfdGVzdHMuYzogZml4Ci0JbWFrZSBkaXN0Y2hlY2sKLQotCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuNwotIAotMjAwMy0xMC0yMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vTWFrZWZpbGUuYW06Ci0JKiBkYWVtb24vb3BkX3BlcmZtb24uaDoKLQkqIGRhZW1vbi9vcGRfcGVyZm1vbi5jOiByZS1lbmFibGUuIFdhaXQgZm9yIGNoaWxkcmVuLgotCU1vcmUgc2FmZXR5IGNoZWNraW5nLgotCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IG9ubHkgdXNlIHBlcmZtb24gaWYgIXRpbWVyCi0KLTIwMDMtMTAtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjogcy9waHlzaWNhbCBDUFUvQ1BVLwotCi0yMDAzLTEwLTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9NYWtlZmlsZS5hbToKLQkqIGRhZW1vbi9vcGRfcGVyZm1vbi5oOiBkaXNhYmxlIHBlcmZtb24gbmljZWx5Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiBGaXggcmVhZGluZyBvZiBzZXBhcmF0ZQotCXBhcmFtZXRlcnMuIEFkZCBDUFUgYW5kIHRocmVhZCBzZXBhcmF0aW9uCi0KLTIwMDMtMTAtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IHJlbGF0aXZlIHBhdGggYXJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyCi0JICBub3QgZmlsZW5hbWUuCi0KLTIwMDMtMTAtMjAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGRvYy9vcHJlcG9ydC4xLmluOiBmaXggLS1tZXJnZSBkb2NzIGFuZCBwcm9maWxlIHNwZWNzCi0KLTIwMDMtMTAtMjAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuYzoKLQkqIGxpYmFiaS9hYmkuY3BwOgotCSogbGliYWJpL2FiaV90ZXN0LmNwcDoKLQkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOgotCSogbGlib3Avb3BfY29uZmlnLmg6Ci0JKiBsaWJvcC9vcF9zYW1wbGVfZmlsZS5oOgotCSogbGlicHAvb3BfaGVhZGVyLmNwcDogcmVtb3ZlIGN0ciBhbmQgc2VwYXJhdGVfKiBmcm9tCi0JaGVhZGVyLiBSZS1hcnJhbmdlIGl0IGEgbGl0dGxlLCBhbmQgbWFrZSBpdCA2NCBieXRlcwotCW9uIElMUDMyLiBCdW1wIHRoZSB2ZXJzaW9uLgotCi0yMDAzLTEwLTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiByZXdvcmsgdGhlIGNsYXNoaW5nLWF4ZXMKLQllcnJvciBtZXNzYWdlIHRvIGJlIG5pY2VyIHRvIHRoZSB1c2VyCi0KLTIwMDMtMTAtMjAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IGlmIHRpZCA9PSB0Z2lkIGZvcgotCWV2ZXJ5IHByb2ZpbGUgY2xhc3MsIGFsbG93IGF4ZXMgb2YgYm90aCBUSUQgYW5kIFRHSUQKLQktIHRoZXJlIGlzIG5vIGFjdHVhbCBkaWZmZXJlbmNlLCBvbmx5IHRoZW9yZXRpY2FsCi0KLTIwMDMtMTAtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzogY29ycmVjdCBhbiBlcnJvciBtZXNzYWdlCi0JKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmg6IHJlbW92ZSBib2d1cyBGSVhNRQotCSogbGlidXRpbCsrL2NoaWxkX3JlYWRlci5jcHA6IGF2b2lkIHF1YWRyYXRpYyBiZWhhdmlvdXIgaWYgY2hpbGQgZG9lcyBhCi0JICBsb3Qgb2Ygb3V0cHV0IGluIHN0ZGVycgotCSogbGlicHAvb3BncHJvZi5jcHA6IGZpeCBjb21tZW50Ci0KLTIwMDMtMTAtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHJlZHVuZGFudCByZXR1cm4KLQotMjAwMy0xMC0xOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcC9vcF9ldmVudHMuYzogbW92ZSB0byBhIGZpeGVkIHZhbHVlIGZvciB0aGUgZGVmYXVsdAotCWV2ZW50IGNvdW50IHZhbHVlCi0KLTIwMDMtMTAtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQlyZW1vdmUgc29tZSBGSVhNRToKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDogcmVtb3ZlIGZpcnN0X291dHB1dCBib29sIG1lbWJlcgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IGNhbGwgb3V0cHV0X2hlYWRlciBmcm9tIHRoZSByaWdodCBwbGFjZQotCSogbGlicHAvb3BfaGVhZGVyLmg6IHJlbW92ZSBib2d1cyBGSVhNRQotCi0JKiBsaWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbTogZml4IGRlcGVuZGVuY2llcyBvbiBtYW5nbGVkLW5hbWUgZmlsZSwKLQkgIGZpeCBtYWtlIGRpc3QKLQkqIGxpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZS5pbjogc2ltcGxpZnkgYSBiaXQgYW5kIHJlbW92ZSBhIGJvZ3VzCi0JICBGSVhNRQotCSogbGlicmVnZXgvdGVzdHMvcmVnZXhfdGVzdC5jcHA6IGZpeCBjb21tZW50Ci0KLQkqIG1vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmM6Ci0JKiBtb2R1bGUveDg2L2hhbW1lcl9vcF9zeXNjYWxscy5jOgotCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOiByZW1vdmUgc29tZSBGSVhNRQotCi0yMDAzLTEwLTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogY2xhcmlmeSBzdWdnZXN0aW9uLgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IHVwZGF0ZSBvcHRpb25zIGhlbHAgc3RyaW5nIGZvciAtLW1lcmdlLgotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgotCSogcHAvY29tbW9uX29wdGlvbi5jcHA6Ci0JKiBwcC9wb3B1bGF0ZS5jcHA6ICc7JyBhcmUgbm90IG5lY2Vzc2FyeSB0byBlbmQgbmFtZXNwYWNlCi0KLTIwMDMtMTAtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiB1c2UgYSBzZXQ8cHJvZmlsZV9jbGFzc2VzPiBpbnN0ZWFkCi0JICBvZiBhIHZlY3RvcjwuLi4+IHRvIHJlcGxhY2UgYSBPKE4qTSkgYnkgYSBPKE4qbG9nKE0pKSBiZWhhdmlvci4KLQkgIChOIG51bWJlciBvZiBzYW1wbGVzIGZpbGVzLCBNIG51bWJlciBvZiBjbGFzcykuCi0KLTIwMDMtMTAtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBzaG93IGZpbGVuYW1lIHdoZW4gd2FybmluZyBhYm91dCBubyBkZWJ1ZwotCSAgaW5mb3JtYXRpb24gYXZhaWxhYmxlLiBnZXRfbGluZW5yKCk6IHMvZmlsZW5hbWUvc291cmNlX2ZpbGVuYW1lLwotCi0yMDAzLTEwLTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBldmVudHMvaWE2NC9pdGFuaXVtL2V2ZW50czogY291bnRlciAwLDEgbm90IDIsMyBmb3IgSUE2NF9JTlNUX1JFVElSRUQKLQotCSogZGFlbW9uL29wZF91dGlsLmM6IG9wZF9wYXJzZV9ldmVudHMoKSBmaXggdXNlIGFmdGVyIGZyZWUuCi0KLTIwMDMtMTAtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IGRpc2FibGUgdGhlIGNvZGUKLQotMjAwMy0xMC0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX3BlcmZtb24uYzogZmZsdXNoZXMgdG8gaW1wcm92ZQotCW9yZGVyIG9mIGRlYnVnIGxvZwotCi0yMDAzLTEwLTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcGRfcGVyZm1vbi5jOiBmaXggZHVtYiBhbGxvY2F0aW9uIHR5cG87Ci0JaGFuZGxlIHNpZ25hbHMgY29ycmVjdGx5OyB3YWl0IGZvciBjaGlsZHJlbiB0bwotCWNvbWUgdXAgYmVmb3JlIHJldHVybmluZwotCi0yMDAzLTEwLTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgotCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOgotCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6Ci0JKiBkYWVtb24vb3BkX3V0aWwuYzogY2hlY2sgd2Ugbm90IG92ZXJmbG93IG9wX25yX2NvdW50ZXJzCi0KLTIwMDMtMTAtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGV2ZW50cy9pYTY0L2l0YW5pdW0vZXZlbnRzOiBjb3JyZWN0IGNvdW50ZXIgYXZhaWxhYmxlIGFjY29yZGluZwotCSAgdG8gaW50ZWwgZG9jLgotCi0yMDAzLTEwLTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZS9vcGRfaW1hZ2UuYzoKLQkqIGRhZS9vcGRfa2VybmVsLmM6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOgotCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOgotCSogZGFlbW9uL29wZF9zZmlsZS5jOgotCSogZGFlbW9uL29wZF90cmFucy5jOgotCSogZGFlbW9uL29wZF91dGlsLmM6Ci0JKiBkYWVtb24vb3BkX3V0aWwuaDoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogbWVyZ2UgdGhlIG9wdGlvbnMgaGFuZGxpbmcKLQlmb3IgZGFlIGFuZCBkYWVtb24KLQotMjAwMy0xMC0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6Ci0JKiBtb2R1bGUvaWE2NC9vcF9wbXUuYzogYml0IG1hc2sgZm9yIGV2ZW50IHNlbGVjdCBmaWVsZCBpcyA4IGJpdHMgbm90IDcKLQotMjAwMy0xMC0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBtNC9maW5ka2VybmVsLm00OgotCSogdXRpbHMvb3Bjb250cm9sOiAyLjUgcmVmcyAtPiAyLjYKLQotMjAwMy0xMC0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IG1lcmdlIHNvbWUgMi40LzYgY29kZQotCi0yMDAzLTEwLTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZS9vcGRfaW1hZ2UuYzoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiB1dGlscy9vcGNvbnRyb2w6IHVzZSAtLWV2ZW50cyBmb3IgMi40IGRhZW1vbgotCXRvbwotCi0JKiBkYWVtb24vb3BkX3BlcmZtb24uYzoKLQkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuYzogZml4IGNvdW50ZXIgbnVtYmVyaW5nCi0Jb24gIXBlcmZtb24KLQotMjAwMy0xMC0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IHhtZW1kdXAgbm90IHhtZW1kdW1wCi0KLTIwMDMtMTAtMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IHByb3BhZ2F0ZSBhIFNJR1RFUk0KLQl1cCB0byB0aGUgcGFyZW50LgotCi0yMDAzLTEwLTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIG00L3BlcmZtb24ubTQ6Ci0JKiBjb25maWd1cmUuaW46IHJlbW92ZSBwZm1saWIgY2hlY2tzCi0KLQkqIGRhZW1vbi9vcGRfdXRpbC5oOgotCSogZGFlbW9uL29wZF91dGlsLmM6Ci0JKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHBhcnNlIG1vcmUgZGV0YWlsZWQgZXZlbnRzCi0JcGFzc2VkIG9uIGNvbW1hbmQgbGluZQotCi0JKiBkYWVtb24vb3BkX3BlcmZtb24uaDoKLQkqIGRhZW1vbi9vcGRfcGVyZm1vbi5jOiBkb24ndCB1c2UgbGlicGZtIGF0IGFsbCwKLQlkbyBpdCBvdXJzZWx2ZXMuCi0KLQkqIHV0aWxzL29wY29udHJvbDogcGFzcyBtb3JlIG9mIHRoZSBldmVudHMgaW5mbyB0bwotCXRoZSBkYWVtb24KLQotMjAwMy0xMC0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBtNC9wZXJmbW9uLm00OgotCSogY29uZmlndXJlLmluOiBsb29rIGZvciBwZm1saWIgMwotCi0JKiBkYWVtb24vTWFrZWZpbGUuYW06Ci0JKiBkYWVtb24vb3BkX3BlcmZtb24uaDoKLQkqIGRhZW1vbi9vcGRfcGVyZm1vbi5jOiBpbnRlcmZhY2UgdG8gcGVyZm1vbiBvbiAyLjYgSUE2NAotCi0JKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHJlYWQgZXZlbnQgZGVzY3JpcHRpb25zIGZyb20gY29tbWFuZAotCWxpbmUgbm90IG9wcm9maWxlZnMKLQotCSogZGFlbW9uL29wZF91dGlsLmg6Ci0JKiBkYWVtb24vb3BkX3V0aWwuYzogcmVjZWl2ZSBTSUdVU1IxLzIgZm9yIHBlcmZtb24KLQotCSogdXRpbHMvb3Bjb250cm9sOiBoYW5kbGUgbXVsdGlwbGUgb3Byb2ZpbGVkcy4gU2VuZCBTSUdVU1IxLzIKLQlvbiBzdGFydC9zdG9wLiBQYXNzIGluIGV2ZW50cyBsaXN0IHRvIG9wcm9maWxlZCBvbiAyLjYuIERvbid0Ci0JYXR0ZW1wdCB0byBmaWxsIGluIG9wcm9maWxlZnMgd2l0aCBldmVudCBpbmZvIGlmIHVzaW5nIHBlcmZtb24uCi0KLTIwMDMtMTAtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuYzoKLQkqIGRhZW1vbi9vcGRfc2ZpbGUuYzoKLQkqIGRhZW1vbi9vcGRfc2ZpbGUuaDogcHJvdGVjdCB0aGUgc2ZpbGUgd2UgYXJlIGFjdGluZyBvbiB0byBiZSBmcmVlZAotCSAgYnkgc2ZpbGVfbHJ1X2NsZWFyKCkKLQotCSogbGliZGIvZGJfbWFuYWdlLmM6Ci0JKiBsaWJkYi9vZGJfaGFzaC5oOiBEbyBub3QgcHV0IGhhc2gtPmRlc2NyIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZQotCSAgd2hlbiBhIGZhaWx1cmUgb2NjdXIuCi0KLTIwMDMtMTAtMTMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS9vcHJvZmlsZS5jOiBkb24ndCByZXN0b3JlIHN5c2NhbGwgYW5kIHN0b3AgY291bnRlciB0d2ljZQotCi0yMDAzLTEwLTEzICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGxpYm9wL29wX3BhcnNlX2V2ZW50LmMocGFyc2VfZXZlbnRzKTogQ29ycmVjdCBmcHJpbnRmLgotCi0yMDAzLTEwLTEzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBtb2R1bGUveDg2L2hhbW1lcl9vcF9zeXNjYWxscy5jOiBwYXNzIHRnaWQgdG8gZGFlbW9uLiBOb3QgdGVzdGVkIQotCi0yMDAzLTEwLTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogc2hhcmUgLS1zZXBhcmF0ZS1jcHUvdGhyZWFkIGNvZGUgbm93Ci0KLTIwMDMtMTAtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYWRkIGxpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZS5pbgotCSogbGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lLnR4dDogbW92ZSAuLi4KLQkqIGxpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZS5pbjogaGVyZSwgdHVuZSB0byBzdXBwb3J0IGRpZmZlcmVudCBhcmNoCi0JKiBsaWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbTogcy9tYW5nbGVkLW5hbWUudHh0L21hbmdsZWQtbmFtZS5pbgotCSogbGlicmVnZXgvc3RsLnBhdC5pbjogZml4IGl0ZXJhdG9yPC4uLiBwdHJkaWZmX3Q+Ci0JKiBsaWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbTogdXBkYXRlIGFjY29yZGluZyB0byBmaWxlbmFtZSBjaGFuZ2UKLQotCSogbGlicmVnZXgvdGVzdHMvcmVnZXhfdGVzdC5jcHA6IHJlYWxseSBmYWlscyBvbiBleGNlcHRpb24uCi0KLTIwMDMtMTAtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzogZG9uJ3Qgc2V0IGNwdV9udW1iZXIgd2hlbiAhLS1zZXBhcmF0ZT1jcHUKLQkKLQkqIGxpYm9wL3Rlc3RzL2FsbG9jX2NvdW50ZXJfdGVzdHMuYzogcHJpbnRmIGZvcm1hdCBmb3IgNjQgYml0cyBhcmNoCi0JKiBsaWJvcC90ZXN0cy9jcHVfdHlwZV90ZXN0cy5jOiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0JKiBsaWJvcC90ZXN0cy9wYXJzZV9ldmVudF90ZXN0cy5jOiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLTIwMDMtMTAtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL29wX2ludGVyZmFjZS5oOiBzdHJ1Y3Qgb3Bfc2FtcGxlOiByZW1vdmUgcGFja2VkIGF0dHJpYnV0ZQotCi0yMDAzLTEwLTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvb3BkX2ltYWdlLmM6Ci0JKiBkYWUvb3BkX2ltYWdlLmg6IHJlZmVyZW5jZSBjb3VudCBvcGRfaW1hZ2UuIFJlbW92ZSBtb2RpZmljYXRpb24gdGltZQotCSAgY2hlY2tpbmcuIFJlbW92ZSBoYXNoIGZpZWxkLiBUaWR5Ci0JKiBkYWUvb3BkX2tlcm5lbC5jOiBwYXNzIHRpZCwgdGdpZCB0byBvcF9nZXRfa2VybmVsX2ltYWdlKCkKLQkqIGRhZS9vcGRfbWFwcGluZy5jOgotCSogZGFlL29wZF9tYXBwaW5nLmg6IHVzZSBtb2R1bGUgaGFzaCBjb2RlIGZvciBpbWFnZSBuYW1lIHRvIGluZGV4Ci0JICBhIGNhY2hlIG9mIG5hbWUsIHRoaXMgaGFzaCBjb2RlIGlzIG5vIGxvbmdlciB1c2VkIGVsc2V3aGVyZS4gV2hlbgotCSAga2lsbGluZyBtYXAgZGVsZXRlIGFzc29jaWF0ZWQgaW1hZ2UsIHJlZmVyZW5jZSBjb3VudCBvZiBpbWFnZQotCSAgd2lsbCBjaGVjayBmb3IgYSByZWFsIGRlbGV0ZS4KLQkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOiBnZXQgdGdpZCBmcm9tIC9wcm9jL3BpZC9zdGF0dXMKLQkqIGRhZS9vcGRfcHJvYy5jOiBjcmVhdGUgYW4gb3BkX3Byb2MgYnkgcHJvY2VzcyB3aGVuCi0JICBzZXBhcmF0ZV90aHJlYWQgPT0gdHJ1ZS4gVGlkeSBieSBhZGRpbmcgYW4gb3BkX2Zvcl9lYWNoX3Byb2MoKQotCSogZGFlL29wZF9wcm9jLmg6IGFkZCB0aWQvdGdpZCB0byBvcGRfcHJvYyBzdHJ1Y3QKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5oOiBscnUgYWxsIHNhbXBsZXMgZmlsZXMsIGFsbG93aW5nIHRvIGNsZWFudXAKLQkgIGEgcGFydCBvZiB0aGUgbHJ1IGlmIHdlIGdvIG91dCBvZiByZXNvdXJjZS4gUmVtb3ZlCi0JICBvcGRfaGFuZGxlX29sZF9zYW1wbGVfZmlsZXMoKSBzaW5jZSB3ZSBubyBsb25nZXIgY2hlY2sgZm9yIGltYWdlCi0JICBtb2RpZmljYXRpb24gdGltZS4KLQkqIGRhZS9vcGRfc3RhdHMuYzoKLQkqIGRhZS9vcGRfc3RhdHMuaDogc3RhdGlzdGljcyBmb3Igb3BkX2ltYWdlIHN0cnVjdCBkZXB0aCBzZWFyY2gKLQkqIGRhZS9vcHJvZmlsZWQuYzogYWRkIC0tc2VwYXJhdGUtY3B1IGFuZCAtLXNlcGFyYXRlLXRocmVhZAotCSogbGlib3Avb3BfaW50ZXJmYWNlLmg6IGFkZCB0Z2lkIHRvIHNhbXBsZXMgc3RydWN0IHBhc3NlZCBmcm9tIG1vZHVsZQotCSAgdG8gZGFlbW9uLgotCSogbW9kdWxlL2NvbXBhdDIyLmg6Ci0JKiBtb2R1bGUvY29tcGF0MjQuaDogb3BfZ2V0X3RnaWQoKSByZXR1cm4gdGdpZCwgZmFsbCBiYWNrIHRvIHJldHVybgotCSAgdGlkIG9uIDIuMiBrZXJuZWwuCi0JKiBtb2R1bGUvb3Byb2ZpbGUuYzoKLQkqIG1vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmM6IHBhc3MgdGdpZCB0byBkYWVtb24uIE5PVCBURVNURUQgYnV0IEkKLQkgIHRoaW5rIGl0J3Mgb2suIE5vdGUgdGhhbiBldmVuIGlmIGl0J3MgYnJva2VuIGlhNjQgc2hvdWxkIHdvcmsgdy9vCi0JICAtLXNlcGFyYXRlPXRocmVhZAotCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOiBwYXNzIHRnaWQgdG8gZGFlbW9uLgotCSogdXRpbHMvb3Bjb250cm9sOiBlbmFibGUgMi40IHRocmVhZC9jcHUgc2VwYXJhdGlvbgotCi0JKiBsaWJkYi90ZXN0cy9kYl90ZXN0LmM6IHZlcmJvc2Ugb24gd2hlbiB3ZSBwcm92aWRlIGZpbGVuYW1lIG9mIGRiIGZpbGUKLQkgIHRvIHRlc3Qgb24gY29tbWFuZCBsaW5lLgotCi0yMDAzLTEwLTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgotCSogbGlib3Avb3BfY3B1X3R5cGUuYzogY29uc3RpZmljYXRpb24KLQkqIHV0aWxzL29wX2hlbHAuYzogY2hlY2sgb25seSBpZiBDUFVfTk9fR09PRCBub3QgcmFuZ2UKLQotCSogbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbToKLQkqIGxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtOgotCSogbGliZGIvdGVzdHMvTWFrZWZpbGUuYW06IHMvVEVTVCA9ICguKikvVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfS8KLQotCSogbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jOiBjb21tZW50IGZpeAotCi0JKiBsaWJvcC90ZXN0cy9NYWtlZmlsZS5hbToKLQkqIGxpYm9wL3Rlc3RzL2NwdV90eXBlX3Rlc3RzLmM6IG5ldyBmaWxlLCB0ZXN0IGxpYm9wL29wX2NwdV90eXBlLmMKLQotMjAwMy0xMC0xMCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBsaWJvcC9vcF9jcHVfdHlwZS5oIChvcF9nZXRfY3B1X251bWJlcik6IENsYXJpZnkgY29tbWVudC4KLQkqIGxpYm9wL29wX2NwdV90eXBlLmMgKG9wX2dldF9jcHVfbnVtYmVyKTogQ2hlY2sgbnVtYmVyLgotCSogdXRpbHMvb3BfaGVscC5jIChtYWluKTogTWFrZSBjaGVjayB3aXRoIENQVV9OT19HT09ELgotCi0yMDAzLTEwLTEwICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGxpYm9wL29wX2NwdV90eXBlLmggKG9wX2dldF9jcHVfbnVtYmVyKTogRGVjbGFyZS4KLQkqIGxpYm9wL29wX2NwdV90eXBlLmMgKG9wX2dldF9jcHVfbnVtYmVyKTogTmV3LgotCSAgKG9wX2dldF9jcHVfdHlwZSk6IFVzZSBvcF9nZXRfY3B1X251bWJlci4KLQkqIHV0aWxzL29wX2hlbHAuYyAobWFpbik6IFVzZSBvcF9nZXRfY3B1X251bWJlci4KLQotMjAwMy0xMC0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcC9vcF9wYXJzZV9ldmVudC5jOiBmaXggY29tcGlsZSBmb3IgSUE2NAotCi0yMDAzLTEwLTA5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50ICJubyByZXN1bHRzIiBhbmQKLQlob3cgdG8gZml4IGl0Ci0KLTIwMDMtMTAtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3BfaGVscC5jOiBzdGFuZGFyZGlzZSBuYW1lCi0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IFF0IDIuMy4xIGNvbXBpbGUgZml4Ci0JKGJ1ZyA4MTk5NDMpCi0KLTIwMDMtMTAtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfa2VybmVsLmM6IG1lbW9yeSBsZWFrCi0KLQkqIGRhZS9vcGRfbWFwcGluZy5jOgotCSogZGFlL29wZF9tYXBwaW5nLmg6Ci0JKiBkYWUvb3BkX3BhcnNlX3Byb2MuYzoKLQkqIGRhZS9vcGRfcHJvYy5jOiAKLQkqIGRhZS9vcGRfcHJvYy5oOiB1c2UgYSBsaXN0IG9mIHN0cnVjdCBvcGRfbWFwIGluc3RlYWQgb2YgYW4gYXJyYXksCi0JICByZW1vdmUgbGFzdF9tYXAgb3B0aW1pemF0aW9uLgotCi0JKiBkYWUvb3Byb2ZpbGVkLmM6IG1lbW9yeSBsZWFrCi0JCi0JKiBsaWJ1dGlsL29wX2NwdWZyZXEuYzogbWVtb3J5IGxlYWssIEZJTEUqIGxlYWsKLQkqIGxpYnV0aWwvb3BfbGlzdC5oOiBmaXggQGF1dGhvcgotCi0yMDAzLTEwLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWUvb3BkX3Byb2MuaDoKLQkqIGRhZS9vcGRfcHJvYy5jOiB1c2Ugc3RydWN0IGxpc3RfaGVhZCB0byBjaGFpbiBvcGRfcHJvYyBzdHJ1Y3QgaW4gaGFzaAotCSAgdGFibGUKLQotCSogdXRpbHMvb3BfaGVscC5jOiBjb21tZW50IGZpeAotCi0yMDAzLTEwLTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogd29yayBhcm91bmQgMi42IGRhZW1vbidzIHNpZ25hbAotCWhhbmRsaW5nIHJhY2UgdGhhdCBjb3VsZCBjYXVzZSBpdCB0byBoYW5nIGR1cmluZwotCWEgLS1zaHV0ZG93bgotCi0yMDAzLTEwLTA1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBldmVudHMvaTM4Ni9wNC9ldmVudHM6Ci0JKiBldmVudHMvaTM4Ni9wNC1odC9ldmVudHM6IHB1dCBHTE9CQUxfUE9XRVJfRVZFTlRTIG9uIHRvcAotCi0JKiBldmVudHMvaTM4Ni9waWkvdW5pdF9tYXNrczoKLQkqIGV2ZW50cy9pMzg2L3BpaWkvdW5pdF9tYXNrczogdHlwbyBpbiBoZWxwIHN0cmluZwotCi0JKiB1dGlscy9vcF9oZWxwLmM6IHNob3cgImNvdW50ZXI6IGFsbCIgaW5zdGVhZCBhbiBlbnVtZXJhdGlvbiBvZiBhbGwKLQkgIGNvdW50ZXIKLQotMjAwMy0xMC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZXZlbnRzLyouZXZlbnRzICoudW5pdF9tYXNrczogbW92ZSB0aGVzZSBmaWxlcyB0byBzdWJkaXIgbmFtZWQKLQkgIGFyY2gvcHJvY2Vzc29yX25hbWUvZXZlbnRzIGFuZCBhcmNoL3Byb2Nlc3Nvcl9uYW1lL3VuaXRfbWFza3MKLQkqIGV2ZW50cy9NYWtlZmlsZS5hbTogdXBkYXRlIGFjY29yZGluZwotCQotCSogbGlib3Avb3BfZXZlbnRzLmM6IG5vdyBpdCdzIHNhZmUgdG8gYWxsb3cgbG9hZGluZyBldmVudHMgZmlsZSBmcm9tIGEKLQkgIGRpcmVjdG9yeSBwcm92aWRlZCB0aHJvdWdoIGVudmlyb25tZW50IHZhciBPUFJPRklMRV9FVkVOVFNfRklMRV9ESVIKLQkqIGxpYm9wL3Rlc3RzL2FsbG9jX2NvdW50ZXJfdGVzdHMuYzogdXNlIGl0Ci0JKiBsaWJvcC90ZXN0cy9sb2FkX2V2ZW50c19maWxlc190ZXN0cy5jOiB1c2UgaXQKLQotMjAwMy0xMC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfZXZlbnRzLmM6IHJldmVydCBsYXN0IGNvbW1pdCAoYWxsb3dlZCB0byBmaW5kIGV2ZW50cyBmaWxlcwotCSAgZGVzY3JpcHRpb24gZGlyZWN0b3J5IGluIGFsdGVybmF0ZSBkaXJlY3RvcnkpCi0KLQkqIGxpYm9wL3Rlc3RzL01ha2VmaWxlLmFtOgotCSogbGlib3AvdGVzdHMvbG9hZF9ldmVudHNfZmlsZXNfdGVzdHMuYzogbmV3IGZpbGVzLiBWYWxpZGF0ZSBldmVudHMKLQkgIGRlc2NyaXB0aW9uIGZpbGUgYnkgbG9hZGluZyB0aGVtLgotCi0JKiBsaWJ1dGlsL29wX2NwdWZyZXEuYzogY29tbWVudCB3aHkgd2UgZG9uJ3QgaGF2ZSBhbnkgY29kZSBoYW5kbGluZwotCSAgczM5MAotCi0yMDAzLTEwLTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBsaWJvcC9NYWtlZmlsZS5hbTogbmV3IHN1YmRpcgotCSogbGlib3Avb3BfZXZlbnRzLmM6IGFsbG93IHRvIHJldHJpZXZlIGV2ZW50cyBmaWxlIGRpciB0aHJvdWdoCi0JICBlbnZpcm9ubWVudCB2YXJpYWJsZQotCSogdXRpbHMvb3BfaGVscC5jOiBtb3ZlIHBhcnNlX2V2ZW50cygpIGFuZCBwYXJzZWRfZXZlbnQgc3RydWN0IHRvIC4uLgotCSogbGlib3Avb3BfcGFyc2VfZXZlbnQuaDoKLQkqIGxpYm9wL29wX3BhcnNlX2V2ZW50LmM6IHRoZXNlIG5ldyBmaWxlcwotCi0JKiBsaWJvcC90ZXN0cy9NYWtlZmlsZS5hbTogbmV3IHRlc3RzIHN1YmRpcgotCSogbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jOiBldmVudHMgbWFwcGluZyB0byBjb3VudGVyIG5yIHRlc3RzCi0JKiBsaWJvcC90ZXN0cy9wYXJzZV9ldmVudF90ZXN0cy5jOiBldmVudCBwYXJzaW5nIHRlc3RzCi0KLTIwMDMtMTAtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL29wX2FsbG9jX2NvdW50ZXIuYzogYWRkIGZvcndhcmQgZGVjbGFyYXRpb24KLQkqIGxpYm9wL29wX2FsbG9jX2NvdW50ZXIuYzogYWxsb2MgY291bnRlciBpbiBpbmNyZWFzaW5nIG51bWJlciBvcmRlciwKLQkgIGl0J3MgbGVzcyBzdXJwcmlzaW5nLgotCi0yMDAzLTEwLTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJkYi90ZXN0cy9kYl90ZXN0LmM6IGlmIHByZXZpb3VzIHRlc3RzIGZhaWxzIGEgY29ycnVwdGVkIHNhbXBsZXMKLQkgIGZpbGUgY2FuIGV4aXN0IGluIHRlc3QgZGlyIGFuZCB3aWxsIGJlIHJlLXVzZWQsIHJlbW92ZSgpIGl0LgotCi0yMDAzLTEwLTAxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcGRfc2ZpbGUuYzoKLQkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOgotCSogbGlib3Avb3BfaW50ZXJmYWNlLmg6Ci0JKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmg6IHNtYWxsIGNsZWFudXBzCi0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBkb24ndCBjb21wbGFpbiBhYm91dAotCSIteCAtbSBhbGwiCi0KLTIwMDMtMDktMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwvb3BfZmlsZS5jOgotCSogbGlidXRpbC90ZXN0cy9maWxlX3Rlc3RzLmM6IGhvbm9yIHBvc2l4ICIvLyIgZmlsZW5hbWUgbmFtZXNwYWNlCi0KLTIwMDMtMDktMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL29wX2FsbG9jX2NvdW50ZXIuaDoKLQkqIGxpYm9wL29wX2FsbG9jX2NvdW50ZXIuYzogY2hhbmdlIGFsbG9jYXRvciBieSBhIGJhY2t0cmFja2luZwotCSAgYWxnb3JpdGhtIHdhbGtpbmcgb25seSB0aHJvdWdoIHBvc3NpYmxlIHNvbHV0aW9uLgotCi0yMDAzLTA5LTI2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJkYi90ZXN0cy9kYl90ZXN0LmM6IHN1Y2Nlc3MgbXVzdCBiZSBzaWxlbnQKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIGxpYnV0aWwvb3BfZGV2aWNlaW8uYzoKLQkqIGxpYnV0aWwvb3BfZGV2aWNlaW8uaDogb3Bfb3Blbl9kZXZpY2UoKTogcmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIKLQkgIGZhdGFsCi0KLTIwMDMtMDktMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwvdGVzdHMvZmlsZV90ZXN0cy5jOiBGaXggc29tZSB0ZXN0OiBpbiBzb21lIGNhc2UgdGhlIHBhdGhuYW1lCi0JICBjb21wb25lbnQgbXVzdCBiZSB2YWxpZCBzaW5jZSB3ZSBsc3RhdCgpIHRoZW0uIEZpeCBhIHNlZ2ZhdWx0IGR1ZQotCSAgdG8gbWlzc2luZyAnLCcgCi0KLTIwMDMtMDktMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGliZGIvdGVzdHMvTWFrZWZpbGUuYW06Ci0JKiBsaWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW06IGRvbid0IGJ1aWxkIHRlc3RzCi0JdW5sZXNzICJtYWtlIGNoZWNrIgotCi0yMDAzLTA5LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwvb3BfZmlsZS5jOiBkb24ndCB0ZXN0IGZvciBOVUxMIHBhdGgKLQlwYXNzZWQgaW4sIHdlIHdhbnQgdG8gY3Jhc2ggaGVyZSBpbnN0ZWFkIG9mCi0JaW4geHN0cmR1cAotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBsaWJ1dGlsL01ha2VmaWxlLmFtOgotCSogbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwvdGVzdHMvZmlsZV90ZXN0cy5jOgotCSogbGlidXRpbC90ZXN0cy9zdHJpbmdfdGVzdHMuYzogYWRkIHNvbWUgdW5pdCB0ZXN0cwotCWZvciBsaWJ1dGlsIHN0cmluZyBhbmQgcGF0aCBoYW5kbGluZwotCi0yMDAzLTA5LTI2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJkYi9kYl9kZWJ1Zy5jOiByZW1vdmUgdXNlbGVzcyBkaXNwbGF5IGludGVyZmFjZQotCSogbGliZGIvZGJfZGJfdHJhdmVsLmM6IHJlbW92ZSBjYWxsYmFjayBpbnRlcmZhY2UKLQkqIGxpYmRiL29kYl9oYXNoLmg6IHJlbW92ZSBkaXNwbGF5L2NhbGxiYWNrIGludGVyZmFjZQotCSogbGliZGIvZGJfdGVzdC5jcHA6IG1vdmUgdG8gdGVzdHMgc3ViZGlyCi0JKiBsaWJkYi9NYWtlZmlsZS5hbTogdXBkYXRlIGFjY29yZGluZwotCSogbGliZGIvdGVzdHM6IG5ldyBkaXIKLQkqIGxpYmRiL3Rlc3RzLy5jdnNpZ25vcmU6Ci0JKiBsaWJkYi90ZXN0cy9NYWtlZmlsZS5hbTogbmV3IGZpbGVzCi0JKiBsaWJkYi90ZXN0cy9kYl90ZXN0LmNwcDogc2hvcnRlciB0ZXN0cwotCi0JKiBsaWJyZWdleC9tYW5nbGVkLW5hbWUudHh0OgotCSogbGlicmVnZXgvcmVnZXhfdGVzdGMuY3BwOiBtb3ZlIHRvIC4uLgotCSogbGlicmVnZXgvdGVzdHM6IG5ldyBkaXJlY3RvcnkKLQkqIGxpYmRiL01ha2VmaWxlLmFtOiB1cGRhdGUgYWNjb3JkaW5nCi0JKiBsaWJyZWdleC90ZXN0cy8uY3ZzaWdub3JlOgotCSogbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW06IG5ldyBmaWxlcwotCi0yMDAzLTA5LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6Ci0JKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogc21hbGwgY2xlYW51cHMKLQotMjAwMy0wOS0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2Nvb2tpZS5jOgotCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKLQkqIGRhZW1vbi9vcGRfc2ZpbGUuYzoKLQkqIGRhZW1vbi9vcGRfdHJhbnMuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogdHJpdmlhbCBjbGVhbnVwcwotCi0yMDAzLTA5LTI1ICBNYXJjIEhlcmJlcnQgIDxtYXJjLmhlcmJlcnRAZW5zLWx5b24uZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogZml4IHByZWZpeCBzdHVmZiB0byBhbGxvdyBzdG93Ci0JdG8gd29yawotCi0yMDAzLTA5LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwY2gtYysrLmg6IHJlbW92ZQotCSogTWFrZWZpbGUuYW06IHVwZGF0ZSBhY2NvcmRpbmcKLQkqIGNvbmZpZ3VyZS5pbjogbm8gbG9uZ2VyIG5lZWQgZm9yIGNvbmRpdGlvbmFsIGVuYWJsZV9wY2gKLQkqIG00L3ByZWNvbXBpbGVkaGVhZGVyLm00OiBkb24ndCB1c2UgLVdpbnZhbGlkLXBjaAotCi0yMDAzLTA5LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWVtb24vb3BkX3NmaWxlLmM6IHNmaWxlX2xydV9jbGVhcigpIHJldHVybiAwIGlmIGxydSBpcyBlbXB0eQotCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOiBhYm9ydCgpIGlmIGxydSB3YXMgZW1wdHkgKG5vdCB0ZXN0ZWQpCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGxpa2V3aXNlOyBvcGRfYWxhcm0oKTogZG9uJ3Qgc2ZpbGVfbHJ1X2NsZWFyKCkKLQotCSogdXRpbHMvb3BfaGVscC5jOgotCSogZGFlbW9uL29wZF9zZmlsZS5oOgotCSogZGFlbW9uL29wZF9jb29raWUuaDogcy8oKS8odm9pZCkvIGluIHNvbWUgZnVuY3Rpb24gcHJvdG90eXBlIGFuZAotCSAgZGVmaW5pdGlvbgotCi0JKiBkYWVtb24vb3BkX2Nvb2tpZS5jOiBzLyJub3QgbG9va2VkIHVwIi8ibm90IGhhc2hlZCIvCi0KLTIwMDMtMDktMjUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wcm9maWxlZC5jOiBwdXNoIHJsaW1pdCBkb3duIGJhY2sgdG8gMjA0OC4KLQlUaGlzIGdpdmVzIGEgcnVubmluZyBSU1Mgb2YgYWJvdXQgMTBNYiB3aGVuIHRocmVhZAotCXByb2ZpbGluZyBvbiBteSBib3gsIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUgKGF0IDgxOTIKLQlpdCB3YXMgaGl0dGluZyA0ME1iKQotCi0yMDAzLTA5LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBjbGFyaWZ5IHdoYXQgbWVhbnMgYSBjb25maWd1cmVkIGtlcm5lbC4KLQotMjAwMy0wOS0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX3NmaWxlLmM6IGJ1bXAgTFJVX0FNT1VOVCB0byAxMDAwCi0KLTIwMDMtMDktMjQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wY29udHJvbC4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgdGhyZWFkIGFuZCBjcHUKLQlwcm9maWxpbmcgYSBiaXQKLQotCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOgotCSogZGFlbW9uL29wZF9zZmlsZS5jOgotCSogZGFlbW9uL29wcm9maWxlZC5jOgotCSogdXRpbHMvb3Bjb250cm9sOiBpbXBsZW1lbnQgcGVyLUNQVSBwcm9maWxpbmcsCi0Jbm90IHRlc3RlZCB5ZXQKLQotMjAwMy0wOS0yNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6Ci0JKiBkYWVtb24vb3BkX3NmaWxlLmM6Ci0JKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgotCSogbGliYWJpL29wX2ltcG9ydC5jcHA6Ci0JKiBsaWJkYi9kYl9pbnNlcnQuYzoKLQkqIGxpYmRiL2RiX21hbmFnZS5jOgotCSogbGliZGIvZGJfdGVzdC5jOgotCSogbGliZGIvb2RiX2hhc2guaDoKLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlLmNwcDogcmVtb3ZlIHNhbXBsZXNfb2RiX3QuZXJyX21zZwotCWVudGlyZWx5IC0gcHJlZmVyIFVOSVgtc3R5bGUgZXJybm8gcmV0dXJucy4gTW9kaWZ5Ci0JZXJyb3IgbWVzc2FnZXMgdG8gbWF0Y2gKLQotMjAwMy0wOS0yNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgotCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlLmNwcDoKLQkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6Ci0JKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDoKLQkqIGxpYmRiL2RiX3Rlc3QuYzoKLQkqIGxpYmRiL29kYl9oYXNoLmg6Ci0JKiBsaWJkYi9vZGJfbWFuYWdlLmM6IG1ha2Ugb2RiX29wZW4gcmV0dXJuIGVycm5vCi0JaW5zdGVhZCBvZiBFWElUX0ZBSUxVUkUvU1VDQ0VTUyB0byBhbGxvdyBFTUZJTEUKLQloYW5kbGluZy4gQWxzbyBkbyBub3QgbGVhayBmZCdzIG9uIGZhaWx1cmUuCi0KLQkqIGxpYnV0aWwvb3BfdHlwZXMuaDogY29va2llX3QgbW92ZWQgaW50byBkYWVtb24vCi0KLQkqIGRhZW1vbi86IG1ham9yIHJld3JpdGU6IG1vdmUgdG8gYSBoYXNoIG9uIGFsbAotCXBhcmFtZXRlcnMgb2Ygc3RydWN0IHRyYW5zaWVudC4gTG90cyBvZiByZWFkYWJpbGl0eQotCWNsZWFudXBzLCBwbHVzIHJlc2lzdGFuY2UgdG8gY29va2llIGxvb2t1cCBmYWlsdXJlcywKLQlhbmQgaGl0dGluZyBvcGVuIGZpbGUgbGltaXRzLiBBZGRpdGlvbmFsbHkgdGhyZWFkCi0JcHJvZmlsaW5nIGZvciBrZXJuZWwgdGhyZWFkcyBpcyBlbmFibGVkIG5vdy4KLQotMjAwMy0wOS0yNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IHJlbW92ZSBzdXBwb3J0IGZvciBtaXNzaW5nCi0JQ1RYX1RHSUQKLQotMjAwMy0wOS0yNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHJlbW92ZSAvcHJvYy9rY29yZSBzdXBwb3J0Ci0KLTIwMDMtMDktMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOiBib3RoIG9wX2ZpbGUuaCBhbmQgb3BfZmlsZWlvLmggYXJlIG5lZWRlZAotCi0yMDAzLTA5LTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9Db2RpbmdTdHlsZTogZG9jdW1lbnQgZG94eWdlbiBwbGFjaW5nIHJ1bGUKLQotCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5oOgotCSogbGlib3Avb3BfZ2V0X2ludGVyZmFjZS5jOgotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOgotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgotCSogbGlidXRpbCsrL29wX2JmZC5oOgotCSogbGlidXRpbC9vcF9kZXZpY2Vpby5jOgotCSogbGlidXRpbC9vcF9kZXZpY2Vpby5oOgotCSogbGlidXRpbC9vcF9nZXRfdGltZS5jOgotCSogbGlidXRpbC9vcF9nZXRfdGltZS5oOgotCSogbGlidXRpbC9vcF9saWJpYmVydHkuYzoKLQkqIGxpYnV0aWwvb3BfbGliaWJlcnR5Lmg6Ci0JKiBsaWJ1dGlsL29wX2xvY2tmaWxlLmM6Ci0JKiBsaWJ1dGlsL29wX2xvY2tmaWxlLmg6Ci0JKiBsaWJ1dGlsL29wX3BvcHQuYzoKLQkqIGxpYnV0aWwvb3BfcG9wdC5oOiBmb2xsb3cgdGhlIGFib3ZlCi0KLQkqIGxpYnV0aWwvb3BfZmlsZS5jOgotCSogbGlidXRpbC9vcF9maWxlLmg6Ci0JKiBsaWJ1dGlsL29wX2ZpbGVpby5jOgotCSogbGlidXRpbC9vcF9maWxlaW8uaDoKLQkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOgotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IG1vdmUgb3BfZ2V0X2xpbmsgdG8KLQlvcF9maWxlCi0KLTIwMDMtMDktMjIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbC9vcF9maWxlaW8uaDoKLQkqIGxpYnV0aWwvb3BfZmlsZWlvLmM6IHdhcm4gYWJvdXQgb3BfZ2V0X2xpbmsoKQotCXJlc3RyaWN0aW9ucwotCi0JKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOgotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBzL29wX3JlYWRfbGluay9vcF9mb2xsb3dfbGluaywKLQlhbmQgYmVoYXZpb3VyIGNoYW5nZSB0byBtYXRjaAotCi0JKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOiB1c2Ugb3BfZm9sbG93X2xpbmsKLQotMjAwMy0wOS0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL21ha2VmaWxlLmFtOiBtaXNzaW5nIEFNX0NGTEFHUyBzZXR0aW5nCi0KLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogaGFuZGxlIHNpZ25hbCBpbiByZWFkIGxvb3AKLQkqIGRhZW1vbi9vcGRfdXRpbC5oOgotCSogZGFlbW9uL29wZF91dGlsLmM6IG1vdmUgb3BkX3NldHVwX3NpZ25hbCgpIGZyb20gZGFlLyBkYWVtb24vCi0KLTIwMDMtMDktMjIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlbW9uL29wcm9maWxlZC5jOiBtYXNrIFNJR1RFUk0gdG9vIHRvIHByZXZlbnQKLQl0aGUgcG9zc2liaWxpdHkgb2YgZW1wdHkgc2FtcGxlIGZpbGVzCi0KLTIwMDMtMDktMjEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiBmb3JtYXRfb3V0cHV0OjpzaG93X2hlYWRlciBubyBoaWRlX2hlYWRlcgotCi0yMDAzLTA5LTIxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkb2Mvb3ByZXBvcnQuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogLS1nbG9iYWxfcGVyY2VudCBtdXN0IGJlIGVmZmVjdGl2ZSBmb3IgZGV0YWlsZWQKLQkgIG91dHB1dCB0b28KLQotMjAwMy0wOS0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogcHJldmVudCAtLWdsb2JhbC1wZXJjZW50Ci0Jd2hlbiBhcHByb3ByaWF0ZQotCi0yMDAzLTA5LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOiBiYWNrIG91dCBicm9rZW4gbWFrZSBjbGVhbiBjaGFuZ2UKLQotMjAwMy0wOS0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBNYWtlZmlsZS5hbTogbWFrZSBjbGVhbiBub3cgcmVtb3ZlcyAqLmh0bWwKLQotCSogaW50ZXJuYWxzLnhtbDogYWRkIHNvbWUgb3V0bGluZSBzZWN0aW9ucwotCi0yMDAzLTA5LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9pbnRlcm5hbHMueG1sOiBwcm92aWRlIGEgc2hvcnQgb3ZlcnZpZXcKLQlhbmQgc3RhcnQgYSBnbG9zc2FyeQotCi0JKiBsaWJwcC9jb3VudF9hcnJheS5oOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9wcm9maWxlLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGUuaDoKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6IHJlcGxhY2UgcmVzaWR1YWwgcmVmZXJlbmNlcyB0bwotCWNvdW50IGdyb3VwcyB3aXRoIHByb2ZpbGUgY2xhc3MgY29uY2VwdAotCi0yMDAzLTA5LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9NYWtlZmlsZS5hbToKLQkqIGRvYy9pbnRlcm5hbHMueG1sOiBzdGFydCBhbiBpbnRlcm5hbHMgbWFudWFsIC4uLgotCi0yMDAzLTA5LTE5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL2ltYWdlX2Vycm9ycy5jcHA6IG1pc3NpbmcgaW5jbHVkZQotCi0yMDAzLTA5LTE5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5oOgotCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcDogcmVtb3ZlIGFkZGl0aW9uYWxfaGVscAotCXN0dWZmLCB1bnVzZWQgZm9yIHNvbWUgdGltZQotCi0yMDAzLTA5LTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwrKy9pbWFnZV9mbGFncy5oOiBtb3ZlIHRvIC4uLgotCi0JKiBsaWJwcC9NYWtlZmlsZS5hbToKLQkqIGxpYnBwL2ltYWdlX2Vycm9yLmg6IC4uLiBoZXJlLCBhbmQgcmVuYW1lCi0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiB0YWtlIGFuIGluLW91dCBib29sCi0JaW5zdGVhZCBvZiBpbWFnZV9mbGFncwotCi0JKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDoKLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaDoKLQkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOgotCSogbGlicHAvbG9jYXRlX2ltYWdlcy5oOgotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKLQkqIHBwL2ltYWdlX2Vycm9ycy5jcHA6Ci0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL3BvcHVsYXRlLmNwcDogY2hhbmdlcyBmcm9tIGFib3ZlCi0KLTIwMDMtMDktMTggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL01ha2VmaWxlLmFtOgotCSogbGlidXRpbCsrL2ltYWdlX2ZsYWdzLmg6IGZsYWdzIGZvciBpbWFnZSByZWFkIGZhaWx1cmUKLQotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKLQkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuaDoKLQkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOgotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5oOgotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IHVzZSBpbWFnZV9mbGFncwotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogdXNlIGltYWdlX2ZsYWdzLCBubyBsb25nZXIgZXJyb3IKLQlvdXQgb24gZm9ybWF0IGZhaWx1cmUKLQotCSogcHAvTWFrZWZpbGUuYW06Ci0JKiBwcC9pbWFnZV9lcnJvcnMuY3BwOgotCSogcHAvaW1hZ2VfZXJyb3JzLmg6IGVycm9ycyBwcmV2aW91c2x5IHJlcG9ydGVkIGluIGxvY2F0ZV9pbWFnZXMKLQlhcmUgbm93IHJlcG9ydGVkIGhlcmUgYnkgdGhlIGNsaWVudAotCi0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wZ3Byb2YuY3BwOgotCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL3BvcHVsYXRlLmg6Ci0JKiBwcC9wb3B1bGF0ZS5jcHA6IHVzZSB0aGUgYWJvdmUKLQotMjAwMy0wOS0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IHVzZSA5IG5vdCAxMiBmb3IgJSBmaWVsZCB3aWR0aAotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IHNocmluayAxMDAuMDAwMCB0byAxMDAuMDAwCi0JKiBwcC9vcHJlcG9ydC5jcHA6IHMvIiAiLycgJwotCi0yMDAzLTA5LTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogY2xlYW4gdXAgZXJyb3IgbWVzc2FnZXMKLQotCSogcHAvb3BncHJvZl9vcHRpb25zLmg6Ci0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgotCSogcHAvb3BncHJvZi5jcHA6IHVzZSBpbnZlcnRlZF9wcm9maWxlIEFQSQotCi0yMDAzLTA5LTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IG92ZXJ3cml0ZSBhbGwgY3VycmVudCBzZXR0aW5ncyB3aXRoIC0tc2VwYXJhdGUsCi0JICB0aGlzIGNoYW5nZSBiZWhhdmlvciBvZiAtLXNlcGFyYXRlPWtlcm5lbCxsaWJyYXJ5IG5vdyB3ZSByZWFsbHkgc2V0dXAKLQkgIGJvdGggaW4gdGhpcyBjYXNlLgotCi0yMDAzLTA5LTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOiByZXdyaXRlIGEgbGl0dGxlCi0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBzZXQgZnNpemUgdG8gZGVmYXVsdCB0byAtMSwKLQlmb3IgZmFrZSBhcnRpZmljaWFsIHN5bWJvbAotCi0yMDAzLTA5LTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmg6Ci0JKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmNwcDogZmluZF9tb2R1bGVfcGF0aCgpIGV4dHJhIGJvb2wgcGFyYW1ldGVyCi0JICB0byBrbm93IGlmIHdlIGZhaWwgdG8gcmV0cmlldmUgdGhlIGltYWdlLgotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5oOgotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IHVzZSBpdCBhbmQgc2F2ZSB0aGlzIGJvb2wgaW4KLQkgIGludmVydGVkX3Byb2ZpbGUgc3RydWN0Ci0JKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiB1cGRhdGUgY2FsbGVyIGFjY29yZGluZwotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogdXNlIHRoZSBhYm92ZSBjaGFuZ2UgdG8gY3JlYXRlIGZha2Ugb3BfYmZkCi0KLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGdwcm9mLmNwcDogdXBkYXRlIGNhbGxlciBidXQgbmV2ZXIgYWxsb3cgZmFrZSBvcF9iZmQKLQotCSogcHAvcG9wdWxhdGUuY3BwOiBhbGxvdyB0byBjcmVhdGUgZmFrZSBvcF9iZmQKLQkKLQotMjAwMy0wOS0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWUvb3BkX2ltYWdlLmM6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmg6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOgotCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKLQkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOgotCSogbGliYWJpL2FiaS5jcHA6Ci0JKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgotCSogbGliYWJpL29wX2ltcG9ydC5jcHA6Ci0JKiBsaWJvcC9vcF9zYW1wbGVfZmlsZS5oOgotCSogbGlicHAvb3BfaGVhZGVyLmNwcDoKLQkqIHV0aWxzL29wY29udHJvbDogcmVuYW1pbmdzIG9mIHNlcGFyYXRlIHN0dWZmCi0KLTIwMDMtMDktMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfa2VybmVsLmM6IHRoaW5rbyBpbiBvcGRfZ2V0X21vZHVsZV9pbmZvKCk6IHdlIG11c3QgdGFrZQotCSAgY2FyZSB0byByZS11c2UgYSBwcmV2aW91c2x5IGNyZWF0ZWQgbW9kdWxlIG5vdCB0byBjcmVhdGUgYSBuZXcKLQotMjAwMy0wOS0xNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOiBsb2dnaW5nIGltcHJvdmVtZW50cwotCi0yMDAzLTA5LTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvb3BkX2tlcm5lbC5jOgotCSogZGFlbW9uL29wZF9rZXJuZWwuYzogZml4IHVzZSBhZnRlciBmcmVlIG9mIG1vZHVsZQotCi0yMDAzLTA5LTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogZml4IHRocmVhZCBwcm9maWxpbmcgd2hlbgotCS0tc2VwYXJhdGUtbGlicmFyeT0wCi0KLTIwMDMtMDktMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfa2VybmVsLmM6IGFkZCBtb2R1bGUgdG8gbGlzdCBvZiBtb2R1bGUgLi4uCi0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOiBzL3ByaW50L3ZlcmJwcmludGYKLQotMjAwMy0wOS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfY29uZmlnLmg6IHJlbW92ZSBPUERfTUFYX01PRFVMRXMKLQkqIGRhZS9vcGRfa2VybmVsLmM6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOiByZW1vdmUgZml4ZWQgYXJyYXkgb2YgbW9kdWxlcyByZXBsYWNlZCBieQotCSAgYSBsaXN0LiBVbmlmeSB0aGUgd2F5IHdlIGNyZWF0ZSBvcGRfbW9kdWxlCi0JKiB1dGlscy9vcGNvbnRyb2w6IGRvbid0IHVzZSAtLXRocmVhZC1wcm9maWxpbmcgZm9yIDIuNAotCi0yMDAzLTA5LTE3IEthIEZhaSBMdSAgPGthZmFpMDkyOEB5YWhvby5jb20+Ci0KLQlJIGFkYXB0ZWQgc2xpZ2h0bHkgdGhpcyBwYXRjaCBQaGlsLgotCSogZGFlbW9uL29wZF9pbWFnZS5jOgotCSogZGFlbW9uL29wZF9pbWFnZS5oOgotCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKLQkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6Ci0JKiB1dGlscy9vcGNvbnRyb2w6IGltcGxlbWVudCBwZXIgdGhyZWFkIHByb2ZpbGluZwotCi0yMDAzLTA5LTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDoKLQkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOiBtaW5vciB0aWR5Ci0KLTIwMDMtMDktMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBkb24ndCBwYXNzIHBpZC9wZ3JwIGZpbHRlcgotCXRvIDIuNiBkYWVtb24KLQotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlbW9uL29wcm9maWxlZC5jOiBzZXRybGltaXQgdG8gODE5MiAobGFtZQotCXdvcmthcm91bmQgZm9yIG5vdyksIG1pbm9yIGNsZWFudXBzCi0KLTIwMDMtMDktMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29tbW9uX29wdGlvbi5jcHA6IHJlbmFtZSB0aGUgYXJyYXkgdG8KLQlhdm9pZCBhIGxpbmsgZXJyb3IgaW4gR0NDIDMuNAotCi0yMDAzLTA5LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wL01ha2VmaWxlLmFtOgotCSogbGlib3Avb3BfaW50ZXJmYWNlXzI1Lmg6IG1vdmUgdG8gLi4uCi0KLQkqIGRhZW1vbi9NYWtlZmlsZS5hbToKLQkqIGRhZW1vbi9vcGRfaW50ZXJmYWNlLmg6IC4uLiBoZXJlCi0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogdXNlIGFib3ZlLiBSZW1vdmUgcG9pbnRsZXNzCi0JY29tbWFuZCBsaW5lIG9wdGlvbnMuCi0KLQkqIGxpYm9wL29wX2NvbmZpZ18yNS5oOiByZW1vdmUuCi0KLQkqIGxpYm9wL29wX2h3X2NvbmZpZy5oOiBtb3ZlIERDT09LSUVfU0hJRlQgdG8KLQlvcGRfaW50ZXJmYWNlLmgKLQotMjAwMy0wOS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IHVzZSAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudAotCWlmIGF2YWlsYWJsZQotCi0JKiBSRUFETUU6Ci0JKiBkYWVtb24vb3BkX3V0aWwuYzoKLQkqIGRhZW1vbi9vcGRfdXRpbC5oOgotCSogZG9jL29wYW5ub3RhdGUuMS5pbjoKLQkqIGRvYy9vcGdwcm9mLjEuaW46Ci0JKiBkb2Mvb3ByZXBvcnQuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6Ci0JKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgotCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKLQkqIGxpYm9wL29wX2dldF9pbnRlcmZhY2UuYzoKLQkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOiByZW1vdmUgcmVmZXJlbmNlcyB0bwotCTIuNSwgcmVwbGFjZWQgd2l0aCAyLjYKLQotMjAwMy0wOS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3ByZXBvcnQuMS5pbjogZG9jdW1lbnQgLS1zaG93LWFkZHJlc3MKLQotMjAwMy0wOS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDoKLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaDoKLQkqIHBwL3BvcHVsYXRlLmNwcDogbW9yZSBjb21tZW50YXJ5Ci0KLTIwMDMtMDktMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcmVwb3J0LmNwcDogaGFuZGxlIDIuOTUgcmlnaHQgaW8gbWFuaXB1bGF0b3IgYW5kIHRoZSBsYWNrCi0JICBvZiBhIHByb3BlciBzZXR3KHcpIDw8IHN0ZDo6c3RyaW5nCi0KLTIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3ByZXBvcnQuY3BwOiByZS1hZGQgaGVhZGVyIGZvciBpbWFnZSBzdW1tYXJ5Ci0KLTIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IHRocm93IGFuIGV4Y2VwdGlvbgotCWlmIHRoZXJlIGFyZSB0d28gbWFueSB1bm1lcmdlZCBwcm9maWxlcywgd2l0aCBkZXRhaWxzCi0Jb2YgaG93IHRvIGZpeCBpdAotCi0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgotCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IGNsZWFuIHVwIGVycm9yIG1lc3NhZ2VzCi0KLTIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5oOgotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IGFkZCBsb2NhdGlvbiBvZiAKLQlpbWFnZXMgd2hlbiBpbnZlcnRpbmcgcHJvZmlsZXMKLQotCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6IHJldHVybiBlbXB0eSBzdHJpbmcKLQlpZiBmaWxlIGlzbid0IHJlYWRhYmxlCi0KLQkqIHBwL29wYW5ub3RhdGUuY3BwOiB1c2UgdGhlIGFib3ZlCi0KLQkqIHBwL29wcmVwb3J0LmNwcDogdXNlIHRoZSBhYm92ZTsgcGxhY2Ugd2FybmluZ3MKLQliZWZvcmUgYW55IG90aGVyIG91dHB1dAotCi0yMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6IHVzZSBsb2NhdGVfaW1hZ2VfcGF0aAotCi0yMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogcG9wdWxhdGUuaDoKLQkqIHBvcHVsYXRlLmNwcDogc2hhcmVkIGNvZGUgZm9yIHBvcHVsYXRpbmcgZnJvbQotCWludmVydGVkIHByb2ZpbGVzCi0KLQkqIG9wcmVwb3J0LmNwcDoKLQkqIG9wYW5ub3RhdGUuY3BwOiB1c2UgYWJvdmUKLQotMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6Ci0JKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogYWRkIGludmVydF9wcm9maWxlcwotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IHVzZSBpdAotCi0yMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDogVHVybiBvZmYgVk1BIHJlcG9ydCBieQotCWRlZmF1bHQsIGFkZCAtLXNob3ctYWRkcmVzcwotCi0yMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wcmVwb3J0LmNwcDogbmljZSBmb3JtYXR0aW5nIG9mIGltYWdlIHJlcG9ydAotCWNvbHVtbiBoZWFkZXJzLCByZXNwZWN0IC0tbm8taGVhZGVyCi0KLTIwMDMtMDktMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiB1c2Ugc3RyaW5nOjplcmFzZSgpIG5vdCBzdHJpbmc6OmNsZWFyKCkKLQkgIGZvciAyLjk1Ci0KLQkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuaDogYWxsb3cgdG8gaWdub3JlICJhbGwiIG1hdGNoCi0JKiBsaWJ1dGlsKysvY29tbWFfbGlzdC5oOiB1c2UgaXQKLQotMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IG91dHB1dCBjb2x1bW4gaGVhZGVycyBmb3IKLQlpbWFnZSByZXBvcnQKLQotMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9vcF9oZWFkZXIuaDoKLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6IG91dHB1dCBoZWFkZXIgaW5mbyB0bwotCWEgc3RyaW5nIG5vdCBhIHN0cmVhbQotCi0JKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6Ci0JKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogZ2l2ZSBjbGFzc2VzIGEgbG9uZwotCW5hbWUsIGFuZCBmaWxsIGluIGdsb2JhbCBldmVudC9jcHUgaW5mbwotCi0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDoKLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDogdXNlIHRoZSBjbGFzcyBsb25nIG5hbWVzCi0JYW5kIGluZm8KLQotMjAwMy0wOS0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogaGFuZGxlIHN5bWxpbmsKLQotMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBhcnJhbmdlX3Byb2ZpbGVzLmg6Ci0JKiBhcnJhbmdlX3Byb2ZpbGVzLmNwcDogQWRkIGNvZGUgdG8gZ2l2ZSBzaG9ydCBuYW1lcwotCXRvIGVhY2ggY2xhc3MsIHVudXNlZCB5ZXQKLQotMjAwMy0wOS0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IG1pc3NpbmcgaW5jbHVkZTw+IHdpdGggZ2NjIDIuOTUKLQotMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9NYWtlZmlsZS5hbToKLQkqIGxpYnBwL3NwbGl0X3NhbXBsZV9maWxlbmFtZS5jcHA6Ci0JKiBsaWJwcC9zcGxpdF9zYW1wbGVfZmlsZW5hbWUuaDogcmVuYW1lIGFzIC4uLgotCi0JKiBsaWJwcC9wYXJzZV9maWxlbmFtZS5jcHA6Ci0JKiBsaWJwcC9wYXJzZV9maWxlbmFtZS5oOiAuLi4gdGhpcwotCi0JKiBsaWJwcC9maWxlbmFtZV9zcGVjLmNwcDoKLQkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOgotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5oOiBzb3J0IGNsYXNzZXMgZm9yIG5pY2VuZXNzLAotCWNoYW5nZXMgZnJvbSBhYm92ZQotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IHJlbW92ZSBuZWVkbGVzcyBkb3VibGUgY2hlY2sgb2YKLQlleGNsdWRlX2RlcGVuZGVudAotCi0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogdG91aW50IHNob3VsZCBpbml0IHRvIDAKLQlpbiBjYXNlIG9mIHBhcnNlIGZhaWx1cmUKLQotMjAwMy0wOS0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogY29uZmlndXJlLmluOiBmaXggbWF4aW11bSB0ZW1wbGF0ZSBkZXB0aCB0byA1MAotCSogbGlidXRpbC9vcF9maWxlaW8uYzogb3BfZ2V0X2xpbmsoKSBkb24ndCB0cnVuY2F0ZSBzaWxlbnRseSByZXN1bHRzCi0JKiBtNC9zc3RyZWFtLm00OiB1c2UgT1BfQ1hYRkxBR1Mgbm90IENYWEZMQUdTCi0KLTIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvcGFydGl0aW9uX2ZpbGVzLmg6Ci0JKiBwcC9wYXJ0aXRpb25fZmlsZXMuY3BwOiByZW1vdmUsIG5vdyB1bnVzZWQKLQotMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDogdXNlIGFycmFuZ2VfcHJvZmlsZXMgQVBJCi0KLTIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3BncHJvZl9vcHRpb25zLmg6Ci0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgotCSogcHAvb3BncHJvZi5jcHA6IHVzZSBhcnJhbmdlX3Byb2ZpbGVzIEFQSQotCi0yMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL01ha2VmaWxlLmFtOgotCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6Ci0JKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6IGludHJvZHVjZSBuZXcKLQljb2RlIGZvciBwYXJ0aXRpb25pbmcgcHJvZmlsZXMgYW5kIGhhbmRsaW5nCi0JbWVyZ2luZwotCi0JKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuaDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgotCSogcHAvb3ByZXBvcnQuY3BwOiB1c2UgdGhlIGFib3ZlIGNvZGUKLQotCSogbGlicHAvZm9ybWF0X2ZsYWdzLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHJlbW92ZSB1bm5lZWRlZAotCW11bHRpcGxlIGFwcHMgaGludAotCi0JKiBsaWJwcC9jb3VudF9hcnJheS5jcHA6Ci0JKiBsaWJwcC9jb3VudF9hcnJheS5oOiByZW1vdmUgdW5uZWNlc3NhcnkgY29kZQotCi0yMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYmFjayB0byAwLjdjdnMKLQotMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcGFubm90YXRlLmNwcDogZ2NjIDIuOTEgd29ya2Fyb3VuZAotCShpbiAwLjYuMSByZWxlYXNlKQotCi0yMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjYuMQotCi0yMDAzLTA5LTEzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50ICJpbmNvcnJlY3Qgc291cmNlIGF0dHJpYnV0aW9uIgotCWEgYml0Ci0KLTIwMDMtMDktMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6IHR5cG8gaW4gY29tbWVudAotCi0yMDAzLTA5LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogY2hlY2sgZm9yIC1saW50bCwgdHdlYWsgLWxkbCBjaGVjawotCi0yMDAzLTA5LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIGxpYmRiL2RiX21hbmFnZS5jOgotCSogbGliZGIvZGJfdGVzdC5jOiBjb3JyZWN0IGhlYWRlcnMKLQotMjAwMy0wOS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBvcF9sb2NrZmlsZS5jOiB1c2UgY29ycmVjdCBoZWFkZXJzCi0KLTIwMDMtMDktMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHV0aWxzL29wX2hlbHAuYzogY2hlY2sgdGhhbiBhbGwgZXZlbnRzIGFyZSBkaXN0aW5jdHMKLQotMjAwMy0wOS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcGNoLWMrKy5oOgotCSogbTQvcHJlY29tcGlsZWRoZWFkZXIubTQ6IG5ldyBmaWxlIHRvIGhhbmRsZSBwcmVjb21waWxlZCBoZWFkZXIKLQkqIG00L01ha2VmaWxlLmFtOgotCSogY29uZmlndXJlLmluOgotCSogTWFrZWZpbGUuYW06IGhhbmRsZSBwcmVjb21waWxlZCBoZWFkZXIKLQotMjAwMy0wOS0wNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBvcGRfaW1hZ2UuYzogY2xlYW51cCBvZiBjdHhfc3dpdGNoX3NldF9pbWFnZSgpCi0KLTIwMDMtMDktMDUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogQWZ0ZXIgYSBjb250ZXh0IHN3aXRjaCBlbnN1cmUgd2UgdXBkYXRlIGNvcnJlY3RseQotCSAgdGhlIGN1cnJlbnQgaW1hZ2UuCi0KLTIwMDMtMDktMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOiBjYXRjaCBvcF9iZmQgZXhjZXB0aW9uIGFuZCByZWNvdmVyIGdyYWNlZnVsbHkKLQotMjAwMy0wOS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogdXRpbHMvb3Bjb250cm9sOiB0d2VhayAic2lnbmFsaW5nIGRhZW1vbiAiIG1lc3NhZ2UgYXMgc3VnZ2VzdGVkCi0JICBieSBDYXJsbyBXb29kCi0KLTIwMDMtMDktMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDogbWVudGlvbiAtLXJlc2V0IGluCi0JIkdldHRpbmcgU3RhcnRlZCIKLQotMjAwMy0wOS0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcC9vcF9ldmVudHMuYzoKLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6Ci0JKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgotCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzogcHJvcGFnYXRlIGV2ZW50Ci0JZXJyb3IgYmFjayB1cCB0byBjYWxsZXIKLQotCSogbGliZGIvb2RiX2hhc2guaDogZml4IGNvbW1lbnQKLQotMjAwMy0wOS0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWUvb3BkX2ltYWdlLmM6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogdXNlIGFib3J0KCkgbm90IGV4aXQoKQotCW9uICJjYW4ndCBoYXBwZW4iIGVycm9ycwotCi0yMDAzLTA5LTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZS9vcGRfcHJvYy5jOgotCSogZGFlbW9uL29wZF9pbWFnZS5jOiBmaXggZXJyb3IgbWVzc2FnZQotCi0yMDAzLTA4LTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBldmVudHMvYWxwaGEuZXY2LmV2ZW50czogZml4IGR1cGxpY2F0ZSB1bSB0YWcKLQotMjAwMy0wOC0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBldmVudHMvaTM4Ni5hdGhsb24uZXZlbnRzOiBmaXggZHVwbGljYXRlIG1pbmltdW0gdGFnCi0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKLQkqIGxpYm9wL29wX2V2ZW50cy5jOiBjaGVjayBmb3IgZHVwbGljYXRlIHRhZ3MKLQotMjAwMy0wOC0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0KLTIwMDMtMDgtMjcgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogdXRpbHMvb3BfaGVscC5jIChyZXNvbHZlX2V2ZW50cyk6IFR5cGVjYXN0IHByaW50ZiBhcmd1bWVudC4KLQotMjAwMy0wOC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGVuYWJsZSBtdWx0aXBsZSBldmVudHMKLQotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IHJlbW92ZSAjaWYgMCAuLi4uICNlbmRpZgotCi0yMDAzLTA4LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9jb3VudF9hcnJheS5jcHA6IGF2b2lkIHRvIGFjY2VzcyBpbnZhbGlkIG1lbW9yeQotCi0yMDAzLTA4LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBtNC9idWlsdGluZXhwZWN0Lm00OgotCSogbTQvY29uZmlnbW9kdWxlLm00OgotCSogbW9kdWxlL01ha2VmaWxlLmluOgotCSogbW9kdWxlL2lhNjQvTWFrZWZpbGUuaW46Ci0JKiBtb2R1bGUveDg2L21ha2VmaWxlLmluOiBhbHdheXMgdXNlIEVYVFJBX0NGTEFHU19NT0RVTEUgbm90Ci0JRVhUUkFfQ0ZMQUdTIGZvciBtb2R1bGUgYnVpbGQgZmxhZ3MKLQotMjAwMy0wOC0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicmVnZXgvb3BfcmVnZXguaDoKLQkqIGxpYnJlZ2V4L29wX3JlZ2V4LmNwcDogdGlkeQotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogcmVtb3ZlIG9ic29sZXRlIGNvbW1lbnQKLQotMjAwMy0wOC0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDoKLQkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDogaXNfZGlyZWN0b3J5KGRpcm5hbWUpOiByZXR1cm4gdHJ1ZSBpZgotCSAgZGlybmFtZSBleGlzdHMKLQkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiB2YWxpZGF0ZSAtLWltYWdlLXBhdGggcGFyYW1ldGVycwotCi0yMDAzLTA4LTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBldmVudHMvaTM4Ni5wNC5ldmVudHM6IGNsYXJpZnkgdGhhbiAxMjhCSVRfTU1YX1VPUCBjb3VudCBvbmx5IGludGVnZXIKLQkgIFNTRTIgb3BzCi0JKiBwcC9vcHJlcG9ydC5jcHA6IG1pbm9yIHNwYWNpbmcgY2hhbmdlIGluIG91dHB1dAotCi0yMDAzLTA4LTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogcmVwb3J0IHRoZSBrZXJuZWwgcG9pbnRlciBzaXplCi0KLTIwMDMtMDgtMjIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wcm9maWxlZC5jOiByZWFkIG5ldyAvZGV2L29wcm9maWxlL3BvaW50ZXJfc2l6ZQotCWluIHByZWZlcmVuY2UgdG8ga2NvcmUuIGtjb3JlIGNvZGUgd2lsbCBldmVudHVhbGx5IGdvLgotCi0yMDAzLTA4LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiB1cGRhdGUgZ2NjMl9jb21waWxlZC4gY29tbWVudAotCXRvIHJlZmxlY3QgcmVhbGl0eQotCi0yMDAzLTA4LTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IHJlYWxseSBtZXJnZSB3aGVuIC0tbWVyZ2U9bGliIGFuZCBpbWFnZSBuYW1lIGFyZQotCSAgc3BlY2lmaWVkLgotCi0yMDAzLTA4LTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcGFubm90YXRlLmNwcDogb3V0cHV0IHRocmVzaG9sZCBwZXJjZW50IHdoZW4gbmVjZXNzYXJ5LgotCi0yMDAzLTA4LTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogcmVtb3ZlIEVMRi1iYXNlZCBzeW1ib2wgc2l6ZSBjb2RlCi0KLTIwMDMtMDgtMTUgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogZG9jL29wY29udHJvbC4xLmluOgotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBDb3JyZWN0IHBhdGggdG8gL3Jvb3QvLm9wcm9maWxlL2RhZW1vbnJjLgotCi0yMDAzLTA4LTE1ICBUaG9tYXMgU3BhdHppZXIgIDxUU1BBVEBkZS5pYm0uY29tPgotCi0JKiBkYWVtb24vb3BkX2Nvb2tpZS5oOiBmaXggczM5MCBzeXNjYWxsCi0KLTIwMDMtMDgtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBlcmFzZV90b19sYXN0X29mKCkgaXMgbm90IGEgbHRyaW0oKQotCi0yMDAzLTA4LTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JRGF2ZSBKb25lcyBzdWdnZXN0ZWQgdGhpcyBjaGFuZ2UuCi0KLQkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYzogcmVtb3ZlIHN1cGVyZmxvdXMgJzsnIGF0IGVuZCBvZiBzb21lIG1hY3JvCi0KLTIwMDMtMDgtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDogcmVtb3ZlIGVyYXNlX2Zyb21fbGFzdF9vZigpCi0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogYW5kIHRpZHkgZXJhc2VfdG9fbGFzdF9vZigpLCBydHJpbSgpIGFuZAotCSAgbHRyaW0oKQotCi0yMDAzLTA4LTEzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHJlbW92ZSBuaWxfc3ltYm9sX2luZGV4Ci0KLTIwMDMtMDgtMTMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDogcmVtb3ZlICJiYXNlX3ZtYSIgcGFyYW1ldGVyCi0JdG8gYWRkX3NhbXBsZXMoKSwgd2UgY2FuIGp1c3QgcmUtZ3JhYiBpdCBzdHJhaWdodCBmcm9tCi0JdGhlIGFiZmQKLQotMjAwMy0wOC0xMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOiByZW1vdmUgdW51c2VkICJ6ZXJvIHNhbXBsZXMiCi0Jb3B0aW1pemF0aW9uIGhpbnQ6IGl0J3MgYWx3YXlzIGZhbHNlCi0KLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3BncHJvZi5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6IGZyb20gYWJvdmUKLQotMjAwMy0wOC0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IHNtYWxsIHRyaXZpYWxpdGllcwotCi0yMDAzLTA4LTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJyZWdleC9zdGwucGF0LmluOiBtaW5vciBmaXgvaW1wcm92ZW1lbnRzCi0JKiBsaWJyZWdleC9tYW5nbGVkLW5hbWUudHh0OiBhZGQgdGVzdHMKLQotMjAwMy0wOC0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3ByZXBvcnQuY3BwOiBmaXggdGhpbmtvIHdoZW4gLS1tZXJnZT1saWIKLQotMjAwMy0wOC0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IHMvY291bnRfZ3JvdXBzX3N1bW1hcnkvc3VtbWFyeV9jb250YWluZXIvZwotCi0yMDAzLTA4LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50IG9wcmVwb3J0J3Mgc2lkZS1ieS1zaWRlIGEgbGl0dGxlCi0JYml0Ci0KLTIwMDMtMDgtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3ByZXBvcnQuY3BwOiBzL2dyb3VwX3N1bW1hcnkvYXBwX3N1bW1hcnkvLCBhbmQKLQlhIGxvdCBvZiBvdGhlciByZW5hbWluZ3MgdG8gY2xhcmlmeSB0aGUgY291bnQgZ3JvdXBzCi0JdXNhZ2UuCi0KLTIwMDMtMDgtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3BfaGVscC5jOiBhZGQgLS11bml0LW1hc2sKLQotCSogdXRpbHMvb3Bjb250cm9sOiB1c2UgLS11bml0LW1hc2sKLQotMjAwMy0wOC0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3ByZXBvcnQuY3BwOiByZSB3cml0ZSB1c2luZyBjb3VudF9hcnJheV90Ci0KLTIwMDMtMDgtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvY291bnRfYXJyYXkuY3BwOgotCSogbGlicHAvY291bnRfYXJyYXkuaDogYXV0by1yZXNpemUgdGhlIG51bWJlciBvZiBncm91cHMKLQliYXNlZCBvbiBob3cgd2UgaW5kZXguCi0KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogcmVtb3ZlIGNoZWNrCi0KLQkqIHBwL29wYW5ub3RhdGUuY3BwOiBjb3VudF9hcnJheS56ZXJvKCkgbm90IC5lbXB0eSgpCi0KLTIwMDMtMDgtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvZmlsZW5hbWVfc3BlYy5oOgotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5oOiBhZGQgY29tbWVudHMsIGFsbG93IGNvbW1hIGxpc3RzCi0JZm9yIGV2ZW50LCBjb3VudCwgYW5kIHVuaXQgbWFzawotCi0JKiBsaWJ1dGlsKysvY29tbWFfbGlzdC5oOiBpbXBsZW1lbnQgbWlzc2luZyBtZXRob2QKLQotMjAwMy0wOC0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDogYWRkIHNldF9ucl9ncm91cHMoKSwgcmVtb3ZlCi0JcHBfbnJfY291bnRlcnMuCi0KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wZ3Byb2YuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiBjb3VudF9ncm91cCBub3QgY291bnRlcgotCi0yMDAzLTA4LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL01ha2VmaWxlLmFtOgotCSogbGlicHAvY291bnRlcl9hcnJheS5jcHA6Ci0JKiBsaWJwcC9jb3VudGVyX2FycmF5Lmg6IHJlbmFtZSB0byAuLi4KLQotCSogbGlicHAvY291bnRfYXJyYXkuaDoKLQkqIGxpYnBwL2NvdW50X2FycmF5LmNwcDogLi4uIHRoaXMgLi4uCi0KLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgotCSogbGlicHAvcHJvZmlsZS5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9zeW1ib2wuaDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3BncHJvZi5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6IC4uLiBhbmQgc2V2ZXJhbCByZW5hbWluZ3MgdG8gc3RhcnRpbmcKLQljaGFuZ2UgdGhlIG5vdGlvbiBmcm9tICJjb3VudGVycyIgdG8gdGhlIG1vcmUgZ2VuZXJhbCBub3Rpb24KLQlvZiAiY291bnQgZ3JvdXBzIgotCi0yMDAzLTA4LTEwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JTXVsdGlwbGUgY291bnRlciBzdXBwb3J0IGZvciBwcCB0b29scy4KLQotCSogbGlicHAvY291bnRlcl9hcnJheS5oOgotCSogbGlicHAvY291bnRlcl9hcnJheS5jcHA6IHJlc3VycmVjdGVkIGZyb20gcHAtaW50ZXJmYWNlLWJyYW5jaCwgZm9yCi0JIG5vdyBtZW1vcnkgdXNlIGlzIGluZWZmaWNpZW50LgotCSogbGlicHAvTWFrZWZpbGUuYW06IGFkZCBjb3VudGVyX2FycmF5LmNwcCAuaAotCSogbGlicHAvZm9ybWF0X291dC5oOgotCSogbGlicHAvZm9ybWF0X291dC5jcHA6IGhhbmRsZSBtdWx0aXBsZSBjb3VudGVyICsgYSBnZW5lcmFsIHRpZHkKLQkqIGxpYnBwL2Zvcm1hdF9mbGFncy5oOiByZW1vdmUgZmZfaW1tdXRhYmxlX21hc2sgYW5kIHNvbWUgbmFzdHkKLQkgIHJlcXVpc2l0ZSBvbiBmbGFncyB2YWx1ZQotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuaDoKLQkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwOgotCSogbGlicHAvc3ltYm9sLmg6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogaGFuZGxlIG11bHRpcGxlIGNvdW50ZXIKLQkqIHBwL29wYW5ub3RhdGUuY3BwOiBwYXJ0aWFsIGhhbmRsaW5nIG9mIG11bHRpcGxlIGNvdW50ZXIKLQkqIHBwL29wZ3Byb2YuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiBtaW5vciBiaXRzCi0KLTIwMDMtMDgtMDggIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogZGFlL01ha2VmaWxlLmFtOgotCSogZGFlbW9uL01ha2VmaWxlLmFtOiBDb3JyZWN0IGxpYnJhcnkgbGlua2luZyBvcmRlci4KLQkqIGRhZW1vbi9vcGRfdXRpbC5jOiBBZGQgbmVlZGVkIGluY2x1ZGUgZmlsZXMuCi0KLTIwMDMtMDgtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogbW92ZV9hbmRfcmVtb3ZlKCkgZG8gbm90aGluZyBpZiBzb3VyY2UgZG9lc24ndCBleGlzdAotCi0yMDAzLTA4LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JcmV2ZXJ0IHRoZSBwcmV2aW91cyBwYXRjaAotCSogZGFlL01ha2VmaWxlLmFtOgotCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuaDoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWVtb24vTWFrZWZpbGUuYW06Ci0JKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOiB1bi1zaGFyZSBvcGRfc2FtcGxlX2ZpbGVzCi0JY29kZQotCi0yMDAzLTA4LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZS9NYWtlZmlsZS5hbToKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmg6Ci0JKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgotCSogZGFlbW9uL01ha2VmaWxlLmFtOgotCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzogc2hhcmUgb3BkX3NhbXBsZV9maWxlcwotCWNvZGUKLQotMjAwMy0wOC0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6Ci0JKiBkYWVtb24vb3BkX3V0aWwuaDoKLQkqIGRhZW1vbi9vcGRfdXRpbC5jOiBzaGFyZSBvcGRfd3JpdGVfYWJpKCkKLQotMjAwMy0wOC0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5jOgotCSogbGlib3Avb3BfZXZlbnRzLmg6IG1pbm9yIGRveHlnZW4gZml4Ci0KLTIwMDMtMDgtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlL01ha2VmaWxlLmFtOgotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlbW9uL01ha2VmaWxlLmFtOgotCSogZGFlbW9uL29wcm9maWxlZC5jOgotCSogZGFlbW9uL29wZF91dGlsLmg6Ci0JKiBkYWVtb24vb3BkX3V0aWwuYzogc2hhcmUgc29tZSBzbWFsbCBiaXRzIG9mIGNvZGUKLQliZXR3ZWVuIHRoZSBkYWVtb25zCi0KLTIwMDMtMDgtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlbW9uL29wcm9maWxlZC5jOiByZW1vdmUgbXlwaWQsIHVudXNlZAotCi0yMDAzLTA4LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZS9NYWtlZmlsZS5hbToKLQkqIGRhZS9vcGRfcHJpbnRmLmg6IHJlbW92ZSBkdXBsaWNhdGUgaGVhZGVyCi0JYW5kIHVzZSBkYWVtb24vb3BkX3ByaW50Zi5oCi0KLTIwMDMtMDgtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuaDoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5oOgotCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzogcmVtb3ZlICJjcmVhdGUiIGJvb2wKLQlmcm9tIG9wZF9tYW5nbGVfZmlsZW5hbWUoKTogb25seSBvbmUgY2FsbHNpdGUgbmVlZHMKLQl0aGF0IGZ1bmN0aW9uYWxpdHksIG9wZW4gY29kZSB0aGUgY3JlYXRlIGluc3RlYWQKLQotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5oOgotCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmg6Ci0JKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOiByZXR1cm4gZXJyb3IgZnJvbQotCW9wZF9vcGVuX3NhbXBsZV9maWxlbmFtZSgpLiBEbyBub3QgZmFpbCB3aGVuIG9kYl9vcGVuCi0JZmFpbHMgZHVlIHRvIC0tcmVzZXQgcmFjZXMuCi0KLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogYSBsaXR0bGUgbW9yZSB2ZXJib3NpdHkuCi0KLQkqIGxpYnV0aWwvb3BfZmlsZS5oOgotCSogbGlidXRpbC9vcF9maWxlLmM6IGZpeCBjcmVhdGVfZGlyL3BhdGgoKSBjb21tZW50cywKLQlkb24ndCB1c2UgYWNjZXNzKCkKLQotCSogdXRpbHMvb3Bjb250cm9sOiByZWR1Y2UgY2hhbmNlIG9mIC0tcmVzZXQgcmFjZXMKLQotMjAwMy0wOC0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKLQkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogYWRkIGFwcF9uYW1lIHNvcnQgb3JkZXIsIGZvcmNlIHNvcnQgb3JkZXIKLQkgIGZvciBjcml0ZXJpYSB1bnNwZWNpZmllZCBieSB1c2VyLgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IHVwZGF0ZSAtLXNvcnQgb3B0aW9uIGhlbHAgc3RyaW5nLgotCi0yMDAzLTA4LTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOgotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6IGFkZCAtLWJhc2UtZGlycwotCi0yMDAzLTA4LTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOgotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6IGFkZCAtLXNlYXJjaC1kaXJzCi0KLTIwMDMtMDgtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGRvYy9vcGFubm90YXRlLjEuaW46Ci0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDogcmVtb3ZlIC0tc291cmNlLWRpciBhbmQgLS1iYXNlLWRpciwKLQkgIHRoZXkncmUgY29uZnVzaW5nIGFuZCBub3QgdXNlZnVsIGluIHRoZSBjdXJyZW50IGZvcm0KLQotMjAwMy0wOC0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGF2b2lkIHVzaW5nIHBzLCBpdCdzIHZlcnkgc2xvdyB3aXRoIGthbGxzeW1zCi0KLTIwMDMtMDgtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBjKysgc3RhdGljIGZ1bmN0aW9uIGRvZXNuJ3QgZ2V0IGEgbWFuZ2xlZCBuYW1lCi0JICBpbiBkZWJ1ZyBpbmZvIChzZWUgZ2NjICMxMTc3NCkuIFRyeSB0byByZWNvdmVyIHRocm91Z2ggYSBub3QKLQkgIGNvbXBsZXRlbHkgcmVsaWFibGUgbWVjaGFuaXNtIGJ1dCBiZXR0ZXIgdGhhbiBpZ25vcmluZyB0aGUgcHJvYmxlbQotCi0yMDAzLTA4LTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IG1pbm9yOiBtb3JlIGNvbnNpc3RlbmN5IGFib3V0IGZ1bmN0aW9uIG9yZGVyaW5nCi0KLTIwMDMtMDgtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL3Byb2ZpbGUuaDoKLQkqIGxpYnBwL3Byb2ZpbGUuY3BwOiBwcm9maWxlOjpzYW1wbGVfY291bnQoKSBuZXcgdG8gYWxsb3cgcmF3IGFjY2VzcwotCSAgdG8gc2FtcGxlcyBjb3VudAotCSogcHAvb3ByZXBvcnQuY3BwOiB1c2UgYWJvdmUgZnVuY3Rpb24gdG8gaW1wbGVtZW50IG9wcmVwb3J0ICh3L28gLWwKLQkgIG9yIC0tZGV0YWlscyBvcHRpb25zKS4gb3ByZXBvcnQgaXMgcm91Z2hseSB0d2ljZSBmYXN0ZXIuCi0KLTIwMDMtMDgtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcmVwb3J0LmNwcDogY2xhcmlmeSBtdWx0aXBsZSBjb3VudGVyIHN1cHBvcnQKLQotMjAwMy0wOC0wMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJyZWdleC9zdGwucGF0LmluOiBmaXggX0xpc3RfaXRlcmF0b3IgcmVnZXgKLQkoZnJvbSBQaGlsKQotCi0yMDAzLTA3LTMxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcGFubm90YXRlLmNwcDogb3V0cHV0IGNwdSB0eXBlIGFuZCBjcHUgc3BlZWQuCi0KLTIwMDMtMDctMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogcmVtb3ZlIHNvbWUgYXBwYXJlbnRseQotCWRlYWQgY29kZQotCi0yMDAzLTA3LTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGV2ZW50cy9pMzg2LnA0LnVuaXRfbWFza3M6IG1ha2UgZmxhbWVfdW9wcyB2YWx1ZQotCW1hbmRhdG9yeSwgWXVhbi5MdUBycnplLnVuaS1lcmxhbmdlbi5kZSBkb2VzIG5vdAotCXNlZSBhbnkgZXZlbnRzIHdpdGhvdXQgc2V0dGluZyB0aGUgdW5pdCBtYXNrCi0KLTIwMDMtMDctMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL29wX2JmZC5oOgotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGJmZF9vcGVucigpIGtlZXBzIGEgY29weSBvZgotCXRoZSBwYXNzZWQgaW4gY2hhciAqIGFyb3VuZCwgc2lja2VubHkgZW5vdWdoLiBFbnN1cmUgbGlmZXRpbWVzCi0Jd2lsbCBhbHdheXMgYmUgY29ycmVjdCBieSBhZGRpbmcgYSBmaWxlbmFtZSBkYXRhIG1lbWJlciB0bwotCW9wX2JmZAotCi0yMDAzLTA3LTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9vcF9oZWFkZXIuaDoKLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6IHNlcGFyYXRlIG91dHB1dCBvZiBjcHVfdHlwZSwgY3B1X3NwZWVkCi0JICBhbmQgY291bnRlciBzZXR1cAotCi0JKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuaDoKLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6IHVubWVyZ2VhYmxlX3Byb2ZpbGUoKSBzcGxpdCBwcm9maWxlCi0JICBieSB0aGUgdW5tZXJnZWFibGUuCi0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiBpbml0aWFsIG11bHRpcGxlIGNvdW50ZXIgb3V0cHV0LCBtdWx0aXBsZSBjb3VudGVyCi0JICB3aXRoIC1sIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLgotCi0yMDAzLTA3LTI5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcGNvbnRyb2wuMS5pbjogdXBkYXRlIGZvciAtLWV2ZW50Ci0KLTIwMDMtMDctMjkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOgotCSogZG9jL3NyY2RvYy9Eb3h5ZmlsZS5pbjoKLQkqIG9wcm9mX3JlcG9ydC86IHJlbW92ZSBiYWRseSBvdXQgb2YgZGF0ZSBvcHJvZl9yZXBvcnQKLQotMjAwMy0wNy0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC43Y3ZzCi0KLTIwMDMtMDctMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuNgotCi0yMDAzLTA3LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogZml4IGNhbGwgb2Ygb3BfaGVscAotCi0yMDAzLTA3LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHJlcGxhY2UgZm9sZGVyIGljb25zIHdpdGggY2xlYXJlcgotCXJlZC9ncmVlbiBjaXJjbGVzCi0KLTIwMDMtMDctMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogYWN0dWFsbHkgc2VsZWN0IGFuZCBzaG93IHRoZSBkZWZhdWx0Ci0JZXZlbnQKLQotMjAwMy0wNy0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBzbWFsbCBzdHJpbmcgdHdlYWssIHNob3cgImNvbmZsaWN0cyIKLQltZXNzYWdlIGNvbnNpc3RlbnRseQotCi0yMDAzLTA3LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGRvbid0IHVzZSBpbnZhbGlkYXRlZCBpdGVyYXRvcgotCi0yMDAzLTA3LTI2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBmaXggZm9yIDIuOTEuNjYKLQotCSogbGlicHAvcHJvZmlsZS5jcHA6IHR5cG8gaW52b2tpbmcgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIHJldmVhbGVkCi0JICBieSBnY2Mgc3RsIGRlYnVnIG1vZGUKLQkqIGxpYnBwL3Byb2ZpbGUuaDogZW5zdXJlIHdlIHByb3ZpZGUgdGhlIHJpZ2h0IHR5cGVkZWYgdG8gc3RkOjoKLQkgIGZvciBwcm9maWxlOjpjb25zdF9pdGVyYXRvciByZXZlYWxlZCBieSBnY2Mgc3RsIGRlYnVnIG1vZGUgYXQgY29tcGlsZQotCSAgdGltZS4gVGhlIGltcGxlbWVudGF0aW9uIGlzIGEgYml0IHRyaWNreSB0byB3b3JrIHdpdGggb2xkIGNvbXBpbGVyCi0JKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6IGNvbXBhcmUgbXVzdCBkZWZpbmUgYSB3ZWFrIG9yZGVyZWQgcmVsYXRpb24KLQkgIG9yZGVyLCByZXZlYWxlZCBieSBnY2Mgc3RsIGRlYnVnIG1vZGUuCi0KLTIwMDMtMDctMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOgotCSogZ3VpL29wcm9mX3N0YXJ0Lmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBjaGFuZ2UgVUkgdG8gdXNlIHRoZSBuZXcgY291bnRlciBhbGxvY2F0aW9uCi0JICBBUEkKLQotCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5oOgotCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5jOgotCSogdXRpbHMvb3BfaGVscC5jOiBtaW5vciBjb25zdC1uZXNzIGFwaSBjaGFuZ2UKLQotMjAwMy0wNy0yNSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IFJlc3RyaWN0IHRoZSBzZWFyY2ggcGF0aC4KLQotMjAwMy0wNy0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5jOiB1c2UgdGFidWxhdGlvbgotCi0JKiBsaWJvcC9vcF9ldmVudHMuYzoKLQkqIGxpYm9wL29wX2V2ZW50cy5oOiBmaW5kX2V2ZW50X2J5X25hbWUoKSBuZXcKLQkqIHV0aWxzL29wX2hlbHAuYzogdXNlIGZpbmRfZXZlbnRfYnlfbmFtZSgpCi0KLTIwMDMtMDctMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHV0aWxzL29wX2hlbHAuYzogbWFrZSB2YWxncmluZCBoYXBweSArIG1pbm9yIGNsZWFudXAKLQotMjAwMy0wNy0yNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5oOgotCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5jOiBuZXcgZmlsZSBwcm92aWRpbmcgbWFwcGluZyBmcm9tIGFuIGV2ZW50IAotCSAgbGlzdCB0byBoYXJkd2FyZSBjb3VudGVyIG51bWJlcgotCSogdXRpbHMvb3BfaGVscC5jOiB1c2UgdGhlIGFib3ZlIGFwaQotCi0yMDAzLTA3LTI0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiB1dGlscy9vcF9oZWxwLmM6IGZpeCBoYXJkd2FyZSBjb3VudGVyIGFsbG9jYXRpb24gb3JkZXIKLQotMjAwMy0wNy0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBjb21tZW50IG91dCAtLWJhc2UtZGlyIG1lbnRpb24KLQotMjAwMy0wNy0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiByZW1vdmUgbWVudGlvbiBvZiBvcHJvZl9zdGFydF9ldmVudAotCi0yMDAzLTA3LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogZG9uJ3QgdXNlbGVzc2x5IHRyeSB0byB1bmxpbmsKLQlub24tZXhpc3RlbnQgbG9ja2ZpbGUKLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOgotCSogZGFlbW9uL29wcm9maWxlZC5jOiBjbGVhbiB1cCBidWZmZXIgcmVhZCBtZXNzYWdlcwotCi0yMDAzLTA3LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogZXJyb3Igb3V0IGF0IC0tc2V0dXAgdGltZSBpZiB2bWxpbnV4IGlzIG5vdAotCXZhbGlkLiBDbGVhbnVwIHRoZSBlcnJvciBtZXNzYWdlIGlmIHNvCi0KLQkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IGZpeCBwb3RlbnRpYWwgbnVsbCBkZXJlZgotCi0yMDAzLTA3LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHNlbGVjdCAiTm8gZXZlbnQiIHdoZW4gc3dpdGNoaW5nIGNvdW50ZXIKLQlpZiBuZWVkZWQKLQotMjAwMy0wNy0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBmaXggZGVmYXVsdCBldmVudCBjaG9vc2luZyB3aGVuCi0JZGFlbW9ucmMgZXhpc3RzCi0KLTIwMDMtMDctMjEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHRoaW5rbyBpbiBoYXNfdW5pcXVlX2V2ZW50KCksIGRvbid0IHdhcm4gZm9yCi0JICBubyBjb3VudGVyIHdpdGggQ1BVX1RJTUVSX0lOVAotCi0yMDAzLTA3LTIxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBhbGxvdyB0byBkZS1zZWxlY3QgYSBjb3VudGVyCi0KLTIwMDMtMDctMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IHJlbW92ZSB1cHRpbWUgcHJldHR5IHByaW50aW5nLgotCUl0J3MgYnJva2VuIGZvciAyLjUgYW5kIHVnbHkgY29kZQotCi0yMDAzLTA3LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5oOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdXNlIGEgZGVmYXVsdCBldmVudCBpZiBubwotCWV2ZW50cyBhcmUgc2V0IHlldAotCi0yMDAzLTA3LTIwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBtNC9jb21waWxlcm9wdGlvbi5tNDogZml4IGZvciBhdXRvY29uZiAyLjEzCi0KLTIwMDMtMDctMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IG1pbm9yIHRpZHkKLQotMjAwMy0wNy0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogUlRDIG1vZGUgd2FzIG5vdCB3b3JraW5nCi0KLTIwMDMtMDctMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOiByZW1vdmUgZGVhZCBjb2RlLCBmaXgga2VybmVsX29ubHkgcmVhZAotCi0yMDAzLTA3LTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogZml4IHR5cG8gdGhhdCB3YXMgcGFydGx5IGJyZWFraW5nCi0JQ1BVX1RJTUVSX0lOVAotCi0yMDAzLTA3LTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5oOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogZml4ZXMgZm9yIENQVV9USU1FUl9JTlQKLQotMjAwMy0wNy0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aTogcmVtb3ZlIGFkZC9yZW1vdmUgZXZlbnQgYnV0dG9ucywKLQlmaXggcmVzaXplIHdlaXJkbmVzcwotCi0JKiBndWkvb3Byb2Zfc3RhcnQuaDoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHJlbW92ZSBhZGQvcmVtb3ZlIGV2ZW50IGJ1dHRvbnMsIGFsbG93Ci0Jc2hvcnQtZm9ybSBldmVudCBkZXNjcmlwdGlvbnMKLQotMjAwMy0wNy0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZ3VpL3BlcnNpc3RlbnRfY29uZmlnLmg6IHJlbW92ZQotCSogZ3VpL29wcm9mX3N0YXJ0Lmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBkZWJ1ZywgcmVtb3ZlIGRlYWQgY29kZSwgd29ya3MgYmV0dGVyIG5vdywgc2VlCi0JICBUT0RPCi0KLTIwMDMtMDctMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5oOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogcmUtZW5hYmxlIHBhcnRpYWxseSB0aGUgZ3VpLCBzb3J0YSBvZgotCSAgd29ya2luZyBpZiBjYXV0aW91bHN5IHVzZWQKLQotMjAwMy0wNy0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBndWkvdWkvb3Byb2Zfc3RhcnRfYmFzZS51aToKLQkqIGd1aS9vcHJvZl9zdGFydC5oOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogc29tZSBzdGVwcyB0b3dhcmRzIGZpeGluZyBndWkgZm9yCi0JdGhlIG5ldyBldmVudHMgc3R1ZmYKLQotMjAwMy0wNy0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcC9vcF9ldmVudHMuaDoKLQkqIGxpYm9wL29wX2V2ZW50cy5jOiBhZGQgb3BfZGVmYXVsdF9ldmVudAotCi0JKiB1dGlscy9vcF9oZWxwLmM6IG1vdmUgZGVmYXVsdCBldmVudCBzdHVmZiB0byBsaWJvcCwKLQlmaXggLWMgb3B0aW9uCi0KLTIwMDMtMDctMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3BfaGVscC5jOiBmaXggZGVmYXVsdCBSVEMgZXZlbnQgdG8gYmUKLQkiUlRDX0lOVEVSUlVQVFMiCi0KLTIwMDMtMDctMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHV0aWxzL29wY29udHJvbAotCSogZXZlbnRzL3J0Yy4uZXZlbnRzOiB1c2UgUlRDX0lOVEVSUlVQVFMgYXMgZXZlbnQgbmFtZQotCi0yMDAzLTA3LTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOiBDODkgY29tcGlsZSBmaXgKLQotMjAwMy0wNy0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6Ci0JKiB1dGlscy9vcF9oZWxwLmM6IG1vdmUgdGhlIGRlZmF1bHQgZXZlbnQgc3RyaW5ncyBpbnRvCi0Jb3BfaGVscC5jIGluc3RlYWQgb2YgaW4gb3Bjb250cm9sCi0KLTIwMDMtMDctMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgZXZlbnQgbmFtZSBmb3IgdGltZXIgaW50ZXJydXB0Ci0KLQkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6IGhhbmRsZSBDUFVfVElNRVJfSU5UCi0KLQkqIHV0aWxzL29wX2hlbHAuYzogZml4IGEgY29yZSBkdW1wCi0KLTIwMDMtMDctMTMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogdmVyYnByaW50ZigpIHdoZW4gc3RhcnRpbmcgcmVhZGluZyBidWZmZXIgbm90Ci0JICBwcmludGYKLQotMjAwMy0wNy0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZnJvbSBCUkFOQ0hfQ0FMTEdSQVBIOgotCSogZGFlbW9uL29wZF9pbWFnZS5jOiBwcmludGYgLT4gdmVyYnByaW50ZiwgZml4IGNvbW1lbnQKLQkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IGtlcm5lbC9tb2R1bGUgc2FtcGxlcyBzdGF0aXN0aWNzIHdhcyB3cm9uZwotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmg6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOgotCSogZGFlbW9uL29wZF9rZXJuZWwuaDogaW1wb3J0IGNsZWFudXAgZnJvbSBicmFuY2gsIG1haW5seSBkb24ndCBoYW5kbGUKLQkgIHNhbXBsZXMgaW4gb3BkX2tlcm5lbC5jIGJ1dCByZXR1cm4gKGNyZWF0aW5nIGlmIG5lY2Vzc2FyeSkgYW4KLQkgIG9wZF9pbWFnZSBzdHJ1Y3Qgd2hlcmUgdGhlIHNhbXBsZSBtdXN0IGdvIGFuZCBsZXQgb3BkX2ltYWdlIGNhbGxlcgotCSAgaW4gb3BkX2ltYWdlLmMgZG8gc2FtcGxlIGluc2VydGlvbgotCi0yMDAzLTA3LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IHNob3dzIGJhc2VuYW1lICQwIHdpdGggLS12ZXJzaW9uCi0JKiBsaWJwcC9vcF9oZWFkZXIuY3BwOiBmb3JtYXRpbmcKLQkKLTIwMDMtMDctMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogZG9uJ3QgdHJ5IHRvIHNhdmUgY3VycmVudCBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QKLQkgIGV4aXN0Ci0KLTIwMDMtMDctMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9zdHJlYW1fdXRpbC5oOgotCSogbGlidXRpbCsrL3N0cmVhbV91dGlsLmNwcDogbmV3IGZpbGUsIGlvX3N0YXRlKCkgc2F2ZSBvYmplY3QKLQkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbTogaGFuZGxlIG5ldyBmaWxlCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6IHVzZSBpb19zdGF0ZQotCi0yMDAzLTA3LTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBtb2R1bGUveDg2L29wX21vZGVsX3A0LmM6IHJlZmxlY3QgaW50ZWwgZG9jdW1lbnRhdGlvbiBmaXguCi0KLTIwMDMtMDctMDggIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogZGFlbW9uL29wZF9rZXJuZWwuYzogSGFuZGxlIC9wcm9jL21vZHVsZXMgZm9ybWF0LgotCQotMjAwMy0wNy0wOCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOgotCSogY29uZmlndXJlLmluOiAtLWVuYWJsZS1nY292IG9wdGlvbiBhbmQgZG9jdW1lbnRhdGlvbi4KLQotMjAwMy0wNy0wOCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IENvcnJlY3QgUDQgZGVmYXVsdCBldmVudC4KLQotMjAwMy0wNi0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBmcm9tIEJSQU5DSF9DQUxMR1JBUEgKLQkqIGxpYmRiL29kYl9oYXNoLmg6Ci0JKiBsaWJkYi9kYl9tYW5hZ2UuYzoKLQkqIGxpYmRiL2RiX2luc2VydC5jOiBuYW1lc3BhY2Ugc2FmZXR5Ci0KLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlLmNwcDogc3BhY2luZywgYWRkIGEgRklYTUUKLQotMjAwMy0wNy0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6Ci0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogY2xlYW51cCB3YWxraW5nIHRocm91Z2ggbXVsdGltYXAgd2l0aCBhCi0JICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KLQotMjAwMy0wNy0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOgotCSogbGliZGIvZGJfaW5zZXJ0LmM6IDY0IGJpdHMgYXJjaCBjb21waWxlIGZpeCwgdGhhbmtzIHRvIEZhbGsgSHVlZmZuZXIKLQkgPGZhbGtAZGViaWFuLm9yZz4KLQotMjAwMy0wNy0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3ByZXBvcnQuY3BwOiBob25vciBvcHRpb25zOjpzaG93X2hlYWRlcgotCi0yMDAzLTA2LTMwICBHcmF5ZG9uIEhvYXJlICA8Z3JheWRvbkByZWRoYXQuY29tPgotCi0JKiBsaWJwcC9vcF9oZWFkZXIuY3BwOiBIYW5kbGUgcHJpbnRpbmcgbXVsdGlwbGUgYml0bWFzayB2YWx1ZXMuCi0KLTIwMDMtMDYtMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL01ha2VmaWxlLmFtOiBmaXggbWFrZSBkaXN0Y2hlY2sKLQotMjAwMy0wNi0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuYzogaGlkZSB0aGUgdW5oYW5kbGVkCi0JLS1iYXNlLWRpciBvcHRpb24KLQotMjAwMy0wNi0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9NYWtlZmlsZS5hbTogZG9uJ3QgYnVpbGQgb3BkaWZmCi0KLTIwMDMtMDYtMTcgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogZGFlbW9uL29wZF9jb29raWUuaDogQWRkIHMzOTAgc3lzY2FsbCB2YWx1ZS4KLQkKLTIwMDMtMDYtMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBkb24ndCBhY2NlcHQgIi1yIiAtIGl0J3MgdG9vIGVhc3kgdG8gdHlwbwotCi0yMDAzLTA2LTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9zcmNkb2MvRG94eWZpbGU6IHJlbW92ZWQKLQotCSogZG9jL3NyY2RvYy9Eb3h5ZmlsZS5pbjoKLQkqIGNvbmZpZ3VyZS5pbjogZ2VuZXJhdGUgZG94eWdlbiB2ZXJzaW9uIG5yLiBhdXRvbWF0aWNhbGx5Ci0KLTIwMDMtMDYtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYmRiL2RiX2luc2VydC5jcHA6IG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gb2YgZXJyb3IgbWVzc2FnZSBvbgotCSAgZXJyb3IgcGF0aAotCi0yMDAzLTA2LTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogYWNjZXB0IHNvbWUgc2hvcnQgZm9ybXMgZm9yIGNvbW1vbgotCW9wZXJhdGlvbnMKLQotMjAwMy0wNi0xNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGFjY2VwdCAtLWZvbyBibGFoIGFzIHdlbGwgYXMKLQktLWZvbz1ibGFoCi0KLTIwMDMtMDYtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiAib3Bjb250cm9sIiB3aWxsIHNob3cgdXNhZ2UKLQlpbnN0ZWFkIG9mIGRvaW5nIG5vdGhpbmcKLQotMjAwMy0wNi0xNiAgV2lsbCBDb2hlbiAgPHdjb2hlbkBuYy5yci5jb20+Ci0KLQkqIGxpYmFiaS9hYmkuY3BwOgotCSogbGliYWJpL29wX2ltcG9ydC5jcHA6IEFkZCByZXF1aXJlZCBpbmNsdWRlIGZvciBjYXNzZXJ0LgotCi0yMDAzLTA2LTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGV2ZW50cy94ODYtNjQuaGFtbWVyLnVuaXRfbWFza3M6IHJlbW92ZSBzb21lCi0JYm9ndXMgRklYTUVzCi0KLTIwMDMtMDYtMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogUkVBRE1FOiBmaXggYXV0b2dlbi5zaCBsaW5lCi0KLTIwMDMtMDYtMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOiA2NCBiaXQgZml4ZXMKLQotMjAwMy0wNi0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcF9oZWxwLmM6IGM4OSBmaXgKLQotMjAwMy0wNi0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IGM4OSBmaXgKLQotMjAwMy0wNi0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2N1bWVudCAtLWV2ZW50Ci0KLQkqIHV0aWxzL29wY29udHJvbDoKLQkqIHV0aWxzL29wX2hlbHAuYzogYWxsb3cgdW5pdCBtYXNrLCBrZXJuZWwsIHVzZXIgdG8gYmUKLQlvcHRpb25hbC4gVmVyaWZ5IG5vdCB0b28gbWFueSBldmVudHMgYXJlIHBhc3NlZC4KLQotMjAwMy0wNi0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBmaXggbnJfY291bnRlcnMgY3B1IHR5cGUgY2hlY2sKLQotCSogdXRpbHMvb3BfaGVscDogaW1wbGVtZW50IC0tY2hlY2tfZXZlbnRzLCBldmVudCB2YWxpZGF0aW9uCi0JYW5kIGNvdW50ZXIgYWxsb2NhdGlvbgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IHVzZSB0aGUgYWJvdmUsIGltcGxlbWVudCAtLWV2ZW50PWRlZmF1bHQKLQotMjAwMy0wNi0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IGZpeCBhIHN0dXBpZCBlcnJvciBpbiBteSBwcmV2aW91cyBUR0lEIHBhdGNoCi0KLTIwMDMtMDYtMTIgIEdyYXlkb24gSG9hcmUgIDxncmF5ZG9uQHJlZGhhdC5jb20+Ci0KLQkqIGxpYm9wL29wX2V2ZW50cy5jIChvcF9jaGVja19ldmVudHMpOiBDaGVjayBiaXRtYXNrcyBhcyB3ZWxsIGFzIAotCWV4Y2x1c2l2ZSB2YWx1ZXMsIGZvciB1bml0IG1hc2tzLgotCi0yMDAzLTA2LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogd2Ugd2VyZSBub3QgaGFuZGxpbmcgYSB0cnVuY2F0ZWQKLQlUR0lEIGVudHJ5IHByb3Blcmx5Ci0KLTIwMDMtMDYtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL3VuaXF1ZV9zdG9yYWdlLmg6IG1pc3NpbmcgdHlwZW5hbWUKLQotMjAwMy0wNi0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDogdHlwbyBpbiBvcHRpb24gbmFtZQotCi0yMDAzLTA2LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogYm9yaW5nX3N5bWJvbCgpIG5ldyB0byBnZXQgYSBiZXR0ZXIgY2hvaWNlCi0Jd2hlbiBlbGltaW5hdGluZyBzeW1ib2wgYXQgaWRlbnRpY2FsIHZtYQotCi0yMDAzLTA2LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGZpeCBydGMgb3B0aW9uIGNoZWNraW5nLCBidWcgYWRkZWQgYWZ0ZXIgMC41LjMsCi0Jbm8gYmlnIGRlYWwKLQotMjAwMy0wNi0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicmVnZXgvb3BfcmVnZXguY3BwOgotCSogbGlicHAvcHJvZmlsZS5jcHA6IGNvbXBpbGUgZml4LCB0cmVlIHdhcyBicm9rZW4gYnkgbXkgcHJldmlvdXMgcGF0Y2gKLQotMjAwMy0wNi0xMSAgSmFzb24gWWVoICA8amFzb24ueWVoQGFtZC5jb20+Ci0KLQkqIGV2ZW50cy9pMzg2LmF0aGxvbi5ldmVudHM6IGFkZCBDUFVfQ0xLX1VOSEFMVEVECi0KLQkqIHV0aWxzL29wY29udHJvbDogdXNlIHRoZSBhYm92ZSBieSBkZWZhdWx0Ci0KLQkqIGV2ZW50cy94ODYtNjQuaGFtbWVyLmV2ZW50czoKLQkqIGV2ZW50cy94ODYtNjQuaGFtbWVyLnVuaXRfbWFza3M6IHZhcmlvdXMgZml4ZXMKLQotMjAwMy0wNi0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvb3BfaGVhZGVyLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGUuY3BwOgotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKLQkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDoKLQkqIGxpYnJlZ2V4L29wX3JlZ2V4LmNwcDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiB1c2UgZXhjZXB0aW9uIHJhdGhlciBleGl0KEVYSVRfRkFJTFVSRSkgaW4KLQlsaWJyYXJ5IGNvZGUKLQotMjAwMy0wNi0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IGZ1dHVyZS1wcm9vZiB0aGUgY29kZSBoYW5kbGVycwotCi0yMDAzLTA2LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcGFubm90YXRlLmNwcDogb3V0cHV0X2FzbSgpIGF2b2lkIG91dHB1dCB3aGVuIHRoZSBzZXQgb2Ygc2VsZWN0ZWQKLQlzeW1ib2xzIGRvZXNuJ3QgY29udGFpbiBhbnkgc2FtcGxlcwotCi0yMDAzLTA2LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvdW5pcXVlX3N0b3JhZ2UuaDogd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiBrZXkgaXMgcHJlc2VudAotCSAgYmVmb3JlIHRyeWluZyB0byBpbnNlcnQgaXQKLQotMjAwMy0wNi0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6IG1pbm9yIHRpZHkKLQkqIGxpYnV0aWwrKy91bmlxdWVfc3RvcmFnZS5oOiBzbWFsbCBlZmZpY2llbmN5IGltcHJvdmVtZW50Ci0KLTIwMDMtMDYtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvTWFrZWZpbGUuYW06Ci0JKiBsaWJ1dGlsL01ha2VmaWxlLmFtOiBmaXggbWFrZSBkaXN0Y2hlY2sKLQotMjAwMy0wNi0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9vcHBfc3ltYm9sLmg6IHJlbmFtZSB0byAuLi4KLQotCSogbGlicHAvc3ltYm9sLmg6IC4uLiB0aGlzCi0KLQkqIGxpYnBwL01ha2VmaWxlLmFtOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgotCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9zeW1ib2xfZnVuY3RvcnMuaDoKLQkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogZml4IHVwIGZyb20gYWJvdmUgYW5kIHNvbWUgaGVhZGVyCi0JY2xlYW51cHMKLQotMjAwMy0wNi0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9wcm9maWxlLmg6IHN0ZDo6cGFpciBub3QgcGFpcgotCi0yMDAzLTA2LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wcm9maWxlLmNwcDogZG9uJ3QgdW5kZXJmbG93IHN0YXJ0IG9mZnNldCB3aGVuIHRoZSB2bWEgcmFuZ2UKLQkgIGlzIHVua25vd24KLQkqIHBwL29wcmVwb3J0LmNwcDogdXNlIHNhbXBsZXNfcmFuZ2UoKSBub3Qgc2FtcGxlc19yYW5nZSgwLCB+MCkKLQotMjAwMy0wNi0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcHJvZmlsZS5oOgotCSogbGlicHAvcHJvZmlsZS5jcHA6IHJlcGxhY2UgYWNjdW11bGF0ZV9zYW1wbGVzKCkgQVBJIGJ5IGFuIGl0ZXJhdG9yCi0JICBpbnRlcmZhY2UKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlY29udGFpbmVyLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogdXNlIG5ldyBBUEkKLQotMjAwMy0wNi0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogaW5jbHVkZS9zc3RyZWFtOiByZXBsYWNlIG9sZCB2ZXJzaW9uIGJ5IHRoZSBvbmNlIHNoaXBwZWQgd2l0aAotCSAgMi45NS4zLCBzZWVrZygpIGluIHRoZSBvbGQgd2FzIG5vdCB3b3JraW5nCi0KLTIwMDMtMDYtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6IGRvbid0IG5lZWQgdG8gZGVmaW5lIHRoZSB0YWcgc3RydWN0cwotCi0JKiBsaWJ1dGlsKysvdW5pcXVlX3N0b3JhZ2UuaDogZml4IHRoZSBjb21tZW50cywKLQltYWtlIGdldCgpIHB1YmxpYwotCi0yMDAzLTA2LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogZ2NjIDIuOTEuNjYgZml4Ci0KLTIwMDMtMDYtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6Ci0JKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOgotCSogbGlicHAvb3BwX3N5bWJvbC5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgotCSogbGlicHAvc3ltYm9sX2Z1bmN0b3JzLmNwcDoKLQkqIGxpYnV0aWwrKy91bmlxdWVfc3RvcmFnZS5oOiBkb24ndCBkZXJpdmUgZnJvbSBJKCkKLQlhdCBhbGwgZm9yIGlkX3ZhbHVlLCBpdCdzIG5vdCBuZWVkZWQuIEhpZGUgLmlkIGFuZAotCXByb3ZpZGUgb3BlcmF0b3I8KCksIG9wZXJhdG9yPT0oKSwgb3BlcmF0b3IhPSgpLCBhbmQKLQlzZXQoKQotCi0yMDAzLTA2LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy91bmlxdWVfc3RvcmFnZS5oOiBtYWtlIHNvbWUgb2YKLQlpZF92YWx1ZSBvbmx5IHZpc2libGUgdG8gdW5pcXVlX3N0b3JhZ2UuCi0KLTIwMDMtMDYtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6Ci0JKiBsaWJ1dGlsKysvdW5pcXVlX3N0b3JhZ2UuaDogbW92ZSB0aGUgSUQgY2xhc3MKLQlpbnRvIHVuaXF1ZV9zdG9yYWdlLCBhbmQgbWFrZSBpdCBkZXJpdmUgZnJvbSB0aGUKLQl0ZW1wbGF0ZSBwYXJhbWV0ZXIsIHRvIGdpdmUgc2ltcGxlciB0eXBlIHNhZmUgc3VwcG9ydAotCi0yMDAzLTA2LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwrKy91bmlxdWVfc3RvcmFnZS5oOiBhZGQgbmV3IHRlbXBsYXRlIGZvcgotCXVuaXF1ZSBzdG9yYWdlIG9mIHZhbHVlcwotCi0JKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDoKLQkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6IHVzZSBpdAotCi0yMDAzLTA2LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IGZpeCBvcmRlciBvZiBmaWxlIG91dHB1dCB3aXRoIG9wYW5ub3RhdGUKLQktLXNvdXJjZSB0byBiZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgdG9vbHMKLQotMjAwMy0wNi0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IGZpeCBvcGVyYXRvcjwKLQotMjAwMy0wNi0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcHJvZmlsZS5oOgotCSogbGlicHAvcHJvZmlsZS5jcHA6IGNoYW5nZSBBUEkgdG8gd2FsayB0aHJvdWdoIHZtYSB3aXRoIG5vbiB6ZXJvCi0Jc2FtcGxlcyBjb3VudCByYXRoZXIgbG9va2luZyBmb3IgYWxsIHZtYS4gVGhpcyBpcyBub3QgdmVyeSBjbGVhbiwgYW4KLQlpdGVyYXRvciBpbnRlcmZhY2Ugd2lsbCBiZSBwZXJoYXBzIGEgYmV0dGVyIGlkZWEuIE1lYXN1cmVzIHNob3dzIGl0J3MKLQl0byBkbyBpdCBzbyBmb3Igbm93IEkgYXBwbHkgaXQuCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHVwZGF0ZSBhY2NvcmRpbmcgdG8gYWJvdmUgY2hhbmdlLgotCi0yMDAzLTA2LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6IHJlbW92ZSBkZWFkIGFwaQotCSAgZmluZF9zeW1ib2woc3RyaW5nIHN5bWJvbF9uYW1lKQotCi0yMDAzLTA2LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDoKLQkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOiByZXBsYWNlIHNvbWUgdXNlIG9mIHN0cmluZyBmaWxlbmFtZSBieQotCSAgZGVidWdfbmFtZV9pZAotCi0yMDAzLTA2LTA1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9NYWtlZmlsZS5hbToKLQkqIGRhZW1vbi9vcGRfa2VybmVsLmM6Ci0JKiBkYWVtb24vcF9tb2R1bGUuaDogcmVtb3ZlIHBfbW9kdWxlLmgsIHVudXNlZAotCi0JKiBkYWVtb24vb3BkX2Nvb2tpZS5oOiB1c2UgX19OUl9sb29rdXBfZGNvb2tpZSBhbmQKLQl1c2Ugb3VyIGRlZmluaXRpb25zIG9ubHkgaWYgaXQncyBub3QgZGVmaW5lZAotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOgotCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogcGVkYW50cnkKLQotCSogbGliYWJpL29wX2ltcG9ydC5jcHA6Ci0JKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOiBmaXggYnVpbGQgZnJvbSBvZGIgY2hhbmdlCi0KLQkqIGxpYm9wL29wX2NvbmZpZy5oOiBtb3ZlIE5SX0NQVVMgdG8gLi4uCi0KLQkqIGxpYm9wL29wX2NvbmZpZ18yNC5oOiAuLi4gaGVyZQotCi0JKiBsaWJvcC9vcF9od19jb25maWcuaDogcmVtb3ZlIHVudXNlZCBPUF9DT1VOVF9NQVgKLQotMjAwMy0wNi0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvb3BfaGVhZGVyLmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGUuY3BwOgotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgotCSogZGFlbW9uL29wZF9pbWFnZS5jOgotCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGxpYmRiL29kYl9oYXNoLmg6Ci0JKiBsaWJkYi9kYl9pbnNlcnQuYzoKLQkqIGxpYmRiL2RiX21hbmFnZS5jOgotCSogbGliZGIvZGJfdGVzdC5jOiBlcnJvciBtZXNzYWdlIGlzIG5vdyBhIGZpZWxkIG9mIGEgc2FtcGxlc19vZGJfdAotCi0yMDAzLTA2LTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuY3BwOgotCSogbGliYWJpL2FiaS5jcHA6Ci0JKiBsaWJhYmkvYWJpLmg6Ci0JKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgotCSogbGliYWJpL29wX2FwaS5oOgotCSogbGliYWJpL29wX2FiaS5jcHA6Ci0JKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogcGVkYW50cnksIHJlbW92ZSB1bnVzZWQgY29kZQotCi0yMDAzLTA2LTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBsaWJvcC9vcHJvZmlsZWQuYzoKLQkqIGxpYm9wL29wX2NwdV90eXBlLmM6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuYzoKLQkqIG1vZHVsZS9vcHJvZmlsZS5oOgotCSogcHAvb3BkaWZmLmNwcDogbW9yZSBzdGF0aWMgZGF0YSBhbmQgZnVuY3Rpb24KLQotMjAwMy0wNS0zMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuaDoKLQkqIGxpYmRiL2RiX3N0YXQuYzoKLQkqIGxpYmRiL29kYl9oYXNoLmg6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9sb2NhdGVfaW1hZ2UuaDoKLQkqIGxpYnBwL25hbWVfc3RvcmFnZS5oOgotCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmg6Ci0JKiBsaWJwcC9wcm9maWxlLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogaW1wcm92ZSBkb3h5Z2VuIGNvbW1lbnQKLQotMjAwMy0wNS0zMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogY29uZmlndXJlLmluOiB1c2UgQUNfREVGSU5FX1VOUVVPVEVEKCkgdG8gZGVmaW5lIHZlcnNpb24gc3RyaW5nCi0JICBpbiBjb25maWcuaCBub3QgaW4gdmVyc2lvbi0xLmgKLQkqIE1ha2VmaWxlLmFtOiBkaXN0Y2xlYW4tbG9jYWw6IGlzIG5vIGxvbmdlciB1c2VkCi0JKiB2ZXJzaW9uLTEuaC5pbjogZGVsZXRlCi0JKiBsaWJ1dGlsL29wX3ZlcnNpb24uaDoKLQkqIGxpYnV0aWwvb3BfdmVyc2lvbi5jOiBuZXcgZmlsZTogcGFja2FnZSB2ZXJzaW9uIG91dHB1dAotCSogbGlidXRpbC9NYWtlZmlsZS5hbToKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIGd1aS9vcHJvZl9zdGFydC5oOgotCSogbGlib3Avb3BfZXZlbnRzLmM6Ci0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOgotCSogbGlicmVnZXgvZGVtYW5nbGVfc3lib2wuY3BwOgotCSogbW9kdWxlL29wcm9maWxlLmM6Ci0JKiB1dGlscy9vcF9oZWxwLmM6IHR3ZWFrICMgaW5jbHVkZSBhY2NvcmRpbmcKLQotMjAwMy0wNS0zMCAgRGFuIFppbmsgIDxEYW4uWmlua0BocC5jb20+Ci0KLQkqIG1vZHVsZS94ODYvb3BfYXBpYy5jOiByZWFsbHkgZGlzYWJsZSB0aGUgYXBpYyBpZiBpdCB3YXMgZGlzYWJsZWQKLQotMjAwMy0wNS0yOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGRvbid0IGFsbG93IC0tcnRjLXZhbHVlIGlmIG5vdCBSVEMgbW9kZQotCi0yMDAzLTA1LTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDogYWRkIDxzdGRleGNlcHQ+Ci0KLQkqIHBwL29wYW5ub3RhdGUuY3BwOiB1c2UgJ1xuJyBub3QgZW5kbAotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IHVudGllIGNvdXQKLQotMjAwMy0wNS0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbWVyZ2Ugd2l0aCBwcC1pbnRlcmZhY2UtYnJhbmNoOiBmb2xsb3dpbmcgQ2hhbmdlTG9nIHdhcyB1bm1lcmdlZAotCSAgdG8gYnJhbmNoCi0KLQkyMDAzLTA1LTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogb3Byb2ZpbGUgMC41LjMgaXMgcmVsZWFzZWQsIGJhY2sgdG8KLQkwLjZjdnMKLQotCTIwMDMtMDUtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDogdXBkYXRlIGRvY3MgZm9yIC0tbm8tdm1saW51eAotCi0JMjAwMy0wNS0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcC9vcF9pbnRlcmZhY2VfMjUuaDoKLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogaGFuZGxlIHRnaWQgZm9yIGZ1dHVyZQotCWNvbXBhdGliaWxpdHksIGZpeCBjb21waWxlIG9uIG9sZGVyIGdjY3MKLQotCTIwMDMtMDUtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlib3Avb3BfaW50ZXJmYWNlXzI1Lmg6IGFkZCBMQVNUX0NPREUKLQotCSogZGFlbW9uL29wZF9zdGF0cy5oOgotCSogZGFlbW9uL29wZF9zdGF0cy5jOiBjb3VudCBzaG9ydCByZWFkcyBvZgotCWJ1ZmZlciBhbmQgdW5wbGFjZWFibGUgc2FtcGxlcwotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IHJld3JpdGUgYnVmZmVyIHBhcnNpbmcKLQljb2RlLCBoYW5kbGUgd2luZG93IHdoZXJlIHdlIGNhbid0IHBsYWNlIGEKLQlzYW1wbGUKLQotCTIwMDMtMDUtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL3V0aWxpdHkuaDogZml4IHR5cG8KLQotCSogdXRpbHMvb3Bjb250cm9sOiBmaXggdHlwbwotCi0JMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9jb3VudGVyX3Byb2ZpbGUuY3BwOiByZW1vdmUgYm9ndXMgY3B1IHNwZWVkCi0JY29uc2lzdGVuY3kgY2hlY2sKLQotCTIwMDMtMDUtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbTQvTWFrZWZpbGUuYW06Ci0JKiBtNC9jb21waWxlcm9wdGlvbi5tNDogYWRkIGEgZ2VuZXJhbGlzZWQgY29tcGlsZXIgb3B0aW9uCi0JdGVzdGVyCi0KLQkqIGNvbmZpZ3VyZS5pbjogdXNlIGl0LCBhZGQgLWZuby1jb21tb24KLQotCTIwMDMtMDUtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wcm9maWxlZC5jOgotCSogZGFlL29wcm9maWxlZC5jOiByZW1vdmUgZHVwbGljYXRlIGRlY2xhcmF0aW9uIGZvdW5kCi0JdmlhIC1mbm8tY29tbW9uCi0KLQkyMDAzLTA1LTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IGZpeCB2YWxpZGF0aW9uIGVycm9ycyBmcm9tIHhtbGxpbnQgLS12YWxpZAotCQotCi0yMDAzLTA1LTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiBtYWtlIGltYWdlOi9wYXRoL3RvOmltYWdlIHdvcmtpbmcKLQotMjAwMy0wNS0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IHNwZWNpYWxpemUKLQkgIGxleGljYWxfY2FzdF9ub193czx1bnNpZ25lZCBpbnQ+IHRvIGFjY2VwdCBoZXhhZGVjaW1hbCBpbnB1dAotCi0JKiBwcC9jb21tb25fb3B0aW9uLmNwcDogbWlzc2luZyA8PCBlbmRsCi0KLTIwMDMtMDUtMjcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IHVwZGF0ZSBleGFtcGxlIGluICJJbnRlcnByZXRpbmcgcHJvZmlsaW5nIHJlc3VsdHMiCi0Jc2VjdGlvbgotCi0yMDAzLTA1LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IGFkZCBuZXcgcHAgdG9vbHMgb3B0aW9ucwotCi0yMDAzLTA1LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJlcG9ydC4xLmluOgotCSogZG9jL29wZ3Byb2YuMS5pbjoKLQkqIGRvYy9vcGFubm90YXRlLjEuaW46Ci0JKiBkb2Mvb3BfaGVscC4xLmluOiBjb21wbGV0ZQotCi0yMDAzLTA1LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIGRvYy9NYWtlZmlsZS5hbToKLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogZG9jL29wX2hlbHAuMS5pbjoKLQkqIGRvYy9vcGNvbnRyb2wuMS5pbjoKLQkqIGRvYy9vcHJlcG9ydC4xLmluOgotCSogZG9jL29wYW5ub3RhdGUuMS5pbjoKLQkqIGRvYy9vcGdwcm9mLjEuaW46IHJlLW9yZ2FuaXNlIGFuZCBhZGQgbWFucGFnZXMKLQotMjAwMy0wNS0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBzdGFydCB0byBkb2N1bWVudCB0aGUgcHAgaW50ZXJmYWNlCi0KLTIwMDMtMDUtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcmVwb3J0LmNwcDogcmVtb3ZlIGF1dG9tYXRpYyBzd2l0Y2ggdG8gLS1zeW1ib2xzIG1vZGUKLQotMjAwMy0wNS0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGhhbmRsZSBtZWFuaW5nbGVzcyBvcHRpb25zIGNvbWJpbmF0aW9ucwotCi0yMDAzLTA1LTI2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOiBubyBuZWVkIHRvIHVzZSB1bm1lcmdlYWJsZV9wcm9maWxlIGhlcmUKLQotMjAwMy0wNS0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZXZlbnRzL2kzODYucGlpaS51bml0X21hc2tzOiB0d2VhayBjb21tZW50LCBjaGFuZ2UgZGVmYXVsdCB1bml0IG1hc2sKLQkgIGZvciBrbmkgaW5zdHJ1Y3Rpb24gdG8gMCBhbmQgdHlwZSB0byBleGNsdXNpdmUKLQotMjAwMy0wNS0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiB0aGlua28KLQkqIHBwL29wcmVwb3J0LmNwcDogdHlwbwotCi0yMDAzLTA1LTI1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5oOgotCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcDogb2J2aW91cyBjbGVhbnVwLAotCXJlbW92ZSBzb21lIGRlYWQgY29kZQotCi0yMDAzLTA1LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9mb3JtYXRfZmxhZ3M6IGNmX2ltYWdlX25hbWUgbmV3IGNvbHVtbl9mbGFncyBmbGFnCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHVzZSBhYm92ZSBmbGFnLiBEb24ndCBjb21wYXJlIGFwcF9uYW1lCi0JICBieSBzdHJpbmcgYnV0IGlkCi0JKiBwcC9vcHJlcG9ydC5jcHA6IGhpZGUgaW1hZ2VfbmFtZSB3aGVuIHVuLW5lY2Vzc2FyeQotCi0yMDAzLTA1LTI0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkb2Mvc3JjZG9jL0RveHlmaWxlOgotCSogbGlicHAvcHJvZmlsZS5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKLQkqIGxpYnV0aWwrKy91dGlsaXR5Lmg6IHJlbW92ZSBnY2MgMi45MSBub25jb3B5YWJsZSBhcyBlbXB0eSBiYXNlIGNsYXNzCi0JIHdvcmstYXJvdW5kCi0KLTIwMDMtMDUtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogZG8gZWFybHkgY2hlY2sgb2YgbGliaWJlcnR5Ci0KLQkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogMi45MSBjb21waWxlIGZpeAotCi0yMDAzLTA1LTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvY2hpbGRfcmVhZGVyLmg6IG1pbm9yICNpbmNsdWRlIGZpeAotCi0yMDAzLTA1LTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOiBkZWJ1Z19uYW1lX3N0b3JhZ2U6Om5hbWUoKSAKLQkgIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgd2hlbiBmb3IgemVybyBpZCB0byBhdm9pZCBleGNlcHRpb24KLQotMjAwMy0wNS0yMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcHJvZmlsZS5jcHA6Ci0JKiBsaWJwcC9vcF9oZWFkZXIuaDoKLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6IHdoZW4gc2FtcGxlIGZpbGUgZGlmZmVyIG91dHB1dCB0aGUgc2FtcGxlCi0JICBmaWxlbmFtZQotCi0JKiBwcC9vcGFubm90YXRlLmNwcDogcmVtb3ZlIHNwdXJpb3VzIG91dHB1dAotCi0JKiAqL01ha2VmaWxlLmFtOgotCSogY29uZmlndXJlLmluOiBoYW5kbGUgb3VyIG93biBPUF9DRkxBR1MsIE9QX0NYWEZMQUdTIHRvIGxldCB1c2VyCi0JICBmcmVlIHRvIHVzZSBtYWtlIENGTEFHUz0KLQotMjAwMy0wNS0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcHJvZmlsZV9zcGVjLmg6Ci0JKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiByZW1vdmUgbGliX2ltYWdlX2V4Y2x1ZGUsIHVzZSBpbWFnZV9leGNsdWRlCi0JICBpbnN0ZWFkLiBtYXRjaCgpIEhhbmRsZSBpbWFnZSBleGNsdXNpb24uCi0KLQkqIGxpYnJlZ2V4L3N0bC5wYXQuaW46IEZJWE1FCi0KLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDogY29tcGlsZSBmaXgKLQotMjAwMy0wNS0xOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJ1dGlsKysvY29tbWFfbGlzdC5oOgotCSogbGlicHAvZmlsZW5hbWVfc3BlYy5jcHA6Ci0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6Ci0JKiBsaWJ1dGlsKysvZ2VuZXJpY19zcGVjLmg6IHJlbmFtZSBzdHJpY3RfY29udmVydDw+Ci0JdG8gbGV4aWNhbF9jYXN0X25vX3dzPD4KLQotMjAwMy0wNS0xOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJ1dGlsKysvZ2VuZXJpY19zcGVjLmg6IG1vdmUgc3RyaWN0X2NvbnZlcnQ8PiB0by4uLgotCi0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6IC4uLmhlcmUKLQotMjAwMy0wNS0xOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJ1dGlsKysvZ2VuZXJpY19zcGVjLmg6IGNvbW1hX2xpc3QgaXNuJ3QgYSBmcmllbmQKLQlhbnkgbW9yZQotCi0JKiBsaWJ1dGlsKysvY29tbWFfbGlzdC5oOiB1c2UgZ2VuZXJpY19zcGVjPD46Om1hdGNoKCkKLQlkaXJlY3RseQotCi0yMDAzLTA1LTE5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL25hbWVfc3RvcmFnZS5oOiBzL25hbWVfbWFwL3N0b3JlZF9uYW1lcy8sIGl0J3Mgbm90Ci0JYSBtYXAgYW55IG1vcmUuCi0KLTIwMDMtMDUtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnJlZ2V4L21hbmdsZWQtbmFtZS50eHQ6Ci0JKiBsaWJyZWdleC9zdGwucGF0LmluOiBwYXJ0aWFsIGhhbmRsaW5nIG9mIF9JZGVudGl0eTw+IGFuZAotCSAgX1NlbGVjdDFzdDw+LCBwYXR0ZXJuIGZhaWwgaWYgdHlwZSBhcmUgdG9vIGNvbXBsZXgKLQotMjAwMy0wNS0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IHNtYWxsIGNsZWFudXAKLQotCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6Ci0JKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOiBlbnN1cmUgdHlwZSBzYWZldHkgYnkgcHJvdmlkaW5nIGRpc3RpbmN0Ci0JICB0eXBlIGlkZW50aWZpZXIgZm9yIGVhY2ggbmFtZV9zdG9yYWdlIGJhc2VkIGNvbnRhaW5lcgotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3N5bWJvbF9mdW5jdG9ycy5jcHA6Ci0JKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6Ci0JKiBsaWJwcC9vcHBfc3ltYm9sLmg6IHVzZSB0aGUgbmFtZSBpZGVudGlmaWVyIGFwaQotCi0JKiBsaWJwcC9vcF9oZWFkZXIuY3BwOiAKLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6IHVzZSBhIHNldDxzdHJpbmc+IG5vdCBhIG5hbWVfc3RvcmFnZQotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogc21hbGwgY2xlYW51cAotCi0KLTIwMDMtMDUtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6IG1lcmdlIHBhcnRpdGlvbiBlbnRyeSB3aGVuIG5lY2Vzc2FyeQotCSAgZml4aW5nIGEgY29ybmVyIGNhc2Ugd2hlbiBhIGJpbmFyeSBjYW4gYmUgYSBkZXBlbmRlbnQgb3IgYSBwcmltYXJ5Ci0JICBpbWFnZSBhbmQgd2FzIG5vdCBtZXJnZWQKLQotMjAwMy0wNS0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOiByZW1vdmUgY29uZmxpY3Rpbmcgb3B0aW9ucyBzaG9ydGN1dAotCi0yMDAzLTA1LTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJyZWdleC9zdGwucGF0LmluOiBhZGQgbGlzdDxUPjo6e2NvbnN0X30raXRlcmF0b3IKLQotMjAwMy0wNS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDogYmFzZW5hbWUoKSByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciBuaWwgaWQKLQotMjAwMy0wNS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGdldF9saW5lbnIoKSBpbml0IGxpbmVuciB0byB6ZXJvCi0KLQkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6IGRvbid0IHVzZSBpZCB6ZXJvCi0JKiBsaWJwcC9vcHBfc3ltYm9sLmg6IG5vdyB3ZSB1c2UgaWQgYW5kIG5vdCBzdHJpbmcgd2UgbXVzdCBwcm92aWRlCi0JICBkZWZhdWx0IGN0b3IgdG8gaW5pdGlhbGl6ZSB0aGUgaWQKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogaW5pdCBkZWJ1ZyBpbmZvIGVudHJ5IG9ubHkgaWYKLQkgIGdldF9saW5lbnIoKSBzdWNjZWVkCi0KLTIwMDMtMDUtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYmRiL2RiX21hbmFnZS5jOiBiZXR0ZXIgaGFuZGxpbmcgb2YgemVybyBzYW1wbGUgZmlsZSBzaXplIHdoZW4KLQkgIG9wZW5pbmcgaW4gcmVhZCBvbmx5IG1vZGUKLQotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcHJpbnRrIGZvcm1hdCBmaXgKLQotMjAwMy0wNS0xNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcGFubm90YXRlX29wdGlvbi5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogY29tbWFuZCBsaW5lIGNoYW5nZXMKLQotMjAwMy0wNS0xNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDoKLQkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6IGFkZCBwcmVzZW50KCkKLQotCSogbGlicHAvb3BfaGVhZGVyLmNwcDoKLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6IHVzZSBhIG5hbWUgc3RvcmUKLQl0byB0cmFjayB3aGF0IHdlJ3ZlIHdhcm5lZCBhYm91dCwgYW5kIGNsZWFuIHVwCi0JdGhlIHdhcm5pbmdzIGEgYml0Ci0KLTIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL29wX2JmZC5oOgotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGV4cG9zZSBhbm9ueW1vdXMgc3ltYm9scwotCXRvIHRoZSB3b3JsZCBhcyAiPz9zZWN0aW9ubmFtZSIuIFVzZWZ1bCBmb3IgLnBsdAotCWFuZCAuZmluaSwgd2hpY2ggYXJlIHF1aXRlIGNvbW1vbi4KLQotCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDogZGVtYW5nbGUgYW5vbnltb3VzIHN5bWJvbHMKLQluaWNlbHkuCi0KLTIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOiBmaXggaW1hZ2Utc29ydGluZwotCi0yMDAzLTA1LTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL25hbWVfc3RvcmFnZS5oOgotCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDogbWFrZSBJRCBiZSBwZXItY29udGFpbmVyCi0KLTIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6Ci0JKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOiBtZXJnZSBwcm9jZXNzZWQgbmFtZXMKLQlpbnRvIG9uZSBzdHJpbmcsIHJlbW92ZSB0aGUgYm9vbGVhbgotCi0yMDAzLTA1LTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL25hbWVfc3RvcmFnZS5oOgotCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDogd2hvb3BzLCB1c2Ugc3RyaW5nCi0Jbm90IHN0b3JlZF9uYW1lIGZvciB0aGUgSUQgbWFwCi0KLTIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6Ci0JKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOiBzcGxpdCBpbnRvIHRocmVlCi0Jc3RvcmVzIGZvciBkZWJ1ZyBmaWxlbmFtZXMsIHN5bWJvbHMsIGFuZCBpbWFnZXMKLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOgotCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOgotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGNoYW5nZXMgZnJvbSBhYm92ZQotCi0yMDAzLTA1LTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL01ha2VmaWxlLmFtOgotCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6Ci0JKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOiBhZGQgc2hhcmVkIHN0b3JhZ2UKLQlhbmQgY2FjaGluZyBvZiBzeW1ib2wgYW5kIGZpbGUgbmFtZXMKLQotCSogbGlicHAvb3BwX3N5bWJvbC5oOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oOgotCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOgotCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiB1c2UgaXQKLQotCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDogYWRkIHVudXNlZCBkZW1hbmdsZQotCW9wdGlvbnMgdG8gaGFjay1maXggdGhlIGJ1aWxkCi0KLTIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOiBmaXggLS1zb3J0IGRlYnVnCi0KLTIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL29wX2JmZC5oOgotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHJlbW92ZSBoYXZlX2RlYnVnX2luZm8oKQotCi0yMDAzLTA1LTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9vcF9oZWFkZXIuY3BwOiByZW1vdmUgY3B1X3NwZWVkIGNoZWNraW5nCi0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBiYWlsIG91dCBpbiBnZXRfbGluZW5yKCkgaWYgYmluYXJ5IGRvZXNuJ3QKLQkgIGNvbnRhaW4gYW55IGRlYnVnIGluZm8uIFNwZWVkIHVwIG15IHRlc3QgY2FzZSBvcHJlcG9ydCAtLWRlYnVnLWluZm8KLQkgIC1sIGJ5IDI1Ci0KLTIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGNsZWFuIHVwIGludGVyZXN0aW5nX3N5bWJvbAotCWEgYml0Ci0KLTIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IG1ha2Ugc3VyZSBsaW5lbnIgaXMKLQlhbHdheXMgc2V0IHRvIHNvbWV0aGluZwotCi0JKiBsaWJwcC9vcHBfc3ltYm9sLmg6IGxpbmVuciBzaG91bGQgYmUgdW5zaWduZWQKLQotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiByZW1vdmUgc29tZSB1bm5lZWRlZAotCWNvcGllcwotCQotMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcGFubm90YXRlLmNwcDogc21hbGwgcmVuYW1pbmcKLQotMjAwMy0wNS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDogYWRkIGJlZ2luKCksIGVuZCgpLAotCXJlbW92ZSBzeW1ib2xzX2J5X2NvdW50KCkKLQotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiB1c2Ugc3ltYm9sIGNvbnRhaW5lcgotCWl0ZXJhdG9yIGRpcmVjdGx5IGluIHNlbGVjdF9zeW1ib2xzKCkKLQotMjAwMy0wNS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3N5bWJvbF9zb3J0Lmg6Ci0JKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6Ci0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wZ3Byb2YuY3BwOiBtb3ZlIHN5bWJvbF9jb2xsZWN0aW9uIHR5cGVkZWYKLQkgIGludG8gZ2xvYmFsIG5hbWVzcGFjZSwgYW5kIHVzZSBjb25zaXN0ZW50bHkKLQotMjAwMy0wNS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogYWRkIHZtYV9mb3JtYXRfNjRiaXQoKSwKLQlyZW1vdmUgYm9vbCBwYXJhbWV0ZXIgZnJvbSBvdXRwdXQoKQotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IGNoYW5nZSBmcm9tIGFib3ZlLCByZWZhY3RvciBmbGFncwotCWNvZGUgaW50byBnZXRfZm9ybWF0X2ZsYWdzKCkgaGVscGVyCi0KLTIwMDMtMDUtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgotCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKLQkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogaGFuZGxlIHJldmVyc2Ugc29ydCBpbiBzb3J0aW5nIG5vdCBpbiBvdXRwdXQKLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiB1cGRhdGUgYWNjb3JkaW5nCi0KLTIwMDMtMDUtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL3N5bWJvbF9zb3J0Lmg6Ci0JKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6IGhhbmRsZSBzb3J0IG9yZGVyIGFzIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUKLQotCSogcHAvb3BncHJvZi5jcHA6IHNvcnQgc3ltYm9sIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGdwcm9mCi0JKiBwcC9vcHJlcG9ydC5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOiB1c2UgbmV3IHNvcnQgQVBJCi0KLTIwMDMtMDUtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKLQkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogcGFydGlhbCBpbXBsZW1lbnRhdGlvbgotCW9mIG90aGVyIHNvcnQgb3B0aW9ucwotCi0yMDAzLTA1LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL01ha2VmaWxlLmFtOgotCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKLQkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogYWRkIHNvcnRpbmcgY29kZQotCi0JKiBzeW1ib2xfZnVuY3RvcnMuaDogbW92ZSBzb21lIGxlc3MoKSBpbnRvCi0Jc3ltYm9sX3NvcnQuY3BwCi0KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IGRvbid0IHBhc3MgaW4KLQlzb3J0IG9wdGlvbiB0byBzZWxlY3Rfc3ltYm9scygpLCBkbyBpdCBpbiBjYWxsZXIKLQotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6Ci0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBmcm9tIHRoZSBhYm92ZQotCi0yMDAzLTA1LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGZvcm1hdF9mbGFncy5oOiByZW1vdmUgdm1hNjRfcC4gQWRkIGNvbHVtbl9mbGFncwotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiBwYXNzIGluIGEgc3RydWN0Ci0JdG8gc2VsZWN0X3N5bWJvbHMuIEdlbmVyYXRlIGhpbnRzIGZvciA2NC1iaXQgVk1BCi0JYW5kIG11bHRpcGxlIGFwcHMgaW4gdGhlIHByb2ZpbGUuCi0KLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3BncHJvZi5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6IHVzZSB0aGUgYWJvdmUKLQotMjAwMy0wNS0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIGxpYnBwL2Zvcm1hdF9mbGFncy5oOgotCSogcHAvb3ByZXBvcnQuY3BwOiB0cml2aWFsIHJlbmFtaW5nIG9mIGZsYWdzCi0KLTIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBsaWJwcC9mb3JtYXRfZmxhZ3MuaDogYmV0dGVyIG91dHB1dCBmb3IKLQl0aGUgZGVmYXVsdCBvZiBzaG9ydCBmaWxlbmFtZXMKLQotMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IGltcHJvdmUgdGhlIGFwcC9pbWFnZSBuYW1lIGNvbHVtbgotCXNob3dpbmcgYSBiaXQKLQotMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IGRlZmF1bHQgdG8gLWwgaWYgd2Ugd2VyZSBqdXN0Ci0JZ29pbmcgdG8gc2hvdyBvbmUgaW1hZ2Ugc3VtbWFyeS4KLQotMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IG1vdmUgc29tZSBjb2RlIGFyb3VuZCB0aGF0Ci0Jb3V0cHV0cyB0aGUgaW1hZ2Ugc3VtbWFyaWVzCi0KLTIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogcy8tLXNob3J0LWZpbGVuYW1lLy0tbG9uZy1maWxlbmFtZXMvCi0KLTIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvcHJvZmlsZV9zcGVjLmg6Ci0JKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiB0YWtlIGV4Y2x1ZGVfZGVwZW5kZW50IG5vdAotCWluY2x1ZGVfZGVwZW5kZW50Ci0KLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jOgotCSogcHAvb3BncHJvZl9vcHRpb25zLmM6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmM6IGNoYW5nZSB0byB1c2UgZXhjbHVkZV9kZXBlbmRlbnQsCi0JcmVtb3ZlIC0taGlkZS1kZXBlbmRlbnQKLQotMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsb2NhdGVfaW1hZ2VzLmg6Ci0JKiBsb2NhdGVfaW1hZ2VzLmNwcDogZXh0cmFfaW1hZ2VzIGNhbiBub3cgdXNlCi0JcmVsYXRpdmUgcGF0aHMgZm9yIGl0cyBzZWFyY2ggZGlycy4gTW92ZSBtb3N0IG9mIAotCXRoZSB3YXJuaW5ncyBvdXQgb2YgZmluZF9pbWFnZV9wYXRoLCBhbmQgbWFrZSBpdAotCWFsc28gaGFuZGxlIHJlbGF0aXZlIHBhdGhzLiBSZXR1cm4gdGhlIGZpbGUKLQlldmVuIGlmIGl0IHdhc24ndCByZWFkYWJsZS4KLQotCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogZ2l2ZSB3YXJuaW5ncyB3aGVuCi0JbmVjZXNzYXJ5LgotCi0JKiBsaWJwcC9wcm9maWxlX3NwZWMuaDoKLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IGhhbmRsZSByZWxhdGl2ZSBwYXRocwotCWluc2lkZSBpbWFnZSBzcGVjcywgYXMgc3RhdGVkIGluIHBwX2ludGVyZmFjZTsgYWxzbwotCXVzZSB0aGUgZXh0cmEgaW1hZ2VzIHNlYXJjaCBwYXRoIGZvciByZXNvbHV0aW9uLgotCi0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOiBjaGFuZ2VzIGZyb20gYWJvdmUKLQotMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9mb3JtYXRfZmxhZ3MuaDogc291cmNlIGRvYyBpbXByb3ZlbWVudHMKLQotMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9vcHBfc3ltYm9sLmg6IG1vdmUgdm1hNjRfcCB0byAuLi4KLQotCSogbGlicHAvZm9ybWF0X2ZsYWdzLmg6IC4uLiBoZXJlCi0KLTIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvTWFrZWZpbGUuYW06Ci0JKiBsaWJwcC9vdXRzeW1iZmxhZ3MuaDoKLQkqIGxpYnBwL2Zvcm1hdF9mbGFncy5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiByZW5hbWUgb3V0c3ltYmZsYWdzIHRvIGZvcm1hdF9mbGFncwotCi0yMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHByb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBwcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBvcGFubm90YXRlLmNwcDogY2xlYW4gdXAgc2VsZWN0X2ZpbGVuYW1lKCkgaW4gYQotCXNpbWlsYXIgZmFzaGlvbgotCi0yMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6Ci0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wZ3Byb2YuY3BwOiBhbm90aGVyIHNlbGVjdF9zeW1ib2xzKCkgQVBJIGNsZWFudXAKLQotMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcGdwcm9mLmNwcDogdXNlIHNlbGVjdF9zeW1ib2xzIHNvIHdlIGNhbgotCWhhbmRsZSAtLXRocmVzaG9sZAotCi0yMDAzLTA1LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcGFubm90YXRlLmNwcDogdXNlIHRocmVzaG9sZCBmb3Igc291cmNlIG91dHB1dAotCi0yMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL2NvbW1vbl9vcHRpb24uaDoKLQkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOgotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBtYWtlIC0tdGhyZXNob2xkCi0JYmUgYSBjb21tb24gb3B0aW9uLgotCi0yMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogY2xlYW4gdXAgc2VsZWN0X3N5bWJvbHMKLQlpbnRlcmZhY2UKLQotMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IG1ha2UgLS10aHJlc2hvbGQgd29yayBmb3IKLQlpbWFnZSBzdW1tYXJpZXMgdG9vCi0KLTIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGZpeCAtLXRocmVzaG9sZAotCWRlc2NyaXB0aW9uIHRvIG1hdGNoIHJlYWxpdHkKLQotMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuaDoKLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgotCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiByZW5hbWUgbWVyZ2VfYnkgbWVtYmVycwotCi0yMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wcmVwb3J0LmNwcDogYWRkIHNvbWUgbG9naWMgdG8gbm90IG91dHB1dAotCWR1cGxpY2F0ZSBsaW5lcyBmb3IgZGVwIGltYWdlcyB3aGVuIHdlJ3ZlIGFscmVhZHkKLQlzaG93biBhbGwgdGhlIHBvc3NpYmxlIGRldGFpbHMgaW4gdGhlIG1haW4gaW1hZ2Ugc3VtbWFyeQotCi0yMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL2NvbW1vbl9vcHRpb24uaDogdXNlIHN0ZDo6Ci0KLTIwMDMtMDUtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBtb3ZlIGhhbmRsZV90aHJlc2hvbGQoKQotCSogcHAvY29tbW9uX29wdGlvbi5oOgotCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IGhlcmUKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOiBoYW5kbGUgLS10aHJlc2hvbGQKLQotMjAwMy0wNS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcC9vcF9tYW5nbGUuaDoKLQkqIGxpYm9wL29wX21hbmdsZS5jOiB1c2UgYSB0ZW1wIHN0cnVjdCBmb3IKLQlwYXNzaW5nIHRoZSBtYW5nbGUgcGFyYW1ldGVycyB3aXRoIGEgc2V0IG9mCi0JZmxhZ3MuCi0KLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOiB1c2UgaXQKLQotMjAwMy0wNS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIEhBQ0tJTkc6Ci0JKiBsaWJvcCsrLzoKLQkqIHBwL01ha2VmaWxlLmFtOgotCSogbGlicHAvTWFrZWZpbGUuYW06Ci0JKiBsaWJwcC9vcF9oZWFkZXIuaDoKLQkqIGxpYnBwL29wX2hlYWRlci5jcHA6IHJlbW92ZSBsaWJvcCsrIGFmdGVyCi0JbW92aW5nIG9wX2hlYWRlciBpbnRvIGxpYnBwCi0KLTIwMDMtMDUtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlib3ArKy9vcF9oZWFkZXIuY3BwOiBtYWtlIENQVSBpbmZvIHRha2UgdXAKLQlvbmUgbGluZSBub3QgdHdvCi0KLTIwMDMtMDUtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlib3ArKy9NYWtlZmlsZS5hbToKLQkqIGxpYm9wKysvb3BfaGVhZGVyLmNwcDoKLQkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuaDoKLQkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuY3BwOiByZW1vdmUgb3BfcHJpbnRfZXZlbnQKLQlmaWxlcywgbWFraW5nIGl0IGEgZnVuY3Rpb24gbG9jYWwgdG8gb3BfaGVhZGVyLmNwcAotCi0yMDAzLTA1LTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wKysvb3BfaGVhZGVyLmg6Ci0JKiBsaWJvcCsrL29wX2hlYWRlci5jcHA6IG1ha2Ugb3V0cHV0X2hlYWRlcigpIGJlCi0JYW4gb3BlcmF0b3I8PAotCQotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6IGNoYW5nZXMgZnJvbSB0aGUgYWJvdmUKLQotCSogbGlicHAvcHJvZmlsZS5oOiBzbWFsbCBjbGVhbnVwCi0KLTIwMDMtMDUtMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiByZXBsYWNlIGZvcm1hdF9wZXJjZW50KCkgYnkKLQkgIGZvcm1hdF9kb3VibGUoKQotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiB1c2UgZm9ybWF0X2RvdWJsZSgpCi0KLTIwMDMtMDUtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvb3BwX3N5bWJvbC5oOiBhcHAgbmFtZSwgaW1hZ2UgbmFtZSBzaG91bGQKLQliZSBpbiBzeW1ib2wgbm90IGluIGZpbGVfbG9jYXRpb24KLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9zeW1ib2xfZnVuY3RvcnMuY3BwOiBjaGFuZ2VzIGZyb20gYWJvdmUKLQotMjAwMy0wNS0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogdm1hXzY0IGRvZXNuJ3QgbmVlZAotCXRvIGJlIGluIGZpZWxkX2RhdHVtLiBtYWtlIG9uZSBvdXRwdXQoKSBwcml2YXRlCi0KLTIwMDMtMDUtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IHBhc3MgYSBzeW1ib2wgcmVmCi0Jbm90IG5hbWUgZG93biBpbnRvIHRoZSBmb3JtYXR0ZXJzCi0KLTIwMDMtMDUtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IHNhbXBsZV9maWxlbmFtZSgpIGlzIHVudXNlZAotCi0yMDAzLTA1LTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJvcCsrL29wX2hlYWRlci5oOgotCSogbGlib3ArKy9vcF9oZWFkZXIuY3BwOiByZWFkX2hlYWRlcigpIG5ldwotCSogbGlib3ArKy9NYWtlZmlsZS5pbjogd2UgZGVwZW5kIG9uIGxpYmRiCi0KLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiBiZXR0ZXIgd2F5IHRvIGdldCBzYW1wbGUgZmlsZSBoZWFkZXIKLQotMjAwMy0wNS0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IHJlbW92ZSByZWR1bmRhbnQgbWFwIGZvcm1hdGVyCi0JKiBwcC9vcGFubm90YXRlLmNwcDogc3B1cmlvdXMgY291dAotCi0yMDAzLTA1LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOiBjbGVhbiB1cCBjb3V0IHN0dWZmIGFzCi0Jc3VnZ2VzdGVkIGJ5IFBoaWwKLQotMjAwMy0wNS0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9wcm9maWxlX3NwZWMuaDoKLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jOiByZW5hbWUgdGhlIHNldF9wIHZhcmlhYmxlcywKLQlyZW1vdmUgcG9pbnRsZXNzIGlzX2VtcHR5KCkgZnVuY3Rpb24KLQotCSogcHAvb3ByZXBvcnQuY3BwOiBzcGxpdCBjb2xsYXRpb24gYW5kIG91dHB1dCBpbnRvCi0JdHdvIHNlcGFyYXRlIGZ1bmN0aW9ucy4gUmVuYW1lIHRoZSB0ZW1wb3Jhcnkgc3RydWN0dXJlcwotCXNvIGl0J3MgaG9wZWZ1bGx5IGEgYml0IG1vcmUgb2J2aW91cyB3aGF0J3MgaGFwcGVuaW5nLgotCUFkZCBzb3VyY2Vkb2NzLgotCi0yMDAzLTA1LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBhZGQgb3B0aW9uczo6Y291dCwKLQkgIC0tb3V0cHV0LWZpbGUgb3B0aW9uCi0KLQkqIHBwL29wcmVwb3J0LmNwcDogdXNlIG9wdGlvbnM6OmNvdXQKLQotMjAwMy0wNS0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9mb3JtYXRfb3V0cHV0LmNwcDogZml4IGN1bXVsYXRpdmUgY29sdW1uIHdpZHRocwotCi0yMDAzLTA1LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIG9wcmVwb3J0X29wdGlvbnMuaDogYWRkIGFjY3VtdWxhdGVkCi0KLQkqIG9wcmVwb3J0LmNwcDogaGFuZGxlIC0tYWNjdW11bGF0ZWQKLQotMjAwMy0wNS0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6IG1pbm9yIHRpZHkKLQotCSogbGlicHAvcHJvZmlsZS5oOgotCSogbGlicHAvcHJvZmlsZS5jcHA6IGFsbG93IHRvIGN1bXVsYXRlIHNhbXBsZSBmaWxlCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiByZW1vdmUgZnJlZSBmdW5jdGlvbiBhZGRfc2FtcGxlcygpCi0KLQkqIHBwL2Fubm90YXRlLmNwcDoKLQkqIHBwL29wZ3Byb2YuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiB3aGVuIHBvc3NpYmxlIGN1bXVsYXRlIHNhbXBsZXMgaW50byBhIHByb2ZpbGVfdAotCSAgZmlyc3QgYmVmb3JlIGN1bXVsYXRpbmcgdGhlbSBpbiBhIHByb2ZpbGVfY29udGFpbmVyCi0KLTIwMDMtMDUtMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IHNtYWxsIGNsZWFudXAKLQotMjAwMy0wNS0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogcmVtb3ZlIHVubmVlZGVkIGluY2x1ZGUKLQotMjAwMy0wNS0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9NYWtlZmlsZS5hbToKLQkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuaDoKLQkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuY3BwOiByZW5hbWUgdG8gLi4uCi0KLQkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5oOgotCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogdGhpcy4gTWFrZSBoYW5kbGVfbm9ub3B0aW9ucygpCi0JYmUgYSBzdGF0aWMgZmFjdG9yeSBjcmVhdGUoKSBtZXRob2QgaW5zdGVhZC4gTWFrZQotCXNlbGVjdF9zYW1wbGVfZmlsZW5hbWVzKCkgYmUgYSBtZW1iZXIgZ2VuZXJhdGVfZmlsZV9saXN0KCkKLQlpbnN0ZWFkLiBDb25jb21pdGFudCBjbGVhbnVwcy4KLQotCSogbGlicHAvZmlsZW5hbWVfc3BlYy5oOgotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogY2hhbmdlcyBmcm9tIGFib3ZlCi0KLTIwMDMtMDUtMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvcHJvZmlsZS5jcHA6IGZpeCBzdHVwaWQgZXJyb3IgaW4gbGFzdCBjb21taXQKLQotMjAwMy0wNS0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9wcm9maWxlLmg6Ci0JKiBsaWJwcC9wcm9maWxlLmNwcDogcmVtb3ZlIHNhbXBsZV9maWxlbmFtZSBtZW1iZXIsCi0JYm9ndXMgb2xkIHNwdXJpb3VzIGNoZWNrLCBzZXRfc3RhcnRfb2Zmc2V0KCkuCi0KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiBjaGFuZ2VzIGZyb20gYWJvdmUKLQotMjAwMy0wNS0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9kZXJpdmVfZmlsZXMuaDoKLQkqIGxpYnBwL2Rlcml2ZV9maWxlcy5jcHA6IHJlbmFtZSBmaWxlcyBhcyAuLi4KLQotCSogbGlicHAvbG9jYXRlX2ltYWdlcy5oOgotCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6IHRoaXMuCi0KLQkqIGxpYnBwL01ha2VmaWxlLmFtOgotCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmg6Ci0JKiBwcC9jb21tb25fb3B0aW9uLmg6Ci0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5oOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOiBjaGFuZ2VzIGZyb20gYWJvdmUKLQotMjAwMy0wNS0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9kZXJpdmVfZmlsZXMuaDoKLQkqIGxpYnBwL2Rlcml2ZV9maWxlcy5jcHA6IHJld29yayBpbnRvIGV4dHJhX2ltYWdlcwotCWNsYXNzCi0KLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5oOgotCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDoKLQkqIHBwL2NvbW1vbl9vcHRpb24uaDoKLQkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOgotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6Ci0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogdXNlIHRoZSBhYm92ZQotCi0yMDAzLTA1LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL01ha2VmaWxlLmFtOgotCSogc2Vzc2lvbi5oOgotCSogc2Vzc2lvbi5jcHA6IHJlbW92ZSBzZXNzaW9uLntoLGNwcH0KLQotMjAwMy0wNS0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Byb2ZwcC5jcHAgcHAvb3Byb2ZwcF9vcHRpb25zLmNwcCBwcC9vcHJvZnBwX29wdGlvbnMuaDoKLQkqIHBwL29wX3RpbWUuY3BwIHBwL29wX3RpbWVfb3B0aW9ucy5jcHAgcHAvb3BfdGltZV9vcHRpb25zLmg6Ci0JKiBwcC9vcF90b19zb3VyY2UuY3BwIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmggcHAvb3BfbWVyZ2UuY3BwOiByZW1vdmVkIGZpbGVzCi0KLQkqIHBwL01ha2VmaWxlLmFtOiB1cGRhdGUKLQotMjAwMy0wNS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3BncHJvZi5jcHA6IGluZmFtb3VzIHR5cG8KLQotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IG91dHB1dCBzYW1wbGUgZmlsZSBoZWFkZXIKLQotCi0yMDAzLTA1LTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwb3ArKy9vcF9tYW5nbGluZy5oOgotCSogbGlicG9wKysvb3BfbWFuZ2xpbmcuY3BwOiByZW1vdmVkIGZpbGUKLQkqIGxpYm9wKysvb3BfaGVhZGVyLmg6Ci0JKiBsaWJvcCsrL29wX2hlYWRlci5jcHA6IG5ldyBmaWxlLCBtaXNjIGZ1bmN0aW9uIGFjdGluZyBvbiBzYW1wbGUKLQkgIGZpbGUgaGVhZGVyIHN0b2xlbiBmcm9tIGxpYnBwL3Byb2ZpbGUuKGNwcHxoKQotCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5oOiB0eXBvCi0JKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50LmNwcDogc2F2ZS9yZXN0b3JlIG9zdHJlYW0gc3RhdGUKLQkqIGxpYm9wKysvTWFrZWZpbGUuYW06IHVwZGF0ZQotCQotCSogbGlib3Avb3Bfc2FtcGxlX2ZpbGUuaDogcmVtb3ZlIGRlYWQgI2RlZmluZSBPUERfTUFOR0xFX0NIQVIKLQotCSogbGlicHAvcHJvZmlsZS5oOgotCSogbGlicHAvcHJvZmlsZS5jcHA6IG1vdmUgc29tZSBtZW1iZXIgZnVuY3Rpb24gdG8gZnJlZSBmdW5jdGlvbiBpbgotCSAgbGlib3ArKy9vcF9oZWFkZXIuKGNwcHxoKQotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiBtaW5vciBjYWxsIGNoYW5nZQotCi0JKiBsaWJwcC9NYWtlZmlsZS5hbTogb3BfbWVyZ2UgY2FuJ3QgYmUgY29tcGlsZWQgY3VycmVudGx5IGluaGliaXQgYnVpbGQKLQotCSogbGlicHAvb3ByZXBvcnQuY3BwOiBvdXRwdXQgc2FtcGxlIGZpbGUgaGVhZGVyCi0KLTIwMDMtMDUtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9wYXRoX2ZpbHRlci5oOiBkZWZhdWx0IHBhcmFtIHRvIGVtcHR5IHN0cmluZyBub3QgIioiCi0KLQkqIGxpYnBwL3N5bWJvbF9mdW5jdG9ycy5oOiByZW1vdmUgZGVhZCBjb2RlCi0KLQkqIHBwL29wZ3Byb2YuY3BwOiBvZmYgYnkgb25lIGluIGhpc3RzaXplIGNhbGN1bGF0aW9uCi0KLTIwMDMtMDUtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwvb3BfZmlsZS5oOgotCSogbGlidXRpbC9vcF9maWxlLmM6IHNhbml0aXplIGNyZWF0ZV9wYXRoKCkKLQotCSogbGlidXRpbCsrL3BhdGhfZmlsdGVyLmg6IGRlZmF1bHQgY3RvciBtYXRjaCBhbGwKLQotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuaDoKLQkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6IGV4dGVuZCBhcGkgdG8gYWxsb3cgc2VsZWN0aW5nIHN5bWJvbAotCSAgcmVzdHJpY3RlZCB0byBvbmUgYXBwbGljYXRpb24sIGRpdHRvIGZvciByZXRyaWV2aW5nIHNhbXBsZXMKLQotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmg6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGltcGxlbWVudAotCi0JKiBwcC9vcGdwcm9mX29wdGlvbnMuaDoKLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogY29tbWVudCBmaXgKLQotCSogcHAvb3ByZXBvcnQuY3BwOiB1cGRhdGUgdG8gbWF0Y2ggbmV3IHByb2ZpbGVfY29udGFpbmVyIGFwaQotCi0yMDAzLTA1LTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcHJlcG9ydC5jcHA6IGRvbid0IHNob3cgZGVwZW5kZW50IGZpbGUgaWYgIS0taW5jbHVkZS1kZXBlbmRlbnQKLQotMjAwMy0wNS0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmg6Ci0JKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuY3BwOiBzb3J0X2J5X2ltYWdlX25hbWUoKSBuZXcgcmV0dXJuIGEgbGlzdAotCSAgb2Ygc2FtcGxlIGZpbGVuYW1lIHNvcnRlZCBieSBiZmQgaW1hZ2UgbmFtZS4KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogYWRkX3NhbXBsZXMoKSBkb24ndCBidWlsZCBvcF9iZmQgb2JqZWN0Ci0JICB1c2VkIGhlcmUgYnV0IHBhc3MgaXQgYXMgcGFyYW1ldGVycwotCi0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogdXNlIHRoZSBhYm92ZSBjaGFuZ2UgdG8gYXZvaWQgb3BlbmluZyBtdWx0aXBsZSB0aW1lCi0JICBhIGJmZCBvYmplY3QuCi0KLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6IGFkZCAtLShpbmNsdWRlfGV4Y2x1ZGUpLXN5bWJvbHMKLQotCSogbGlicHAvcGFyc2VfY21kbGluZS5jcHA6Ci0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiBtYWtlIGEgZGlzdGluY3Rpb24gaW4gZXJyb3IgbWVzc2FnZSBiZXR3ZWVuIG5vCi0JICBzYW1wbGUgYXZhaWxhYmxlIGFuZCBzYW1wbGUgZmlsZSBhdmFpbGFibGUgYnV0IG5vIG9uZSB3YXMgc2VsZWN0ZWQKLQotMjAwMy0wNS0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmg6Ci0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgotCSogcHAvb3BkaWZmLmNwcDoKLQkqIHBwL29wZGlmZl9vcHRpb25zLmg6Ci0JKiBwcC9vcGRpZmZfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5oOgotCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBtb3ZlIGNvbW1vbiBvcHRpb25zIGhhbmRsaW5nIC4uLgotCSogcHAvY29tbW9uX29wdGlvbi5oOgotCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IGhlcmUKLQotCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGFkZCBvcHRpb25zCi0KLQkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuY3BwOiAjaW5jbHVkZSA8aXRlcmF0b3I+IC4uLgotCi0yMDAzLTA1LTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9jb3VudGVyX3V0aWwuaDoKLQkqIGxpYnBwL2NvdW50ZXJfdXRpbC5jcHA6IHJlbW92ZSB0aGVzZSBmaWxlcyBmcm9tIGN2cwotCi0JKiBsaWJwcC9kZXJpdmVfZmlsZXMuaDoKLQkqIGxpYnBwL2Rlcml2ZV9maWxlcy5jcHA6IHJlbW92ZSBkZWFkIGNvZGUgZGVyaXZlX2ZpbGVzKCkgKyB0eXBvCi0KLQkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuY3BwOiBzZWxlY3Rfc2FtcGxlX2ZpbGVuYW1lKCkgdGhyb3cgaWYgZW1wdHkKLQkgIHNlc3Npb24gYWZ0ZXIgZmlsdGVyaW5nCi0KLQkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiBjYXRjaCBpbnZhbGlkX2FyZ3VtZW50LCByZXR1cm4gZmFpbHVyZSBvbgotCSAgY2F0Y2hlZCBleGNlcHRpb24KLQotMjAwMy0wNS0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHJlbW92ZSBfaW5pdCBmcm9tIGV4Y2x1ZGVkIHN5bWJvbAotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiB0aWR5Ci0KLQkqIHBwL29wZ3Byb2YuY3BwOiBmaXggY2FwcGluZyBzYW1wbGVzCi0KLTIwMDMtMDQtMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3BncHJvZi5jcHA6Ci0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgotCSogbGlicHAvcHJvZmlsZS5jcHA6IHRpbnkgY2xlYW51cHMsIGZpeCBjb21waWxlCi0KLTIwMDMtMDQtMzAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYmRiL2RiX3N0YXQuYzogbWlub3IgaW1wcm92ZW1lbnQgdG8gc3RhdCwgdXNlZnVsIHRvIHRyYWNrIG1pc3NlZAotCSAgc2FtcGxlIGJ5IG91ciB0b29scy4KLQotCSogcHAvb3BfcmVwb3J0LmNwcDogbW92ZSBtYXRjaGluZ19zYW1wbGVfZmlsZW5hbWUoKSB0byAuLi4KLQkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuaDoKLQkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuY3BwOiBoZXJlIHJlbmFtZWQgc2VsZWN0X3NhbXBsZV9maWxlbmFtZSgpCi0KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IGV4cG9zZSBiZWdpbigpIC8gZW5kKCkgZnJvbQotCSBzYW1wbGVfY29udGFpbmVyCi0KLQkqIHBwL2NvbW1vbl9vcHRpb24uaDoKLQkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiBtb3ZlIG9wdGlvbiB3aGljaCB3YXMgbm90IHJlYWxseSBjb21tb24gdG8gLi4KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBoZXJlCi0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6IGFuZCBoZXJlCi0KLQkqIHBwL29wZXJwb3J0LmNwcDoKLQkqIHBwL29wYW5ub3RhdGUuY3BwOiBiZXR0ZXIgdG8gcmV0dXJuIGEgdmFsdWUgZnJvbSBtYWluKCkgLi4uCi0KLQkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5oOgotCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKLQkqIHBwL29wZ3Byb2YuY3BwOiBpbXBsZW1lbnQgb3BncHJvZgotCi0yMDAzLTA0LTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmg6Ci0JKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmNwcDogaGFuZGxlIG9wcmVwb3J0IC9saWIvbGliYy0yLjIuNS5zbywgbm93Ci0JICBub24gdGFnLCBub24gb3B0aW9uIGFyZ3VtZW50IG1hdGNoIGVpdGhlciBhbiBpbWFnZSBuYW1lIG9yIGxpYiBuYW1lCi0KLTIwMDMtMDQtMjkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHJlbW92ZSAic3RhdGljICIgaW5zaWRlIGFub24gbmFtZXNwYWNlCi0KLTIwMDMtMDQtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBuZWVkIGhlYWRlciB0d2Vha2luZwotCi0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wZ3Byb2YuY3BwOiBtaW5vciB0aWR5Ci0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiBoYW5kbGUgLW5vLWhlYWRlciBhbmQgLS1pbWFnZS1wYXRoCi0KLTIwMDMtMDQtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9nbG9iX2ZpbHRlci5jcHA6Ci0JKiBsaWJ1dGlsKysvcGF0aF9maWx0ZXIuY3BwOgotCSogbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuY3BwOiAjaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0yMDAzLTA0LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmNwcDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmg6Ci0JKiBsaWJ1dGlsKysvZ2xvYl9maWx0ZXIuaDoKLQkqIGxpYnV0aWwrKy9nbG9iX2ZpbHRlci5jcHA6Ci0JKiBsaWJ1dGlsKysvcGF0aF9maWx0ZXIuaDoKLQkqIGxpYnV0aWwrKy9wYXRoX2ZpbHRlci5jcHA6IHVzZSBzdGQ6OmZpbmRbX2lmXSwKLQlzaGFyZSBzb21lIGNvZGUKLQotMjAwMy0wNC0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHJlcGxhY2UgYSBsb29wIGJ5IGEgc3RkOjpjb3B5KCkKLQotMjAwMy0wNC0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogY2xlYW51cCBvZiBsYXN0IGZpeAotCi0yMDAzLTA0LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBtYWtlIHN5bWJvbCBmaWx0ZXJpbmcKLQloYXBwZW4gKmFmdGVyKiBhZGRpbmcgb2YgYXJ0aWZpY2lhbCBzeW1ib2wKLQotMjAwMy0wNC0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJ1dGlsKysvc3RyaW5nX2ZpbHRlci5jcHA6Ci0JKiBsaWJ1dGlsKysvZ2xvYl9maWx0ZXIuY3BwOgotCSogbGlidXRpbCsrL3BhdGhfZmlsdGVyLmNwcDogbWF0Y2ggYXMgdHJ1ZSBpZgotCWluY2x1ZGVfbGlzdCBpcyBlbXB0eSBhbmQgbm90IGV4Y2x1ZGVkCi0KLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiB1c2Ugc3RyaW5nX2ZpbHRlciB0bwotCWZpbHRlciBzeW1ib2xzCi0KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogY2hhbmdlcyBmcm9tIHVzaW5nIHN0cmluZ19maWx0ZXIKLQotMjAwMy0wNC0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogcHAvb3ByZXBvcnQuY3BwOiBmaW5pc2ggdG8gcmVtb3ZlIHVzZSBvZiBzcGxpdF9zYW1wbGVfZmlsZW5hbWUKLQotMjAwMy0wNC0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJ1dGlsKysvZmlsZW5hbWVfbWF0Y2guaDoKLQkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5jcHA6IHJlcGxhY2Ugd2l0aCAuLi4KLQotCSogbGlidXRpbCsrL01ha2VmaWxlLmFtOgotCSogbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuaDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmNwcDoKLQkqIGxpYnV0aWwrKy9nbG9iX2ZpbHRlci5oOgotCSogbGlidXRpbCsrL2dsb2JfZmlsdGVyLmNwcDoKLQkqIGxpYnV0aWwrKy9wYXRoX2ZpbHRlci5oOgotCSogbGlidXRpbCsrL3BhdGhfZmlsdGVyLmNwcDogLi4gc3BsaXQgdXAgdmFyaWFudHMKLQlvZiB0aGUgZmlsdGVycwotCi0JKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmNwcDogdXNlIGdsb2JfZmlsdGVyCi0KLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IHVzZSBwYXRoX2ZpbHRlcgotCi0yMDAzLTA0LTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuaDoKLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6Ci0JKiBsaWJwcC9zcGxpdF9zYW1wbGVfZmlsZW5hbWUuaDoKLQkqIGxpYnBwL3NwbGl0X3NhbXBsZV9maWxlbmFtZS5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6IHJlcGxhY2Ugc29tZSB1c2Ugb2Ygc3RkOjpzdHJpbmcgc2FtcGxlX2ZpbGVuYW1lCi0JICBieSBhIHNwbGl0X3NhbXBsZV9maWxlbmFtZSBzdHJ1Y3QKLQotMjAwMy0wNC0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJ1dGlsKysvZmlsZW5hbWVfbWF0Y2guaDoKLQkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5jcHA6IHVzZSBmaWxlLXNjb3BlCi0Jbm90IHByaXZhdGUgc3RhdGljIG1lbWJlciBmdW5jdGlvbgotCi0yMDAzLTA0LTI3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogcmVtb3ZlIGFsbCBzdHJpbmcgYmFzZWQgb3V0cHV0IGZvcm1hdCBmbGFnCi0KLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBtb3ZlIG9wdGlvbnM6OmRlbWFuZ2xlIGhhbmRsaW5nIC4uLgotCSogbGlicmVneC9kZW1hbmdsZV9zeW1ib2wuY3BwOiBoZXJlCi0KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6Ci0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDogaGFuZGxlIC0taW5jbHVkZS1zeW1ib2xzCi0KLTIwMDMtMDQtMjcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnQuY3BwOiBoYW5kbGUgLS10aHJlc2hvbGQsIHJlbW92ZSAtLWlnbm9yZS1zeW1ib2xzCi0KLTIwMDMtMDQtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvPHZhcmlvdXM+OiBtaW5vciBzcGFjaW5nIGV0Yy4KLQotMjAwMy0wNC0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvb3V0c3ltYmZsYWcuaDogcmVtb3ZlIG9zZl9zaG9ydF94eHggdmFyaWFudAotCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IHJlcGxhY2Ugb3NmX3Nob3J0X3h4eCBieSBhIGJvb2xlYW4KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogdXBkYXRlIGFjY29yZGluZwotCi0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6IGV4cG9ydCBzaG9ydF9maWxlbmFtZSBvcHRpb24KLQkqIHBwL29wcmVwb3J0LmNwcDogdXNlIHNob3J0X2ZpbGVuYW1lCi0KLTIwMDMtMDQtMjcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL3N5bWJvbF9mdW5jdG9ycy5oOiBhZGQgbGVzc19zeW1ib2wgcHJlZGljYXRlCi0JKiBsaWJwcC9zeW1ib2xfZnVuY3RvcnMuY3BwOiBuZXcgZmlsZSwgbGVzc19zeW1ib2wgaW1wbGVtZW50YXRpb24KLQkqIGxpYnBwL01ha2VmaWxlLmFtOiBzeW1ib2xfZnVuY3RvcnMuY3BwCi0KLQkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuaDoKLQkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOiB1c2UgYSBub2RlIGJhc2VkIGNvbnRhaW5lciBmb3Igc3ltYm9scwotCSAgZW5zdXJpbmcgdmFsaWRpdHkgb2Ygc3ltYm9sIHBvaW50ZXIgb3ZlciBhIHN5bWJvbF9jb250YWluZXIgbGlmZSB0aW1lCi0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcDogZGl0dG8gYXMgYWJvdmUgZm9yIHNhbXBsZXMKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHVzZSB0aGlzIG5ldyBhcGkgdG8gbWVyZ2Ugc3ltYm9scwotCSAgYW5kIHNhbXBsZS4KLQotCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgotCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IHVzZSBuZXcgYXBpIHRvIGl0ZXJhdGUgb3ZlciBzYW1wbGUgYnkgc3ltYm9sCi0KLQkqIHBwL29wcmVwb3J0LmNwcDogZGV0YWlsZWQgb3V0cHV0Ci0JCi0KLTIwMDMtMDQtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3ByZXBvcnQuY3BwOiBtYWtlIG9wcmVwb3J0IC1sIHB1dCBsYXJnZXN0IHJlc3VsdHMKLQlhdCB0aGUgdG9wIGxpa2Ugb3ByZXBvcnQgZG9lcwotCi0yMDAzLTA0LTI2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOiBjb21tZW50Ci0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDogbW9yZSBvcHRpb25zIGV4cG9ydAotCSogcHAvb3ByZXBvcnQuY3BwOiBpbXBsZW1lbnQgLWwuIERvZXNuJ3Qgd29ya3MgY29ycmVjdGx5OiAtLW1lcmdlPWxpYgotCi0yMDAzLTA0LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6IGV4cG9ydCBnbG9iYWxfcGVyY2VudAotCSogcHAvb3ByZXBvcnQuY3BwOiBmaW5pc2ggdG8gaW1wbGVtZW50IG9wX3RpbWUgbGlrZSBiZWhhdmlvci4gUmVtYWlucwotCSAgdG8gaW1wbGVtZW50IG9wX3RpbWUgLWwKLQotMjAwMy0wNC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogZml4IGEgY3Jhc2ggd2hlbiBwcm9maWxlIHNwZWMgaXMgZW1wdHkKLQotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGJhaWwgb3V0IGlmIG5vIHNhbXBsZXMgZmlsZXMgYXJlIGZvdW5kCi0KLTIwMDMtMDQtMjUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IC0taGlkZS1kZXBlbmRlbnQgc2hvdWxkIGhhdmUgJ2gnIGFzCi0Jc2hvcnQgZm9ybS4gQWRkIGEgRklYTUUgZm9yIGEgY3Jhc2gKLQotMjAwMy0wNC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogdGhpbmtvIGluIHNhbXBsZSBmaWxlbmFtZSBwYXJ0aXRpb24KLQotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOiBleHBvcnQgbW9yZSBvcHRpb25zCi0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogYWRkIC0taGlkZS1kZXBlbmRlbnQsIGNoYW5nZSAtLW1lcmdlIHRvIG5vdAotCSAgZGVmYXVsdCB0byBhbGwKLQkqIHBwL29wcmVwb3J0LmNwcDogaGFuZGxlIC0taGlkZS1kZXBlbmRlbnQgLS1pbmNsdWRlLWRlcGVuZGVudCBhbmQKLQkgIC0tbWVyZ2U9bGliLiBDb2RlIGlzIHVnbHksIHRpZHkgaW5jb21pbmcKLQotMjAwMy0wNC0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKLQkqIGxpYnBwL291dHN5bWJmbGFnLmg6ICJpbW11dGFibGUiIG5vdCAiaW11dGFibGUiCi0KLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6IGluY2x1ZGUgPGl0ZXJhdG9yPiB0byBjb21waWxlCi0KLTIwMDMtMDQtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5oOiB0eXBvCi0JKiBsaWJwcC9wcm9maWxlLmNwcDogZGlmZmljdWx0IHRvIGdldCByaWdodCByZXN1bHQgd2l0aCBhIHJhbmRvbSB2YWx1ZQotCSAgaW4gcHJvZmlsZTo6c3RhcnRfb2Zmc2V0Ci0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDogZXhwb3J0IG9wdGlvbnM6OnJldmVyc2Vfc29ydAotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGJhaWwgb3V0IGlmIHdlIGdldCBtdWx0aXBsZSBjb3VudGVyCi0KLQkqIHBwL29wcmVwb3J0LmNwcDogcmF3IG91dHB1dCByZXN1bHQgZm9yIGFwcGxpY2F0aW9uIChub3Qgc3ltYm9sKQotCSAgb3V0cHV0LgotCi0yMDAzLTA0LTI0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJwcC9maWxlbmFtZV9zcGVjLmg6Ci0JKiBsaWJwcC9maWxlbmFtZV9zcGVjLmNwcDoKLQkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuaDoKLQkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuY3BwOgotCSogbGlicHAvc3BsaXRfc2FtcGxlX2ZpbGVuYW1lLmg6Ci0JKiBsaWJwcC9zcGxpdF9zYW1wbGVfZmlsZW5hbWUuY3BwOiBzL3VuaXRfbWFzay91bml0bWFzawotCi0JKiBsaWJwcC9tZXJnZV9zcGVjLmNwcDoKLQkqIGxpYnBwL21lcmdlX3NwZWMuaDogcmVuYW1lIHRvCi0JKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuaDoKLQkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6IGhlcmUuIEFkZCBhbmQgbWVyZ2Vfb3B0aW9uLgotCSAgcGFydGl0aW9uX2ZpbGVzIGlzIG5vdyBhIGNsYXNzLgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHJlcG9ydC5jcHA6IHVwZGF0ZSBhY2NvcmRpbmcgdG8gdGhlIGFib3ZlLiBBZGQgYSByb3VnaGx5IHN1cHBvcnQKLQkgIHRvIGNvdW50IHNhbXBsZXMgZm9yIHBsYWluIG9wX3RpbWUgb3ByZXBvcnQgbGlrZQotCi0yMDAzLTA0LTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IGNob3Agb2ZmIHRoZSBfdCBvZiB0aGUgY2xhc3MgbmFtZQotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKLQkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcF90b19zb3VyY2UuY3BwOgotCSogcHAvb3Byb2ZwcC5jcHA6IGNoYW5nZXMgZnJvbSB0aGUgYWJvdmUKLQotMjAwMy0wNC0yNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiBwZWRhbnRyeSBmb3Igc2FtcGxlX2NvbnRhaW5lcgotCWluZGljZXMuCi0KLQkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuaDoKLQkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwOiB2YXJpb3VzIGNsZWFudXBzIGFuZCBkb2NzLiBBZGQKLQlhbmQgdXNlIHNpemVfdHlwZS4KLQotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6IHJlbmFtaW5ncy4gQWRkIGFuZCB1c2Ugc2l6ZV90eXBlLgotCi0yMDAzLTA0LTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuaDoKLQkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOiByZW1vdmUgdW51c2VkIG9wZXJhdG9yW10uCi0JQWRkIHNvbWUgZG9jcy4gU29tZSBzbWFsbCBjbGVhbnVwcwotCi0yMDAzLTA0LTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnBwL3N5bWJvbF9jb250YWluZXJfaW1wLmg6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyX2ltcC5jcHA6Ci0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyX2ltcC5oOgotCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lcl9pbXAuY3BwOiBUaGVzZSBjbGFzc2VzIHdlcmVuJ3QgdXNpbmcKLQl0aGUgcGltcGwgaWRpb20sIHNvIHRoZSBfaW1wIHdhcyBzcHVyaW91cy4gUmVtb3ZlIHRoYXQgYXMgd2VsbAotCWFzIHJlbW92aW5nIHRoZSBfdCBmcm9tIHRoZSBuYW1lcywgYW5kIHJlbmFtZSB0byAuLi4KLQotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6Ci0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcDogLi4uZmlsZXMgbW92ZWQgZnJvbSB0aGUgYWJvdmUgd2l0aAotCW5ldyBuYW1lcy4KLQotMjAwMy0wNC0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL2dlbmVyaWNfc3BlYy5oOiBtaW5vciBmb3JtYXRpbmcgdHdlYWsKLQotCSogbGlicHAvcGFyc2VfY21kbGluZS5oOgotCSogbGlicHAvcGFyc2VfY21kbGluZS5jcHA6IGhhbmRsZV9ub25fb3B0aW9ucygpOiByZXR1cm4gcGFyc2VfY21kbGluZQotCSAgYnkgdmFsdWUKLQotCSogbGlicHAvbWVyZ2Vfc3BlYy5oOgotCSogbGlicHAvbWVyZ2Vfc3BlYy5jcHA6IG5ldyBmaWxlczogcGFydGl0aW9uIGxpc3Qgb2Ygc2FtcGxlcyBmaWxlbmFtZQotCSAgYWNjb3JkaW5nIHRvIG1lcmdlIG9wdGlvbnMuCi0JKiBsaWJwcC9NYWtlZmlsZS5hbTogdXBkYXRlCi0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBtb3JlIG9wdGlvbnMgaGFuZGxpbmcsIHVzZSBwYXJ0aXRpb25fZmlsZXMoKQotCi0yMDAzLTA0LTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBjb21waWxlIGZpeAotCi0yMDAzLTA0LTIxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvZmlsZW5hbWVfbWF0Y2guaDoKLQkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5jcHA6IGFkZCBzdHJpY3RfbWF0Y2goKQotCi0JKiBsaWJ1dGlsKysvZ2VuZXJpY19zcGVjLmNwcDogZ2VuZXJpY19zcGVjPHN0cmluZz46OnNldCgpIHdhcyBub3QKLQkgIHNldHRpbmcgaXNfYWxsIG1lbWJlciBsZWFkaW5nIHRvIGJhZCBtYXRjaGluZwotCi0JKiBsaWJwcC9maWxlbmFtZV9zcGVjLmNwcDogbWlub3IgdGlkeQotCi0JKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmg6Ci0JKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmNwcDogZml4IG1hdGNoKCkKLQotCSogbGlicHAvc3BsaXRfc2FtcGxlX2ZpbGVuYW1lLmg6Ci0JKiBsaWJwcC9zcGxpdF9zYW1wbGVfZmlsZW5hbWUuY3BwOiBoYW5kbGUgc2FtcGxlIGZpbGUgYmFzZSBkaXJlY3RvcnkKLQotCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5oOgotCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5jcHA6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6Ci0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKLQkqIGxpYnBwL29wcF9zeW1ib2wuaDoKLQkqIGxpYnBwL3Byb2ZpbGUuaDoKLQkqIGxpYnBwL3Byb2ZpbGUuY3BwOgotCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKLQkqIGxpYnBwL3NhbXBsZV9jb250YWluZXJfaW1wLmg6Ci0JKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyX2ltcC5jcHA6Ci0JKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyX2ltcC5oOgotCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lcl9pbXAuY3BwOgotCSogbGlicHAvc3ltYm9sX2Z1bmN0b3JzLmg6IHJlbW92ZSBhbGwgdXNlIG9mIGNvdW50ZXIgbnVtYmVyCi0KLQkqIGxpYnBwL2NvdW50ZXJfYXJyYXkuaDoKLQkqIGxpYnBwL2NvdW50ZXJfYXJyYXkuY3BwOgotCSogbGlicHAvY291bnRlcl9wcm9maWxlLmg6Ci0JKiBsaWJwcC9jb3VudGVyX3Byb2ZpbGUuY3BwOiBubyBsb25nZXIgdXNlZCwgbW92ZSBzb21lIGJpdHMgdG8KLQkgIGxpYnBwL3Byb2ZpbGUuKGh8Y3BwKSBhbmQgcmVtb3ZlIHRoZXNlIGZpbGVzLgotCSogbGlicHAvTWFrZWZpbGUuYW06IHVwZGF0ZSBhY2NvcmRpbmcKLQotCSogcHAvb3BfbWVyZ2UuY3BwOiB1c2UgcHJvZmlsZV90IG5vdCBjb3VudGVyX3Byb2ZpbGVfdAotCSogcHAvbWFrZWZpbGUuYW06IGNvcnJlY3QgbGliIGZvciBvcF9tZXJnZQotCi0JKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogbW9yZSBvcHRpb25zIGhhbmRsaW5nCi0KLTIwMDMtMDQtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6IGRvbid0IHNob3cgaGVscF9zdHIgd2l0aCAtLXVzYWdlCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogdHlwbwotCSogbGlidXRpbC9vcF9maWxlLmM6IGNyZWF0ZSBkaXIgd2l0aCA3NTUgbm90IDcwMAotCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IHNvdXJjZSBmb3JtYXRpbmcKLQotCSogbGlicHAvcGFyc2VfY21kbGluZS5oOgotCSogbGlicHAvcGFyc2VfY21kbGluZS5jcHA6IGhhbmRsZV9ub25fb3B0aW9ucygpIG5ldwotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGhhbmRsZSBtb3JlIG9wdGlvbnMKLQotCSogcHAvb3BzdW1tYXJ5LmNwcDoKLQkqIHBwL29wc3VtbWFyeV9vcHRpb25zLmg6Ci0JKiBwcC9vcHN1bW1hcnlfb3B0aW9ucy5jcHA6IHJlbW92ZSwgb3ByZXBvcnQgc2hvdWxkIGRvIGl0cyBqb2IuCi0JKiBwcC9NYWtlZmlsZS5hbTogdXBkYXRlCi0KLTIwMDMtMDQtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6IGFsbG93ICJuby0iIHByZWZpeCB0byBsb25nIG9wdGlvbiBuYW1lCi0JICBpbXBsaWNpdGx5IHNwZWNpZnkgdGhlIHZhbHVlIG11c3QgYmUgbmVnYXRlZAotCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcDogdXBkYXRlIGRveHlnZW4gZG9jdW1lbnRhdGlvbgotCi0JKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6IG1pc3NpbmcgI2luY2x1ZGUKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBzcGFjZSArIG1pbm9yIGNoYW5nZQotCi0JKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDoKLQkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcGRpZmZfb3B0aW9ucy5oOgotCSogcHAvb3BkaWZmX29wdGlvbnMuY3BwOgotCSogcHAvb3BncHJvZl9vcHRpb25zLmg6Ci0JKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgotCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6Ci0JKiBwcC9vcHN1bW1hcnlfb3B0aW9ucy5oOgotCSogcHAvb3BzdW1tYXJ5X29wdGlvbnMuY3BwOiBuZXcgc2tlbGV0b24gZmlsZQotCi0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wZGlmZi5jcHA6Ci0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wc3VtbWFyeS5jcHA6IHVwZGF0ZSB0byBoYW5kbGUgb3B0aW9ucwotCi0JKiBwcC9jb21tb25fb3B0aW9uLmNwcDogZm9sbG93IG1vcmUgY2xvc2VseSBwcF9pbnRlcmZhY2UKLQotCSogcHAvb3BzdW1tYXJ5X29wdGlvbnMuY3BwOiBzdGFydCB0byBoYW5kbGUgb3BzdW1tYXJ5IG9wdGlvbgotCi0JKiBwcC9NYWtlZmlsZS5hbTogdXBkYXRlCi0KLTIwMDMtMDQtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKLQkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgotCSogbGlicHAvb3V0c3ltYmZsYWcuaDoKLQkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6Ci0JKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IG9zZl9oZWFkZXIvb3NmX2RldGFpbHMgYXJlIG5vIGxvbmdlcgotCSAgZmxhZ3MgYnV0IHNlcGFyYXRlIGJvb2xlYW4uCi0KLTIwMDMtMDQtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfa2VybmVsLmM6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOiByZW1vdmUgbGVhZGluZyAnLycgb24gbW9kdWxlIG5hbWUgZml4aW5nIDIuNQotCSBtb2R1bGUgbm90IHVuZGVyIHtrZXJufSBhbmQgc2ltaWxhciBjYXNlIGZvciAibm8tdm1saW51eCIgd2l0aCAyLjQvMi41Ci0KLQkqIGxpYnV0aWwvb3BfZmlsZS5jOiB0aW55IHRpZHkKLQotMjAwMy0wNC0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfbWFuZ2xlLmM6IGFwcF9uYW1lIGFuZCBpbWFnZSB3YXMgcmV2ZXJzZWQsIHtkZXB9IHdhcyBtaXNzaW5nCi0KLTIwMDMtMDQtMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicHAvZmlsZW5hbWVfc3BlYy5oOgotCSogbGlidXRpbCsrL2NvbW1hX2xpc3QuaDogY29tcGlsZSBmaXhlcwotCi0yMDAzLTA0LTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGJldHRlciAtLXJlc2V0IGhhbmRsaW5nCi0KLTIwMDMtMDQtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZSB3b3JrcywgZGFlbW9uIGNvbXBpbGVzIGJ1dCBub3QgdGVzdGVkLgotCi0JKiBsaWJvcC9vcF9jb25maWcuaDoKLQkqIGxpYnBwL29wX3Nlc3Npb24uaDoKLQkqIGxpYnBwL3Nlc3Npb24uY3BwOgotCSogcHAvb3BfbWVyZ2U6IGhhbmRsZSBuZXcgcGF0aCB0byBzYW1wbGVzIGZpbGVzLgotCi0JKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOgotCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBtb3ZlIGNyZWF0ZV9kaXIoKSwgY3JlYXRlX3BhdGgoKSAuLi4KLQkqIGxpYnV0aWwvb3BfZmlsZS5oOgotCSogbGlidXRpbC9vcF9maWxlLmM6IGhlcmUuIFJlbW92ZSBvcF9tb3ZlX3JlZ3VsYXJfZmlsZSgpCi0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKLQkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmg6Ci0JKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuaDoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6IHVzZSBuZXcgZmlsZW5hbWUgc2NoZW1lCi0KLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKLQkqIGRhZS9vcHJvZmlsZWQuYzogcmVtb3ZlIHNhbXBsZXMgZmlsZXMgYmFja3VwIHN0dWZmCi0KLQkqIGxpYm9wL29wX21hbmdsZS5oOgotCSogbGlib3Avb3BfbWFuZ2xlLmM6IHVnbHkgbW9kaWZpY2F0aW9uIHRvIGhhbmRsZSBuZXcgc2FtcGxlcyBmaWxlbmFtZQotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGhhbmRsZSBuZXcgc2FtcGxlcyBmaWxlcyBwYXRoLCAtLXNhdmUgYW5kIC0tcmVzZXQKLQkgIGFyZSB3b3JraW5nIHRvby4KLQotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOiB1c2UgbmV3IGNyZWF0ZV9wYXRoKCkgQVBJCi0KLTIwMDMtMDQtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOgotCSogcHAvY29tbW9uX29wdGlvbi5oOgotCSogbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmNwcDogcmVuYW1lIGRlbWFuZ2xlX2FuZF9zaHJpbmsgdG8KLQkgIHNtYXJ0X2RlbWFuZ2xlCi0KLTIwMDMtMDQtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHN0YXJ0aW5nIGJyYW5jaCBwcC1pbnRlcmZhY2UtYnJhbmNoCi0KLQkqIE1ha2VmaWxlLmFtOgotCSogY29uZmlndXJlLmluOiBoYW5kbGUgbmV3IHN1YiBkaXIgbGlicHAKLQotCSogbGlidXRpbCsrL2NvbW1hX2xpc3QuaDogbmV3IGZpbGUgaGFuZGxpbmcgb2YgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YKLQkgIGl0ZW1zLgotCSogbGlidXRpbCsrL2dlbmVyaWNfc3BlYy5jcHA6Ci0JKiBsaWJ1dGlsKysvZ2VuZXJpY19zcGVjLmg6IG5ldyBmaWxlCi0JKiBsaWJ1dGlsKysvTWFrZWZpbGUuYW06IGhhbmRsZSBuZXcgZmlsZQotCi0JKiBwcC9jb3VudGVyX2FycmF5Lio6Ci0JKiBwcC9jb3VudGVyX3Byb2ZpbGUuKjoKLQkqIHBwL2NvdW50ZXJfdXRpbC4qOgotCSogcHAvZGVyaXZlX2ZpbGVzLio6Ci0JKiBwcC9mb3JtYXRfb3V0cHV0Lio6Ci0JKiBwcC9vcHBfc3ltYm9sLmg6Ci0JKiBwcC9vdXRzeW1iZmxhZy5oOgotCSogcHAvcHJvZmlsZS4qOgotCSogcHAvcHJvZmlsZV9jb250YWluZXIuKjoKLQkqIHBwL3NhbXBsZV9jb250YWluZXJfaW1wLio6Ci0JKiBwcC9zZXNzaW9uLio6Ci0JKiBwcC9zeW1ib2xfY29udGFpbmVyX2ltcC4qOgotCSogcHAvc3ltYm9sX2Z1bmN0b3JzLio6IG1vdmUgdG8KLQotCSogbGlicHAvKjogaGVyZQotCSogbGlicHAvZmlsZW5hbWVfc3BlYy5jcHA6Ci0JKiBsaWJwcC9maWxlbmFtZV9zcGVjLmg6IG5ldyBmaWxlIGhhbmRsaW5nIG9mIHBwIHNhbXBsZSBmaWxlbmFtZQotCSogbGlicHAvcGFyc2VfY21kbGluZS5jcHA6Ci0JKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmg6IG5ldyBmaWxlLCBoYW5kbGluZyBvZiBjb21tYW5kIGxpbmUgdGFnOnZhbHVlCi0JKiBsaWJwcC9NYWtlZmlsZS5hbTogbmV3IGZpbGUgYnVpbGQgbGlicHAuYQotCi0JKiBwcC9jb21tb25fb3B0aW9uLmg6Ci0JKiBwcC9jb21tb25fb3B0aW9uLmNwcDogY29tbW9uIG9wdGlvbiB0byBwcCB0b29scy4gSW1wbGVtZW50IGNvbW1vbgotCSAgZW50cnkgcG9pbnQgdG8gcHAgdG9vbHMuCi0JKiBwcC9vcGFubm90YXRlLmNwcDoKLQkqIHBwL29wZGlmZi5jcHA6Ci0JKiBwcC9vcGdwcm9mLmNwcDoKLQkqIHBwL29wcmVwb3J0LmNwcDoKLQkqIHBwL29wc3VtbWFyeS5jcHA6IHNrZWxldG9uIGZpbGUgZm9yIGFsbCBwcCB0b29scy4KLQkqIHBwL01ha2VmaWxlLmFtOiByZW1vdmUgb2xkIHBwIHRvb2xzLCBhZGQgdGhlIG5ld3MuCi0KLTIwMDMtMDQtMjggIEFsZXggVHNhcmlvdW5vdiAgPGFsZXh0QGZjLmhwLmNvbT4KLQotCSogbW9kdWxlL2lhNjQvb3BfcG11LmM6IGZpeCBjb21waWxlCi0KLTIwMDMtMDQtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS9jb21wYXQyMi5oOiBhZGQgY3B1aWRfZWR4IHdoZW4gbGludXggdmVyc2lvbiA8IDIuMi4yMQotCi0yMDAzLTA0LTI0ICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KLQotCSogZXZlbnRzL3g4Ni02NC5oYW1tZXIuZXZlbnRzOgotCSogZXZlbnRzL3g4Ni02NC5oYW1tZXIudW5pdF9tYXNrczogdHlwbyBmaXhlcyBmcm9tIEFNRC4KLQkqIG1vZHVsZS94ODYvY3B1X3R5cGUuYzogQ2hlY2sgZm9yIEFQSUMgb24gQXRobG9uIGJlZm9yZSBlbmFibGluZyBpdC4KLQotMjAwMy0wNC0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZXZlbnRzL2kzODYtaHQuZXZlbnRzOiBhbGwgZXZlbnRzIGFsbG93IG9ubHkgb25lIGNvdW50ZXIsIHJlbW92ZQotCSAgdGhyZWUgZXZlbnRzIGR1ZSB0byBFU0NSIHJlc3RyaWN0aW9uLgotCSogZXZlbnRzL2kzODYuZXZlbnRzOiBhZGQgc29tZSBjb21tZW50cy4KLQotCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jOiBzeW5jaCB3aXRoIGxpbnV4IDIuNSBtYWlubGluZQotCSAgLSBleGNlcHQgZXZlbnRzIENUUl9CUFVfMCBhbGwgdmlydHVhbCBjb3VudGVyIHdhcyBub3Qgd29ya2luZy4KLQkgIC0gUHJldmVudHMgYSBzZWdmYXVsdCB3aGVuIHVzaW5nIGluY29ycmVjdCBjb3VudGVyIG51bWJlci4KLQkgIC0gRVNDUiBldmVudCBzZWxlY3QgaXMgNiBiaXRzIGxlbmd0aCBub3QgNS4KLQkgIC0gRG9uJ3QgZmFpbCBzaWxlbnRseSBpbiBwNF9zZXR1cF9jdHJzKCkuCi0JKiBtb2R1bGUveDg2L29wX21zci5oOiBtYXRjaCBuYW1lIHVzZWQgaW4gbGludXguCi0KLTIwMDMtMDQtMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBzbWFsbCBlbmdsaXNoIGZpeGVzCi0KLTIwMDMtMDQtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZS9vcGRfa2VybmVsLmM6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZS9vcHJvZmlsZWQuYzoKLQkqIHV0aWxzL29wY29udHJvbDoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDogaGFuZGxlIC0tbm8tdm1saW51eAotCi0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOiB1c2Ugbm8tdm1saW51eCBub3QgL25vLXZtbGludXggd2hlbiB1c2VyCi0JICBzcGVjaWZ5IC0tbm8tdm1saW51eAotCi0yMDAzLTA0LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIEhBQ0tJTkc6IGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aXRoIG9wcm9maWxlLXd3dwotCi0yMDAzLTA0LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogY2hlY2sgZm9yICM3MTc3MjAgYW5kIGRpcmVjdCB1c2VyIHRvCi0JICBGQVEgaWYgZGV0ZWN0ZWQuIE5vdGUgdGhhbiB3ZSBkb24ndCBkZXRlY3QgYWxsIHN5bXB0b20gb2YgdGhpcyBidWcuCi0KLTIwMDMtMDQtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwrKy9vcF9leGNlcHRpb24uaDogb3BfcnVudGltZV9lcnJvciBpcyBubyBsb25nZXIgYWJzdHJhY3QKLQotCSogbGlicmVnZXgvb3BfcmVnZXguaDogY29tbWVudCBhbmQgdGlkeQotCSogbGlicmVnZXgvb3BfcmVnZXguY3BwOiB0aWR5Ci0KLTIwMDMtMDQtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IG1ha2UgZWFjaCBsaW5lIGJlIHByZWZpeGVkIHdpdGggdGhlIHNhbXBsZXMKLQljb3VudHMuIEl0IHdhcyB0b28gaGFyZCB0byBmaW5kIHNhbXBsZXMgaW5zaWRlIHByZXZpb3VzIGZvcm1hdC4KLQotMjAwMy0wNC0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IHdvcmsgYXJvdW5kIGZvciBnY2MgMi45NQotCSogcC9vcF90b19zb3VyY2UuY3BwOiBtaW5vciBjbGVhbnVwCi0KLTIwMDMtMDQtMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3BfdG9fc291cmNlLmNwcDogY2hlYXQgYSBiaXQgdG8gZ2V0Ci0JYmV0dGVyIGluZGVudGF0aW9uIG9uIHRoZSBkZWZhdWx0IHNldHVwLCBieQotCXdpZGVuaW5nIGNvdW50ZXIgd2lkdGggdG8gNy4KLQotMjAwMy0wNC0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcF90b19zb3VyY2UuY3BwOiBhcHBlbmQgc3ltYm9sIHN1bW1hcnkKLQlhbm5vdGF0aW9ucyBzZXBhcmF0ZSBmcm9tIHRoZSBwcm9sb2cgc2FtcGxlcyBvbgotCXRoZSBzYW1lIGxpbmUuCi0KLTIwMDMtMDQtMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3BfdG9fc291cmNlLmNwcDogb25seSBvdXRwdXQgbGluZSAwIGFubm90YXRpb24KLQlpZiBzYW1wbGVzIGZvdW5kIHRoZXJlLgotCi0yMDAzLTA0LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogbWFrZSBzdXJlIC0tY3RyWC1ldmVudD1ub25lIGdldHMgbm90aWNlZAotCi0yMDAzLTA0LTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKLQkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiByZW1vdmUgd3NfcHJlZml4KCkuIEFkZAotCWZvcm1hdF9wZXJjZW50KCkuCi0KLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IG1ha2UgZWFjaCBsaW5lIGJlIHByZWZpeGVkIHdpdGgKLQl0aGUgc2FtcGxlIGNvdW50cywgaW5zdGVhZCBvZiBvbiBhIGxpbmUgYWJvdmUsIHRvIHByZXNlcnZlCi0JbGluZSBudW1iZXJpbmcuCi0KLTIwMDMtMDQtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogcHAvb3BfdG9fc291cmNlLmNwcDogc29tZSByZW5hbWluZ3MgZm9yIGNsYXJpdHkKLQotMjAwMy0wNC0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcF90b19zb3VyY2UuY3BwOiBtb3ZlIGV4dHJhY3RfYmxhbmtfYXRfYmVnaW4oKSB0byAuLi4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IC4uLiBoZXJlLCBhbmQgcmVuYW1lIGFzCi0Jd3NfcHJlZml4KCkuCi0JCi0yMDAzLTA0LTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IHByZWZpeCBjb21tZW50IGxpbmVzLgotCU91dHB1dCB0aGUgZ2VuZXJhbCBmb290ZXIgb24gZWFjaCBzZXBhcmF0ZSBmaWxlLgotCU91dHB1dCB0aGUgaW5mbyBhdCB0aGUgYm90dG9tIHdoZW4gb3V0cHV0dGluZwotCXNlcGFyYXRlIGZpbGVzICh0b3dhcmRzIG1haW50YWluaW5nIGxpbmUgbnVtYmVyaW5nKS4KLQotMjAwMy0wNC0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9vcF90b19zb3VyY2UuY3BwOiBjb25zdHJ1Y3QgYSBmaWxlLXNjb3BlCi0JY21kbGluZSBzdHJpbmcsIGluc3RlYWQgb2YgcGFzc2luZyBpdCBhcm91bmQuCi0KLTIwMDMtMDQtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicmVnZXgvb3BfcmVnZXhwLmNwcDogcmUtYXJyYW5nZSBhIGJpdAotCi0yMDAzLTA0LTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIGFsbCBNYWtlZmlsZS5hbTogZG9uJ3QgYmxpbmRseSBzZXQgJExJQlMsIHVzZQotCWV4cGxpY2l0IG1lbnRpb24gb2Ygd2hpY2ggbGlicyBhcmUgbmVlZGVkLgotCi0JKiBkYWUvTWFrZWZpbGUuYW06Ci0JKiBkYWVtb24vTWFrZWZpbGUuYW06IG9ubHkgbGluayB3aXRoIEMrKyBpZiBuZWVkZWQuCi0KLTIwMDMtMDQtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL29wX2NvbmZpZ18yNC5oOgotCSogbW9kdWxlL29wcm9maWxlLmM6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuYzogbWFrZSB3YXRlcm1hcmsgc2l6ZSBwcm9wb3J0aW9uYWwgdG8gYnVmZmVyIHNpemUuCi0KLTIwMDMtMDQtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL29wX2V2ZW50cy5oOgotCSogbGlib3Avb3BfZXZlbnRzLmM6IHJlLWFkZCBvcF9taW5fY291bnQoKTsKLQotCSogZGFlL29wcm9maWxlZC5jOgotCSogZGFlbW9uL29wcm9maWxlZC5jOiB1c2Ugb3BfbWluX2NvdW50KCkgZml4aW5nICM3MTU5MjMKLQotMjAwMy0wNC0wMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJkYi9NYWtlZmlsZS5hbTogZml4IG1ha2UgZGlzdAotCi0JKiBkYWVtb24vb3BkX2Nvb2tpZS5oOiBhZGQgU1BBUkMgc3lzY2FsbCBudW1iZXIuCi0JICBUaGUgc3lzdGVtIGNhbGwgZnVuY3Rpb24gaXMgT0sgZm9yIHNwYXJjL3NwYXJjNjQKLQotMjAwMy0wMy0zMSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBsaWJkYi9vZGJfaGFzaC5oOiBSZW5hbWVkIGRiX2hhc2guaC4KLQotCSogZGFlL01ha2VmaWxlLmFtOgotCSogZGFlL29wZF9pbWFnZS5jOgotCSogZGFlL29wZF9pbWFnZS5oOgotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgotCSogZGFlbW9uL01ha2VmaWxlLmFtOgotCSogZGFlbW9uL29wZF9pbWFnZS5jOgotCSogZGFlbW9uL29wZF9pbWFnZS5oOgotCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGxpYmFiaS9NYWtlZmlsZS5hbToKLQkqIGxpYmFiaS9hYmkuY3BwOgotCSogbGliYWJpL2FiaV90ZXN0LmNwcDoKLQkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOgotCSogbGliZGIvTWFrZWZpbGUuYW06Ci0JKiBsaWJkYi9kYl9kZWJ1Zy5jOgotCSogbGliZGIvZGJfaGFzaC5oOgotCSogbGliZGIvZGJfaW5zZXJ0LmM6Ci0JKiBsaWJkYi9kYl9tYW5hZ2UuYzoKLQkqIGxpYmRiL2RiX3N0YXQuYzoKLQkqIGxpYmRiL2RiX3Rlc3QuYzoKLQkqIGxpYmRiL2RiX3RyYXZlbC5jOgotCSogcHAvTWFrZWZpbGUuYW06Ci0JKiBwcC9jb3VudGVyX3Byb2ZpbGUuY3BwOgotCSogcHAvY291bnRlcl9wcm9maWxlLmg6Ci0JKiBwcC9vcF9tZXJnZS5jcHA6IENoYW5nZSBuYW1lcyB0byBhdm9pZCBsaWJkYi5hIG5hbWUgY29uZmxpY3RzLgotCQotMjAwMy0wMy0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC42Y3ZzCi0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IGZpeCBpZC4gQWRkIGphdmEgZXRjLiBtZW50aW9uCi0KLQkqIHV0aWxzL01ha2VmaWxlLmFtOgotCSogdXRpbHMvb3Bfc3RhcnQ6Ci0JKiB1dGlscy9vcF9zdGFydF8yNToKLQkqIHV0aWxzL29wX3N0b3A6Ci0JKiB1dGlscy9vcF9zdG9wXzI1OgotCSogdXRpbHMvb3BfZHVtcDoKLQkqIHV0aWxzL29wX2R1bXBfMjU6Ci0JKiB1dGlscy9vcF9zZXNzaW9uOiBmaW5hbGx5IHJlbW92ZSB0aGUgYmFjayBjb21wYXQgY3JhcAotCi0JKiBIQUNLSU5HOiBhZGQgcmVsZWFzZS1ub3RlcyBwb2xpY3kKLQotMjAwMy0wMy0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC41LjIKLQotMjAwMy0wMy0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBNYWtlZmlsZS5hbTogcmVtb3ZlIG9wX2FyY2guaCBmb3IgaWE2NAotCi0yMDAzLTAzLTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IHNldmVyYWwgbW9yZSBleGFtcGxlcyBhbmQgZml4ZXMKLQotMjAwMy0wMy0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JRnJvbSBhIHBhdGNoIGJ5IEJyeWFuIFJpdHRtZXllci4KLQotCSogbW9kdWxlL29wcm9maWxlLmM6Ci0JKiBtb2R1bGUvb3Byb2ZpbGUuaDogcHVzaCAiaXJxX2VuYWJsZWQiIHRlc3QKLQlpbnRvIGFyY2ggY29kZSwgZG9uJ3QgcGFzcyBzdHJ1Y3QgcHRfcmVncy4KLQotCSogbW9kdWxlL3g4Ni9vcF9hcmNoLmg6IGNsZWFudXBzCi0KLQkqIG1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmM6Ci0JKiBtb2R1bGUveDg2L29wX21vZGVsX3Bwcm8uYzoKLQkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYzoKLQkqIG1vZHVsZS94ODYvb3BfcnRjLmM6IGNoYW5nZXMgZnJvbSBhYm92ZQotCi0JKiBtb2R1bGUvaWE2NC9vcF9hcmNoLmg6IHJlbW92ZQotCSogbW9kdWxlL2lhNjQvb3BfcG11LmM6IGNoYW5nZSBmcm9tIGFib3ZlCi0KLTIwMDMtMDMtMjQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgcHJvbG9ndWVzLCBhbmQgaW5saW5lIGZ1bmN0aW9ucwotCi0yMDAzLTAzLTI0ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGxpYnV0aWwvb3BfZmlsZWlvLmMgKG9wX2dldF9saW5lKTogVXNlIGxvd2VyIGNvc3QgZ2V0YygpLgotCi0yMDAzLTAzLTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIG00L2NvbmZpZ21vZHVsZS5tNDogZml4IHF1b3RpbmcgcHJvYmxlbSBmb3IgYXdrCi0KLTIwMDMtMDMtMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOgotCSogbTQvOiBtb3ZlIGxvdHMgb2Ygc3R1ZmYgaW50byBzZXBhcmF0ZSAubTQgZmlsZXMKLQotCSogbTQvdHlwZWRlZi5tNDogaW1wcm92ZSBjb25maWd1cmUgbWVzc2FnZQotCi0yMDAzLTAzLTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIG00L01ha2VmaWxlLmFtOgotCSogbTQvY29weWlmY2hhbmdlLm00OgotCSogbTQvZG9jYm9vay5tNDoKLQkqIG00L2tlcm5lbG9wdGlvbi5tNDoKLQkqIG00L2tlcm5lbHZlcnNpb24ubTQ6Ci0gCSogbTQvcmVzdWx0eW4ubTQ6IG1vdmUgY29uZmlndXJlLmluIG1hY3JvcyB0byBtNC8KLQotMjAwMy0wMy0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBtNC9DaGFuZ2VMb2c6IGFkZCBjb21tZW50Ci0KLQkqIG00L3R5cGVkZWYubTQ6IGNhbid0IHVzZSBBQ19MQU5HX1BVU0gvUE9QCi0KLTIwMDMtMDMtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBtNC9NYWtlZmlsZS5hbToKLQkqIG00L3R5cGVkZWYubTQ6IG5ldyBmaWxlIHRvIGdldCB1bmRlcmxpbmVkIHR5cGUgZm9yIGEgdHlwZWRlZi4KLQkKLQkqIGNvbmZpZ3VyZS5pbjogZ2V0IGF0IGNvbmZpZ3VyZSB0aW1lIHRoZSByZWFsIHVuZGVybGluZWQgdHlwZQotCSAgZm9yIHNpemVfdCBhbmQgcHRyZGlmZl90Ci0KLQkqIGxpYnJlZ2V4L3N0bC5wYXQ6IG1vdmUgdG8gLi4uCi0JKiBsaWJyZWdleC9zdGwucGF0LmluOiBoZXJlLiBVc2UgQFNJWkVfVF9UWVBFQCBhbmQgQFBUUkRJRkZfVF9UWVBFQAotCSogbGlicmVnZXgvTWFrZWZpbGUuYW06IHVwZGF0ZSBhY2NvcmRpbmcKLQkqIGxpYnJlZ2V4Ly5jdnNpZ25vcmU6IGlnbm9yZSBzdGwucGF0Ci0KLTIwMDMtMDMtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogdXNlICRPUF9IRUxQIG5vdCBvcF9oZWxwCi0JKiB1dGlscy9vcF9oZWxwLmM6IHJlbW92ZSBzaG9ydCBvcHRpb24gZm9yIC0tZ2V0LWNwdS1mcmVxdWVuY3kKLQotMjAwMy0wMy0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIG00OiBuZXcgZGlyZWN0b3J5Ci0JKiBtNC8uY3ZzaWdub3JlOiBuZXcKLQotCSogYWNpbmNsdWRlLm00OiBtb3ZlIHRvCi0JKiBtNC9xdC5tNDogaGVyZQotCSogbTQvTWFrZWZpbGUuYW06IG5ldyBmb3IgRVhUUkFfRElTVCA9IGFsbCBvdXIgLm00Ci0JKiBNYWtlZmlsZS5hbToKLQkqIGNvbmZpZ3VyZS5pbjoKLQkqIGF1dG9nZW4uc2g6IGhhbmRsZSBtNCBzdWJkaXIsIGFkZCAtSSBtNCB0byBhY2xvY2FsIGZsYWdzCi0KLTIwMDMtMDMtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkgIFN1Z2dlc3RlZCBieSBKb2huCi0KLQkqIGxpYnV0aWwvb3BfY3B1ZnJlcS5jOiB0eXBvIGluIGNvbW1lbnQKLQotCSogdXRpbHMvb3BfaGVscC5jOiBhZGQgLS1nZXQtY3B1LWZyZXF1ZW5jeSwgaW50ZW50aW9ubmFseSBub3QKLQkgIGRvY3VtZW50ZWQuCi0JKiB1dGlscy9vcGNvbnRyb2w6IHVzZSBvcF9oZWxwIC0tZ2V0LWNwdS1mcmVxdWVuY3kgYW5kIHJlbW92ZQotCSAgdWdseSBzaGVsbCBzY3JpcHQgZG9pbmcgdGhlIHNhbWUgdGhpbmcuCi0KLTIwMDMtMDMtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwvb3BfY3B1ZnJlcS5oOgotCSogbGlidXRpbC9vcF9jcHVmcmVxLmM6IG5ldyBmaWxlIGV4cG9ydGluZyBvcF9jcHVfZnJlcXVlbmN5KCkKLQkqIGxpYnV0aWwvTWFrZWZpbGUuYW06IHVwZGF0ZSBhY2NvcmRpbmcKLQotCSogdXRpbHMvb3Bjb250cm9sOiBoYW5kbGUgb3RoZXIgYXJjaAotCi0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5oOgotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOiByZW1vdmUgZ2V0X2NwdV9zcGVlZCgpCi0JKiBndWkvb3Byb2Zfc3RhcnQuaDoKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGFuZCB1c2UgaW5zdGVhZCBvcF9jcHVfZnJlcXVlbmN5KCkKLQotCSogZGFlbW9uL29wcm9maWxlZC5jOgotCSogZGFlL29wcm9maWxlZC5jOiByZXBsYWNlIC0tY3B1LXNwZWVkIG9wdGlvbiBieSBhIGNhbGwgdG8KLQkgIG9wX2NwdV9mcmVxdWVuY2V5KCkKLQotMjAwMy0wMy0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2Mgc29tZSAyLjUgbW9kdWxlIHN0dWZmCi0KLTIwMDMtMDMtMjAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBmaXggb3Bjb250cm9sIC0tZHVtcCB0byBkbyBzb21ldGhpbmcKLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOiBnaXZlIGEgcHJpbnRmIHdoZW4gcmVhZGluZyB0aGUgYnVmZmVyLgotCi0yMDAzLTAzLTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogY29ycmVjdCBnZXRfdm1hX3JhbmdlKCkKLQotCSogcHAvb3Byb2ZwcC5jcHA6IGRvX2R1bXBfZ3Byb2YoKSB0aGlzIHRpbWUgaXQncyByaWdodCEKLQotMjAwMy0wMy0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBwcC9wcm9maWxlLmNwcDogaW1wcm92ZSBtdGltZSB3YXJuaW5nIGZvciAyLjUgbW9kdWxlcwotCi0yMDAzLTAzLTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL2Rlcml2ZV9maWxlcy5jcHA6IHNvbWUgbW9yZSAyLjUgbW9kdWxlcyBkZXJpdmF0aW9uIGZpeGVzCi0KLTIwMDMtMDMtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL2Rlcml2ZV9maWxlcy5jcHA6IGZpeCBoYW5kbGluZyBvZiAyLjUgbW9kdWxlIG5hbWUKLQotMjAwMy0wMy0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBsaWJvcC9vcF9pbnRlcmZhY2VfMjUuaDogcmVuYW1lIHRvIE1PRFVMRV9MT0FERURfQ09ERQotCi0yMDAzLTAzLTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDogc3BlY2lhbCB0byByZXRyaWV2ZSAyLjUgbW9kdWxlCi0KLTIwMDMtMDMtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBwcC9zeW1ib2xfY29udGFpbmVyX2ltcC5oOgotCSogcHAvc3ltYm9sX2NvbnRhaW5lcl9pbXAuY3BwOgotCSogcHAvcHJvZmlsZV9jb250YWluZXIuaDoKLQkqIHBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogZmluZChzdHJpbmcgc3ltYm9sX25hbWUpIHJldHVybiBhIHZlY3RvcgotCSAgb2Ygc3ltYm9sIHJhdGhlciBhIGEgc2luZ2xlIHN5bWJvbAotCSogcHAvb3Byb2ZwcC5jcHA6IHVzZSBhYm92ZSBjaGFuZ2Ugc28gb3Byb2ZwcCAtcyB3aWxsIHNob3cgYWxsCi0JICBzeW1ib2wgd2l0aCB0aGUgc2FtZSBuYW1lLgotCi0JKiBwcC9zeW1ib2xfZnVuY3RvcnMuaDogcmVtb3ZlIHVudXNlZCBmdW5jdG9ycyBlcXVhbF9zeW1ib2xfYnlfbmFtZQotCi0yMDAzLTAzLTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogbGlidXRpbC9vcF9maWxlaW8uaDoKLQkqIGxpYnV0aWwvb3BfZmlsZWlvLmM6IG9wX3dyaXRlX3U2NCgpIG5ldwotCSogbGlidXRpbC9vcF90eXBlcy5oOiBjb250aW51ZSBvdXIgc2lsbHkgdHlwZWRlZjogYWRkIHU2NAotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmg6Ci0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogb3BfYmZkOjphcmNoX2JpdHNfcGVyX2FkZHJlc3MoKSBuZXcgYWxsb3dpbmcKLQkgIHRvIGdldCwgb24gYSBwZXItYmluYXJ5IGJhc2lzLCB0aGUgdm1hIHNpemUuCi0KLQkqIHBwL29wcm9mcHAuY3BwOiBmaXggNjQgYml0cyBhcmNoIGdwcm9mIG91dHB1dC4gRml4IG11bHRpcGxpZXIgYW5kCi0JICBnZXQgdGhlIG11bHRpcGxpZXIgb2YgZ3Byb2YgZmlsZSBhdCBydW50aW1lLiBGaXggYSB2ZXJ5IG9sZCBidWcKLQkgIHdoZXJlIHdlIGNyZWRpdCB0aGUgc2FtcGxlcyB0byBwcmV2aW91cyBncHJvZiBiaW4gaGF2aW5nIHRoZSBlZmZlY3QKLQkgIHRoYW4gc2FtcGxlIGF0IHN0YXJ0IG9mIGZ1bmN0aW9uIHdhcyBjcmVkaXRlZCB0byB0aGUgcHJldmlvdXMKLQkgIGZ1bmN0aW9uCi0KLTIwMDMtMDMtMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKLQkqIGRhZW1vbi9vcGRfa2VybmVsLmg6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGRvbid0IHRyeSB0byByZXJlYWQgdGhlIG1vZHVsZQotCWxpc3Qgb24gYSBmYWlsZWQgRUlQIG1hdGNoLiBXZSBtdXN0IGhhdmUgdGhlIG1vZHVsZSBsb2FkCi0Jbm90aWZpY2F0aW9uIGluc3RlYWQuCi0KLTIwMDMtMDMtMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9rZXJuZWwuYzogZml4IG1vZHVsZSBhY2NvdW50aW5nLiBSZW1vdmUKLQlxdWljay1kcm9wIGNvZGUgdGhhdCBjYW4ndCB3b3JrLgotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6IGVuZ2xpc2ggdHdlYWtzCi0KLTIwMDMtMDMtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6IHJlbW92ZSBkb2N1bWVudGF0aW9uIGFib3V0IC1QLCB1cGRhdGUgZG9jIGFib3V0IC1wCi0KLQkqIHBwL2Rlcml2ZV9maWxlcy5oOgotCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDogY2hlY2tfaW1hZ2VfbmFtZSgpLCBhZGRfdG9fYWx0ZXJuYXRlX2ZpbGVuYW1lKCkKLQkgIGZ1bmN0aW9ucyBtb3ZlZCBmcm9tIG9wX3RpbWUuY3BwCi0KLQkqIHBwL29wX3RpbWVfb3B0aW9ucy5oOgotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wX3RpbWUuY3BwOiByZW1vdmUgLVAgb3B0aW9uLCBtaW5vciBjbGVhbnVwCi0KLQkqIHBwL29wcm9mcHBfb3B0aW9ucy5oOgotCSogcHAvb3Byb2ZwcF9vcHRpb25zLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOiBhZGQgLXAgb3B0aW9uLCBtaW5vciBjbGVhbnVwCi0JCi0JKiBwcC9vcF90b19zb3VyY2UuY3BwOiBtaW5vciBjbGVhbnVwCi0KLTIwMDMtMDMtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogY2hlY2sgcmV0dXJuIGNvZGUgZm9yIC0tY3RyPz8tZXZlbnQ9bm9uZQotCi0yMDAzLTAzLTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBjaGVjayBmb3IgLS1zZXBhcmF0ZT14eHh4IGluIHRoZSByaWdodCBvcmRlci4KLQkgIE9sZCBjb2RlIGRvOiBpZiB1c2VyIHNldCBzZXBhcmF0ZT1saWJyYXJ5IGFuZCBzZXBhcmF0ZT1rZXJuZWwgb25seQotCSAgc2VwYXJhdGU9bGlicmFyeSB3YXMgdGFrZW4gYnkgb3Bjb250cm9sCi0KLTIwMDMtMDMtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogdHlwbwotCi0yMDAzLTAzLTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogbW9yZSBkb2Nib29rIG1hY3JvIGZpeGVzCi0KLTIwMDMtMDMtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYnV0aWwvb3BfbGliaWJlcnR5Lmg6IGN1dCZwYXN0ZSB0eXBvIGJyZWFraW5nIGNvbXBpbGF0aW9uIG9uIGJveAotCSAgdy9vIGxpYmliZXJ0eS5oCi0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogcmVtb3ZlIGJvZ3VzIGZwcmludGYuIGNvbXBpbGF0aW9uIHdhcyBicm9rZW4KLQkgIG9uIGFscGhhLgotCi0JKiBjb25maWd1cmUuaW46IHhzbHRwcm9jIGNoZWNraW5nIGZpeCwgd2FzIGFsd2F5cyBhY2NlcHRlZCBldmVuCi0JIG9uIGJveCB3aGVyZSB4c2x0cHJvYyBpcyBub3QgaW5zdGFsbGVkCi0KLTIwMDMtMDMtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBNYWtlZmlsZS5hbTogYWRkIENoYW5nZUxvZy0yMDAyIGluIGRpc3QgZmlsZXMKLQkqIGFsbCBNYWtlZmlsZS5hbTogcHV0IG9uZSBpdGVtIGJ5IGxpbmUgZm9yIG1vc3QgIHh4eHggPSBibGFoCi0JKiBkb2MvQ29kaW5nU3R5bGU6IHJhdGlvbmFsZSBmb3IgdGhlIGFib3ZlIGNoYW5nZQotCi0yMDAzLTAzLTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJvcC9vcF9ldmVudHMuYzogbWlub3IgY2xlYW51cAotCi0yMDAzLTAzLTE1ICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KLQotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogUmVtb3ZlIHN0YWxlIGRlYnVnIGNvZGUgZnJvbSB5ZXN0ZXJkYXlzIGNvbW1pdC4KLQotMjAwMy0wMy0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogY29uZmlndXJlLmluOiBhZGQgY2hlY2tpbmcgZm9yIGV4aXN0ZW5jZSBvZiB4bWVtZHVwKCkKLQotCSogbGlidXRpbC9NYWtlZmlsZS5hbToKLQkqIGxpYnV0aWwvb3Bfc3RyaW5nLmg6Ci0JKiBsaWJ1dGlsL29wX3N0cmluZy5jOiBuZXcsIGEgZmV3IEMgc3RyaW5nIGhhbmRsaW5nIGZ1bmN0aW9uCi0KLQkqIGxpYnV0aWwvb3BfbGliaWJlcnR5Lmg6Ci0JKiBsaWJ1dGlsL29wX2xpYmliZXJ0eS5jOiB4bWVtZHVwKCkgbmV3LgotCi0JKiBsaWJvcC9vcF9ldmVudHMuaDoKLQkqIGxpYm9wL29wX2V2ZW50cy5jOiB0aWR5IHBhcnNlci4gQWRkIG9wX2ZyZWVfZXZlbnRzKCkuIEZpeCBtaW5vcgotCSAgYnVnbGV0LgotCi0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGZpeCBtZW1sZWFrIGZyb20gcGFyc2luZyBldmVudHMgZmlsZXMKLQotCSogZ3VpL01ha2VmaWxlLmFtOgotCSogcHAvTWFrZWZpbGUuYW06IGZpeCBsaWIgb3JkZXJpbmcsIG5vdyBsaWJvcCBkZXBlbmQgb24gbGlidXRpbAotCi0JKiB1dGlscy9vcF9oZWxwLmM6IGVycm9yIG1lc3NhZ2UgaWYgaW52YWxpZCBjcHUgdHlwZS4gRml4IG9wX2hlbHAKLQkgIHdoZW4gdXNpbmcgdGltZXIgaW50ZXJydXB0LgotCi0yMDAzLTAzLTE0ICBBbmRpIEtsZWVuIDxha0BzdXNlLmRlPgotCi0JKiBtb2R1bGUveDg2L29wX25taS5jOiBGaXggYW5vdGhlciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbi4KLQotMjAwMy0wMy0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIGxpYnJlZ2V4L3N0bC5wYXQ6IHN1cHBvcnQgZm9yIHJiIHRyZWUsIHNldC9tYXAsIGFub255bW91cyBuYW1lc3BhY2UuCi0JICBGaXggaW5jb3JyZWN0IHBhdHRlcm4gZm9yIGdjYyAzLjIuIEhhbmRsZSAyLjk1IHZlY3Rvci9zdHJpbmcKLQkgIGl0ZXJhdG9yIGFuZCBhIGZldyBzdGwgZnJlZSBmdW5jdGlvbiBoYW5kbGluZy4gYWRkIGFsbCBDKysgYmFzZSB0eXBlLgotCSogbGlicmVnZXgvbWFuZ2xlZC1uYW1lLnR4dDogdGVzdCBmb3IgdGhlIGFib3ZlIGNoYW5nZQotCi0yMDAzLTAzLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBnY2MgMi45MSB3YXJuaW5nIHdvcmsgYXJvdW5kCi0KLTIwMDMtMDMtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wL29wX2V2ZW50cy5jOiBmaXggYSBkYWVtb24gc2VnZmF1bHQgZGVwZW5kaW5nIG9uIHRoZSB1c2VkCi0JICBsaWJjIHZlcnNpb24sIGFkZGVkIDIwMDMtMDMtMDQgKDAuNS4xIGlzIG9rKQotCi0yMDAzLTAzLTEzICBEYXZlIEpvbmVzIDxkYXZlakBjb2RtZW9ua2V5Lm9yZy51az4KLQotCSogZXZlbnRzL3g4Ni02NC5oYW1tZXIuZXZlbnRzOiBSZW1vdmUgZHVwbGljYXRlIG1pbmltdW0gdGFnCi0JICBmcm9tIFJFVElSRURfSU5TTlMgY291bnRlci4KLQotMjAwMy0wMy0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBtb2R1bGUvaWE2NC9vcF9wbXUuYzogaW5jbHVkZSBvcF9hcmNoLmggbm90IGFyY2guaAotCi0yMDAzLTAzLTEwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBjb25maWd1cmUuaW46IHJlbW92ZSB1bnN1cHBvcnRlZCAtLXdhcm5uZXQsIGZpeCBkb2Nib29rIHJvb3QgZGlyIHRlc3QKLQkqIGRvYy9vcHJvZmlsZS54bWw6IHR5cG8KLQotMjAwMy0wMy0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2MvTWFrZWZpbGUuYW06Ci0JKiBjb25maWd1cmUuaW46Ci0JKiBkb2MveHNsL2NhdGFsb2ctMS54bWwuaW46IG1vcmUgZG9jYm9vayBjaGFuZ2VzCi0KLTIwMDMtMDMtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOgotCSogZG9jL01ha2VmaWxlLmFtOgotCSogZG9jL3hzbC94aHRtbC54c2w6Ci0JKiBkb2MveHNsL3hodG1sLWNodW5rLnhzbDoKLQkqIGRvYy94c2wvY2F0YWxvZy0xLnhtbC5pbjogVXNlIGEgY2F0YWxvZyBmb3IgZmluZGluZwotCXRoZSBYU0wsIHNvIHdlIG9ubHkgaGF2ZSBvbmUgLmluIGZpbGUgbm93LgotCi0yMDAzLTAzLTA4ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGRvYy9NYWtlZmlsZS5hbTogQ29ycmVjdCBwYXRoIGZvciBodG1sZGlyLgotCi0yMDAzLTAzLTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wL29wX2NwdV90eXBlLmM6IGltcHJvdmUgZXJyb3IgbWVzc2FnZQotCi0JKiB1dGlscy9vcF9oZWxwLmM6IHNob3cgQ1BVIG5hbWUgaW4gZXZlbnRzIGxpc3QuIFNob3cgQ1BVCi0JIHByZXR0eSBuYW1lIGluIG9wX2hlbHAgLS1nZXQtY3B1LXR5cGUuCi0KLTIwMDMtMDMtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiBzcGVjaWZ5IGRpc3RjaGVjayAuL2NvbmZpZ3VyZSBmbGFncy4KLQkgIEFkZCB2ZXJzaW9uLmggdG8gZGlzdGNsZWFuLgotCi0JKiBkb2MvTWFrZWZpbGUuYW06IAotCSogZG9jL3hzbC94aHRtbC0xLmluOgotCSogZG9jL3hzbC94aHRtbC1jaHVuay0xLmluOiBmaXggbWFrZSBkaXN0Y2hlY2sKLQotMjAwMy0wMy0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZG9jL3hzbC8uY3ZzaWdub3JlOiB1cGRhdGUKLQotCSogbW9kdWxlL3g4Ni9jcHVfdHlwZS5jOiA8c21wYm9vdC5oPiBpcyBub3QgbmVjZXNzYXJ5Ci0KLTIwMDMtMDMtMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogUkVBRE1FOiBkb2N1bWVudCBhdXRvZ2VuLnNoCi0KLTIwMDMtMDMtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBkb2MveHNsL3hodG1sLnhzbC5pbjogbW92ZSB0bwotCSogZG9jL3hzbC94aHRtbC0xLnhzbC5pbjogaGVyZQotCSogZG9jL3hzbC94aHRtbC1jaHVuay54c2wuaW46IG1vdmUgdG8KLQkqIGRvYy94c2wveGh0bWwtY2h1bmstMS54c2wuaW46IGhlcmUKLQkqIGRvYy9NYWtlZmlsZS5hbTsgdXBkYXRlIGFjY29yZGluZwotCSogY29uZmlndXJlLmluOiBhdm9pZCB0byB0b3VjaCBkb2MveHNsIGdlbmVyYXRlZCBmaWxlcwotCi0yMDAzLTAzLTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogZGFlbW9uL29wZF9pbWFnZS5jOgotCSogZGFlbW9uL29wX3N0YXRzLmM6Ci0JKiBkYWVtb24vb3BkX3N0YXRzLmg6IGFkZCBzdGF0aXN0aWNzIGZvciBuaWwgaW1hZ2Ugd2hpbHN0IHJlY2VpdmluZwotCSAgdXNlciBzcGFjZSBzYW1wbGVzLgotCi0yMDAzLTAzLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogbGliZGIvZGJfaGFzaC5oOgotCSogbGliZGIvZGJfaW5zZXJ0LmM6IGdldCBlcnJvciBtZXNzYWdlIGZyb20gZGJfaW5zZXJ0KCkKLQotCSogbGliZGIvZGJfdGVzdC5jOgotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgotCSogbGliYWJpL29wX2ltcG9ydC5jcHA6Ci0JKiBwcC9vcF9tZXJnZS5jcHA6IHVwZGF0ZSBhY2NvcmRpbmcgdG8gdGhlIG5ldyBhcGkKLQotMjAwMy0wMy0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBwZWRhbnRyeQotCi0yMDAzLTAzLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2N1bWVudCAtLXNtYXJ0LWRlbWFuZ2xlCi0KLTIwMDMtMDMtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIG1vZHVsZS9pYTY0L29wX3BtdS5jOgotCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcmVtb3ZlICNpbmNsdWRlIDxvcF9ldmVudHMuaD4KLQotMjAwMy0wMy0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IHNoICE9IEMuIFRoaXMgaXMgdGhlIGxhc3Qgb3Bjb250cm9sCi0JICBidWcsIGhvbmVzdCAhIE9LLCBtYXliZSBub3QuCi0KLTIwMDMtMDMtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBzYXZlX2NvbmZpZygpIGdjYyAyLjk1LjMgd2FybmluZyB3b3JrLWFyb3VuZAotCi0yMDAzLTAzLTA1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogTWFrZSAtLXNldHVwIG9wdGlvbmFsIChlLmcuCi0JICBvcGNvbnRyb2wgLS1uby12bWxpbnV4KS4gRml4IGEgYnVnIGluIHRoZSAtLXNldHVwCi0JICBleGNsdXNpdmUgYXJnIHRlc3RpbmcuCi0KLQkqIGRvYy9vcHJvZmlsZS54bWw6IHJlZmxlY3QgdGhlIGFib3ZlCi0KLTIwMDMtMDMtMDUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IGNsZWFudXAsIHVzZSBzLmZpbmQKLQkgIGJlY2F1c2Ugb2xkZXIgZ2NjJ3MgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgcy5jb21wYXJlCi0KLTIwMDMtMDMtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBvbmx5IHNsZWVwIDIgYWZ0ZXIgZHVtcCBvbiAyLjQKLQotMjAwMy0wMy0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IHR3ZWFrIHRoZSB4c2x0cHJvYyB0ZXN0Ci0KLTIwMDMtMDMtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOgotCSogZG9jL01ha2VmaWxlLmFtOiBkb24ndCB0cnkgdG8gYnVpbGQgdGhlIGRvY3MKLQkgIGlmIGl0IHdpbGwgZmFpbC4KLQotMjAwMy0wMy0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5oOgotCSogZGFlbW9uL29wZF9pbWFnZS5jOgotCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogaW1wbGVtZW50IC0tbm8tdm1saW51eC4KLSAJICBSZW1vdmUgYmFjayBjb21wYXQgZm9yIGlzX2tlcm5lbC4KLQotCSogZ3VpL3Vpb3Byb2Zfc3RhcnQuYmFzZS51aToKLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDogc3VwcG9ydCB0aGUgYWJvdmUKLQotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2MgdGhlIGFib3ZlCi0KLTIwMDMtMDMtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBhbGxvdyAtLXZlcnNpb24sIC0taGVscCBlYXJseSBvbgotCi0yMDAzLTAzLTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wL29wX2V2ZW50cy5jOiBhbHRlciB0aGUgcGFyc2VyIHRvIGdpdmUgZmlsZS9saW5lbnIgb24KLQkgIGVycm9yLCBhbmQgaGFuZGxlIG1vcmUgd2hpdGVzcGFjZS4KLQotMjAwMy0wMy0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0Lmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IGFkZCBpc19wcmVmaXgoKSwKLQkgIG1ha2UgdGhlIHRyaW1tZXJzIHRha2UgYW4gYXJndW1lbnQKLQotMjAwMy0wMy0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0Lmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKLQkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKLQkqIGd1aS9wZXJzaXN0ZW50X2NvbmZpZy5oOgotCi0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6Ci0JKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogYWRkIHNwbGl0KCksIHRvYm9vbCgpLCB0b3VpbnQoKQotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGRvbid0IHdyaXRlIEJVRl9TSVpFIHR3aWNlLiBXcml0ZQotCSAgUlRDX1ZBTFVFIHByb3Blcmx5LiBXcml0ZSBLRVJORUxfT05MWQotCi0yMDAzLTAzLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHVzZSAtLWN0clgtZXZlbnQ9bm9uZSwKLQkgIC0tc2VwYXJhdGU9bm9uZS4gLS1waWQvcGdycC1maWx0ZXI9MCB3YXMgYWxyZWFkeQotCSAgYmVpbmcgZG9uZS4KLQotMjAwMy0wMy0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBkb2Mvb3Bjb250cm9sOiBhZGQgLS1jdHJYLWV2ZW50PW5vbmUKLQotMjAwMy0wMy0wMyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwIChvcHJvZl9zdGFydDo6b25fc3RhcnRfcHJvZmlsZXIpOiBMaW1pdAotCSAgY2hlY2sgdG8gb25seSB1dG1fYml0bWFzay4KLQotMjAwMy0wMy0wMyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0gICAgKiBldmVudHMvaWE2NC5pdGFuaXVtMi5ldmVudHM6Ci0gICAgKiBldmVudHMvaWE2NC5pdGFuaXVtMi51bml0X21hc2tzOiBBZGQgSXRhbml1bSAyIGV2ZW50cy4KLQotMjAwMy0wMy0wMyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0gICAgKiBsaWJvcC9vcF9ldmVudHMuaDoKLSAgICAqIGxpYm9wL29wX2V2ZW50cy5jOiBDb3JyZWN0IGNoZWNraW5nIGZvciB0aGUgbnVtYmVyIG9mIHVuaXQKLSAgICAgIG1hc2tzLgotCi0yMDAzLTAzLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogZG9jL29wcm9maWxlLnhtbDogYW5vdGhlciByb3VuZCBvZiBjbGVhbnVwcwotCi0JKiBwcC9vcF9tZXJnZS5jcHA6IC0tY291bnRlciBub3QgLS11c2UtY291bnRlciwKLQkgIGZvciBjb25zaXN0ZW5jeQotCi0yMDAzLTAzLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQlQYXRjaCBmcm9tIENocmlzIE1vbGxlciwgbW9kaWZpZWQuCi0KLQkqIGRhZS9vcGRfcHJvYy5jOgotCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKLQkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgotCSogbGliYWJpL29wX2ltcG9ydC5jcHA6Ci0JKiBsaWJkYi9kYl9oYXNoLmg6Ci0JKiBsaWJkYi9kYl9pbnNlcnQuYzoKLQkqIGxpYmRiL2RiX21hbmFnZS5jOgotCSogbGliZGIvZGJfdGVzdC5jOgotCSogcHAvY291bnRlcl9wcm9maWxlLmNwcDoKLQkqIHBwL29wX21lcmdlLmNwcDogcHVzaCBhc3NlcnRzIGluIGxpYmRiIGRvd24gaW50bwotCSAgdGhlIGNsaWVudHMuCi0KLTIwMDMtMDMtMDMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDoKLQkqIGRvYy9vcHJvZmlsZS4xLmluOgotCSogdXRpbHMvb3Bjb250cm9sOiBhZGQgLS1zZXBhcmF0ZT1ub25lLCAtLXBpZC9wZ3JwLWZpbHRlcj1ub24KLQotMjAwMy0wMy0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46Ci0JKiBkb2MvTWFrZWZpbGUuYW06Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOgotCSogZG9jL3hzbC94aHRtbC1jaHVuay54c2wuaW46Ci0JKiBkb2MveHNsL3hodG1sLnhzbC5pbjoKLQkqIGRvYy94c2wveGh0bWwtY29tbW9uLnhzbDogQWRkIHZlcnNpb24gdG8gdGhlCi0JICBkb2NzLiBTb21lIGRvYyBjbGVhbnVwcwotCi0yMDAzLTAzLTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogLS1zZXBhcmF0ZT1saWJyYXJ5IHNob3VsZCB0dXJuIGtlcm5lbCBvZmYKLQotMjAwMy0wMy0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBldmVudHMvTWFrZWZpbGUuYW06IGZpeCB1bmluc3RhbGwKLQotMjAwMy0wMy0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBtb3JlIHJlLXdvcmtpbmdzIHByb2RkZWQgYnkgYWViCi0KLTIwMDMtMDMtMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9rZXJuZWwuYzogcmVtb3ZlIC9wcm9jL2tzeW1zIHJlYWRpbmcKLQotMjAwMy0wMy0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJ1dGlsL29wX2ZpbGVpby5jOiBjaGFuZ2Ugb3BfZ2V0X2xpbmUgdG8gcmV0dXJuCi0JICBOVUxMIG9uIEVPRi4gQWxzbyBidW1wIHVwIHRoZSBkZWZhdWx0IGFsbG9jYXRpb24gc29tZS4KLQotCSogZGFlL29wZF9rZXJuZWwuYzoKLQkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOgotCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKLQkqIGxpYm9wL29wX2V2ZW50cy5jOiBjaGFuZ2VzIGZyb20gdGhlIGFib3ZlCi0KLTIwMDMtMDMtMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOgotCSogTWFrZWZpbGUuYW06Ci0JKiBldmVudHMvOiBhZGQgdGV4dCBmaWxlcyBkZXNjcmliaW5nIHRoZSBDUFUgY291bnRlcnMKLQkgIGFuZCB1bml0IG1hc2tzLiBJbnN0YWxsIHRoZW0uCi0KLQkqIGxpYm9wL29wX2V2ZW50cy5oOgotCSogbGlib3Avb3BfZXZlbnRzLmM6IHJlbW92ZSB0aGUgYmxldGNoZXJvdXMgaGFyZCBjb2RlZAotCSAgZGVzY3JpcHRpb25zLgotCi0JKiBtb2R1bGUvaWE2NC9vcF9wbXUuYzoKLQkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6IHJlbW92ZSBhbm90aGVyIGJpZyBvZiB2YWxpZGF0aW9uCi0KLQkqIGxpYnV0aWwvb3BfbGlzdC5oOiBtYWtlIEMrKyBmcmllbmRseQotCi0JKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgotCSogbGlib3Avb3BfY3B1X3R5cGUuYzogYWRkIG9wX2dldF9jcHVfbmFtZSgpCi0KLQkqIGxpYm9wL01ha2VmaWxlOgotCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuaDoKLQkqIGxpYm9wL29wX2V2ZW50c19kZXNjLmNwcDogcmVtb3ZlZAotCi0JKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50LmNwcDoKLQkqIHV0aWxzL01ha2VmaWxlLmFtOgotCSogdXRpbHMvb3BfaGVscC5jOgotCSogZ3VpL29wcm9mX3N0YXJ0Lmg6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBjaGFuZ2VzIGZyb20gYWJvdmUKLQotMjAwMy0wMy0wMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiB0d2Vha3MKLQotCSogdXRpbHMvb3Bjb250cm9sOiBzY2FsZSB0aGUgZGVmYXVsdCBldmVudCBjb3VudC4gUGxlYXNlCi0JICB0ZXN0IC4uLgotCi0yMDAzLTAzLTAxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogc2V0dXAgZGVmYXVsdCBldmVudHMuIEFsbG93IHBhcnQtc2V0dGluZwotCSAgdXNpbmcgLS1zZXR1cC4gRml4IGEgaGVscCB0ZXh0LgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBjaGFuZ2VzIGZyb20gdGhlIGFib3ZlCi0KLTIwMDMtMDMtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlib3Avb3BfY3B1X3R5cGUuYzogZml4IGFscGhhL2V2NCBtaXMtZGV0ZWN0aW9uCi0KLTIwMDMtMDMtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZG9jL29wcm9maWxlLnhtbDogZXhwYW5kIGludHJvIGEgbGl0dGxlLCBzbWFsbCBmaXhlcwotCi0yMDAzLTAzLTAxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL2Zvcm1hdF9vdXRwdXQuY3BwOiB1c2UgIiUiIG5vdCAiJS1hZ2UiCi0KLTIwMDMtMDItMjggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBmaXggSVNfVElNRVIgc2V0dGluZywgbm90aWNlZCBieQotCSAgRHVuY2FuIFNhbmRzCi0KLTIwMDMtMDItMjggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuNmN2cwotCi0yMDAzLTAyLTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRvYy9NYWtlZmlsZS5hbTogdHdlYWsKLQotCSogbGlicmVnZXgvTWFrZWZpbGUuYW06IGZpeCBtYWtlIGRpc3QKLQotMjAwMy0wMi0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC41LjEKLQotMjAwMy0wMi0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBjbGFyaWZ5IC0tc2VwYXJhdGU9a2VybmVsCi0KLTIwMDMtMDItMjUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiBjbGFyaWZ5IC0td2l0aC1rZXJuZWwtc3VwcG9ydAotCi0JKiBsaWJvcC9vcF9ldmVudHMuYzoKLQkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6Ci0JKiBtb2R1bGUvaWE2NC9vcF9ubWkuYzogcmVtb3ZlIHNhbml0eSBjaGVja2luZyAtIGl0J3MKLQkgIHRoZSB3cm9uZyBwbGFjZSB0byBoYXZlIHN1Y2ggY29kZSwgaXMgYSBiYXJyaWVyIHRvIG9wX2V2ZW50cwotCSAgY2xlYW51cCwgYW5kIG1ha2VzIGxpZmUgaGFyZGVyIGZvciBOREFlcnMuCi0KLTIwMDMtMDItMjUgIFdpbGwgQ29oZW4gPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiB1dGlscy9vcGNvbnRyb2wgKGRvX2RlaW5pdCk6IENvcnJlY3Qgc2VhcmNoIGZvciAvZGV2L29wcm9maWxlLgotCi0yMDAzLTAyLTI0ICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KLQotCSogbW9kdWxlL3g4Ni9vcF9hcGljLltjfGhdOiBtb3ZlIE5NSSBnYXRlIHNldHVwIHRvIGFyY2hpdGVjdHVyZQotCSAgc3BlY2lmaWMgU0VUX05NSV9HQVRFIG1hY3JvLiB4ODY9bm8gY2hhbmdlLgotCSAgTWFrZSB4ODYtNjQgdXNlIHRoZSBrZXJuZWxzIF9zZXRfZ2F0ZSBpbnN0ZWFkIG9mIGl0cyBvd24gb3BlbgotCSAgY29kZWQgdmFyaWFudC4KLQotMjAwMy0wMi0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB2ZXJzaW9uLTEuaC5pbjogYW5vdGhlciByZW5hbWUKLQotMjAwMy0wMi0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IHNldCB1cCBPUF9EQVRBRElSIGFuZCBPUF9CSU5ESVIKLQotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGxpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHA6IHVzZSB0aGUgYWJvdmUKLQotCSogdmVyc2lvbl90cGwuaC5pbjogbW92ZSB0byAuLi4KLQotCSogdmVyc2lvbi5oLmluLmluOiAuLi4gaGVyZQotCi0yMDAzLTAyLTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogY29uZmlndXJlLmluOiBhZGQgQVhfQ09QWV9JRl9DSEFOR0UoKSB1c2UgaXQgdG8gZ2VuZXJhdGUgdmVyc2lvbi5oCi0JKiAuY3ZzaWdub3JlOiB1cGRhdGUKLQotCSogZ3VpL01ha2VmaWxlLmFtOgotCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKLQkqIGxpYnJlZ2V4L01ha2VmaWxlLmFtOgotCSogbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmNwcDogZG9uJ3QgdXNlIC1EQklORElSLCByYXRoZXIgaW5jbHVkZQotCSAgdmVyc2lvbi5oIHRvIGdldCBpbnN0YWxsIHBhdGgKLQotMjAwMy0wMi0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBSRUFETUU6IHF1aWNrIHN0YXJ0IGJ1aWxkIGluc25zCi0KLTIwMDMtMDItMjMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBsaWJyZWdleC9NYWtlZmlsZS5hbTogaW5zdGFsbCBzdGwucGF0IGluICRwcmVmaXgvc2hhcmUvb3Byb2ZpbGUKLQkqIGxpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHA6IHVzZSBEQVRBRElSIG5vdCBCSU5ESVIKLQkqIGxpYnJlZ2V4L21hZ2xlLW5hbWUudHh0OiBhZGQgdGVzdCBmb3IgcG9pbnRlcgotCSogbGlicmVnZXgvc3RsLnBhdDogcGFydGlhbCBzdXBwb3J0IGZvciBwb2ludGVyCi0KLTIwMDMtMDItMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogYXV0b2dlbi5zaDogZXJyb3Igb3V0IGlmIG9wdGlvbnMgcGFzc2VkCi0KLTIwMDMtMDItMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlicmVnZXgvb3BfcmVnZXguaDoKLQkqIGxpYnJlZ2V4L3JlZ2V4X3Rlc3QuY3BwOiBmaXggc3RkOjoKLQotMjAwMy0wMi0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL2RlbWFuZ2xlX3N5bWJvbC5jcHA6Ci0JKiBsaWJ1dGlsKysvZGVtYW5nbGVfc3ltYm9sLmg6IG1vdmUgdG8KLQkqIGxpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHA6Ci0JKiBsaWJyZWdleC9kZW1hbmdsZV9zeW1ib2wuaDogaGVyZSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2UgYmV0d2VlbgotCSAgbGlidXRpbCsrIGFuZCBsaWJyZWdleAotCSogbGlicmVnZXgvTWFrZWZpbGUuYW06Ci0JKiBsaWJ1dGlsKysvTWFrZWZpbGUuYW06IHVwZGF0ZSBhY2NvcmRpbmcgdG8gZmlsZSBtb3ZlCi0KLQkqIHBwL01ha2VmaWxlLmFtOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgotCSogcHAvb3BfdG9fc291cmNlLmNwcDoKLQkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wcm9mcHAuY3BwOgotCSogcHAvb3Byb2ZwcF9vcHRpb25zLmNwcDogYWRkIC1EIC0tRGVtYW5nbGUgb3B0aW9ucyBlbmFibGluZyBDKysKLQkgIGRlbWFuZ2xlZCBuYW1lIGZpbHRlcmluZy4KLQotMjAwMy0wMi0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgotCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IHRyaW0oKSwgbHRyaW0oKSwgcnRyaW0oKSBuZXcgZnVuY3Rpb25zCi0KLQkqIE1ha2VmaWxlLmFtOiBoYW5kbGUgbGlicmVnZXggZGlyZWN0b3J5Ci0JKiBjb25maWd1cmUuaW46IGhhbmRsZSBsaWJyZWdleC9NYWtlZmlsZQotCi0JKiBsaWJyZWdleC8uY3ZzaWdub3JlOgotCSogbGlicmVnZXgvTWFrZWZpbGUuYW0gOgotCSogbGlicmVnZXgvbWFuZ2xlZC1uYW1lLnR4dDoKLQkqIGxpYnJlZ2V4L29wX3JlZ2V4LmNwcDoKLQkqIGxpYnJlZ2V4L29wX3JlZ2V4Lmg6Ci0JKiBsaWJyZWdleC9yZWdleF90ZXN0LmNwcDoKLQkqIGxpYnJlZ2V4L3N0bC5wYXQ6IG5ldyBmaWxlIGltcGxlbWVudGluZyBhIG1hdGNoIGFuZCByZXBsYWNlIHJlZ3VsYXIKLQkgIGV4cHJlc3Npb24gYXJvdW5kIGdsaWJjIHJlZ2V4LiBOb3QgdXNlZCBmb3Igbm93LCBuZXh0IGNvbW1pdCB3aWxsCi0JICB1c2UgdGhpcyBmb3IgcHAgdG9vbHMgQysrIG5hbWUgZGVtYW5nbGluZy4KLQotMjAwMy0wMi0yMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGZpeCBYLCBub24tUXQgYnVpbGQgY2FzZQotCi0yMDAzLTAyLTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbTogZml4IG1ha2UgZGlzdAotCi0yMDAzLTAyLTIxICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KLQotCSogY29uZmlndXJlLmluOiBFbmFibGUgYnVpbGRpbmcgb24gaGFtbWVyIGFnYWluLgotCi0yMDAzLTAyLTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogIlBhcmFtcyB1c2VkIiB3YXMgbHlpbmcKLQotMjAwMy0wMi0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IEZpeGVkIGEgYml0Y2ggb2YgYSBidWcgd2l0aCBzZXBhcmF0ZS1rZXJuZWwsCi0JICBub3cgYXR0cmlidXRpb24gb2Yga2VybmVsIHNhbXBsZXMgc2hvdWxkIGJlIG1vcmUgYWNjdXJhdGUKLQotMjAwMy0wMi0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IHNldCBMSUJfU0FNUExFUyBpZiBLRVJORUxfU0FNUExFUyBpbiAuZGFlbW9ucmMKLQotMjAwMy0wMi0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWUvb3BkX3N0YXRzLmg6Ci0JKiBkYWUvb3BkX3N0YXRzLmM6Ci0JKiBkYWVtb24vb3BkX3N0YXRzLmg6Ci0JKiBkYWVtb24vb3BkX3N0YXRzLmM6Ci0JKiBkYWUvb3BkX3Byb2MuYzoKLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogcmVtb3ZlIHVudXNlZCBPUERfU0FNUExFX0NPVU5UUy4gQWN0dWFsbHkKLQkgIGNvdW50IHNhbXBsZXMgZm9yIDIuNQotCi0yMDAzLTAyLTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYm9wL29wX2ludGVyZmFjZV8yNS5oOgotCSogZGFlbW9uL29wZF9rZXJuZWwuYzogaW1wbGVtZW50IG1vZHVsZSBkcm9wcGluZwotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOiBhdHRlbXB0IHRvIG1ha2UgdmVyYm9zZSBsb2dzCi0JICBsZXNzIGNvbmZ1c2luZwotCi0yMDAzLTAyLTIyICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KLQotCSogbGlib3Avb3BfZXZlbnRzLmM6IHNlZ3JlZ2xvYWQgaXMgdXRtX21hc2sgbm90IHV0bV9leGNsdXNpdmUKLQotMjAwMy0wMi0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogVE9ETzogdXBkYXRlCi0KLQkqIHBwL291dHB1dF9mb3JtYXQuaDoKLQkqIHBwL291dHB1dF9mb3JtYXQuY3BwOgotCSogcHAvb3BfdGltZS5jcHA6Ci0JKiBwcC9vcHJvZnBwLmNwcDoKLQkqIHBwL29wcF9zeW1ib2wuaDogYmV0dGVyIGhhbmRsaW5nIG9mIDY0LzMyIGJpdHMgYmZkX3ZtYQotCSAgaW4gb3V0cHV0Ci0KLTIwMDMtMDItMjAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5oOgotCSogbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5jcHA6IHRocm93KCkgd2hlcmUgbmVlZGVkCi0KLTIwMDMtMDItMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmg6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmNwcDoKLQkqIGRhZW1vbi9vcGRfa2VybmVsLmNwcDogZml4IHRoaW5rbyB3aXRoIC0tc2VwYXJhdGU9a2VybmVsIHJlc3VsdGluZwotCSAgaW4gZHVwbGljYXRlIG9wZW5pbmcgb2YgdGhlIHNhbWUgc2FtcGxlcyBmaWxlLgotCi0yMDAzLTAyLTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfZXhjZXB0aW9uLmg6Ci0JKiBsaWJ1dGlsKysvb3BfZXhjZXB0aW9uLmNwcDogbmV3IGZpbGVzLCBiYXNlIGNsYXNzIGZvciBleGNlcHRpb24uCi0JICBOb3QgdXNlZCBmb3Igbm93LgotCi0yMDAzLTAyLTE5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGFjaW5jbHVkZS5tNDogdXBkYXRlIGZyb20gdXBzdHJlYW0KLQotCSogZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6Ci0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBzZXBhcmF0ZSAtLXNldHVwLC0tc3RhcnQuCi0JICBIaWRlIG5vbi0yLjUgc3R1ZmYgaW4gMi41LgotCi0yMDAzLTAyLTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKLQkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6IG9wZF9oYW5kbGVfb2xkX3NhbXBsZV9maWxlKCkgZG9uJ3QKLQkgIHRyeSB0byBkZWxldGUgb2xkIHNhbXBsZXMgZmlsZXMgaWYgdGhleSBkb24ndCBleGlzdC4KLQotMjAwMy0wMi0xOCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiB1dGlscy9vcGNvbnRyb2wgKGRvX29wdGlvbnMpOiBCZXR0ZXIgb3B0aW9uIGVycm9yIGNoZWNraW5nLgotCi0yMDAzLTAyLTE3ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIHBwL2Zvcm1hdF9vdXRwdXQuaCAoc2hvd19oZWxwKTogbmFtZXNwYWNlIHN0ZC4KLQotMjAwMy0wMi0xNyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBUT0RPOiB1cGRhdGUuCi0KLTIwMDMtMDItMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQlGcm9tIEFudG9uIEJsYW5jaGFyZCA6Ci0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogY29va2llX3QgZml4IGZvciA2NCBiaXRzCi0KLTIwMDMtMDItMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIFRPRE86IHVwZGF0ZQotCi0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOgotCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmg6IGhhbmRsZSBhbiB1c2VyIHNwZWNpZmljIGFkZGl0aW9uYWwKLQkgIGhlbHAgc3RyaW5nCi0KLQkqIHBwL291dHB1dF9mb3JtYXQuaDoKLQkqIHBwL291dHB1dF9mb3JtYXQuY3BwOgotCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKLQkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6IHVzZSBpdCB0byBzaG93IGluIC0tb3V0cHV0X2Zvcm1hdAotCSAgb3B0aW9ucyBkZXRhaWxzLgotCi0yMDAzLTAyLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBwcC9vcHJvZnBwX29wdGlvbnMuY3BwOiBhbGxvdyAtLXNob3ctc2hhcmVkLWxpYnMgd2l0aCAtcwotCi0yMDAzLTAyLTEzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBUT0RPOiB1cGRhdGUKLQotCSogcHAvb3V0cHV0X2Zvcm1hdC5oOgotCSogcHAvb3V0cHV0X2Zvcm1hdC5jcHA6IGZpeCAjNjg2MjcyLCBjcmFzaCB3aGVuIHVzaW5nCi0JICBvcHJvZnBwIC1zIHN5bWJfbmFtZS4KLQotMjAwMy0wMi0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGFlL29wZF9rZXJuZWwuaDoKLQkqIGRhZS9vcGRfaW1hZ2UuaDoKLQkqIGRhZS9vcGRfaW1hZ2UuYzogZG9uJ3QgdXNlIGhhc2ggZW50cnkgemVybyBmb3Iga2VybmVsIGltYWdlCi0JIGZpeCAjNjg2MTc1Ci0KLTIwMDMtMDItMTMgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogZGFlbW9uL29wZF9jb29raWUuaChvcGRfbnJfbG9va3VwX2Rjb29raWUpOiBDb3JyZWN0IG51bWJlci4KLQotMjAwMy0wMi0xMyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBkYWVtb24vb3BkX2Nvb2tpZS5oKG9wZF9ucl9sb29rdXBfZGNvb2tpZSk6IEFkZCB4ODZfNjQuCi0KLTIwMDMtMDItMTMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlL29wZF9pbWFnZS5jOiBsaXR0bGUgY2xlYW51cCBhbmQgZml4IGVycm9yIG1lc3NhZ2UKLQkgIHRvIG5vdCBsaWUKLQotMjAwMy0wMi0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZG9jL29wcm9maWxlLjEuaW46Ci0JKiBkb2Mvb3Byb2ZpbGUueG1sOiBlbmhhbmNlIGRvYyBhYm91dCAtLXNlcGFyYXRlPWtlcm5lbAotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGhhbmRsZSBncmFjZWZ1bGx5IG9wY29udHJvbCAtLWRlaW5pdCBpZiBwcm9maWxlcgotCSAgd2FzIGFscmVhZHkgc2h1dGRvd24uIEF2b2lkIHdyb25nIHdhcm5pbmcgd2hlbiB1bW91bnQgL2Rldi9vcHJvZmlsZQotCi0yMDAzLTAyLTEyICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGd1aS9vcHJvZl9zdGFydC5jcHAgKG9wcm9mX3N0YXJ0OjpvcHJvZl9zdGFydCwKLQkgICAgb3Byb2Zfc3RhcnQ6Om9uX2ZsdXNoX3Byb2ZpbGVyX2RhdGEsCi0JICAgIG9wcm9mX3N0YXJ0Ojpvbl9zdGFydF9wcm9maWxlciwKLQkgICAgb3Byb2Zfc3RhcnQ6Om9uX3N0b3BfcHJvZmlsZXIpOiBVc2Ugb3Bjb250cm9sLgotCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwIChkYWVtb25fc3RhdHVzOjpkYWVtb25fc3RhdHVzKToKLQkgICAgQWxsb3cgcmVhZGluZyBpbnRlcnJ1cHQgaW5mbyBmcm9tIG5ldyBrZXJuZWwgaW50ZXJmYWNlLgotCSogbGlib3Avb3BfZ2V0X2ludGVyZmFjZS5jOiBOZXcuCi0JKiBsaWJvcC9NYWtlZmlsZS5hbTogQWRkIGxpYm9wL29wX2dldF9pbnRlcmZhY2UuYy4KLQkqIGxpYm9wL29wX2NwdV90eXBlLmg6IEFkZCBlbnVtIG9wX2ludGVyZmFjZS4KLQotCUkgQWRkZWQgc29tZSBiaXRzLiBQaGlsCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBjb3JyZWN0IC0tc2VwYXJhdGU9IGhhbmRsaW5nCi0JKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IHJlYWQgb25seSB0aGUgcmVhbCBudW1iZXIgb2YgaW50ZXJydXB0cwotCi0yMDAzLTAyLTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGhhbmRsZSAtLW5vdGUtdGFibGUtc2l6ZSAtLWtlcm5lbC1vbmx5ICgyLjQga2VybmVsKQotCi0yMDAzLTAyLTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiB1dGlscy9vcF9zdGFydDogbWFwIC0tc2VwYXJhdGUtc2FtcGxlcyB0byBkYWVtb24gb3B0aW9uCi0JICAtLXNlcGFyYXRlLWxpYi1zYW1wbGVzLgotCi0yMDAzLTAyLTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWUvb3BkX2ltYWdlLmM6Ci0JKiBkYWUvb3BkX2tlcm5lbC5jOgotCSogZGFlL29wZF9rZXJuZWwuaDoKLQkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOgotCSogZGFlL29wZF9wcm9jLmM6Ci0JKiBkYWUvb3BkX3Byb2MuaDoKLQkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWUvb3Byb2ZpbGVkLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmg6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOgotCSogZGFlbW9uL29wZF9rZXJuZWwuaDoKLQkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHBlciBhcHBsaWNhdGlvbiBrZXJuZWwgc2FtcGxlcyBmaWxlcwotCi0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKLQkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50IG9wY29udHJvbCAtLXNlcGFyYXRlPWtlcm5lbAotCi0JKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgotCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6Ci0JKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6Ci0JKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aTogcmVtb3ZlIGlnbm9yZV9kYWVtb24gY2hlY2tib3gsIGhhbmRsZQotCSAgLS1zZXBhcmF0ZT1bbGlicmFyeXxrZXJuZWxdCi0KLQkqIGxpYm9wL29wX3NhbXBsZV9maWxlLmg6IGFkZCBzZXBhcmF0ZV9rZXJuZWxfc2FtcGxlcyBmaWVsZCwgZmlsZQotCSAgZm9ybWF0IGlzIGJhY2t3YXJkIGNvbXBhdGlibGUKLQotCSogbGliYWJpL2FiaS5jcHA6Ci0JKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgotCSogbGliYWJpL29wX2ltcG9ydC5jcHA6IGhhbmRsZSBuZXcgc2FtcGxlcyBmaWxlIGhlYWRlciBmaWVsZAotCi0JKiBwcC9jb3VudGVyX3Byb2ZpbGUuY3BwOiBkdW1wIG5ldyBzYW1wbGUgZmlsZXMgaGVhZGVyIGZpZWxkLgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGhhbmRsZSAtLXNlcGFyYXRlPWtlcm5lbAotCi0yMDAzLTAyLTA5ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogQWRkIHJ0Yy12YWx1ZSBvcHRpb24uCi0KLTIwMDMtMDItMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBzdGFsZSBsb2NrIGZpbGUgZGV0ZWN0aW9uCi0KLTIwMDMtMDItMDYgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogdXRpbHMvb3Bjb250cm9sIChkb19kdW1wKTogRG8gbm90IGV4aXQgaWYgbm8gZGFlbW9uLgotCi0yMDAzLTAyLTA2ICBXaWxsIGNvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+Ci0KLQkqIGRvYy9vcHJvZmlsZS4xLmluOiBVcGRhdGUgbWFuIHBhZ2UgaW5mb3JtYXRpb24uCi0KLTIwMDMtMDItMDMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiAwLjZjdnMKLQotMjAwMy0wMi0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC41Ci0KLTIwMDMtMDItMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogY29uZmlndXJlLmluOiBkaXNhYmxlIHg4Nl82NAotCi0yMDAzLTAyLTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL2Zvcm1hdF9vdXRwdXQuY3BwOiByZXZlcnQgcHJldmlvdXMgcGF0Y2gsIFBoaWwncwotCSAgeDg2IGJpbnV0aWxzIGlzIGJ1aWx0IHdpdGggNjQtYml0IGJmZF92bWEKLQotMjAwMy0wMi0wMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiB1dGlscy9vcGNvbnRyb2w6IHJlbmFtZSAtLXNlcGFyYXRlLXNhbXBsZXMgdG8gLS1zZXBhcmF0ZT1saWJyYXJ5Ci0JICBmb3IgZnV0dXJlIHByb29maW5nLgotCi0JKiBwcC9mb3JtYXRfb3V0cHV0LmNwcDogb3V0cHV0IHZtYSBhdCBhIHN1aXRhYmxlIHdpZHRoCi0KLTIwMDMtMDEtMzEgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogdXRpbHMvb3Bjb250cm9sKGdldF9rZXJuZWxfcmFuZ2UpOiBNYXRjaCBvbmx5IC50ZXh0IHNlZ21lbnQuCi0KLTIwMDMtMDEtMzEgIEdyYXlkb24gSG9hcmUgIDxncmF5ZG9uQHJlZGhhdC5jb20+Ci0KLQkqIGxpYmFiaS9hYmkuY3BwCi0JKiBsaWJhYmkvYWJpX3Rlc3QuY3BwCi0JKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogVHJlYXQgZW5kaWFubmVzcyBhcyBhIHByb3BlcnR5IG9mIHRoZSBkYXR1bQotCWJlaW5nIGltcG9ydGVkLCByYXRoZXIgdGhhbiB0aGUgbWVtb3J5IGFyY2hpdGVjdHVyZS4KLQotMjAwMy0wMS0zMSAgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Ci0KLQkqIG1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmM6IERvbid0IHBva2UgcmVzZXJ2ZWQgYml0cyBpbiB0aGUgY291bnRlci4KLQkgIE9ubHkgcmRtc3Ivd3Jtc3IgY291bnRlcnMgdGhhdCB3ZSd2ZSBlbmFibGVkIGluIHRoZSBOTUkgaGFuZGxlci4KLQkgIHVsb25nLT51aW50IGNvbnZlcnNpb24uCi0KLTIwMDMtMDEtMzAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQlGcm9tIFJhbmRvbHBoIENodW5nIDoKLQotCSogZGFlbW9uL29wZF9jb29raWUuaDogYWRkIHBhcmlzYyBzdXBwb3J0Ci0KLTIwMDMtMDEtMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCUZyb20gQW50b24gQmxhbmNoYXJkIDoKLQotCSogZGFlbW9uL29wZF9jb29raWUuaDogYWRkIHBwYzMyLzY0Ci0KLQkqIHV0aWxzL29wX3N0YXJ0XzI1OiBmaXggc3RhcnQgb2Yga2VybmVsIGZvciBwcGMKLQotMjAwMy0wMS0zMCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiB1dGlscy9vcGNvbnRyb2woZ2V0X2tlcm5lbF9yYW5nZSk6IEF2b2lkIHVzaW5nIHBlcmwgYXJpdGhtZXRpYy4KLQotMjAwMy0wMS0yOSAgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Ci0KLQkqIHV0aWxzL29wY29udHJvbDogVHJ5aW5nIHRvIHVzZSB0aGUgb3B0aW9ucyAtLXBpZC1maWx0ZXI9cGlkIGFuZAotCSAgLS1wZ21yLWZpbHRlcj1wZ21yLCBvcGNvbnRyb2wgcmV0dXJuZWQgImNvbW1hbmQgbm90IGZvdW5kLgotCSAgVGhpcyB3YXMgZHVlIHRvIDIgbWlzc2luZyAndGVzdCcgc3RhdGVtZW50cy4KLQkKLTIwMDMtMDEtMjkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IHJlYWQgdm1hIHdpdGggc3RydG91bGwgbm90IHN0cnRvdWwgZml4aW5nCi0JICAzMi82NCBmYWlsdXJlIHRvIHJlYWQgb3V0cHV0IG9mIG9iamR1bXAKLQotMjAwMy0wMS0yOSAgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Ci0KLQkqIGxpYm9wL29wX2NwdV90eXBlLmM6IENsdWUgdGhlIHVzZXIgaW4gb24gd2h5IHRoZSBjcHUgdHlwZSBpc24ndAotCSAgcmVjb2duaXNlZCwgYnkgc3VnZ2VzdGluZyB0aGUgbW9kdWxlIHdhc24ndCBsb2FkZWQuCi0JKiBsaWJvcC9vcF9ldmVudHMuYzogRG9oLCB1bml0IG1hc2tzIHVzZSBiaXQgbnVtYmVycywgbm90IHZhbHVlcy4KLQotMjAwMy0wMS0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogdXRpbHMvb3BfaGVscC5jOiBnZXQgY3B1IHR5cGUgb25seSBpZiBub3QgZm9yY2VkIG9uIGNvbW1hbmQgbGluZS4KLQkgIEF2b2lkIHdyb25nIHdhcm5pbmcgYWJvdXQgdW5zdXBwb3J0ZWQgY3B1IHR5cGUuCi0KLTIwMDMtMDEtMjcgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KLQotCSogZGFlbW9uL29wZF9jb29raWUuaChvcGRfbnJfbG9va3VwX2Rjb29raWUpOiBBZGQgaWE2NCB2ZXJzaW9uLgotCi0yMDAzLTAxLTI3ICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KLQotCSogbGlib3Avb3BfZXZlbnRzLmM6IEs4IEhUIGV2ZW50cyBhcmUgdXRtX2V4Y2x1c2l2ZSwgbm90IHV0bV9iaXRtYXNrCi0JKiBsaWJvcC9vcF9ldmVudHMuYzogQWRkIGFkZGl0aW9uYWwgSzggdW5pdCBtYXNrcy4KLQotMjAwMy0wMS0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfaW50ZXJmYWNlXzI1Lmg6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IHByZXBhcmUgZHJvcCBtb2R1bGVzIHN1cHBvcnQuIGV4aXQoKSB3aGVuCi0JICByZWNlaXZpbmcgdW5rbm93biBlc2NhcGUgY29kZS4KLQotMjAwMy0wMS0yMyAgIFJhbmRvbHBoIENodW5nICA8dGF1c3FAZGViaWFuLm9yZz4KLQotCUFkZGVkIG1pbm9yIGNoYW5nZTogYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdV9pbnQgdG8gdWludCwgZml4Ci0JMzIvNjQgYml0cyBlc2NhcGUgY29kZSBtYXJrZXIgY29tcGFyaXNvbi4gUGhpbAotCi0JKiBsaWJvcC9vcF9pbnRlcmZhY2VfMjUuaDoKLQkqIGRhZW1vbi9vcGRfa2VybmVsLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IG5ldyBzY2hlbWUgdG8gcmVjb2duaXplIGtlcm5lbCBvciB1c2VyIHNwYWNlCi0JICBlaXAsIG5vdyBrZXJuZWwgbW9kdWxlIHBhc3MgdGhlIHJlbGV2ZW50IGluZm9ybWF0aW9uIHRocm91Z2gKLQkgIGVzY2FwZSBzZXF1ZW5jZS4KLQotMjAwMy0wMS0yMSAgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Ci0KLQkqIGxpYm9wL29wX2V2ZW50cy5jOiBBZGQgdW5pdCBtYXNrIGZvciBIeXBlcnRyYW5zcG9ydCBldmVudHMuCi0KLTIwMDMtMDEtMjEgIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgotCi0JKiBsaWJvcC9vcF9ldmVudHMuYzogQWRkIHg4Ni02NCBzcGVjaWZpYyBldmVudHMuCi0KLTIwMDMtMDEtMjEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IHVzZSBzc2NhbmYgdG8gcGFyc2UgL3Byb2MvbW9kdWxlcwotCi0yMDAzLTAxLTIwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOiBtb3JlIHJvYnVzdCAvcHJvYy9tb2R1bGVzIHBhcnNpbmcuCi0KLTIwMDMtMDEtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IDIuNSBtb2R1bGVzIHN1cHBvcnQsIGZvciBub3cgSSBrZWVwCi0JICB0aGUgY29kZSBmb3IgL3Byb2Mva3N5bXMgcGFyc2luZyBpbiBkYWVtb24uIExldCdzIGl0IGxpdmluZyBhIGZldwotCSAgd2Vla3MgcGxlYXNlLgotCi0yMDAzLTAxLTE4ICBGYWxrIEh1ZWZmbmVyICA8ZmFsa0BkZWJpYW4ub3JnPgotCi0JSSBhZGRlZCB0byB0aGUgb3JpZ2luYWwgcGF0Y2ggYWxsICVMIHRvICVsbCwgUGhpbAotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOgotCSogbGlidXRpbC9vcF90eXBlcy5oOiA2NCBiaXRzIHByaW50Zi9zY2FuZiBzYWZldHkuCi0KLTIwMDMtMDEtMTggIEZhbGsgSHVlZmZuZXIgIDxmYWxrQGRlYmlhbi5vcmc+Ci0KLQkqIGxpYm9wL29wX2NwdV90eXBlLmg6Ci0JKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBhZGQgQWxwaGEgQ1BVIGZhbWlsaWVzLgotCSogbGlib3Avb3BfZXZlbnRzLmg6IG1ha2Ugb3BfZXZlbnQuY3B1X21hc2sgdTMyLCBzaW5jZSB3ZSBub3cgaGF2ZQotCSAgbW9yZSB0aGFuIDE2IENQVSB0eXBlcwotCSogbGlib3Avb3BfaHdfY29uZmlnLmg6IGJ1bXAgT1BfTUFYX0NPVU5URVJTIHRvIDIwIGZvciBBbHBoYQotCSogbGlib3Avb3BfZXZlbnRzLmM6IGFkZCBBbHBoYSBldmVudHMKLQkqIGRhZW1vbi9vcGRfY29va2llLmg6IGFkZCBkY29va2llIHN5c2NhbGwgbnVtYmVyIGZvciBBbHBoYQotCSogdXRpbHMvb3BfaGVscC5jIChtYWluKTogYWRkIGhlbHAgc3RyaW5nIGZvciBBbHBoYQotCi0yMDAzLTAxLTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIG1vZHVsZS9NYWtlZmlsZS5pbjoKLQkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46Ci0JKiBtb2R1bGUvaWE2NC9NYWtlZmlsZS5pbjoga2VybmVsIGhlYWRlcnMgYXJlIHRvbyBmdWJhcgotCSAgZm9yIC1XZXJyb3IuIFNvIEknbSB0YWtpbmcgbXkgYmFsbCBob21lLgotCi0yMDAzLTAxLTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIEhBQ0tJTkc6Ci0JKiBkb2MvQ29kaW5nU3R5bGU6IGFkZAotCi0yMDAzLTAxLTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIFRPRE86IHNvbWUgdXBkYXRlcwotCi0yMDAzLTAxLTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBtb2R1bGUveDg2L29wX21vZGVsX3A0LmM6IHBtY19zZXR1cF9vbmVfcDRfY291bnRlcigpIHNob3cgY2xlYXJseQotCSAgdGhhbiBldmVudCA9PSAwIGlzIGFuIGVycm9yCi0KLTIwMDMtMDEtMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogdXRpbHMvb3Bjb250cm9sOiBwcmVmZXIgb3Byb2ZpbGVkL29wX2hlbHAgYmluYXJpZXMgaW4gdGhlIHNhbWUKLQkgIGRpciBhcyBvcGNvbnRyb2wKLQotMjAwMy0wMS0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlib3Avb3BfZXZlbnRzLmM6IHJlbmFtZSBPUF9QNF9IVDIgdG8gT1BfUDRfQUxMCi0KLTIwMDMtMDEtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuY3BwOiBubyBldmVudCxub3IgdW5pdCBtYXNrIGZvciBDUFVfVElNRVJfSU5ULAotCSAgcHJvYmxlbSByZXBvcnRlZCBieSBLYSBGYWkgTHUuCi0KLTIwMDMtMDEtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCUZyb20gR3JheWRvbiBIb2FyZQotCi0JKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgotCSogbGlib3Avb3BfY3B1X3R5cGUuYzogYWRkIFA0IEhUCi0KLQkqIGxpYm9wL29wX2V2ZW50cy5jOiB0YWcgUDQgSFQgZXZlbnRzCi0KLTIwMDMtMDEtMTEgICBSYW5kb2xwaCBDaHVuZyAgPHRhdXNxQGRlYmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcHJvZmlsZWQuYzogZml4IEVMRiBzbmlmZgotCi0yMDAzLTAxLTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogYmFpbCBvdXQgaW1tZWRpYXRlbHkgb24gZGNvb2tpZQotCSAgbG9va3VwIGZhaWx1cmUuCi0KLTIwMDMtMDEtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLQotCSogZGFlbW9uL29wZF9jb29raWUuaDogaW5zdWxhdGUgYWdhaW5zdCBtaXNzaW5nIGFyY2ggc3VwcG9ydAotCSAgZm9yIHN5c19sb29rdXBfZGNvb2tpZQotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6IHVzZSB0aGUgYWJvdmUKLQotMjAwMy0wMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IG1vdmUgY29tcGxldGVfZHVtcCB0byBhIGJldHRlciBwbGFjZQotCi0yMDAzLTAxLTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIGxpYnV0aWwvb3BfdHlwZXMuaDogYWRkIGNvb2tpZV90IGFuZCB2bWFfdAotCi0JKiBkYWVtb24vb3BkX2ltYWdlLmM6Ci0JKiBkYWVtb24vb3BkX2ltYWdlLmg6Ci0JKiBkYWVtb24vb3BkX2tlcm5lbC5jOgotCSogZGFlbW9uL29wZF9rZXJuZWwuaDogdXNlIGFib3ZlIHR5cGVzLCBhbmQga2VybmVsX3BvaW50ZXJfc2l6ZQotCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHNuaWZmIC9wcm9jL2tjb3JlIGZvciBrZXJuZWxfcG9pbnRlcl9zaXplCi0KLTIwMDMtMDEtMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6Ci0JKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDogd29yay1hcm91bmQgdG8gc3VwcG9ydCBib3RoIGdjYyBuZXcgcGFyc2VyCi0JICBhbmQgZ2NjIDIuOTUKLQotMjAwMy0wMS0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotCi0JKiBsaWJvcC9vcF90eXBlLmNwcDogc3VwcG9ydCBmb3IgYXNjaWktc3RyaW5nIGNwdSB0eXBlcwotCi0yMDAzLTAxLTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgotCi0JKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKLQkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKLQkqIHBwL29wcm9mcHAuY3BwOiBtb3JlIHVzZSBvZiBiZmRfdm1hCi0KLTIwMDMtMDEtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYmRiL01ha2VmaWxlLmFtOiBmaXggaW5jbHVkZSBkaXIKLQkqIGxpYmRiL2RiX3Rlc3QuYzogZG9uJ3QgYXNzdW1lIHRoYW4gc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSA9PSAxMjgKLQotMjAwMy0wMS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogbGlidXRpbCsrL29wX2JmZC5oOiBmaXggZm9yIDY0IGJpdHMuCi0KLTIwMDMtMDEtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+Ci0KLQkqIGxpYmFiaS9hYmkuY3BwOgotCSogbGliYWJpL29wX2ltcG9ydC5jcHA6IGJyb2tlbiBieSBteSBsYXN0IGNoYW5nZSBpbiBsaWJkYi4KLQotMjAwMy0wMS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KLQotCSogZGIvZGJfaGFzaC5oOiBkb19oYXNoKCkgdXNlIGRiX2tleV90IGFzIHBhcmFtZXRlcgotCi0yMDAzLTAxLTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+Ci0KLQkqIHBwL29wX3RpbWUuY3BwOiBzdWdnZXN0IG9wY29udHJvbCAtLWR1bXAgaW5zdGVhZAotCi0JKiB1dGlscy9vcGNvbnRyb2w6IGltcGxlbWVudCAtLXN0YXJ0LWRhZW1vbi4gRml4IGEgbnVtYmVyCi0JICBvZiBidWdzCi0KLQkqIGRvYy9vcHJvZmlsZS54bWw6Ci0JKiBkb2Mvb3Byb2ZpbGUuMS5pbjogZG9jdW1lbnQgLS1zdGFydC1kYWVtb24KLQotMjAwMy0wMS0wMyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgotCi0JKiBkYWVtb24vb3Byb2ZpbGVkLmMgKG9wZF9kb19zYW1wbGVzKTogVHlwZWNhc3QgdG8gbWF0Y2gKLQkgIGFyZ3VtZW50cy4KLQotU2VlIENoYW5nZUxvZy0yMDAyIGZvciBlYXJsaWVyIGNoYW5nZWxvZ3MuCmRpZmYgLS1naXQgYS9NT0RVTEVfTElDRU5TRV9HUEwgYi9NT0RVTEVfTElDRU5TRV9HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL01PRFVMRV9MSUNFTlNFX0dQTApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhkMmRmYy4uMDAwMDAwMAotLS0gYS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLVNVQkRJUlMgPSBcCi0JLiBcCi0JbTQgXAotCWxpYnV0aWwgXAotCWxpYm9wIFwKLQlsaWJkYiBcCi0JbGlidXRpbCsrIFwKLQlsaWJvcHQrKyBcCi0JbGliYWJpIFwKLQlkYWVtb24gXAotCXV0aWxzIFwKLQlsaWJyZWdleCBcCi0JbGlicHAgXAotCXBwIFwKLQlldmVudHMgXAotCWRvYyBcCi0JZ3VpCi0KLUFDTE9DQUxfQU1GTEFHUyA9IC1JIG00Ci0KLSMgVGhlIG1vZHVsZSB3aWxsIG5vdCBidWlsZCB1bmRlciBkaXN0Y2hlY2sKLURJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgPSAtLXdpdGgta2VybmVsLXN1cHBvcnQKLQotaWYgIWtlcm5lbF9zdXBwb3J0Ci0KLS5QSE9OWTogbW9kdWxlCi0KLWFsbC1sb2NhbDogbW9kdWxlCi0KLSMgVGhpcyBtdXN0IHVzZSBhIGZ1bGx5LXF1YWxpZmllZCBTVUJESVJTIHBhdGgsIHNvIHdlIGNhbid0IHVzZSAke3RvcF9zcmNkaXJ9Ci1tb2R1bGU6Ci0JbWFrZSAtQyBsaWJ1dGlsCi0JbWFrZSAtQyBsaWJvcAotCShjZCAkKEtTUkMpICYmICQoTUFLRSkgU1VCRElSUz0kKE9QUk9GSUxFX0RJUikvbW9kdWxlL0BPUFJPRklMRV9NT0RVTEVfQVJDSEAgbW9kdWxlcykgfHwgZXhpdCAxIDsKLQkoY2QgJChLU1JDKSAmJiAkKE1BS0UpIFNVQkRJUlM9JChPUFJPRklMRV9ESVIpL21vZHVsZSBtb2R1bGVzKSB8fCBleGl0IDEgOwotCi1pbnN0YWxsLWV4ZWMtbG9jYWw6Ci0JLW1rZGlyIC1wICQoTU9ESU5TVEFMTERJUikvb3Byb2ZpbGUKLQljcCBtb2R1bGUvb3Byb2ZpbGUtbW9kdWxlLm8gJChNT0RJTlNUQUxMRElSKS9vcHJvZmlsZS9vcHJvZmlsZS5vCi0JaWYgdGVzdCAkKEtWRVJTKSA9ICJgdW5hbWUgLXJgIjsgdGhlbiBkZXBtb2QgLWEgOyBmaQotCi1jbGVhbi1sb2NhbDoKLQlybSAtZiBtb2R1bGUvKi5vIG1vZHVsZS9AT1BST0ZJTEVfTU9EVUxFX0FSQ0hALyoubyBcCi0JbW9kdWxlLy4qLm8uY21kIG1vZHVsZS8uKi5vLmZsYWdzIFwKLQltb2R1bGUvQE9QUk9GSUxFX01PRFVMRV9BUkNIQC8uKi5vLmNtZCBtb2R1bGUvQE9QUk9GSUxFX01PRFVMRV9BUkNIQC8uKi5vLmZsYWdzCi0KLWVuZGlmCi0KLUVYVFJBX0RJU1QgPSBcCi0JQ2hhbmdlTG9nLTIwMDEgXAotCUNoYW5nZUxvZy0yMDAyIFwKLQlDaGFuZ2VMb2ctMjAwMyBcCi0JYXV0b2dlbi5zaCBcCi0JaW5jbHVkZS9zc3RyZWFtIFwKLQltb2R1bGUvTWFrZWZpbGUuaW4gXAotCW1vZHVsZS9jb21wYXQuYyBcCi0JbW9kdWxlL29wX2RuYW1lLmMgXAotCW1vZHVsZS9vcF9pbml0LmMgXAotCW1vZHVsZS9vcHJvZmlsZS5jIFwKLQltb2R1bGUvb3BfdXRpbC5jIFwKLQltb2R1bGUvY29tcGF0MjIuaCBcCi0JbW9kdWxlL2NvbXBhdDI0LmggXAotCW1vZHVsZS9jb21wYXQuaCBcCi0JbW9kdWxlL29wX2NhY2hlLmggXAotCW1vZHVsZS9vcF9kY2FjaGUuaCBcCi0JbW9kdWxlL29wcm9maWxlLmggXAotCW1vZHVsZS9vcF91dGlsLmggXAotCW1vZHVsZS9pYTY0L01ha2VmaWxlLmluIFwKLQltb2R1bGUvaWE2NC9vcHJvZmlsZV9zdHVicy5TIFwKLQltb2R1bGUvaWE2NC9jcHVfdHlwZS5jIFwKLQltb2R1bGUvaWE2NC9vcF9wbXUuYyBcCi0JbW9kdWxlL2lhNjQvb3Bfc3lzY2FsbHMuYyBcCi0JbW9kdWxlL2lhNjQvSUE2NGVudHJ5LmggXAotCW1vZHVsZS9pYTY0L0lBNjRtaW5zdGF0ZS5oIFwKLQltb2R1bGUvaWE2NC9JQTY0c3lzY2FsbHN0dWIuaCBcCi0JbW9kdWxlL2lhNjQvb3BfaWE2NF9tb2RlbC5oIFwKLQltb2R1bGUveDg2L01ha2VmaWxlLmluIFwKLQltb2R1bGUveDg2L29wcm9maWxlX25taS5TIFwKLQltb2R1bGUveDg2L2FwaWNfY29tcGF0LmggXAotCW1vZHVsZS94ODYvb3BfYXBpYy5oIFwKLQltb2R1bGUveDg2L29wX2FyY2guaCBcCi0JbW9kdWxlL3g4Ni9vcF94ODZfbW9kZWwuaCBcCi0JbW9kdWxlL3g4Ni9vcF9tc3IuaCBcCi0JbW9kdWxlL3g4Ni9jcHVfdHlwZS5jIFwKLQltb2R1bGUveDg2L29wX2FwaWMuYyBcCi0JbW9kdWxlL3g4Ni9vcF9maXhtYXAuYyBcCi0JbW9kdWxlL3g4Ni9vcF9tb2RlbF9hdGhsb24uYyBcCi0JbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jIFwKLQltb2R1bGUveDg2L29wX21vZGVsX3Bwcm8uYyBcCi0JbW9kdWxlL3g4Ni9vcF9ubWkuYyBcCi0JbW9kdWxlL3g4Ni9vcF9ydGMuYyBcCi0JbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDgyM2E0Li4wMDAwMDAwCi0tLSBhL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNzM5ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS41IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotc3ViZGlyID0gLgotRElTVF9DT01NT04gPSBSRUFETUUgJChhbV9fY29uZmlndXJlX2RlcHMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCi0JJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9jb25maWcuaC5pbiBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJCh0b3Bfc3JjZGlyKS9kb2Mvc3JjZG9jL0RveHlmaWxlLmluIFwKLQkkKHRvcF9zcmNkaXIpL2RvYy94c2wvY2F0YWxvZy0xLnhtbC5pbiBcCi0JJCh0b3Bfc3JjZGlyKS9tb2R1bGUvTWFrZWZpbGUuaW4gXAotCSQodG9wX3NyY2RpcikvbW9kdWxlL2lhNjQvTWFrZWZpbGUuaW4gXAotCSQodG9wX3NyY2RpcikvbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbiBDT1BZSU5HIENoYW5nZUxvZyBUT0RPIFwKLQlkZXBjb21wIGluc3RhbGwtc2ggbWlzc2luZwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1hbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAotIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlndXJlLnN0YXR1cy5saW5lbm8KLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9IGRvYy94c2wvY2F0YWxvZy0xLnhtbCBkb2Mvc3JjZG9jL0RveHlmaWxlIFwKLQltb2R1bGUvTWFrZWZpbGUgbW9kdWxlL3g4Ni9NYWtlZmlsZSBtb2R1bGUvaWE2NC9NYWtlZmlsZQotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKLQlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKLQlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCXVuaW5zdGFsbC1yZWN1cnNpdmUKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1kaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCi10b3BfZGlzdGRpciA9ICQoZGlzdGRpcikKLWFtX19yZW1vdmVfZGlzdGRpciA9IFwKLSAgeyB0ZXN0ICEgLWQgJChkaXN0ZGlyKSBcCi0gICAgfHwgeyBmaW5kICQoZGlzdGRpcikgLXR5cGUgZCAhIC1wZXJtIC0yMDAgLWV4ZWMgY2htb2QgdSt3IHt9ICc7JyBcCi0gICAgICAgICAmJiBybSAtZnIgJChkaXN0ZGlyKTsgfTsgfQotRElTVF9BUkNISVZFUyA9ICQoZGlzdGRpcikudGFyLmd6Ci1HWklQX0VOViA9IC0tYmVzdAotZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAotZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50Ci1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKLUFNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKLUFNVEFSID0gQEFNVEFSQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CRkRfTElCUyA9IEBCRkRfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRFID0gQERBVEVACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVhFRVhUID0gQEVYRUVYVEAKLUVYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotS0lOQyA9IEBLSU5DQAotS1NSQyA9IEBLU1JDQAotS1ZFUlMgPSBAS1ZFUlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NT0MgPSBATU9DQAotTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAotT0JKRVhUID0gQE9CSkVYVEAKLU9QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACi1PUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKLU9QX0NGTEFHUyA9IEBPUF9DRkxBR1NACi1PUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLU9QX0RPQ0RJUiA9IEBPUF9ET0NESVJACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAotUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACi1RVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKLVFUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKLVFUX0xJQiA9IEBRVF9MSUJACi1RVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAotU1RSSVAgPSBAU1RSSVBACi1VSUMgPSBAVUlDQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAotWF9MSUJTID0gQFhfTElCU0AKLVhfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACi1hY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJUEAKLWFtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACi1hbV9fZmFzdGRlcENYWF9GQUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKLWFtX19mYXN0ZGVwQ1hYX1RSVUUgPSBAYW1fX2Zhc3RkZXBDWFhfVFJVRUAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZW5hYmxlX2FiaV9GQUxTRSA9IEBlbmFibGVfYWJpX0ZBTFNFQAotZW5hYmxlX2FiaV9UUlVFID0gQGVuYWJsZV9hYmlfVFJVRUAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaGF2ZV9xdF9GQUxTRSA9IEBoYXZlX3F0X0ZBTFNFQAotaGF2ZV9xdF9UUlVFID0gQGhhdmVfcXRfVFJVRUAKLWhhdmVfeHNsdHByb2NfRkFMU0UgPSBAaGF2ZV94c2x0cHJvY19GQUxTRUAKLWhhdmVfeHNsdHByb2NfVFJVRSA9IEBoYXZlX3hzbHRwcm9jX1RSVUVACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1rZXJuZWxfc3VwcG9ydF9GQUxTRSA9IEBrZXJuZWxfc3VwcG9ydF9GQUxTRUAKLWtlcm5lbF9zdXBwb3J0X1RSVUUgPSBAa2VybmVsX3N1cHBvcnRfVFJVRUAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRvcGRpciA9IEB0b3BkaXJACi1TVUJESVJTID0gXAotCS4gXAotCW00IFwKLQlsaWJ1dGlsIFwKLQlsaWJvcCBcCi0JbGliZGIgXAotCWxpYnV0aWwrKyBcCi0JbGlib3B0KysgXAotCWxpYmFiaSBcCi0JZGFlbW9uIFwKLQl1dGlscyBcCi0JbGlicmVnZXggXAotCWxpYnBwIFwKLQlwcCBcCi0JZXZlbnRzIFwKLQlkb2MgXAotCWd1aQotCi1BQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAotCi0jIFRoZSBtb2R1bGUgd2lsbCBub3QgYnVpbGQgdW5kZXIgZGlzdGNoZWNrCi1ESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTID0gLS13aXRoLWtlcm5lbC1zdXBwb3J0Ci1FWFRSQV9ESVNUID0gXAotCUNoYW5nZUxvZy0yMDAxIFwKLQlDaGFuZ2VMb2ctMjAwMiBcCi0JQ2hhbmdlTG9nLTIwMDMgXAotCWF1dG9nZW4uc2ggXAotCWluY2x1ZGUvc3N0cmVhbSBcCi0JbW9kdWxlL01ha2VmaWxlLmluIFwKLQltb2R1bGUvY29tcGF0LmMgXAotCW1vZHVsZS9vcF9kbmFtZS5jIFwKLQltb2R1bGUvb3BfaW5pdC5jIFwKLQltb2R1bGUvb3Byb2ZpbGUuYyBcCi0JbW9kdWxlL29wX3V0aWwuYyBcCi0JbW9kdWxlL2NvbXBhdDIyLmggXAotCW1vZHVsZS9jb21wYXQyNC5oIFwKLQltb2R1bGUvY29tcGF0LmggXAotCW1vZHVsZS9vcF9jYWNoZS5oIFwKLQltb2R1bGUvb3BfZGNhY2hlLmggXAotCW1vZHVsZS9vcHJvZmlsZS5oIFwKLQltb2R1bGUvb3BfdXRpbC5oIFwKLQltb2R1bGUvaWE2NC9NYWtlZmlsZS5pbiBcCi0JbW9kdWxlL2lhNjQvb3Byb2ZpbGVfc3R1YnMuUyBcCi0JbW9kdWxlL2lhNjQvY3B1X3R5cGUuYyBcCi0JbW9kdWxlL2lhNjQvb3BfcG11LmMgXAotCW1vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmMgXAotCW1vZHVsZS9pYTY0L0lBNjRlbnRyeS5oIFwKLQltb2R1bGUvaWE2NC9JQTY0bWluc3RhdGUuaCBcCi0JbW9kdWxlL2lhNjQvSUE2NHN5c2NhbGxzdHViLmggXAotCW1vZHVsZS9pYTY0L29wX2lhNjRfbW9kZWwuaCBcCi0JbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbiBcCi0JbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUyBcCi0JbW9kdWxlL3g4Ni9hcGljX2NvbXBhdC5oIFwKLQltb2R1bGUveDg2L29wX2FwaWMuaCBcCi0JbW9kdWxlL3g4Ni9vcF9hcmNoLmggXAotCW1vZHVsZS94ODYvb3BfeDg2X21vZGVsLmggXAotCW1vZHVsZS94ODYvb3BfbXNyLmggXAotCW1vZHVsZS94ODYvY3B1X3R5cGUuYyBcCi0JbW9kdWxlL3g4Ni9vcF9hcGljLmMgXAotCW1vZHVsZS94ODYvb3BfZml4bWFwLmMgXAotCW1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmMgXAotCW1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYyBcCi0JbW9kdWxlL3g4Ni9vcF9tb2RlbF9wcHJvLmMgXAotCW1vZHVsZS94ODYvb3Bfbm1pLmMgXAotCW1vZHVsZS94ODYvb3BfcnRjLmMgXAotCW1vZHVsZS94ODYvb3Bfc3lzY2FsbHMuYwotCi1hbGw6IGNvbmZpZy5oCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci1hbS0tcmVmcmVzaDoKLQlAOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAnOyBcCi0JICAgICAgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIE1ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgZWNobyAnICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyc7IFwKLQkgICAgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCSQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKLSQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCi0KLWNvbmZpZy5oOiBzdGFtcC1oMQotCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gXAotCSAgcm0gLWYgc3RhbXAtaDE7IFwKLQkgICQoTUFLRSkgc3RhbXAtaDE7IFwKLQllbHNlIDo7IGZpCi0KLXN0YW1wLWgxOiAkKHNyY2RpcikvY29uZmlnLmguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAcm0gLWYgc3RhbXAtaDEKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCi0kKHNyY2RpcikvY29uZmlnLmguaW46ICAkKGFtX19jb25maWd1cmVfZGVwcykgCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9IRUFERVIpCi0Jcm0gLWYgc3RhbXAtaDEKLQl0b3VjaCAkQAotCi1kaXN0Y2xlYW4taGRyOgotCS1ybSAtZiBjb25maWcuaCBzdGFtcC1oMQotZG9jL3hzbC9jYXRhbG9nLTEueG1sOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHRvcF9zcmNkaXIpL2RvYy94c2wvY2F0YWxvZy0xLnhtbC5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKLWRvYy9zcmNkb2MvRG94eWZpbGU6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQodG9wX3NyY2RpcikvZG9jL3NyY2RvYy9Eb3h5ZmlsZS5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKLW1vZHVsZS9NYWtlZmlsZTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJCh0b3Bfc3JjZGlyKS9tb2R1bGUvTWFrZWZpbGUuaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACi1tb2R1bGUveDg2L01ha2VmaWxlOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHRvcF9zcmNkaXIpL21vZHVsZS94ODYvTWFrZWZpbGUuaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACi1tb2R1bGUvaWE2NC9NYWtlZmlsZTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJCh0b3Bfc3JjZGlyKS9tb2R1bGUvaWE2NC9NYWtlZmlsZS5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKLXVuaW5zdGFsbC1pbmZvLWFtOgotCi0jIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAotIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCi0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCi0jICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKLSMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7Ci0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgotJChSRUNVUlNJVkVfVEFSR0VUUyk6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBkb3Rfc2Vlbj15ZXM7IFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKLW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgotCUBmYWlsY29tPSdleGl0IDEnOyBcCi0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAotCSAgY2FzZSAkJGYgaW4gXAotCSAgICAqPSogfCAtLVsha10qKTs7IFwKLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAotCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JcmV2PSIkJHJldiAuIjsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgotdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAotCWRvbmUKLWN0YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAotCWRvbmUKLQotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUwotCi1UQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgY29uZmlnLmguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAotCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKLQlta2RpciAkKGRpc3RkaXIpCi0JJChta2Rpcl9wKSAkKGRpc3RkaXIpL2RvYyAkKGRpc3RkaXIpL2RvYy9zcmNkb2MgJChkaXN0ZGlyKS9kb2MveHNsICQoZGlzdGRpcikvaW5jbHVkZSAkKGRpc3RkaXIpL2xpYnJlZ2V4ICQoZGlzdGRpcikvbGlicmVnZXgvdGVzdHMgJChkaXN0ZGlyKS9tNCAkKGRpc3RkaXIpL21vZHVsZSAkKGRpc3RkaXIpL21vZHVsZS9pYTY0ICQoZGlzdGRpcikvbW9kdWxlL3g4NgotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICB8fCAkKG1rZGlyX3ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICAoY2QgJCRzdWJkaXIgJiYgXAotCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCS1maW5kICQoZGlzdGRpcikgLXR5cGUgZCAhIC1wZXJtIC03NzcgLWV4ZWMgY2htb2QgYStyd3gge30gXDsgLW8gXAotCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtbGlua3MgMSAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAotCSAgISAtdHlwZSBkICEgLXBlcm0gLTQwMCAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAotCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtZXhlYyAkKFNIRUxMKSAkKGluc3RhbGxfc2gpIC1jIC1tIGErciB7fSB7fSBcOyBcCi0JfHwgY2htb2QgLVIgYStyICQoZGlzdGRpcikKLWRpc3QtZ3ppcDogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6Ci0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3QtYnppcDI6IGRpc3RkaXIKLQl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgYnppcDIgLTkgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgotCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQotCi1kaXN0LXRhclo6IGRpc3RkaXIKLQl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgY29tcHJlc3MgLWMgPiQoZGlzdGRpcikudGFyLloKLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKLQotZGlzdC1zaGFyOiBkaXN0ZGlyCi0Jc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKLQotZGlzdC16aXA6IGRpc3RkaXIKLQktcm0gLWYgJChkaXN0ZGlyKS56aXAKLQl6aXAgLXJxICQoZGlzdGRpcikuemlwICQoZGlzdGRpcikKLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKLQotZGlzdCBkaXN0LWFsbDogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6Ci0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0KLSMgVGhpcyB0YXJnZXQgdW50YXJzIHRoZSBkaXN0IGZpbGUgYW5kIHRyaWVzIGEgVlBBVEggY29uZmlndXJhdGlvbi4gIFRoZW4KLSMgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgc2VsZi1jb250YWluZWQgYnkgbWFraW5nIGFub3RoZXIKLSMgdGFyZmlsZS4KLWRpc3RjaGVjazogZGlzdAotCWNhc2UgJyQoRElTVF9BUkNISVZFUyknIGluIFwKLQkqLnRhci5neiopIFwKLQkgIEdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAotCSoudGFyLmJ6MiopIFwKLQkgIGJ1bnppcDIgLWMgJChkaXN0ZGlyKS50YXIuYnoyIHwgJChhbV9fdW50YXIpIDs7XAotCSoudGFyLloqKSBcCi0JICB1bmNvbXByZXNzIC1jICQoZGlzdGRpcikudGFyLlogfCAkKGFtX191bnRhcikgOztcCi0JKi5zaGFyLmd6KikgXAotCSAgR1pJUD0kKEdaSVBfRU5WKSBndW56aXAgLWMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAotCSouemlwKikgXAotCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCi0JZXNhYwotCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpOyBjaG1vZCBhK3cgJChkaXN0ZGlyKQotCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCi0JbWtkaXIgJChkaXN0ZGlyKS9faW5zdAotCWNobW9kIGEtdyAkKGRpc3RkaXIpCi0JZGNfaW5zdGFsbF9iYXNlPWAkKGFtX19jZCkgJChkaXN0ZGlyKS9faW5zdCAmJiBwd2QgfCBzZWQgLWUgJ3MsXlteOlxcL106W1xcL10sLywnYCBcCi0JICAmJiBkY19kZXN0ZGlyPSIkJHtUTVBESVItL3RtcH0vYW0tZGMtJCQkJC8iIFwKLQkgICYmIGNkICQoZGlzdGRpcikvX2J1aWxkIFwKLQkgICYmIC4uL2NvbmZpZ3VyZSAtLXNyY2Rpcj0uLiAtLXByZWZpeD0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKLQkgICAgJChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKSBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2sgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCi0JICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2sgXAotCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAotCSAgJiYgKHsgXAotCSAgICAgICAoY2QgLi4vLi4gJiYgdW1hc2sgMDc3ICYmIG1rZGlyICIkJGRjX2Rlc3RkaXIiKSBcCi0JICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgaW5zdGFsbCBcCi0JICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgdW5pbnN0YWxsIFwKLQkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBcCi0JICAgICAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19kZXN0ZGlyIiBkaXN0dW5pbnN0YWxsY2hlY2s7IFwKLQkgICAgICB9IHx8IHsgcm0gLXJmICIkJGRjX2Rlc3RkaXIiOyBleGl0IDE7IH0pIFwKLQkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKLQkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrCi0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0JQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKLQkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKLQkgIHNlZCAtZSAnMXtoO3MvLi89L2c7cDt4O30nIC1lICckJHtwO3g7fScKLWRpc3R1bmluc3RhbGxjaGVjazoKLQlAY2QgJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKSBcCi0JJiYgdGVzdCBgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtbGUgMSBcCi0JICAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBhZnRlciB1bmluc3RhbGw6IiA7IFwKLQkgICAgICAgIGlmIHRlc3QgLW4gIiQoREVTVERJUikiOyB0aGVuIFwKLQkgICAgICAgICAgZWNobyAiICAoY2hlY2sgREVTVERJUiBzdXBwb3J0KSI7IFwKLQkgICAgICAgIGZpIDsgXAotCSAgICAgICAgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSA7IFwKLQkgICAgICAgIGV4aXQgMTsgfSA+JjIKLWRpc3RjbGVhbmNoZWNrOiBkaXN0Y2xlYW4KLQlAaWYgdGVzdCAnJChzcmNkaXIpJyA9IC4gOyB0aGVuIFwKLQkgIGVjaG8gIkVSUk9SOiBkaXN0Y2xlYW5jaGVjayBjYW4gb25seSBydW4gZnJvbSBhIFZQQVRIIGJ1aWxkIiA7IFwKLQkgIGV4aXQgMSA7IFwKLQlmaQotCUB0ZXN0IGAkKGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWVxIDAgXAotCSAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBpbiBidWlsZCBkaXJlY3RvcnkgYWZ0ZXIgZGlzdGNsZWFuOiIgOyBcCi0JICAgICAgICQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSA7IFwKLQkgICAgICAgZXhpdCAxOyB9ID4mMgotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotQGtlcm5lbF9zdXBwb3J0X1RSVUVAYWxsLWxvY2FsOgotYWxsLWFtOiBNYWtlZmlsZSBjb25maWcuaCBhbGwtbG9jYWwKLWluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKLWluc3RhbGxkaXJzLWFtOgotaW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCi11bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCi1pbnN0YWxsLXN0cmlwOgotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAotCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotQGtlcm5lbF9zdXBwb3J0X1RSVUVAaW5zdGFsbC1leGVjLWxvY2FsOgotQGtlcm5lbF9zdXBwb3J0X1RSVUVAY2xlYW4tbG9jYWw6Ci1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWV4ZWMtbG9jYWwKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCi0JLXJtIC1yZiAkKHRvcF9zcmNkaXIpL2F1dG9tNHRlLmNhY2hlCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQotCi11bmluc3RhbGwtaW5mbzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLS5QSE9OWTogJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBhbGwtbG9jYWwgXAotCWFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbG9jYWwgXAotCWNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdCBkaXN0LWFsbCBkaXN0LWJ6aXAyIFwKLQlkaXN0LWd6aXAgZGlzdC1zaGFyIGRpc3QtdGFyWiBkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBcCi0JZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtZXhlYy1sb2NhbCBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCWluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1yZWN1cnNpdmUgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKLQl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCi0KLQotQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQC5QSE9OWTogbW9kdWxlCi0KLUBrZXJuZWxfc3VwcG9ydF9GQUxTRUBhbGwtbG9jYWw6IG1vZHVsZQotCi0jIFRoaXMgbXVzdCB1c2UgYSBmdWxseS1xdWFsaWZpZWQgU1VCRElSUyBwYXRoLCBzbyB3ZSBjYW4ndCB1c2UgJHt0b3Bfc3JjZGlyfQotQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQG1vZHVsZToKLUBrZXJuZWxfc3VwcG9ydF9GQUxTRUAJbWFrZSAtQyBsaWJ1dGlsCi1Aa2VybmVsX3N1cHBvcnRfRkFMU0VACW1ha2UgLUMgbGlib3AKLUBrZXJuZWxfc3VwcG9ydF9GQUxTRUAJKGNkICQoS1NSQykgJiYgJChNQUtFKSBTVUJESVJTPSQoT1BST0ZJTEVfRElSKS9tb2R1bGUvQE9QUk9GSUxFX01PRFVMRV9BUkNIQCBtb2R1bGVzKSB8fCBleGl0IDEgOwotQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAkoY2QgJChLU1JDKSAmJiAkKE1BS0UpIFNVQkRJUlM9JChPUFJPRklMRV9ESVIpL21vZHVsZSBtb2R1bGVzKSB8fCBleGl0IDEgOwotCi1Aa2VybmVsX3N1cHBvcnRfRkFMU0VAaW5zdGFsbC1leGVjLWxvY2FsOgotQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAktbWtkaXIgLXAgJChNT0RJTlNUQUxMRElSKS9vcHJvZmlsZQotQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAljcCBtb2R1bGUvb3Byb2ZpbGUtbW9kdWxlLm8gJChNT0RJTlNUQUxMRElSKS9vcHJvZmlsZS9vcHJvZmlsZS5vCi1Aa2VybmVsX3N1cHBvcnRfRkFMU0VACWlmIHRlc3QgJChLVkVSUykgPSAiYHVuYW1lIC1yYCI7IHRoZW4gZGVwbW9kIC1hIDsgZmkKLQotQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQGNsZWFuLWxvY2FsOgotQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAlybSAtZiBtb2R1bGUvKi5vIG1vZHVsZS9AT1BST0ZJTEVfTU9EVUxFX0FSQ0hALyoubyBcCi1Aa2VybmVsX3N1cHBvcnRfRkFMU0VACW1vZHVsZS8uKi5vLmNtZCBtb2R1bGUvLiouby5mbGFncyBcCi1Aa2VybmVsX3N1cHBvcnRfRkFMU0VACW1vZHVsZS9AT1BST0ZJTEVfTU9EVUxFX0FSQ0hALy4qLm8uY21kIG1vZHVsZS9AT1BST0ZJTEVfTU9EVUxFX0FSQ0hALy4qLm8uZmxhZ3MKLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9OT1RJQ0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIENPUFlJTkcKcmVuYW1lIHRvIE5PVElDRQpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDQ3MjViLi4wMDAwMDAwCi0tLSBhL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLVRoaXMgaXMgYW4gYWxwaGEgcmVsZWFzZSB2ZXJzaW9uIG9mIG9wcm9maWxlLCBhIHRyYW5zcGFyZW50Ci1sb3ctb3ZlcmhlYWQgc3lzdGVtLXdpZGUgcHJvZmlsZXIuCi0KLVlvdSBjYW4gZmluZCBzb21lIGRvY3VtZW50YXRpb24gaW4gdGhlIGRvYy8gZGlyZWN0b3J5LgotCi1QbGVhc2UgdmlzaXQgdGhlIG9wcm9maWxlIHdlYnNpdGUgYXQgOiBodHRwOi8vb3Byb2ZpbGUuc2YubmV0LwotCi1vcHJvZmlsZSB3YXMgd3JpdHRlbiBieSBKb2huIExldm9uIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KLWFuZCBQaGlsaXBwZSBFbGllIDxwaGlsLmVsQHdhbmFkb28uZnI+LgotCi1EYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPiBwcm92aWRlZCBidWcgZml4ZXMgYW5kIHN1cHBvcnQgZm9yCi10aGUgQU1EIEF0aGxvbiwgYW5kIEFNRCBIYW1tZXIgZmFtaWxpZXMgb2YgQ1BVcy4KLQotQm9iIE1vbnRnb21lcnkgPGJvYm1AZmMuaHAuY29tPiBwcm92aWRlZCBidWcgZml4ZXMsIHRoZSBpbml0aWFsIFJUQwotZHJpdmVyIGFuZCB0aGUgaW5pdGlhbCBpYTY0IGRyaXZlci4KLQotV2lsbCBDb2hlbiA8d2NvaGVuQHJlZGhhdC5jb20+IGludGVncmF0ZWQgdGhlIGlhNjQgZHJpdmVyIGludG8gdGhlCi1vcHJvZmlsZSByZWxlYXNlLCBhbmQgY29udHJpYnV0ZWQgYnVnIGZpeGVzIGFuZCBzZXZlcmFsIGNsZWFudXBzLgotCi1HcmF5ZG9uIEhvYXJlIDxncmF5ZG9uQHJlZGhhdC5jb20+IHByb3ZpZGVkIFA0IHBvcnQsIGJ1ZyBmaXhlcyBhbmQgY2xlYW51cHMuCi0KLVJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4gcHJvdmlkZWQgdGhlIE1JUFMgcG9ydC4KLQotT3RoZXIgY29udHJpYnV0b3JzIGFyZSBsaXN0ZWQgaW4gdGhlIENoYW5nZUxvZy4KLQotQnVpbGRpbmcKLS0tLS0tLS0tCi0KLVBsZWFzZSByZWFkIHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGluIGRvYy9vcHJvZmlsZS5odG1sIG9yCi1odHRwOi8vb3Byb2ZpbGUuc291cmNlZm9yZ2UubmV0L2RvYy9pbnN0YWxsLmh0bWwuCi0KLVF1aWNrIHN0YXJ0IDoKLQotKElmIHVzaW5nIENWUzogLi9hdXRvZ2VuLnNoIGZpcnN0LiBZb3UgbmVlZCBhdXRvbWFrZSAxLjUgb3IgaGlnaGVyLiBZb3UKLWNhbiBzcGVjaWZ5IGEgZGlmZmVyZW50IHZlcnNpb24sIGUuZy4KLUFDTE9DQUw9YWNsb2NhbC0xLjUgQVVUT01BS0U9YXV0b21ha2UtMS41IEFVVE9DT05GPWF1dG9jb25mLTIuMTMgQVVUT0hFQURFUj1hdXRvaGVhZGVyLTIuMTMgLi9hdXRvZ2VuLnNoKQotCi0yLjQga2VybmVscwotCi0JLi9jb25maWd1cmUgLS13aXRoLWxpbnV4PS9wYXRoL3RvL2tlcm5lbC9zb3VyY2UKLQotMi42IGtlcm5lbHMKLQotCS4vY29uZmlndXJlIC0td2l0aC1rZXJuZWwtc3VwcG9ydApkaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5Y2MzYWMuLjAwMDAwMDAKLS0tIGEvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi1UaGlzIGlzIGFuIChpbmNvbXBsZXRlKSBsaXN0IG9mIHNvbWUgb2YgdGhlIHN0dWZmIHdlIHdhbnQgdG8gbG9vayBhdCBkb2luZy4KLQotSWYgeW91J3JlIGludGVyZXN0ZWQgaW4gaGFja2luZyBvbiBhbnkgb2YgdGhlc2UsIHBsZWFzZSBjb250YWN0IHRoZSBsaXN0IGZpcnN0Ci1mb3Igc29tZSBwb2ludGVycyBhbmQvb3IgcmVhZCBIQUNLSU5HIGFuZCBkb2MvQ29kaW5nU3R5bGUuCi0KLTAuOSByZWxlYXNlCi0tLS0tLS0tLS0tLQotCi1maW5pc2ggdGVzdGluZyBlc3BlY2lhbGx5IG9mIGFub24gcmVnaW9uIHN0dWZmCi0KLTEuMCByZWxlYXNlCi0tLS0tLS0tLS0tLQotCi0odGhpcyBpcyBhIG1pbmltYWwgc2VsZWN0aW9uIG9mIHN0dWZmIEkgdGhpbmsgd2UgbmVlZCkKLQotIG8gYW1kNjQgMzIgYml0IGJ1aWxkIG5lZWRzIGEgc3lzMzJfbG9va3VwX2Rjb29raWUoKSB0cmFuc2xhdG9yIGluIHRoZQotICAga2VybmVsCi0gbyBvcF9iZmQuY3BwOmdldF9saW5lbnIoKSBzZWUgRklYTUUgYWJvdXQgdGhlIHVzZSBvZiBpYmZkL2RiZmQsIG5lZWRzIHRlc3QuCi0gbyBkZWNpZGUgb24gLW0gdGdpZCBzZW1hbnRpY3MgZm9yIGFub24gcmVnaW9ucwotIG8gaWYgZXY2NyBpcyBub3QgZml4ZWQsIGJhY2sgaXQgb3V0Ci0gbyBvcGltcG9ydCBuZWVkcyBhIG1hbiBwYWdlCi0gbyBhZGQgY2FsbCBncmFwaCBvcHRpb24gdG8gb3Byb2Zfc3RhcnQKLQotTGF0ZXIKLS0tLS0tCi0KLSBvIHJlbW92ZSAyLjk1LzIuMiBzdXBwb3J0IHNvIHdlIGNhbiB1c2UgYm9vc3QgbXVsdGkgaW5kZXggY29udGFpbmVyIGluCi0gICBzeW1ib2wvc2FtcGxlIGNvbnRhaW5lcgotIG8gY29uc2lkZXIgaWYgd2UgY2FuIGltcHJvdmUgYW5vbiBtYXBwaW5nIGdyb3dpbmcgc3VwcG9ydAotCi08bW92ZW1lbnQ+IFttb3pAbGFtYmVudCBwcF0kIC4vb3ByZXBvcnQgLWxmIGxpYi1pbWFnZTovbGliL3Rscy9saWJjLTIuMy4yLnNvIC9iaW4vYmFzaCB8IGdyZXAgdmZwcmludGYKLTxtb3ZlbWVudD4gMTQgICAgICAgIDAuMTMwMSAgNiAgICAgICAgIDAuMDEwMiAgL2xpYi90bHMvbGliYy0yLjMuMi5zbyAgIHZmcHJpbnRmCi08bW92ZW1lbnQ+IFttb3pAbGFtYmVudCBwcF0kIC4vb3ByZXBvcnQgLWxmIGxpYi1pbWFnZTovbGliL3Rscy9saWJjLTIuMy4yLnNvIC91c3IvYmluL3ZpbSB8IGdyZXAgdmZwcmludGYKLTxtb3ZlbWVudD4gMTc2ICAgICAgIDIuMDkyNyAgMzQ5ICAgICAgIDEuMjU1MiAgL2xpYi90bHMvbGliYy0yLjMuMi5zbyAgIHZmcHJpbnRmCi08bW92ZW1lbnQ+IFttb3pAbGFtYmVudCBwcF0kIC4vb3ByZXBvcnQgLWxmIGxpYi1pbWFnZTovbGliL3Rscy9saWJjLTIuMy4yLnNvIHsgaW1hZ2U6L2Jpbi9iYXNoIH0geyBpbWFnZTovdXNyL2Jpbi92aW0gfSB8IGdyZXAgdmZwcmludGYKLTxtb3ZlbWVudD4gMTc2ICAgICAgMTAuOTY1NyAgKysrICAgICAgIDM0OSAgICAgICA3Ljg4ODggICsrKyAgICAgICB2ZnByaW50ZgotPG1vdmVtZW50PiAxNCAgICAgICAtLS0gICAgICAtLS0gICAgICAgNiAgICAgICAgLS0tICAgICAgLS0tICAgICAgIHZmcHJpbnRmCi08bW92ZW1lbnQ+IGl0IHNlZW1zIHRoZW0gYXMgdHdvIHNlcGFyYXRlIHN5bWJvbHMKLTxtb3ZlbWVudD4gYnV0IGNhbiB3ZSByZW1vdmUgdGhlIGFwcF9uYW1lIGZyb20gcm91Z2hfbGVzcyBhbmQgc3RpbGwgYmUgYWJsZSB0byB3YWxrIHRoZSB0d28gbGlzdHM/Ci08bW92ZW1lbnQ+IGV2ZW4gaWYgd2UgY291bGQsIGl0IHdvdWxkIHN0aWxsIGdvIHdyb25nIHdoZW4gd2UncmUgcHJvZmlsaW5nIG11bHRpcGxlIGFwcHMKLQotIG8gSmF2YSBzdHVmZj8/Ci0gbyB3aXRoIG9wcmVwb3J0IC1jIEkgY2FuIGdldCAid2FybmluZzogL25vLXZtbGludXggY291bGQgbm90IGJlIGZvdW5kLiIuCi0gICBTaG91bGQgYmUgc21hcnRlciA/Ci0gbyBvcHJlcG9ydCAtYyBnaXZlcyB3ZWlyZCBvdXRwdXQgZm9yIGFuIGltYWdlIHdpdGggbm8gc3ltYm9sczoKLQotICAgIHNhbXBsZXMgICUgICAgICAgIHN5bWJvbCBuYW1lCi0gIDE1OTY1ICAgIDEwMC4wMDAgIChubyBzeW1ib2xzKQotMjUzICAgICAgMTAwLjAwMCAgKG5vIHN5bWJvbHMpCi0gIDE1OTY1ICAgIDk4LjQ0MDAgIChubyBzeW1ib2xzKQotICAyNTMgICAgICAgMS41NjAwICAobm8gc3ltYm9scykgW3NlbGZdCi0KLSBvIGNvbnNpZGVyIHRhZ2dpbmcgb3ByZXBvcnQgLWMgZW50cmllcyB3aXRoIGEgbnVtYmVyIGxpa2UgZ3Byb2YKLSBvIC0tZGV0YWlscyBmb3Igb3ByZXBvcnQgLWMsIG9yIGRpZmY/PwotIG8gc2hvdWxkIFtzZWxmXSBlbnRyaWVzIGJlIG9tbWl0dGVkIGlmIDAgPz8KLSBvIHN0cmVzcyB0ZXN0IG9wcmVwb3J0IC1jOiBjb21waWxlIGEgQmlnIEFwcGxpY2F0aW9uIHcvbyBmcmFtZSBwb2ludGVyIGFuZCBsb29rCi0gICBob3cgZHJpdmVyIGFuZCBvcHJlcG9ydCAtYyByZWFjdC4KLSBvIG9wYXJjaGl2ZSBjb3VsZCBmaXggdXAge2tlcm59IHBhdGhzIHdpdGggLXAgKHdoYXQgYWJvdXQgZGlmZiBiZXR3ZWVuCi0gICBhcmNoaXZlIGFuZCBjdXJyZW50IHRob3VnaD8pCi0gbyBjYW4gc2F5IG1vcmUgaW4gb3Bjb250cm9sIC0tc3RhdHVzCi0gbyBjb25zaWRlciBhIHNvcnQgb3B0aW9uIGZvciBkaWZmICUKLSBvIG9wYW5ub3RhdGUgaXMgc2lsZW50IGFib3V0IHN5bWJvbHMgbWlzc2luZyBkZWJ1ZyBpbmZvCi0gbyBvcGNvbnRyb2wgLS1yZXNldCBzaG91bGQgYXZvaWQgdG8gcmVsb2FkIHRoZSBtb2R1bGUgaWYgaXQncyB1bmxvYWRlZAotIG8gb3Byb2ZpbGVkLmxvZyBub3cgY29udGFpbnMgdmFyaW91cyBzdGF0aXN0aWNzIGFib3V0IGxvc3Qgc2FtcGxlIGV0Yy4gZnJvbQotICB0aGUgZHJpdmVyLiBQb3N0IHByb2ZpbGUgdG9vbHMgbXVzdCBwYXJzZSB0aGF0IGFuZCB3YXJuIGV2ZW50dWFsbHksIHdhcm5pbmcKLSAgbXVzdCBpbmNsdWRlIGEgcHJvcG9zZWQgd29yayBhcm91bmQuIFVzZXIgbmVlZCB0aGlzOiBpZiBub3RoaW5nIHNlZW1zIHdyb25nCi0gIHBlb3BsZSBhcmUgdW5saWtlbHkgdG8gZ2V0IGEgbG9vayBpbiBvcHJvZmlsZWQubG9nIChJIHJhbiBvcHJvZmlsZSBvbiAyLjYuMQotICAyIHdlZWtzIGJlZm9yZSBub3RpY2luZyBhdCAzMDAwMCBJIGxvc3QgYSBsb3Qgb2Ygc2FtcGxlcywgdGhlIHByb2ZpbGUgc2VlbWVkCi0gIG9rIGR1IHRvIHRoZSByYW5kb21pemF0aW9uIG9mIGxvc3Qgc2FtcGxlcykuIEFzIGRldmVsb3BwZXIgd2UgbmVlZCB0aGF0IHRvbywKLSAgYWN0dWFsbHkgd2UgaGF2ZSBubyBjbGVhciBpZGVhIG9mIHRoZSBiZWhhdmlvciBvbiBkaWZmZXJlbnQgYXJjaCwgTlVNQSBldGMuCi0gIE5vdCBwZXJmZWN0IGJlY2F1c2UgaWYgdGhlIHByb2ZpbGVyIGlzIHJ1bm5pbmcgdGhlIG9wcm9maWxlZC5sb2cgd2lsbCBzaG93Ci0gIHRob3NlIHdhcm5pbmcgb25seSBhZnRlciB0aGUgZmlyc3QgIGFsYXJtIHNpZ25hbCwgSSB0aGluayB3ZSBtdXN0IGR1bXAgdGhlCi0gIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gYWZ0ZXIgZWFjaCBvcGNvbnRyb2wgLS1kdW1wIHRvIGF2b2lkIHRoYXQuCi0gbyBvZGJfaW5zZXJ0KCkgY2FuIGZhaWwgb24gZnRydW5jYXRlIG9yIG1yZW1hcCgpIGluIGRiX21hbmFnZS5jIGJ1dCB3ZSBkb24ndAotICB0cnkgdG8gcmVjb3ZlciBncmFjZWZ1bGx5LgotIG8gb3V0cHV0IGNvbHVtbiBzaG9ydG5hbWUgaGVhZGVycyBmb3Igb3ByZXBvcnQgLWwKLSBvIGlzIHJlbGF0aXZlX3RvX2Fic29sdXRlX3BhdGggZ3VhcmFudGVlaW5nIGEgdHJhaWxpbmcgJy8nIGRvY3VtZW50ZWQgPwotIG8gbW92ZSBvcHJvZmlsZWQubG9nIHRvIE9QX1NBTVBMRV9ESVIvY3VycmVudCA/Ci0gbyAtLWJ1ZmZlci1zaXplIGlzIHVzZWxlc3Mgb24gMi41IHdpdGhvdXQgdHVuaW5nIG9mIHdhdGVyc2hlZAotIG8gcHAgdG9vbHMgbXVzdCBoYW5kbGUgc2FtcGxlcyBjb3VudCBvdmVyZmxvdyAobWFya2VkIGFzICh1bnNpZ25lZCktMSkKLSBvIHRoZSB3YXkgd2Ugc2hvdyBrZXJuZWwgbW9kdWxlcyBpbiAyLjUgaXMgbm90IHZlcnkgb2J2aW91cyAtICIvb3Byb2ZpbGUiCi0gbyBvcGFyY2hpdmUgd2lsbCBiZSBtb3JlIHVzZWZ1bGwgd2l0aCBhIC0tcm9vdD0gb3B0aW9ucyB0byBhbGxvdyBwcm9maWxpbmcKLSAgb24gYSBzbWFsbCBib3gsIG5mcyBtb3VudCAvIHRvIGFub3RoZXIgYm94IGFuZCB0cmFuc2ZlciBzYW1wbGUgZmlsZSBhbmQKLSAgYmluYXJ5IG9uIGEgYmlnZ2VyIGJveCBmb3IgYW5hbHlzaXMuIFRoZXJlIGlzIGFsc28gYSBwcm9ibGVtIGluIG9wYXJjaGl2ZQotICB5b3UgY2FuIHVzZSBzZXNzaW9uOiB0byBnZXQgdGhlIHJpZ2h0IHBhdGggdG8gc2FtcGxlcyBmaWxlcyBidXQgb3Byb2ZpbGVkLmxvZwotICBhbmQgYWJpIGZpbGVzIHBhdGggYXJlIGhhcmRjb2RlZCB0byAvdmFyL2xpYi9vcHJvZmlsZS4KLSBvIGNhbGxncmFwaCBwYXRjaDogYmV0dGVyIHdheSB0byBza2lwIGlnbm9yZWQgYmFja3RyYWNlID8KLSBvIHp3YW5lIHByb2JsZW0gd2l0aCB3cm9uZyB0ZXh0IG9mZnNldCBzaG93ZWQgYW4gaW50ZXJlc3RpbmcgcHJvYmxlbTogaWYKLSAgb3BfYmZkLmNwcCBnZXQgYW55IHN5bWJvbCBiZWxvdyB0ZXh0IG9mZnNldCBmb3Igdm1saW51eCBvciBhIG1vZHVsZSB0aGVuCi0gIHByb2ZpbGVfdDo6c2FtcGxlX3JhbmdlKCkgcmV0dXJuIGEgcGFpciBvZiBpdGVyYXRvciB3aXRoIGZpcnN0ID4gc2Vjb25kCi0gIGFuZCB3ZSB0aHJvdwotIG8gbGliLWltYWdlOiBhbmQgaW1hZ2U6IGJlaGF2aW9yIGRlcGVuZCBvbiAtLXNlcGFyYXRlPSwgaWYgLS1zZXBhcmF0ZT1saWJyYXJ5Ci0gIG9wcmVwb3J0ICJsaWItaW1hZ2U6KmxpYmMqIiAtLW1lcmdlPWxpYiB3b3JrcyBidXQgbm90Ci0gIG9wcmVwb3J0ICJpbWFnZToqbGliYyoiIC0tbWVyZ2U9bGliIHdoaWxzdCB0aGUgYmVoYXZpb3IgaXMgcmV2ZXJzZWQgaWYKLSAgLS1zZXBhcmF0ZT09bm9uZS4gTXVzdCB3ZSB0YWtlIGNhcmUgPwotIG8gZGVwZW5kZW5jaWVzIGJldHdlZW4gcHJvZmlsZV9jb250YWluZXIuaCBzeW1ib2xfY29udGFpbmVyLmggYW5kCi0gIHNhbXBsZV9jb250YWluZXIuaCBiZWNvbWUgbW9yZSBhbmQgbW9yZSB1Z2x5LCBJIG5lZWRlZCB0byBpbmNsdWRlIHRoZW0KLSAgaW4gYSBzcGVjaWZpYyBvcmRlciBpbiBzb21lIHNvdXJjZSAoc3RpbGwgdHJ1ZT8/KQotIG8gYWRkIGV2ZW50IGFsaWFzZXMgZm9yIGNvbW1vbiB0aGluZ3MgbGlrZSBpY2FjaGUgbWlzc2VzLCB3ZSBtdXN0IHN0YXJ0IHRvIAotICB0aGluayBhYm91dCBtZXRyaWNzIGluY2x1ZGluZyBzaW1wbGUgbGlrZSBldmVudCBhbGlhcyBtYXBwZWQgdG8gdHdvIG9yIG1vcmUKLSAgZXZlbnRzIGFuZCBpbnRlcHJldGVkIHNwZWNpYWxseSBieSB1c2VyIHNwYWNlIHRvb2xzIGxpa2UgdXNpbmcgdGhlIHJhdGlvCi0gIG9mIHNhbXBsZXM7IG1vcmUgdHJpY2t5IHdpbGwgYmUgdG8gc2VsZWN0IGFuIGV2ZW50IHVzZWQgYXMgY2FsbCBjb3VudCAobm8KLSAgY2cgb24gaXQpIGFuZCAgdXNlZCB0byBlbXVsYXRlIHRoZSBjYWxsIGNvdW50IGZpZWxkIGluIGdwcm9mLiBJIHRoaW5rIHRoaXMgaXMKLSAgYSBhZnRlciAxLjAgdGhpbmcgYnV0IGV2ZW50IGFsaWFzZXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4gYSB3YXkgYWxsb3dpbmcgc3VjaAotICBleHRlbnNpb24KLSBvIGRvIHdlIG5lZWQgYW4gb3ByZXBvcnQgbGlrZSBvcHJlcG9ydCAtYyAoc2hvd2luZyBjYWxsZXIvY2FsbGVlIGF0IGJpbmFyeQotICBib3VuZGFyeSBub3Qgc3ltYm9scykgPwotIG8gd2Ugc2hvdWxkIG5vdGljZSBhbiBvcGNvbnRyb2wgY29uZmlnIGNoYW5nZSAoLS1zZXBhcmF0ZSBldGMuKSBhbmQKLSAgIGF1dG8tcmVzdGFydCB0aGUgZGFlbW9uIGlmIG5lY2Vzc2FyeSAoUnVuKQotIG8gd2UgY2FuIGFkZCBsb3RzIG1vcmUgdW5pdCB0ZXN0cyB5ZXQKLSBvIEl0YW5pdW0gZXZlbnQgY29uc3RyYWludHMgYXJlIG5vdCBpbXBsZW1lbnRlZAotIG8gc2lkZS1ieS1zaWRlIG9wcmVwb3J0IG91dHB1dCAoLS1jb21wYXJlIC0gbmVlZHMgVUkgc3BlYykgPz8/Ci0gbyBHVUkgc3RpbGwgaGFzIGEgcGh5c2ljYWwtY291bnRlciBpbnRlcmZhY2UsIHNob3VsZCBoYXZlIGEgZ2VuZXJhbCBvbmUKLSAgIGxpa2Ugb3Bjb250cm9sIC0tZXZlbnQKLSBvIEkgdGhpbmsgd2Ugc2hvdWxkIGhhdmUgdGhlIGFiaWxpdHkgdG8gaGF2ZSAqZml4ZWQqIHdpZHRoIGhlYWRlcnMsIGUuZy4gOgotCi12bWEgICAgICBzYW1wbGVzICBjdW0uIHNhbXBsZXMgICUgICAgICAgICAgIGN1bS4gJSAgICAgc3ltYm9sIG5hbWUgICAgICAgICAgICAgaW1hZ2UgbmFtZSAgICAgICAgICAgICAgYXBwIG5hbWUKLTA4MDRjMzUwIDY0NTgyICAgIDY0NTgyICAgICAgICAgMzUuMDc1NyAgICAgMzUuMDc1NyAgICBvZGJfaW5zZXJ0ICAgICAgICAgICAgICAvdXNyL2xvYy4uLmluL29wcm9maWxlZCAvdXNyL2xvY2FsL29wcm9maWxlLXBwL2Jpbi9vcHJvZmlsZWQKLQotICBOb3RlIHRoZSBlbGxpcHNpcwotIG8gc2hvdWxkIHdlIG1ha2UgdGhlIHNpZ2h1cCBoYW5kbGVyIHJlLXJlYWQgY291bnRlciBjb25maWcgYW5kIHJlLXN0YXJ0IHByb2ZpbGluZyB0b28gPwotIG8gaW1wcm92ZSAtLXNtYXJ0LWRlbWFuZ2xlCi0JbyBhbGxvdyB1c2VyIHRvIGFkZCBpdCdzIG93biBwYXR0ZXJuIGluIHVzZXIucGF0LCBkb2N1bWVudCBpdC4KLQlvIGhhcmQgY29kZSAke3R5cGVuYW1lfSByZWd1bGFyIGRlZmluaXRpb24gdG8gcmVtb3ZlIGFsbCBjdXJyZW50IGxpbWl0YXRpb25zIChkaWZmaWN1bHQsIHBlcmhhcHMgYWZ0ZXIgMS4wID8pLgotIG8gb3Byb2Zfc3RhcnQgZGlhbG9nIHNpemUgaXMgdG9vIHNtYWxsIGluaXRpYWxseQotIG8gb3Byb2Zfc3RhcnQga2V5IG1vdmVtZW50IHRocm91Z2ggZXZlbnRzIGRvZXNuJ3QgY2hhbmdlIGhlbHAgdGV4dAotIG8gaTE4bi4gV2UgbmVlZCBhIGdvb2QgZm9ybWF0dGVyLCBhbmQgYWxzbyByZW1lbWJlciBmb3JtYXRfcGVyY2VudCgpCi0gbyBvcGFubm90YXRlIC0tc291cmNlIC0tb3V0cHV0LWRpcj1+bW96L29wLyAvdXNyL2Jpbi9vcHJvZmlsZWQKLSAgIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSB+IGlzIG5vdCBleHBhbmRlZCAobm8gc3BhY2UgYXJvdW5kIGl0KSAocG9wdCBidWcgSSBzYXkpCi0gbyBjcHUgbmFtZXMgaW5zdGVhZCBvZiBudW1iZXJzIGluIDIuNCBtb2R1bGUvID8KLSBvIHJlbW92ZSAxIGFuZCAyIG1hZ2ljIG51bWJlcnMgZm9yIG9wcm9mX3JlYWR5Ci0gbyBhZGFwdCBBbnRvbidzIHBhdGNoIGZvciBoYW5kbGluZyBub24tc3ltYm9sbGVkIGxpYnJhcmllcyA/IChub3dhZGF5IEMrKwotICBhbm9uIG5hbWVzcGFjZSBzeW1ib2wgYXJlIHN0YXRpYywgMy40IGlpcmMsIHNvIHdpdGggcmVjZW50IGRpc3RybyB3ZSBhcmUKLSAgbW9yZSBsaWtlbHkgdG8gZ2V0IHByb2JsZW1zIHdpdGggYSAiZmFsbGJhY2sgdG8gZHluYW1pYyBzeW1ib2xzIiBhcHByb2NoKQotIG8gdXNlIHN0YW5kYXJkIEMgaW50ZWdlciB0eXBlIDxzdGRpbnQuaD4gaW50MzJfdCBpbnQxNl90IGV0Yy4KLSBvIGV2ZW50IG11bHRpcGxleGluZyBmb3IgcmVhbAotIG8gcmFuZG9taXppbmcgb2YgcmVzZXQgdmFsdWUKLSBvIFhNTCBvdXRwdXQKLSBvIHByb2ZpbGUgdGhlIE5NSSBoYW5kbGVyIGNvZGUKLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0gbyB0aGUgZG9jcyBzaG91bGQgbWVudGlvbiB0aGUgZGVmYXVsdCBldmVudCBmb3IgZWFjaCBhcmNoIHNvbWV3aGVyZQotIG8gbW9yZSBkaXNjdXNzaW9uIG9mIHByb2JsZW1hdGljIGNvZGUgbmVlZHMgdG8gZ28gaW4gdGhlICJpbnRlcnByZXRpbmciIHNlY3Rpb24uIAotIG8gZG9jdW1lbnQgZ2NjIDIuOTUgYW5kIGxpbmVuciBpbmZvIHByb2JsZW1zIGVzcGVjaWFsbHkgZm9yIGlubGluZSBmdW5jdGlvbnMKLSBvIGZpbmlzaCB0aGUgaW50ZXJuYWxzIG1hbnVhbAotCi1HZW5lcmFsIGNoZWNrcyB0byBtYWtlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gCi0gbyByZ3JlcCBGSVhNRQotIG8gdmFsZ3JpbmQgKC0tc2hvdy1yZWFjaGFibGU9eWVzIC0tbGVhay1jaGVjaz15ZXMpCi0gbyBhdWRpdCB0byB0cmFjayB1bm5lY2Vzc2FyeSBpbmNsdWRlIDw+Ci0gbyBnY2MgMy4wLzMueCBjb21waWxlCi0gbyBRdDIvMyBjaGVjaywgbm8gUXQgY2hlY2sKLSBvIHZlcmlmeSBidWlsZHMgKG1vZHZlcnNpb25zLCBrZXJuZWwgdmVyc2lvbnMsIGF0aGxvbiBldGMuKS4gSSBoYXZlIHRoZQotICBuZWNlc3Nhcnkgc3R1ZmYgdG8gY2hlY2sga2VybmVsIHZlcnNpb25zL2NvbmZpZ3VyYXRpb25zIG9uIFBJSUkgY29yZSAoUGhpbCkKLSBvIHVzZSBubSBhbmQgYSBsaXR0bGUgc2NyaXB0IHRvIHRyYWNrIHVudXNlZCBmdW5jdGlvbgotIG8gdGVzdCBpdCB0byBoZWxsIGFuZCBiYWNrCi0gbyBjb21waWxlIGFsbCBDKysgcHJvZ3JhbXMgd2l0aCBTVExfcG9ydCBhbmQgdGVzdCB0aGVtIChnY2MgMy40IGNvbnRhaW4gYQotICAgZGVidWcgbW9kZSB0b28gYnV0IHN0ZDo6c3RyaW5nIGl0ZXJhdG9yIGFyZSBub3QgY2hlY2tlZCkKLSBvIFRoZXJlIGlzIHByb2JhYmx5IHBsYWNlIG9mIHBvc3QgcHJvZmlsZSB0b29scyB3aGVyZSBsb29raW5nIGF0IGVycm5vIHdpbGwgZ2l2ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuCi0KZGlmZiAtLWdpdCBhL2FjbG9jYWwubTQgYi9hY2xvY2FsLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzM3Nzg2Li4wMDAwMDAwCi0tLSBhL2FjbG9jYWwubTQKKysrIC9kZXYvbnVsbApAQCAtMSw4NzkgKzAsMCBAQAotIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuOS41IC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCi0jIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBBTV9BVVRPTUFLRV9WRVJTSU9OKFZFUlNJT04pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQXV0b21ha2UgWC5ZIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGVuc3VyZSBhY2xvY2FsLm00IGhhcyBiZWVuCi0jIGdlbmVyYXRlZCBmcm9tIHRoZSBtNCBmaWxlcyBhY2NvbXBhbnlpbmcgQXV0b21ha2UgWC5ZLgotQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLCBbYW1fX2FwaV92ZXJzaW9uPSIxLjkiXSkKLQotIyBBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2FsbCBBTV9BVVRPTUFLRV9WRVJTSU9OIHNvIGl0IGNhbiBiZSB0cmFjZWQuCi0jIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQUNfSU5JVF9BVVRPTUFLRS4KLUFDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKLQkgW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuOS41XSldKQotCi0jIEFNX0FVWF9ESVJfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKLSMgJGFjX2F1eF9kaXIgdG8gYCRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KLSMgYCRzcmNkaXInLCBgJHNyY2Rpci8uLicsIG9yIGAkc3JjZGlyLy4uLy4uJy4KLSMKLSMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQotIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAotIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKLSMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCi0jIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCi0jIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQotIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgotIwotIyAkYWNfYXV4X2Rpci9taXNzaW5nCi0jICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKLSMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZwotIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKLSMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKLSMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgotIwotIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgotIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQotIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgYC4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKLSMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KLSMKLSMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCi0jIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgotIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAotIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKLSMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKLSMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKLSMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KLSMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgotIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCi0jCi0jIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgotIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCi0jIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KLQotQUNfREVGVU4oW0FNX0FVWF9ESVJfRVhQQU5EXSwKLVtkbmwgUmVseSBvbiBhdXRvY29uZiB0byBzZXQgdXAgQ0RQQVRIIHByb3Blcmx5LgotQUNfUFJFUkVRKFsyLjUwXSlkbmwKLSMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKLWFtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKLV0pCi0KLSMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgNwotCi0jIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KLUFDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCi1bQUNfUFJFUkVRKDIuNTIpZG5sCi0gaWZlbHNlKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKLQlbJDFdLCBbRkFMU0VdLCBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0pZG5sCi1BQ19TVUJTVChbJDFfVFJVRV0pCi1BQ19TVUJTVChbJDFfRkFMU0VdKQotaWYgJDI7IHRoZW4KLSAgJDFfVFJVRT0KLSAgJDFfRkFMU0U9JyMnCi1lbHNlCi0gICQxX1RSVUU9JyMnCi0gICQxX0ZBTFNFPQotZmkKLUFDX0NPTkZJR19DT01NQU5EU19QUkUoCi1baWYgdGVzdCAteiAiJHskMV9UUlVFfSIgJiYgdGVzdCAteiAiJHskMV9GQUxTRX0iOyB0aGVuCi0gIEFDX01TR19FUlJPUihbW2NvbmRpdGlvbmFsICIkMSIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKLWZpXSldKQotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDgKLQotIyBUaGVyZSBhcmUgYSBmZXcgZGlydHkgaGFja3MgYmVsb3cgdG8gYXZvaWQgbGV0dGluZyBgQUNfUFJPR19DQycgYmUKLSMgd3JpdHRlbiBpbiBjbGVhciwgaW4gd2hpY2ggY2FzZSBhdXRvbWFrZSwgd2hlbiByZWFkaW5nIGFjbG9jYWwubTQsCi0jIHdpbGwgdGhpbmsgaXQgc2VlcyBhICp1c2UqLCBhbmQgdGhlcmVmb3JlIHdpbGwgdHJpZ2dlciBhbGwgaXQncwotIyBDIHN1cHBvcnQgbWFjaGluZXJ5LiAgQWxzbyBub3RlIHRoYXQgaXQgbWVhbnMgdGhhdCBhdXRvc2Nhbiwgc2VlaW5nCi0jIENDIGV0Yy4gaW4gdGhlIE1ha2VmaWxlLCB3aWxsIGFzayBmb3IgYW4gQUNfUFJPR19DQyB1c2UuLi4KLQotCi0jIF9BTV9ERVBFTkRFTkNJRVMoTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZWUgaG93IHRoZSBjb21waWxlciBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgY2hlY2tpbmcuCi0jIE5BTUUgaXMgIkNDIiwgIkNYWCIsICJHQ0oiLCBvciAiT0JKQyIuCi0jIFdlIHRyeSBhIGZldyB0ZWNobmlxdWVzIGFuZCB1c2UgdGhhdCB0byBzZXQgYSBzaW5nbGUgY2FjaGUgdmFyaWFibGUuCi0jCi0jIFdlIGRvbid0IEFDX1JFUVVJUkUgdGhlIGNvcnJlc3BvbmRpbmcgQUNfUFJPR19DQyBzaW5jZSB0aGUgbGF0dGVyIHdhcwotIyBtb2RpZmllZCB0byBpbnZva2UgX0FNX0RFUEVOREVOQ0lFUyhDQyk7IHdlIHdvdWxkIGhhdmUgYSBjaXJjdWxhcgotIyBkZXBlbmRlbmN5LCBhbmQgZ2l2ZW4gdGhhdCB0aGUgdXNlciBpcyBub3QgZXhwZWN0ZWQgdG8gcnVuIHRoaXMgbWFjcm8sCi0jIGp1c3QgcmVseSBvbiBBQ19QUk9HX0NDLgotQUNfREVGVU4oW19BTV9ERVBFTkRFTkNJRVNdLAotW0FDX1JFUVVJUkUoW0FNX1NFVF9ERVBESVJdKWRubAotQUNfUkVRVUlSRShbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdKWRubAotQUNfUkVRVUlSRShbQU1fTUFLRV9JTkNMVURFXSlkbmwKLUFDX1JFUVVJUkUoW0FNX0RFUF9UUkFDS10pZG5sCi0KLWlmZWxzZShbJDFdLCBDQywgICBbZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PV0sCi0gICAgICAgWyQxXSwgQ1hYLCAgW2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD1dLAotICAgICAgIFskMV0sIE9CSkMsIFtkZXBjYz0iJE9CSkMiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCi0gICAgICAgWyQxXSwgR0NKLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKLSAgICAgICAgICAgICAgICAgICBbZGVwY2M9IiQkMSIgICBhbV9jb21waWxlcl9saXN0PV0pCi0KLUFDX0NBQ0hFX0NIRUNLKFtkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjY10sCi0gICAgICAgICAgICAgICBbYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdLAotW2lmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KLSAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAotICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgotICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAotICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0Ci0gICMgaW4gRCcuCi0gIG1rZGlyIGNvbmZ0ZXN0LmRpcgotICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQotICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgotICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgotICBjZCBjb25mdGVzdC5kaXIKLSAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCi0gICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCi0gICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCi0gICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgotICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKLSAgIyBkaXJlY3RvcnkuCi0gIG1rZGlyIHN1YgotCi0gIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLSAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KLSAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uIFsncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCddIDwgLi9kZXBjb21wYAotICBmaQotICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KLSAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKLSAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCi0gICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgotICAgICMKLSAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQotICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCi0gICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCi0gICAgOiA+IHN1Yi9jb25mdGVzdC5jCi0gICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCi0gICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCi0gICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAotICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KLSAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAotICAgIGRvbmUKLSAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCi0KLSAgICBjYXNlICRkZXBtb2RlIGluCi0gICAgbm9zaWRlZWZmZWN0KQotICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCi0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCi0gICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KLQljb250aW51ZQotICAgICAgZWxzZQotCWJyZWFrCi0gICAgICBmaQotICAgICAgOzsKLSAgICBub25lKSBicmVhayA7OwotICAgIGVzYWMKLSAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQotICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgotICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKLSAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCi0gICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCi0gICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQotICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCi0gICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAotICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCi0gICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKLSAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCi0gICAgICAgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGZpCi0gIGRvbmUKLQotICBjZCAuLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi1lbHNlCi0gIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLWZpCi1dKQotQUNfU1VCU1QoWyQxREVQTU9ERV0sIFtkZXBtb2RlPSRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0pCi1BTV9DT05ESVRJT05BTChbYW1fX2Zhc3RkZXAkMV0sIFsKLSAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKLSAgJiYgdGVzdCAiJGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzNdKQotXSkKLQotCi0jIEFNX1NFVF9ERVBESVIKLSMgLS0tLS0tLS0tLS0tLQotIyBDaG9vc2UgYSBkaXJlY3RvcnkgbmFtZSBmb3IgZGVwZW5kZW5jeSBmaWxlcy4KLSMgVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBpbiBfQU1fREVQRU5ERU5DSUVTCi1BQ19ERUZVTihbQU1fU0VUX0RFUERJUl0sCi1bQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKLUFDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKLV0pCi0KLQotIyBBTV9ERVBfVFJBQ0sKLSMgLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQU1fREVQX1RSQUNLXSwKLVtBQ19BUkdfRU5BQkxFKGRlcGVuZGVuY3ktdHJhY2tpbmcsCi1bICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCi0gIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzXSkKLWlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgotICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgotICBBTURFUEJBQ0tTTEFTSD0nXCcKLWZpCi1BTV9DT05ESVRJT05BTChbQU1ERVBdLCBbdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vXSkKLUFDX1NVQlNUKFtBTURFUEJBQ0tTTEFTSF0pCi1dKQotCi0jIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSNzZXJpYWwgMwotCi0jIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAotW2ZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbwotICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgotICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAotICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgotICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0Ci0gICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgotICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcwotICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgotICAjIFNvIGxldCdzIGdyZXAgd2hvbGUgZmlsZS4KLSAgaWYgZ3JlcCAnXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZScgJG1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBkaXJwYXJ0PWBBU19ESVJOQU1FKCIkbWYiKWAKLSAgZWxzZQotICAgIGNvbnRpbnVlCi0gIGZpCi0gICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCi0gICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KLSAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKLSAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKLSAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCi0gIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQotICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAotICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAotICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCi0gICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKLSAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCi0gICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCi0gICMgZXhwYW5zaW9uLgotICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKLSAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKLSAgICAgICBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KLSAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKLSAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCi0gICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQotICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCi0gICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCi0gIGRvbmUKLWRvbmUKLV0pIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKLQotCi0jIEFNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoaXMgbWFjcm8gc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBvbmNlIC0tIHVzZSB2aWEgQUNfUkVRVUlSRS4KLSMKLSMgVGhpcyBjb2RlIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZwotIyBpcyBlbmFibGVkLiAgRklYTUUuICBUaGlzIGNyZWF0ZXMgZWFjaCBgLlAnIGZpbGUgdGhhdCB3ZSB3aWxsCi0jIG5lZWQgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoZSBkZXBlbmRlbmN5IGhhbmRsaW5nIGNvZGUuCi1BQ19ERUZVTihbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAotW0FDX0NPTkZJR19DT01NQU5EUyhbZGVwZmlsZXNdLAotICAgICBbdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKLSAgICAgW0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciJdKQotXSkKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgOAotCi0jIEFNX0NPTkZJR19IRUFERVIgaXMgb2Jzb2xldGUuICBJdCBoYXMgYmVlbiByZXBsYWNlZCBieSBBQ19DT05GSUdfSEVBREVSUy4KLUFVX0RFRlVOKFtBTV9DT05GSUdfSEVBREVSXSwgW0FDX0NPTkZJR19IRUFERVJTKCRAKV0pCi0KLSMgRG8gYWxsIHRoZSB3b3JrIGZvciBBdXRvbWFrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgMTIKLQotIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKLSMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KLQotIyBBTV9JTklUX0FVVE9NQUtFKFBBQ0tBR0UsIFZFUlNJT04sIFtOTy1ERUZJTkVdKQotIyBBTV9JTklUX0FVVE9NQUtFKFtPUFRJT05TXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhlIGNhbGwgd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OIGFyZ3VtZW50cyBpcyB0aGUgb2xkIHN0eWxlCi0jIGNhbGwgKHByZSBhdXRvY29uZi0yLjUwKSwgd2hpY2ggaXMgYmVpbmcgcGhhc2VkIG91dC4gIFBBQ0tBR0UKLSMgYW5kIFZFUlNJT04gc2hvdWxkIG5vdyBiZSBwYXNzZWQgdG8gQUNfSU5JVCBhbmQgcmVtb3ZlZCBmcm9tCi0jIHRoZSBjYWxsIHRvIEFNX0lOSVRfQVVUT01BS0UuCi0jIFdlIHN1cHBvcnQgYm90aCBjYWxsIHN0eWxlcyBmb3IgdGhlIHRyYW5zaXRpb24uICBBZnRlcgotIyB0aGUgbmV4dCBBdXRvbWFrZSByZWxlYXNlLCBBdXRvY29uZiBjYW4gbWFrZSB0aGUgQUNfSU5JVAotIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCi0jIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCi1BQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCi1bQUNfUFJFUkVRKFsyLjU4XSlkbmwKLWRubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93Ci1kbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KLW00X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAotQUNfUkVRVUlSRShbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAotIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCi1pZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiICYmCi0gICB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgotICBBQ19NU0dfRVJST1IoW3NvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gIm1ha2UgZGlzdGNsZWFuIiB0aGVyZSBmaXJzdF0pCi1maQotCi0jIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKLWlmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCi0gIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgotICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKLSAgZWxzZQotICAgIENZR1BBVEhfVz1lY2hvCi0gIGZpCi1maQotQUNfU1VCU1QoW0NZR1BBVEhfV10pCi0KLSMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KLWRubCBEaXN0aW5ndWlzaCBiZXR3ZWVuIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNhbGxzLgotbTRfaWZ2YWwoWyQyXSwKLVttNF9pZnZhbChbJDNdLCBbX0FNX1NFVF9PUFRJT04oW25vLWRlZmluZV0pXSlkbmwKLSBBQ19TVUJTVChbUEFDS0FHRV0sIFskMV0pZG5sCi0gQUNfU1VCU1QoW1ZFUlNJT05dLCBbJDJdKV0sCi1bX0FNX1NFVF9PUFRJT05TKFskMV0pZG5sCi0gQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAotIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAotCi1fQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKLVtBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIiwgW05hbWUgb2YgcGFja2FnZV0pCi0gQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAotCi0jIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCi1BQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAotQUNfUkVRVUlSRShbQUNfQVJHX1BST0dSQU1dKWRubAotQU1fTUlTU0lOR19QUk9HKEFDTE9DQUwsIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259KQotQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKLUFNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259KQotQU1fTUlTU0lOR19QUk9HKEFVVE9IRUFERVIsIGF1dG9oZWFkZXIpCi1BTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvKQotQU1fUFJPR19JTlNUQUxMX1NICi1BTV9QUk9HX0lOU1RBTExfU1RSSVAKLUFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCi0jIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgotIyBzb21lIHBsYXRmb3Jtcy4KLUFDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAotQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKLV9BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAotICAgICAgICAgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKLQkgICAgICAJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKLV9BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAotW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKLSAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCi0gICAgICAgICAgICAgICAgICBbZGVmaW5lKFtBQ19QUk9HX0NDXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSldKWRubAotQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKLSAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAotICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19DWFhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKLV0pCi1dKQotCi0KLSMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KLSMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCi0jIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KLQotIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQotIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCi0jIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KLUFDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKLVsjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCi1fYW1fc3RhbXBfY291bnQ9MQotZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCi0gIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkMSB8ICQxOiogKQotICAgICAgYnJlYWsgOzsKLSAgICAqICkKLSAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKLSAgZXNhYwotZG9uZQotZWNobyAidGltZXN0YW1wIGZvciAkMSIgPmBBU19ESVJOQU1FKFskMV0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19JTlNUQUxMX1NICi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgJGluc3RhbGxfc2guCi1BQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKLVtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi1pbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCJ9Ci1BQ19TVUJTVChpbnN0YWxsX3NoKV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCAyCi0KLSMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKLSMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgotQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCi1bcm0gLXJmIC50c3QgMj4vZGV2L251bGwKLW1rZGlyIC50c3QgMj4vZGV2L251bGwKLWlmIHRlc3QgLWQgLnRzdDsgdGhlbgotICBhbV9fbGVhZGluZ19kb3Q9LgotZWxzZQotICBhbV9fbGVhZGluZ19kb3Q9XwotZmkKLXJtZGlyIC50c3QgMj4vZGV2L251bGwKLUFDX1NVQlNUKFthbV9fbGVhZGluZ19kb3RdKV0pCi0KLSMgQ2hlY2sgdG8gc2VlIGhvdyAnbWFrZScgdHJlYXRzIGluY2x1ZGVzLgkgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCAzCi0KLSMgQU1fTUFLRV9JTkNMVURFKCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgdG8gc2VlIGhvdyBtYWtlIHRyZWF0cyBpbmNsdWRlcy4KLUFDX0RFRlVOKFtBTV9NQUtFX0lOQ0xVREVdLAotW2FtX21ha2U9JHtNQUtFLW1ha2V9Ci1jYXQgPiBjb25maW5jIDw8ICdFTkQnCi1hbV9fZG9pdDoKLQlAZWNobyBkb25lCi0uUEhPTlk6IGFtX19kb2l0Ci1FTkQKLSMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KLUFDX01TR19DSEVDS0lORyhbZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZV0pCi1hbV9faW5jbHVkZT0iIyIKLWFtX19xdW90ZT0KLV9hbV9yZXN1bHQ9bm9uZQotIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KLWVjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKLSMgV2UgZ3JlcCBvdXQgYEVudGVyaW5nIGRpcmVjdG9yeScgYW5kIGBMZWF2aW5nIGRpcmVjdG9yeScKLSMgbWVzc2FnZXMgd2hpY2ggY2FuIG9jY3VyIGlmIGB3JyBlbmRzIHVwIGluIE1BS0VGTEFHUy4KLSMgSW4gcGFydGljdWxhciB3ZSBkb24ndCBsb29rIGF0IGBebWFrZTonIGJlY2F1c2UgR05VIG1ha2UgbWlnaHQKLSMgYmUgaW52b2tlZCB1bmRlciBzb21lIG90aGVyIG5hbWUgKHVzdWFsbHkgImdtYWtlIiksIGluIHdoaWNoCi0jIGNhc2UgaXQgcHJpbnRzIGl0cyBuZXcgbmFtZSBpbnN0ZWFkIG9mIGBtYWtlJy4KLWlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsIHwgZ3JlcCAtdiAnaW5nIGRpcmVjdG9yeSdgIiA9ICJkb25lIjsgdGhlbgotICAgYW1fX2luY2x1ZGU9aW5jbHVkZQotICAgYW1fX3F1b3RlPQotICAgX2FtX3Jlc3VsdD1HTlUKLWZpCi0jIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KLWlmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KLSAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKLSAgIGlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCIgPSAiZG9uZSI7IHRoZW4KLSAgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCi0gICAgICBhbV9fcXVvdGU9IlwiIgotICAgICAgX2FtX3Jlc3VsdD1CU0QKLSAgIGZpCi1maQotQUNfU1VCU1QoW2FtX19pbmNsdWRlXSkKLUFDX1NVQlNUKFthbV9fcXVvdGVdKQotQUNfTVNHX1JFU1VMVChbJF9hbV9yZXN1bHRdKQotcm0gLWYgY29uZmluYyBjb25mbWYKLV0pCi0KLSMgRmFrZSB0aGUgZXhpc3RlbmNlIG9mIHByb2dyYW1zIHRoYXQgR05VIG1haW50YWluZXJzIHVzZS4gIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgNAotCi0jIEFNX01JU1NJTkdfUFJPRyhOQU1FLCBQUk9HUkFNKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBTV9NSVNTSU5HX1BST0ddLAotW0FDX1JFUVVJUkUoW0FNX01JU1NJTkdfSEFTX1JVTl0pCi0kMT0keyQxLSIke2FtX21pc3NpbmdfcnVufSQyIn0KLUFDX1NVQlNUKCQxKV0pCi0KLQotIyBBTV9NSVNTSU5HX0hBU19SVU4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIERlZmluZSBNSVNTSU5HIGlmIG5vdCBkZWZpbmVkIHNvIGZhciBhbmQgdGVzdCBpZiBpdCBzdXBwb3J0cyAtLXJ1bi4KLSMgSWYgaXQgZG9lcywgc2V0IGFtX21pc3NpbmdfcnVuIHRvIHVzZSBpdCwgb3RoZXJ3aXNlLCB0byBub3RoaW5nLgotQUNfREVGVU4oW0FNX01JU1NJTkdfSEFTX1JVTl0sCi1bQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAotdGVzdCB4IiR7TUlTU0lORytzZXR9IiA9IHhzZXQgfHwgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCi0jIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKLWlmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCi0gIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCi1lbHNlCi0gIGFtX21pc3NpbmdfcnVuPQotICBBQ19NU0dfV0FSTihbYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmddKQotZmkKLV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX1BST0dfTUtESVJfUAotIyAtLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciBgbWtkaXIgLXAnIGlzIHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gbWtpbnN0YWxsZGlycyBvdGhlcndpc2UuCi0jCi0jIEF1dG9tYWtlIDEuOCB1c2VkIGBta2RpciAtbSAwNzU1IC1wIC0tJyB0byBlbnN1cmUgdGhhdCBkaXJlY3RvcmllcwotIyBjcmVhdGVkIGJ5IGBtYWtlIGluc3RhbGwnIGFyZSBhbHdheXMgd29ybGQgcmVhZGFibGUsIGV2ZW4gaWYgdGhlCi0jIGluc3RhbGxlciBoYXBwZW5zIHRvIGhhdmUgYW4gb3Zlcmx5IHJlc3RyaWN0aXZlIHVtYXNrIChlLmcuIDA3NykuCi0jIFRoaXMgd2FzIGEgbWlzdGFrZS4gIFRoZXJlIGFyZSBhdCBsZWFzdCB0d28gcmVhc29ucyB3aHkgd2UgbXVzdCBub3QKLSMgdXNlIGAtbSAwNzU1JzoKLSMgICAtIGl0IGNhdXNlcyBzcGVjaWFsIGJpdHMgbGlrZSBTR0lEIHRvIGJlIGlnbm9yZWQsCi0jICAgLSBpdCBtYXkgYmUgdG9vIHJlc3RyaWN0aXZlIChzb21lIHNldHVwcyBleHBlY3QgNzc1IGRpcmVjdG9yaWVzKS4KLSMKLSMgRG8gbm90IHVzZSAtbSAwNzU1IGFuZCBsZXQgcGVvcGxlIGNob29zZSB3aGF0ZXZlciB0aGV5IGV4cGVjdCBieQotIyBzZXR0aW5nIHVtYXNrLgotIwotIyBXZSBjYW5ub3QgYWNjZXB0IGFueSBpbXBsZW1lbnRhdGlvbiBvZiBgbWtkaXInIHRoYXQgcmVjb2duaXplcyBgLXAnLgotIyBTb21lIGltcGxlbWVudGF0aW9ucyAoc3VjaCBhcyBTb2xhcmlzIDgncykgYXJlIG5vdCB0aHJlYWQtc2FmZTogaWYgYQotIyBwYXJhbGxlbCBtYWtlIHRyaWVzIHRvIHJ1biBgbWtkaXIgLXAgYS9iJyBhbmQgYG1rZGlyIC1wIGEvYycKLSMgY29uY3VycmVudGx5LCBib3RoIHZlcnNpb24gY2FuIGRldGVjdCB0aGF0IGEvIGlzIG1pc3NpbmcsIGJ1dCBvbmx5Ci0jIG9uZSBjYW4gY3JlYXRlIGl0IGFuZCB0aGUgb3RoZXIgd2lsbCBlcnJvciBvdXQuICBDb25zZXF1ZW50bHkgd2UKLSMgcmVzdHJpY3Qgb3Vyc2VsdmVzIHRvIEdOVSBtYWtlICh1c2luZyB0aGUgLS12ZXJzaW9uIG9wdGlvbiBlbnN1cmVzCi0jIHRoaXMuKQotQUNfREVGVU4oW0FNX1BST0dfTUtESVJfUF0sCi1baWYgbWtkaXIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgotICAjIFdlIHVzZWQgdG8ga2VlcGluZyB0aGUgYC4nIGFzIGZpcnN0IGFyZ3VtZW50LCBpbiBvcmRlciB0bwotICAjIGFsbG93ICQobWtkaXJfcCkgdG8gYmUgdXNlZCB3aXRob3V0IGFyZ3VtZW50LiAgQXMgaW4KLSAgIyAgICQobWtkaXJfcCkgJChzb21lZGlyKQotICAjIHdoZXJlICQoc29tZWRpcikgaXMgY29uZGl0aW9uYWxseSBkZWZpbmVkLiAgSG93ZXZlciB0aGlzIGlzIHdyb25nCi0gICMgZm9yIHR3byByZWFzb25zOgotICAjICAxLiBpZiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgYnkgYSB1c2VyIHdobyBjYW5ub3Qgd3JpdGUgYC4nCi0gICMgICAgIG1ha2UgaW5zdGFsbCB3aWxsIGZhaWwsCi0gICMgIDIuIHRoZSBhYm92ZSBjb21tZW50IHNob3VsZCBtb3N0IGNlcnRhaW5seSByZWFkCi0gICMgICAgICQobWtkaXJfcCkgJChERVNURElSKSQoc29tZWRpcikKLSAgIyAgICAgc28gaXQgZG9lcyBub3Qgd29yayB3aGVuICQoc29tZWRpcikgaXMgdW5kZWZpbmVkIGFuZAotICAjICAgICAkKERFU1RESVIpIGlzIG5vdC4KLSAgIyAgVG8gc3VwcG9ydCB0aGUgbGF0dGVyIGNhc2UsIHdlIGhhdmUgdG8gd3JpdGUKLSAgIyAgICAgdGVzdCAteiAiJChzb21lZGlyKSIgfHwgJChta2Rpcl9wKSAkKERFU1RESVIpJChzb21lZGlyKSwKLSAgIyAgc28gdGhlIGAuJyB0cmljayBpcyBwb2ludGxlc3MuCi0gIG1rZGlyX3A9J21rZGlyIC1wIC0tJwotZWxzZQotICAjIE9uIE5leHRTdGVwIGFuZCBPcGVuU3RlcCwgdGhlIGBta2RpcicgY29tbWFuZCBkb2VzIG5vdAotICAjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKLSAgIyBkaXJlY3RvcmllcyB0byBjcmVhdGUsIGFuZCB0aGVuIGFib3J0IGJlY2F1c2UgYC4nIGFscmVhZHkKLSAgIyBleGlzdHMuCi0gIGZvciBkIGluIC4vLXAgLi8tLXZlcnNpb247Ci0gIGRvCi0gICAgdGVzdCAtZCAkZCAmJiBybWRpciAkZAotICBkb25lCi0gICMgJChta2luc3RhbGxkaXJzKSBpcyBkZWZpbmVkIGJ5IEF1dG9tYWtlIGlmIG1raW5zdGFsbGRpcnMgZXhpc3RzLgotICBpZiB0ZXN0IC1mICIkYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIjsgdGhlbgotICAgIG1rZGlyX3A9JyQobWtpbnN0YWxsZGlycyknCi0gIGVsc2UKLSAgICBta2Rpcl9wPSckKGluc3RhbGxfc2gpIC1kJwotICBmaQotZmkKLUFDX1NVQlNUKFtta2Rpcl9wXSldKQotCi0jIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCAzCi0KLSMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCi1bW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKLQotIyBfQU1fU0VUX09QVElPTihOQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0IG9wdGlvbiBOQU1FLiAgUHJlc2VudGx5IHRoYXQgb25seSBtZWFucyBkZWZpbmluZyBhIGZsYWcgZm9yIHRoaXMgb3B0aW9uLgotQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OXSwKLVttNF9kZWZpbmUoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIDEpXSkKLQotIyBfQU1fU0VUX09QVElPTlMoT1BUSU9OUykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBPUFRJT05TIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgQXV0b21ha2Ugb3B0aW9ucy4KLUFDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAotW0FDX0ZPUkVBQ0goW19BTV9PcHRpb25dLCBbJDFdLCBbX0FNX1NFVF9PUFRJT04oX0FNX09wdGlvbildKV0pCi0KLSMgX0FNX0lGX09QVElPTihPUFRJT04sIElGLVNFVCwgW0lGLU5PVC1TRVRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgotQUNfREVGVU4oW19BTV9JRl9PUFRJT05dLAotW200X2lmc2V0KF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCBbJDJdLCBbJDNdKV0pCi0KLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuICAgIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgNAotCi0jIEFNX1NBTklUWV9DSEVDSwotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBTV9TQU5JVFlfQ0hFQ0tdLAotW0FDX01TR19DSEVDS0lORyhbd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lXSkKLSMgSnVzdCBpbiBjYXNlCi1zbGVlcCAxCi1lY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKLSMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKLSMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQotIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcwotIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKLSMgZGlyZWN0b3J5KS4KLWlmICgKLSAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCi0gICBpZiB0ZXN0ICIkWypdIiA9ICJYIjsgdGhlbgotICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KLSAgICAgIHNldCBYIGBscyAtdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlYAotICAgZmkKLSAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKLSAgIGlmIHRlc3QgIiRbKl0iICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKLSAgICAgICYmIHRlc3QgIiRbKl0iICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCi0KLSAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KLSAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKLSAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKLSAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KLSAgICAgIEFDX01TR19FUlJPUihbbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgotYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudF0pCi0gICBmaQotCi0gICB0ZXN0ICIkWzJdIiA9IGNvbmZ0ZXN0LmZpbGUKLSAgICkKLXRoZW4KLSAgICMgT2suCi0gICA6Ci1lbHNlCi0gICBBQ19NU0dfRVJST1IoW25ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQotQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2tdKQotZmkKLUFDX01TR19SRVNVTFQoeWVzKV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX1BST0dfSU5TVEFMTF9TVFJJUAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgT25lIGlzc3VlIHdpdGggdmVuZG9yIGBpbnN0YWxsJyAoZXZlbiBHTlUpIGlzIHRoYXQgeW91IGNhbid0Ci0jIHNwZWNpZnkgdGhlIHByb2dyYW0gdXNlZCB0byBzdHJpcCBiaW5hcmllcy4gIFRoaXMgaXMgZXNwZWNpYWxseQotIyBhbm5veWluZyBpbiBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnRzLCB3aGVyZSB0aGUgYnVpbGQncyBzdHJpcAotIyBpcyB1bmxpa2VseSB0byBoYW5kbGUgdGhlIGhvc3QncyBiaW5hcmllcy4KLSMgRm9ydHVuYXRlbHkgaW5zdGFsbC1zaCB3aWxsIGhvbm9yIGEgU1RSSVBQUk9HIHZhcmlhYmxlLCBzbyB3ZQotIyBhbHdheXMgdXNlIGluc3RhbGwtc2ggaW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcsIGFuZCBpbml0aWFsaXplCi0jIFNUUklQUFJPRyB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgU1RSSVAgdmFyaWFibGUgKHNldCBieSB0aGUgdXNlcikuCi1BQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NUUklQXSwKLVtBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU0hdKWRubAotIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCi0jIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0Ci0jIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCi0jIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgotZG5sIERvbid0IHRlc3QgZm9yICRjcm9zc19jb21waWxpbmcgPSB5ZXMsIGJlY2F1c2UgaXQgbWlnaHQgYmUgYG1heWJlJy4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCi0gIEFDX0NIRUNLX1RPT0woW1NUUklQXSwgW3N0cmlwXSwgOikKLWZpCi1JTlNUQUxMX1NUUklQX1BST0dSQU09Ilwke1NIRUxMfSBcJChpbnN0YWxsX3NoKSAtYyAtcyIKLUFDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCi0KLSMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDIKLQotIyBfQU1fUFJPR19UQVIoRk9STUFUKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbCBpbiBmb3JtYXQgRk9STUFULgotIyBGT1JNQVQgc2hvdWxkIGJlIG9uZSBvZiBgdjcnLCBgdXN0YXInLCBvciBgcGF4Jy4KLSMKLSMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3RhcikgdGhhdCBpcyBhIGNvbW1hbmQKLSMgd3JpdGluZyB0byBzdGRvdXQgYSBGT1JNQVQtdGFyYmFsbCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKLSMgJHRhcmRpci4KLSMgICAgIHRhcmRpcj1kaXJlY3RvcnkgJiYgJChhbV9fdGFyKSA+IHJlc3VsdC50YXIKLSMKLSMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3VudGFyKSB0aGF0IGV4dHJhY3Qgc3VjaAotIyBhIHRhcmJhbGwgcmVhZCBmcm9tIHN0ZGluLgotIyAgICAgJChhbV9fdW50YXIpIDwgcmVzdWx0LnRhcgotQUNfREVGVU4oW19BTV9QUk9HX1RBUl0sCi1bIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotQU1fTUlTU0lOR19QUk9HKFtBTVRBUl0sIFt0YXJdKQotbTRfaWYoWyQxXSwgW3Y3XSwKLSAgICAgW2FtX190YXI9JyR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiJzsgYW1fX3VudGFyPScke0FNVEFSfSB4ZiAtJ10sCi0gICAgIFttNF9jYXNlKFskMV0sIFt1c3Rhcl0sLCBbcGF4XSwsCi0gICAgICAgICAgICAgIFttNF9mYXRhbChbVW5rbm93biB0YXIgZm9ybWF0XSldKQotQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY3JlYXRlIGEgJDEgdGFyIGFyY2hpdmVdKQotIyBMb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgotX2FtX3Rvb2xzPSdnbnV0YXIgbTRfaWYoWyQxXSwgW3VzdGFyXSwgW3BsYWludGFyXSkgcGF4IGNwaW8gbm9uZScKLV9hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyXyQxLSRfYW1fdG9vbHN9Ci0jIERvIG5vdCBmb2xkIHRoZSBhYm92ZSB0d28gbGluZSBpbnRvIG9uZSwgYmVjYXVzZSBUcnU2NCBzaCBhbmQKLSMgU29sYXJpcyBzaCB3aWxsIG5vdCBncm9rIHNwYWNlcyBpbiB0aGUgcmhzIG9mIGAtJy4KLWZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzCi1kbwotICBjYXNlICRfYW1fdG9vbCBpbgotICBnbnV0YXIpCi0gICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOwotICAgIGRvCi0gICAgICBBTV9SVU5fTE9HKFskX2FtX3RhciAtLXZlcnNpb25dKSAmJiBicmVhawotICAgIGRvbmUKLSAgICBhbV9fdGFyPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiQkdGFyZGlyIicKLSAgICBhbV9fdGFyXz0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkdGFyZGlyIicKLSAgICBhbV9fdW50YXI9IiRfYW1fdGFyIC14ZiAtIgotICAgIDs7Ci0gIHBsYWludGFyKQotICAgICMgTXVzdCBza2lwIEdOVSB0YXI6IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgLS1mb3JtYXQ9IGl0IGRvZXNuJ3QgY3JlYXRlCi0gICAgIyB1c3RhciB0YXJiYWxsIGVpdGhlci4KLSAgICAodGFyIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxICYmIGNvbnRpbnVlCi0gICAgYW1fX3Rhcj0ndGFyIGNoZiAtICIkJHRhcmRpciInCi0gICAgYW1fX3Rhcl89J3RhciBjaGYgLSAiJHRhcmRpciInCi0gICAgYW1fX3VudGFyPSd0YXIgeGYgLScKLSAgICA7OwotICBwYXgpCi0gICAgYW1fX3Rhcj0ncGF4IC1MIC14ICQxIC13ICIkJHRhcmRpciInCi0gICAgYW1fX3Rhcl89J3BheCAtTCAteCAkMSAtdyAiJHRhcmRpciInCi0gICAgYW1fX3VudGFyPSdwYXggLXInCi0gICAgOzsKLSAgY3BpbykKLSAgICBhbV9fdGFyPSdmaW5kICIkJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKLSAgICBhbV9fdGFyXz0nZmluZCAiJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKLSAgICBhbV9fdW50YXI9J2NwaW8gLWkgLUggJDEgLWQnCi0gICAgOzsKLSAgbm9uZSkKLSAgICBhbV9fdGFyPWZhbHNlCi0gICAgYW1fX3Rhcl89ZmFsc2UKLSAgICBhbV9fdW50YXI9ZmFsc2UKLSAgICA7OwotICBlc2FjCi0KLSAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKLSAgIyBhbmQgYW1fX3VudGFyIHNldC4KLSAgdGVzdCAtbiAiJHthbV9jdl9wcm9nX3Rhcl8kMX0iICYmIGJyZWFrCi0KLSAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLSAgbWtkaXIgY29uZnRlc3QuZGlyCi0gIGVjaG8gR3JlcE1lID4gY29uZnRlc3QuZGlyL2ZpbGUKLSAgQU1fUlVOX0xPRyhbdGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyXSkKLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LnRhcjsgdGhlbgotICAgIEFNX1JVTl9MT0coWyRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhcl0pCi0gICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCi0gIGZpCi1kb25lCi1ybSAtcmYgY29uZnRlc3QuZGlyCi0KLUFDX0NBQ0hFX1ZBTChbYW1fY3ZfcHJvZ190YXJfJDFdLCBbYW1fY3ZfcHJvZ190YXJfJDE9JF9hbV90b29sXSkKLUFDX01TR19SRVNVTFQoWyRhbV9jdl9wcm9nX3Rhcl8kMV0pXSkKLUFDX1NVQlNUKFthbV9fdGFyXSkKLUFDX1NVQlNUKFthbV9fdW50YXJdKQotXSkgIyBfQU1fUFJPR19UQVIKLQotbTRfaW5jbHVkZShbbTQvYmludXRpbHMubTRdKQotbTRfaW5jbHVkZShbbTQvYnVpbHRpbmV4cGVjdC5tNF0pCi1tNF9pbmNsdWRlKFttNC9jb21waWxlcm9wdGlvbi5tNF0pCi1tNF9pbmNsdWRlKFttNC9jb25maWdtb2R1bGUubTRdKQotbTRfaW5jbHVkZShbbTQvY29weWlmY2hhbmdlLm00XSkKLW00X2luY2x1ZGUoW200L2RvY2Jvb2subTRdKQotbTRfaW5jbHVkZShbbTQvZXh0cmFkaXJzLm00XSkKLW00X2luY2x1ZGUoW200L2ZpbmRrZXJuZWwubTRdKQotbTRfaW5jbHVkZShbbTQva2VybmVsb3B0aW9uLm00XSkKLW00X2luY2x1ZGUoW200L2tlcm5lbHZlcnNpb24ubTRdKQotbTRfaW5jbHVkZShbbTQvbWFsbG9jYXR0cmlidXRlLm00XSkKLW00X2luY2x1ZGUoW200L3BvcHRjb25zdC5tNF0pCi1tNF9pbmNsdWRlKFttNC9wcmVjb21waWxlZGhlYWRlci5tNF0pCi1tNF9pbmNsdWRlKFttNC9xdC5tNF0pCi1tNF9pbmNsdWRlKFttNC9yZXN1bHR5bi5tNF0pCi1tNF9pbmNsdWRlKFttNC9zc3RyZWFtLm00XSkKLW00X2luY2x1ZGUoW200L3R5cGVkZWYubTRdKQpkaWZmIC0tZ2l0IGEvYXV0b2dlbi5zaCBiL2F1dG9nZW4uc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRlZmY1MTMuLjAwMDAwMDAKLS0tIGEvYXV0b2dlbi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSMhL2Jpbi9zaAotCi0jIHJ1biB0byBnZW5lcmF0ZSBuZWVkZWQgZmlsZXMgbm90IGluIENWUwotCi0jIE5COiBpZiB5b3UgcnVuIHRoaXMgZmlsZSB3aXRoIEFVVE9NQUtFLCBBVVRPQ09ORiwgZXRjLiBlbnZpcm9ubWVudAotIyB2YXJpYWJsZXMgc2V0LCB5b3UgKm11c3QqIHJ1biAiY29uZmlndXJlIiB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlcwotIyBzZXQuIHRoaXMgaXMgYmVjYXVzZSAiY29uZmlndXJlIiB3aWxsIGVtYmVkIHRoZSB2YWx1ZXMgb2YgdGhlc2UgdmFyaWFibGVzCi0jIGludG8gdGhlIGdlbmVyYXRlZCBNYWtlZmlsZXMsIGFzIEBBVVRPTUFLRUAsIEBBVVRPQ09ORkAgZXRjLiBhbmQgaXQgd2lsbAotIyB0cmlnZ2VyIHJlZ2VuZXJhdGlvbiBvZiBjb25maWd1cmF0aW9uIHN0YXRlIHVzaW5nIHRob3NlIHByb2dyYW1zIHdoZW4gYW55Ci0jIG9mIE1ha2VmaWxlLmFtIGV0Yy4gY2hhbmdlLgotCi1ydW4oKSB7Ci0JZWNobyAiUnVubmluZyAkMSAuLi4iCi0JJDEKLX0KLQotc2V0IC1lCi0KLUFDTE9DQUw9JHtBQ0xPQ0FMOi1hY2xvY2FsfQotQVVUT0hFQURFUj0ke0FVVE9IRUFERVI6LWF1dG9oZWFkZXJ9Ci1BVVRPTUFLRT0ke0FVVE9NQUtFOi1hdXRvbWFrZX0KLUFVVE9DT05GPSR7QVVUT0NPTkY6LWF1dG9jb25mfQotCi1pZiAkQVVUT01BS0UgLS12ZXJzaW9uIHwgZ3JlcCAtcSAxLjQKLQl0aGVuCi0JZWNobyAiIgotCWVjaG8gIkF1dG9tYWtlIDEuNCBub3Qgc3VwcG9ydGVkLiBwbGVhc2Ugc2V0IFwkQVVUT01BS0UiCi0JZWNobyAidG8gcG9pbnQgdG8gYSBuZXdlciBhdXRvbWFrZSwgb3IgdXBncmFkZS4iCi0JZWNobyAiIgotCWV4aXQgMQotZmkKLQotaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0JZWNobyAiYXV0b2dlbi5zaCBkb2Vzbid0IHRha2UgYW55IG9wdGlvbnMiID4mMgotCWV4aXQgMQotZmkKLQotcnVuICIkQUNMT0NBTCAtSSBtNCIKLXJ1biAkQVVUT0hFQURFUgotcnVuICIkQVVUT01BS0UgLS1mb3JlaWduIC0tYWRkLW1pc3NpbmcgLS1jb3B5IgotcnVuICRBVVRPQ09ORgpkaWZmIC0tZ2l0IGEvY29uZmlnLmguaW4gYi9jb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBjb25maWcuaC5pbgpyZW5hbWUgdG8gY29uZmlnLmgKaW5kZXggNGIwMGE5OS4uYzIyMGRhNSAxMDA2NDQKLS0tIGEvY29uZmlnLmguaW4KKysrIGIvY29uZmlnLmgKQEAgLTEsNTIgKzEsNTMgQEAKKy8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovCiAvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5pbiBieSBhdXRvaGVhZGVyLiAgKi8KIAogLyogd2hldGhlciBwb3B0IHByb3RvdHlwZSB0YWtlcyBhIGNvbnN0IGNoYXIgKiogKi8KLSN1bmRlZiBDT05TVF9QT1BUCisjZGVmaW5lIENPTlNUX1BPUFQgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAorI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJmZCcgbGlicmFyeSAoLWxiZmQpLiAqLwotI3VuZGVmIEhBVkVfTElCQkZECisjZGVmaW5lIEhBVkVfTElCQkZEIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpYmVydHknIGxpYnJhcnkgKC1saWJlcnR5KS4gKi8KLSN1bmRlZiBIQVZFX0xJQklCRVJUWQorI2RlZmluZSBIQVZFX0xJQklCRVJUWSAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliaWJlcnR5Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfTElCSUJFUlRZX0gKKy8qICN1bmRlZiBIQVZFX0xJQklCRVJUWV9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9wdCcgbGlicmFyeSAoLWxwb3B0KS4gKi8KLSN1bmRlZiBIQVZFX0xJQlBPUFQKKyNkZWZpbmUgSEFWRV9MSUJQT1BUIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9NRU1PUllfSAorI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwZXJmbW9uY3RsJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1BFUkZNT05DVEwKKy8qICN1bmRlZiBIQVZFX1BFUkZNT05DVEwgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzY2hlZF9zZXRhZmZpbml0eScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9TQ0hFRF9TRVRBRkZJTklUWQorLyogI3VuZGVmIEhBVkVfU0NIRURfU0VUQUZGSU5JVFkgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVERJTlRfSAorI2RlZmluZSBIQVZFX1NURElOVF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVERMSUJfSAorI2RlZmluZSBIQVZFX1NURExJQl9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RSSU5HU19ICisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVFJJTkdfSAorI2RlZmluZSBIQVZFX1NUUklOR19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9VTklTVERfSAorI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB4Y2FsbG9jJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1hDQUxMT0MKQEAgLTU1LDQ2ICs1Niw0NiBAQAogI3VuZGVmIEhBVkVfWE1FTURVUAogCiAvKiB3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZCAqLwotI3VuZGVmIE1BTExPQ19BVFRSSUJVVEVfT0sKKyNkZWZpbmUgTUFMTE9DX0FUVFJJQlVURV9PSyAxCiAKIC8qIHdoZXRoZXIgdG8gYnVpbGQgQUJJIHRvb2xzICovCi0jdW5kZWYgT1BST0ZfQUJJCisjZGVmaW5lIE9QUk9GX0FCSSAxCiAKIC8qIHBhY2thZ2UgYmluYXJ5IGRpcmVjdG9yeSAqLwotI3VuZGVmIE9QX0JJTkRJUgorI2RlZmluZSBPUF9CSU5ESVIgIi91c3IvbG9jYWwvYmluLyIKIAogLyogcGFja2FnZSBkYXRhIGRpcmVjdG9yeSAqLwotI3VuZGVmIE9QX0RBVEFESVIKKyNkZWZpbmUgT1BfREFUQURJUiAiL3Vzci9sb2NhbC9zaGFyZS9vcHJvZmlsZS8iCiAKIC8qIE5hbWUgb2YgcGFja2FnZSAqLwotI3VuZGVmIFBBQ0tBR0UKKyNkZWZpbmUgUEFDS0FHRSAib3Byb2ZpbGUiCiAKIC8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwotI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIiCiAKIC8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX05BTUUKKyNkZWZpbmUgUEFDS0FHRV9OQU1FICIiCiAKIC8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX1NUUklORworI2RlZmluZSBQQUNLQUdFX1NUUklORyAiIgogCiAvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCi0jdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiIgogCiAvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiIKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCi0jdW5kZWYgU1REQ19IRUFERVJTCisjZGVmaW5lIFNURENfSEVBREVSUyAxCiAKIC8qIFN5bnRoZXNpemUgc3BlY2lhbCBzeW1ib2xzIHdoZW4gbmVlZGVkICovCi0jdW5kZWYgU1lOVEhFU0laRV9TWU1CT0xTCisvKiAjdW5kZWYgU1lOVEhFU0laRV9TWU1CT0xTICovCiAKIC8qIHdoZXRoZXIgYmZkLmggZGVmaW5lcyBib29sIHZhbHVlcyAqLwotI3VuZGVmIFRSVUVfRkFMU0VfQUxSRUFEWV9ERUZJTkVECisvKiAjdW5kZWYgVFJVRV9GQUxTRV9BTFJFQURZX0RFRklORUQgKi8KIAogLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLwotI3VuZGVmIFZFUlNJT04KKyNkZWZpbmUgVkVSU0lPTiAiMC45LjEiCiAKIC8qIERlZmluZSB0byAxIGlmIHRoZSBYIFdpbmRvdyBTeXN0ZW0gaXMgbWlzc2luZyBvciBub3QgYmVpbmcgdXNlZC4gKi8KLSN1bmRlZiBYX0RJU1BMQVlfTUlTU0lORworLyogI3VuZGVmIFhfRElTUExBWV9NSVNTSU5HICovCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDM2YTE5NzYuLjAwMDAwMDAKLS0tIGEvY29uZmlndXJlCisrKyAvZGV2L251bGwKQEAgLTEsMTA3NjkgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuCi0jCi0jIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEJlIEJvdXJuZSBjb21wYXRpYmxlCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgZW11bGF0ZSBzaAotICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLWVsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIHNldCAtbyBwb3NpeAotZmkKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLQotIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCi1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfdW5zZXQ9dW5zZXQKLWVsc2UKLSAgYXNfdW5zZXQ9ZmFsc2UKLWZpCi0KLQotIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCi0kYXNfdW5zZXQgRU5WIE1BSUwgTUFJTFBBVEgKLVBTMT0nJCAnCi1QUzI9Jz4gJwotUFM0PScrICcKLQotIyBOTFMgbnVpc2FuY2VzLgotZm9yIGFzX3ZhciBpbiBcCi0gIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCi0gIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCi0gIExDX1RFTEVQSE9ORSBMQ19USU1FCi1kbwotICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgotICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgotICBlbHNlCi0gICAgJGFzX3Vuc2V0ICRhc192YXIKLSAgZmkKLWRvbmUKLQotIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19leHByPWV4cHIKLWVsc2UKLSAgYXNfZXhwcj1mYWxzZQotZmkKLQotaWYgKGJhc2VuYW1lIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC8gMj4mMWAiID0gIlgvIjsgdGhlbgotICBhc19iYXNlbmFtZT1iYXNlbmFtZQotZWxzZQotICBhc19iYXNlbmFtZT1mYWxzZQotZmkKLQotCi0jIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCi1hc19tZT1gJGFzX2Jhc2VuYW1lICIkMCIgfHwKLSRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC9cKSQnIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgvIiQwIiB8Ci0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotCi0KLSMgUEFUSCBuZWVkcyBDUiwgYW5kIExJTkVOTyBuZWVkcyBDUiBhbmQgUEFUSC4KLSMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KLWFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwotYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCi1hc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKLWFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKLWFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cwotCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotCi0KLSAgYXNfbGluZW5vXzE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PCi0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCi0gIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAgfHwgewotICAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBwYXRoIGF0IGFsbAotICAjIHJlbGF0aXZlIG9yIG5vdC4KLSAgY2FzZSAkMCBpbgotICAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKLSAgICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCi1kb25lCi0KLSAgICAgICA7OwotICBlc2FjCi0gICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKLSAgIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCi0gIGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KLSAgICBhc19teXNlbGY9JDAKLSAgZmkKLSAgaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCi0gIGNhc2UgJENPTkZJR19TSEVMTCBpbgotICAnJykKLSAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KLQkgY2FzZSAkYXNfZGlyIGluCi0JIC8qKQotCSAgIGlmICgiJGFzX2Rpci8kYXNfYmFzZSIgLWMgJwotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICcpIDI+L2Rldi9udWxsOyB0aGVuCi0JICAgICAkYXNfdW5zZXQgQkFTSF9FTlYgfHwgdGVzdCAiJHtCQVNIX0VOVitzZXR9IiAhPSBzZXQgfHwgeyBCQVNIX0VOVj07IGV4cG9ydCBCQVNIX0VOVjsgfQotCSAgICAgJGFzX3Vuc2V0IEVOViB8fCB0ZXN0ICIke0VOVitzZXR9IiAhPSBzZXQgfHwgeyBFTlY9OyBleHBvcnQgRU5WOyB9Ci0JICAgICBDT05GSUdfU0hFTEw9JGFzX2Rpci8kYXNfYmFzZQotCSAgICAgZXhwb3J0IENPTkZJR19TSEVMTAotCSAgICAgZXhlYyAiJENPTkZJR19TSEVMTCIgIiQwIiAkezErIiRAIn0KLQkgICBmaTs7Ci0JIGVzYWMKLSAgICAgICBkb25lCi1kb25lCi07OwotICBlc2FjCi0KLSAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTwotICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCi0gICMgbGluZS1udW1iZXIgbGluZSBiZWZvcmUgZWFjaCBsaW5lOyB0aGUgc2Vjb25kICdzZWQnIGRvZXMgdGhlIHJlYWwKLSAgIyB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoIGxpbmUtbnVtYmVyIGxpbmUKLSAgIyB3aXRoIHRoZSBudW1iZXJlZCBsaW5lLCBhbmQgYXBwZW5kcyB0cmFpbGluZyAnLScgZHVyaW5nCi0gICMgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsIGNhc2UgYXQgbGluZSBlbmQuCi0gICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQotICAjIHNlY29uZCAnc2VkJyBzY3JpcHQuICBCbGFtZSBMZWUgRS4gTWNNYWhvbiBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCi0gIHNlZCAnPScgPCRhc19teXNlbGYgfAotICAgIHNlZCAnCi0gICAgICBOCi0gICAgICBzLCQsLSwKLSAgICAgIDogbG9vcAotICAgICAgcyxeXChbJyRhc19jcl9kaWdpdHMnXSpcKVwoLipcKVskXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dXCksXDFcMlwxXDMsCi0gICAgICB0IGxvb3AKLSAgICAgIHMsLSQsLAotICAgICAgcyxeWyckYXNfY3JfZGlnaXRzJ10qXG4sLAotICAgICcgPiRhc19tZS5saW5lbm8gJiYKLSAgY2htb2QgK3ggJGFzX21lLmxpbmVubyB8fAotICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0KLSAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKLSAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCi0gICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaWJsZSB0byB0aGlzKS4KLSAgLiAuLyRhc19tZS5saW5lbm8KLSAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCi0gIGV4aXQKLX0KLQotCi1jYXNlIGBlY2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzYCxgZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzYCBpbgotICAqYyosLW4qKSBFQ0hPX049IEVDSE9fQz0nCi0nIEVDSE9fVD0nCScgOzsKLSAgKmMqLCogICkgRUNIT19OPS1uIEVDSE9fQz0gRUNIT19UPSA7OwotICAqKSAgICAgICBFQ0hPX049IEVDSE9fQz0nXGMnIEVDSE9fVD0gOzsKLWVzYWMKLQotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi1lY2hvID5jb25mJCQuZmlsZQotaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCi0gICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgotICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KLSAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCi0gICAgYXNfbG5fcz0nY3AgLXAnCi0gIGVsc2UKLSAgICBhc19sbl9zPSdsbiAtcycKLSAgZmkKLWVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2xuX3M9bG4KLWVsc2UKLSAgYXNfbG5fcz0nY3AgLXAnCi1maQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKLQotaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPToKLWVsc2UKLSAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKLSAgYXNfbWtkaXJfcD1mYWxzZQotZmkKLQotYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgotCi0jIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCi1hc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgotCi0jIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KLWFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCi0KLQotIyBJRlMKLSMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuCi1hc19ubD0nCi0nCi1JRlM9IiAJJGFzX25sIgotCi0jIENEUEFUSC4KLSRhc191bnNldCBDRFBBVEgKLQotCi0jIE5hbWUgb2YgdGhlIGhvc3QuCi0jIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAotIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCi1hY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKLQotZXhlYyA2PiYxCi0KLSMKLSMgSW5pdGlhbGl6YXRpb25zLgotIwotYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAotYWNfY29uZmlnX2xpYm9ial9kaXI9LgotY3Jvc3NfY29tcGlsaW5nPW5vCi1zdWJkaXJzPQotTUZMQUdTPQotTUFLRUZMQUdTPQotU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KLQotIyBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBwdXQgaW4gYSBzaGVsbCBoZXJlIGRvY3VtZW50LgotIyBUaGlzIHZhcmlhYmxlIHNlZW1zIG9ic29sZXRlLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQsIGFuZAotIyBvbmx5IGFjX21heF9zZWRfbGluZXMgc2hvdWxkIGJlIHVzZWQuCi06ICR7YWNfbWF4X2hlcmVfbGluZXM9Mzh9Ci0KLSMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgotUEFDS0FHRV9OQU1FPQotUEFDS0FHRV9UQVJOQU1FPQotUEFDS0FHRV9WRVJTSU9OPQotUEFDS0FHRV9TVFJJTkc9Ci1QQUNLQUdFX0JVR1JFUE9SVD0KLQotYWNfdW5pcXVlX2ZpbGU9ImxpYm9wL29wX2NvbmZpZy5oIgotIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgotYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWYgSEFWRV9TWVNfVFlQRVNfSAotIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRfSAotIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgU1REQ19IRUFERVJTCi0jIGluY2x1ZGUgPHN0ZGxpYi5oPgotIyBpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbHNlCi0jIGlmIEhBVkVfU1RETElCX0gKLSMgIGluY2x1ZGUgPHN0ZGxpYi5oPgotIyBlbmRpZgotI2VuZGlmCi0jaWYgSEFWRV9TVFJJTkdfSAotIyBpZiAhU1REQ19IRUFERVJTICYmIEhBVkVfTUVNT1JZX0gKLSMgIGluY2x1ZGUgPG1lbW9yeS5oPgotIyBlbmRpZgotIyBpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RSSU5HU19ICi0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfSU5UVFlQRVNfSAotIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TVERJTlRfSAotIyAgaW5jbHVkZSA8c3RkaW50Lmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIgotCi1hY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQ1lHUEFUSF9XIFBBQ0tBR0UgVkVSU0lPTiBBQ0xPQ0FMIEFVVE9DT05GIEFVVE9NQUtFIEFVVE9IRUFERVIgTUFLRUlORk8gaW5zdGFsbF9zaCBTVFJJUCBhY19jdF9TVFJJUCBJTlNUQUxMX1NUUklQX1BST0dSQU0gbWtkaXJfcCBBV0sgU0VUX01BS0UgYW1fX2xlYWRpbmdfZG90IEFNVEFSIGFtX190YXIgYW1fX3VudGFyIFJBTkxJQiBhY19jdF9SQU5MSUIgREFURSBPUFJPRklMRV9ESVIgQ0MgQ0ZMQUdTIExERkxBR1MgQ1BQRkxBR1MgYWNfY3RfQ0MgRVhFRVhUIE9CSkVYVCBERVBESVIgYW1fX2luY2x1ZGUgYW1fX3F1b3RlIEFNREVQX1RSVUUgQU1ERVBfRkFMU0UgQU1ERVBCQUNLU0xBU0ggQ0NERVBNT0RFIGFtX19mYXN0ZGVwQ0NfVFJVRSBhbV9fZmFzdGRlcENDX0ZBTFNFIENQUCBDWFggQ1hYRkxBR1MgYWNfY3RfQ1hYIENYWERFUE1PREUgYW1fX2Zhc3RkZXBDWFhfVFJVRSBhbV9fZmFzdGRlcENYWF9GQUxTRSBMRCBLU1JDIEtJTkMga2VybmVsX3N1cHBvcnRfVFJVRSBrZXJuZWxfc3VwcG9ydF9GQUxTRSBLVkVSUyBPUFJPRklMRV9NT0RVTEVfQVJDSCBNT0RJTlNUQUxMRElSIEVYVFJBX0NGTEFHU19NT0RVTEUgdG9wZGlyIEVHUkVQIFNJWkVfVF9UWVBFIFBUUkRJRkZfVF9UWVBFIENYWENQUCBYX0NGTEFHUyBYX1BSRV9MSUJTIFhfTElCUyBYX0VYVFJBX0xJQlMgUVRfSU5DTFVERVMgUVRfTERGTEFHUyBNT0MgVUlDIFFUX0xJQiBRVF9WRVJTSU9OIGVuYWJsZV9hYmlfVFJVRSBlbmFibGVfYWJpX0ZBTFNFIFhTTFRQUk9DIGhhdmVfeHNsdHByb2NfVFJVRSBoYXZlX3hzbHRwcm9jX0ZBTFNFIFhNTF9DQVRBTE9HIFhTTFRQUk9DX0ZMQUdTIERPQ0JPT0tfUk9PVCBDQVRfRU5UUllfU1RBUlQgQ0FUX0VOVFJZX0VORCBMSUJFUlRZX0xJQlMgQkZEX0xJQlMgUE9QVF9MSUJTIGhhdmVfcXRfVFJVRSBoYXZlX3F0X0ZBTFNFIE9QX0NGTEFHUyBPUF9DWFhGTEFHUyBPUF9ET0NESVIgTElCT0JKUyBMVExJQk9CSlMnCi1hY19zdWJzdF9maWxlcz0nJwotCi0jIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCi1hY19pbml0X2hlbHA9Ci1hY19pbml0X3ZlcnNpb249ZmFsc2UKLSMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCi0jIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCi1jYWNoZV9maWxlPS9kZXYvbnVsbAotZXhlY19wcmVmaXg9Tk9ORQotbm9fY3JlYXRlPQotbm9fcmVjdXJzaW9uPQotcHJlZml4PU5PTkUKLXByb2dyYW1fcHJlZml4PU5PTkUKLXByb2dyYW1fc3VmZml4PU5PTkUKLXByb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCi1zaWxlbnQ9Ci1zaXRlPQotc3JjZGlyPQotdmVyYm9zZT0KLXhfaW5jbHVkZXM9Tk9ORQoteF9saWJyYXJpZXM9Tk9ORQotCi0jIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KLSMgVGhlc2UgYXJlIGxlZnQgdW5leHBhbmRlZCBzbyB1c2VycyBjYW4gIm1ha2UgaW5zdGFsbCBleGVjX3ByZWZpeD0vZm9vIgotIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKLSMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KLSMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCi1iaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKLXNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCi1saWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJwotZGF0YWRpcj0nJHtwcmVmaXh9L3NoYXJlJwotc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKLXNoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJwotbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKLWxpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJwotaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCi1vbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCi1pbmZvZGlyPScke3ByZWZpeH0vaW5mbycKLW1hbmRpcj0nJHtwcmVmaXh9L21hbicKLQotYWNfcHJldj0KLWZvciBhY19vcHRpb24KLWRvCi0gICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgotICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KLSAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKLSAgICBhY19wcmV2PQotICAgIGNvbnRpbnVlCi0gIGZpCi0KLSAgYWNfb3B0YXJnPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFtePV0qPVwoLipcKSdgCi0KLSAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KLQotICBjYXNlICRhY19vcHRpb24gaW4KLQotICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQotICAgIGFjX3ByZXY9YmluZGlyIDs7Ci0gIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCi0gICAgYmluZGlyPSRhY19vcHRhcmcgOzsKLQotICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQotICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKLSAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCi0gICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OwotCi0gIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKLSAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCi0gICAgYWNfcHJldj1jYWNoZV9maWxlIDs7Ci0gIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAotICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQotICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OwotCi0gIC0tY29uZmlnLWNhY2hlIHwgLUMpCi0gICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKLQotICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCB8IC0tZGF0YSB8IC0tZGF0IHwgLS1kYSkKLSAgICBhY19wcmV2PWRhdGFkaXIgOzsKLSAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KiB8IC0tZGF0YT0qIHwgLS1kYXQ9KiBcCi0gIHwgLS1kYT0qKQotICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKLSAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAotICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvLS9fL2cnYAotICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT1ubyIgOzsKLQotICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQotICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKLSAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzLy0vXy9nJ2AKLSAgICBjYXNlICRhY19vcHRpb24gaW4KLSAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7Ci0gICAgICAqKSBhY19vcHRhcmc9eWVzIDs7Ci0gICAgZXNhYwotICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT0nJGFjX29wdGFyZyciIDs7Ci0KLSAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAotICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCi0gIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQotICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKLSAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCi0gIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCi0gIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQotICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKLQotICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQotICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgotICAgIHdpdGhfZ2FzPXllcyA7OwotCi0gIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCi0gICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKLSAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQotICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKLSAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQotICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OwotCi0gIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQotICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OwotICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQotICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OwotCi0gIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKLSAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKLSAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKLSAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKLSAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQotICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCi0gICAgYWNfcHJldj1pbmZvZGlyIDs7Ci0gIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCi0gICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKLSAgICBhY19wcmV2PWxpYmRpciA7OwotICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCi0gICAgbGliZGlyPSRhY19vcHRhcmcgOzsKLQotICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCi0gIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQotICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OwotICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAotICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKLSAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKLQotICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCi0gIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IFwKLSAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCi0gICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7Ci0gIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAotICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKLSAgfCAtLWxvY2Fscz0qIHwgLS1sb2NhbD0qIHwgLS1sb2NhPSogfCAtLWxvYz0qIHwgLS1sbz0qKQotICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCi0gICAgYWNfcHJldj1tYW5kaXIgOzsKLSAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQotICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLW5mcCB8IC0tbmZwIHwgLS1uZikKLSAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgotICAgIHdpdGhfZnA9bm8gOzsKLQotICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAotICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKLSAgICBub19jcmVhdGU9eWVzIDs7Ci0KLSAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCi0gIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQotICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKLQotICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCi0gIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAotICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCi0gICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7Ci0gIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAotICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCi0gIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCi0gICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKLSAgICBhY19wcmV2PXByZWZpeCA7OwotICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCi0gICAgcHJlZml4PSRhY19vcHRhcmcgOzsKLQotICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAotICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKLSAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7Ci0gIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAotICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCi0gICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OwotCi0gIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCi0gIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQotICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKLSAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCi0gIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKLSAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7Ci0KLSAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAotICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAotICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAotICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAotICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCi0gICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7Ci0gIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKLSAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKLSAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQotICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OwotCi0gIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCi0gIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQotICAgIHNpbGVudD15ZXMgOzsKLQotICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKLSAgICBhY19wcmV2PXNiaW5kaXIgOzsKLSAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKLSAgfCAtLXNiaT0qIHwgLS1zYj0qKQotICAgIHNiaW5kaXI9JGFjX29wdGFyZyA7OwotCi0gIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAotICB8IC0tc2hhcmVkc3RhdGVkIHwgLS1zaGFyZWRzdGF0ZSB8IC0tc2hhcmVkc3RhdCB8IC0tc2hhcmVkc3RhIFwKLSAgfCAtLXNoYXJlZHN0IHwgLS1zaGFyZWRzIHwgLS1zaGFyZWQgfCAtLXNoYXJlIHwgLS1zaGFyIFwKLSAgfCAtLXNoYSB8IC0tc2gpCi0gICAgYWNfcHJldj1zaGFyZWRzdGF0ZWRpciA7OwotICAtc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaT0qIFwKLSAgfCAtLXNoYXJlZHN0YXRlZD0qIHwgLS1zaGFyZWRzdGF0ZT0qIHwgLS1zaGFyZWRzdGF0PSogfCAtLXNoYXJlZHN0YT0qIFwKLSAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCi0gIHwgLS1zaGE9KiB8IC0tc2g9KikKLSAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXNpdGUgfCAtLXNpdGUgfCAtLXNpdCkKLSAgICBhY19wcmV2PXNpdGUgOzsKLSAgLXNpdGU9KiB8IC0tc2l0ZT0qIHwgLS1zaXQ9KikKLSAgICBzaXRlPSRhY19vcHRhcmcgOzsKLQotICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQotICAgIGFjX3ByZXY9c3JjZGlyIDs7Ci0gIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCi0gICAgc3JjZGlyPSRhY19vcHRhcmcgOzsKLQotICAtc3lzY29uZmRpciB8IC0tc3lzY29uZmRpciB8IC0tc3lzY29uZmRpIHwgLS1zeXNjb25mZCB8IC0tc3lzY29uZiBcCi0gIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQotICAgIGFjX3ByZXY9c3lzY29uZmRpciA7OwotICAtc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaT0qIHwgLS1zeXNjb25mZD0qIHwgLS1zeXNjb25mPSogXAotICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCi0gICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKLSAgICBhY19wcmV2PXRhcmdldF9hbGlhcyA7OwotICAtdGFyZ2V0PSogfCAtLXRhcmdldD0qIHwgLS10YXJnZT0qIHwgLS10YXJnPSogfCAtLXRhcj0qIHwgLS10YT0qIHwgLS10PSopCi0gICAgdGFyZ2V0X2FsaWFzPSRhY19vcHRhcmcgOzsKLQotICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQotICAgIHZlcmJvc2U9eWVzIDs7Ci0KLSAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtVikKLSAgICBhY19pbml0X3ZlcnNpb249OiA7OwotCi0gIC13aXRoLSogfCAtLXdpdGgtKikKLSAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAotICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCi0gICAgY2FzZSAkYWNfb3B0aW9uIGluCi0gICAgICAqPSopIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OwotICAgICAgKikgYWNfb3B0YXJnPXllcyA7OwotICAgIGVzYWMKLSAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPSckYWNfb3B0YXJnJyIgOzsKLQotICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCi0gICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKLSAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzLy0vXy9nJ2AKLSAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPW5vIiA7OwotCi0gIC0teCkKLSAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCi0gICAgd2l0aF94PXllcyA7OwotCi0gIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKLSAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKLSAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKLSAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKLSAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQotICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OwotCi0gIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCi0gIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQotICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKLSAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAotICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKLSAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7Ci0KLSAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgOzsKLQotICAqPSopCi0gICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAotICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgCi0gICAgZXZhbCAiJGFjX2VudnZhcj0nJGFjX29wdGFyZyciCi0gICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKLQotICAqKQotICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KLSAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgotICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCi0gICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQotICAgIDs7Ci0KLSAgZXNhYwotZG9uZQotCi1pZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KLSAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgotZm9yIGFjX3ZhciBpbiBleGVjX3ByZWZpeCBwcmVmaXgKLWRvCi0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAotICBjYXNlICRhY192YWwgaW4KLSAgICBbXFwvJF0qIHwgPzpbXFwvXSogfCBOT05FIHwgJycgKSA7OwotICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKLSAgZXNhYwotZG9uZQotCi0jIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KLWZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAotCSAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgotZG8KLSAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCi0gIGNhc2UgJGFjX3ZhbCBpbgotICAgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7Ci0gICAgKikgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OwotICBlc2FjCi1kb25lCi0KLSMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKLSMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgotIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgotYnVpbGQ9JGJ1aWxkX2FsaWFzCi1ob3N0PSRob3N0X2FsaWFzCi10YXJnZXQ9JHRhcmdldF9hbGlhcwotCi0jIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCi1pZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KLSAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCi0gICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCi0gICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgotICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLiIgPiYyCi0gIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KLSAgICBjcm9zc19jb21waWxpbmc9eWVzCi0gIGZpCi1maQotCi1hY190b29sX3ByZWZpeD0KLXRlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KLQotdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAotCi0KLSMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KLWlmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCi0gIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCi0gICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgotICBhY19jb25mZGlyPWAoZGlybmFtZSAiJDAiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiQwIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgc3JjZGlyPSRhY19jb25mZGlyCi0gIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgotICAgIHNyY2Rpcj0uLgotICBmaQotZWxzZQotICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCi1maQotaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCi0gIGlmIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllczsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkYWNfY29uZmRpciBvciAuLiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZWxzZQotICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBmaQotZmkKLShjZCAkc3JjZGlyICYmIHRlc3QgLXIgLi8kYWNfdW5pcXVlX2ZpbGUpIDI+L2Rldi9udWxsIHx8Ci0gIHsgZWNobyAiJGFzX21lOiBlcnJvcjogc291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLXNyY2Rpcj1gZWNobyAiJHNyY2RpciIgfCBzZWQgJ3MlXChbXlxcL11cKVtcXC9dKiQlXDElJ2AKLWFjX2Vudl9idWlsZF9hbGlhc19zZXQ9JHtidWlsZF9hbGlhcytzZXR9Ci1hY19lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCi1hY19jdl9lbnZfYnVpbGRfYWxpYXNfc2V0PSR7YnVpbGRfYWxpYXMrc2V0fQotYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3ZhbHVlPSRidWlsZF9hbGlhcwotYWNfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9Ci1hY19lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcwotYWNfY3ZfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9Ci1hY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcwotYWNfZW52X3RhcmdldF9hbGlhc19zZXQ9JHt0YXJnZXRfYWxpYXMrc2V0fQotYWNfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCi1hY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9Ci1hY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKLWFjX2Vudl9DQ19zZXQ9JHtDQytzZXR9Ci1hY19lbnZfQ0NfdmFsdWU9JENDCi1hY19jdl9lbnZfQ0Nfc2V0PSR7Q0Mrc2V0fQotYWNfY3ZfZW52X0NDX3ZhbHVlPSRDQwotYWNfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQotYWNfZW52X0NGTEFHU192YWx1ZT0kQ0ZMQUdTCi1hY19jdl9lbnZfQ0ZMQUdTX3NldD0ke0NGTEFHUytzZXR9Ci1hY19jdl9lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKLWFjX2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQotYWNfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKLWFjX2N2X2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQotYWNfY3ZfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKLWFjX2Vudl9DUFBGTEFHU19zZXQ9JHtDUFBGTEFHUytzZXR9Ci1hY19lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCi1hY19jdl9lbnZfQ1BQRkxBR1Nfc2V0PSR7Q1BQRkxBR1Mrc2V0fQotYWNfY3ZfZW52X0NQUEZMQUdTX3ZhbHVlPSRDUFBGTEFHUwotYWNfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQotYWNfZW52X0NQUF92YWx1ZT0kQ1BQCi1hY19jdl9lbnZfQ1BQX3NldD0ke0NQUCtzZXR9Ci1hY19jdl9lbnZfQ1BQX3ZhbHVlPSRDUFAKLWFjX2Vudl9DWFhfc2V0PSR7Q1hYK3NldH0KLWFjX2Vudl9DWFhfdmFsdWU9JENYWAotYWNfY3ZfZW52X0NYWF9zZXQ9JHtDWFgrc2V0fQotYWNfY3ZfZW52X0NYWF92YWx1ZT0kQ1hYCi1hY19lbnZfQ1hYRkxBR1Nfc2V0PSR7Q1hYRkxBR1Mrc2V0fQotYWNfZW52X0NYWEZMQUdTX3ZhbHVlPSRDWFhGTEFHUwotYWNfY3ZfZW52X0NYWEZMQUdTX3NldD0ke0NYWEZMQUdTK3NldH0KLWFjX2N2X2Vudl9DWFhGTEFHU192YWx1ZT0kQ1hYRkxBR1MKLWFjX2Vudl9DWFhDUFBfc2V0PSR7Q1hYQ1BQK3NldH0KLWFjX2Vudl9DWFhDUFBfdmFsdWU9JENYWENQUAotYWNfY3ZfZW52X0NYWENQUF9zZXQ9JHtDWFhDUFArc2V0fQotYWNfY3ZfZW52X0NYWENQUF92YWx1ZT0kQ1hYQ1BQCi0KLSMKLSMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KLSMKLWlmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gImxvbmciOyB0aGVuCi0gICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgotICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCi0gIGNhdCA8PF9BQ0VPRgotXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgdGhpcyBwYWNrYWdlIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KLQotVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCi0KLVRvIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sIENDLCBDRkxBR1MuLi4pLCBzcGVjaWZ5IHRoZW0gYXMKLVZBUj1WQUxVRS4gIFNlZSBiZWxvdyBmb3IgZGVzY3JpcHRpb25zIG9mIHNvbWUgb2YgdGhlIHVzZWZ1bCB2YXJpYWJsZXMuCi0KLURlZmF1bHRzIGZvciB0aGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGluIGJyYWNrZXRzLgotCi1Db25maWd1cmF0aW9uOgotICAtaCwgLS1oZWxwICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAotICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCi0gICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcwotICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCi0gICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KLSAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKLSAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKLSAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCi0KLV9BQ0VPRgotCi0gIGNhdCA8PF9BQ0VPRgotSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgotICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKLQkJCSAgWyRhY19kZWZhdWx0X3ByZWZpeF0KLSAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKLQkJCSAgW1BSRUZJWF0KLQotQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCi1cYCRhY19kZWZhdWx0X3ByZWZpeC9iaW4nLCBcYCRhY19kZWZhdWx0X3ByZWZpeC9saWInIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeQotYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIFxgJGFjX2RlZmF1bHRfcHJlZml4JyB1c2luZyBcYC0tcHJlZml4JywKLWZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCi0KLUZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgotCi1GaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgotICAtLWJpbmRpcj1ESVIgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQotICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQotICAtLWxpYmV4ZWNkaXI9RElSICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9zaGFyZV0KLSAgLS1zeXNjb25mZGlyPURJUiAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQotICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KLSAgLS1saWJkaXI9RElSICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQotICAtLWluY2x1ZGVkaXI9RElSICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KLSAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQotICAtLWluZm9kaXI9RElSICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbUFJFRklYL2luZm9dCi0gIC0tbWFuZGlyPURJUiAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW1BSRUZJWC9tYW5dCi1fQUNFT0YKLQotICBjYXQgPDxcX0FDRU9GCi0KLVByb2dyYW0gbmFtZXM6Ci0gIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYICAgICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKLSAgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVggICAgICAgICAgICBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCi0gIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCi0KLVggZmVhdHVyZXM6Ci0gIC0teC1pbmNsdWRlcz1ESVIgICAgWCBpbmNsdWRlIGZpbGVzIGFyZSBpbiBESVIKLSAgLS14LWxpYnJhcmllcz1ESVIgICBYIGxpYnJhcnkgZmlsZXMgYXJlIGluIERJUgotX0FDRU9GCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgotCi0gIGNhdCA8PFxfQUNFT0YKLQotT3B0aW9uYWwgRmVhdHVyZXM6Ci0gIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKLSAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQotICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCi0gIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCi0gIC0tZW5hYmxlLWFiaSAgICAgICAgICAgICAgICAgZW5hYmxlIGFiaSBwb3J0YWJpbGl0eSBjb2RlIChkZWZhdWx0IGlzIGRpc2FibGVkKQotICAtLWVuYWJsZS1wY2ggICAgICAgICAgICAgICAgIGVuYWJsZSBwcmVjb21waWxlZCBoZWFkZXIgKGRlZmF1bHQgaXMgZGlzYWJsZWQpCi0gIC0tZW5hYmxlLWdjb3YgICAgICAgICAgICAgICAgZW5hYmxlIG9wdGlvbiBmb3IgZ2NvdiBjb3ZlcmFnZSB0ZXN0aW5nIChkZWZhdWx0IGlzIGRpc2FibGVkKQotICAtLWRpc2FibGUtd2Vycm9yICAgICAgICAgICAgZGlzYWJsZSAtV2Vycm9yIGZsYWcgKGRlZmF1bHQgaXMgZW5hYmxlZCBmb3Igbm9uLXJlbGVhc2UpCi0gIC0tZGlzYWJsZS1vcHRpbWl6YXRpb24gICAgICBkaXNhYmxlIG9wdGltaXphdGlvbiBmbGFncyAoZGVmYXVsdCBpcyBlbmFibGVkKQotCi1PcHRpb25hbCBQYWNrYWdlczoKLSAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCi0gIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKLSAgLS13aXRoLWJpbnV0aWxzPWRpcgkJUGF0aCB0byBiaW51dGlscyBpbnN0YWxsYXRpb24gdG8gdXNlCi0gIC0td2l0aC1nY2M9ZGlyCQlQYXRoIHRvIEdDQyBpbnN0YWxsYXRpb24gdG8gdXNlCi0gIC0td2l0aC1rZXJuZWwtc3VwcG9ydCAgICAgICAgVXNlIDIuNiBrZXJuZWwgKG5vIGtlcm5lbCBzb3VyY2UgdHJlZSByZXF1aXJlZCkKLSAgLS13aXRoLWxpbnV4PWRpciAgICAgICAgICAgICBQYXRoIHRvIExpbnV4IHNvdXJjZSB0cmVlCi0gIC0td2l0aC1tb2R1bGUtZGlyPWRpciAgICAgICAgUGF0aCB0byBtb2R1bGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeQotICAtLXdpdGgtZXh0cmEtaW5jbHVkZXM9RElSICAgIGFkZCBleHRyYSBpbmNsdWRlIHBhdGhzCi0gIC0td2l0aC1leHRyYS1saWJzPURJUiAgICAgICAgYWRkIGV4dHJhIGxpYnJhcnkgcGF0aHMKLSAgLS13aXRoLXggICAgICAgICAgICAgICAgdXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0KLSAgLS13aXRoLXF0LWRpciAgICAgICAgICAgd2hlcmUgdGhlIHJvb3Qgb2YgUXQgaXMgaW5zdGFsbGVkCi0gIC0td2l0aC1xdC1pbmNsdWRlcyAgICAgIHdoZXJlIHRoZSBRdCBpbmNsdWRlcyBhcmUuCi0gIC0td2l0aC1xdC1saWJyYXJpZXMgICAgIHdoZXJlIHRoZSBRdCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KLQotU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6Ci0gIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAotICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCi0gIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQotICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+Ci0gIENQUEZMQUdTICAgIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYgeW91IGhhdmUKLSAgICAgICAgICAgICAgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+Ci0gIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCi0gIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCi0gIENYWEZMQUdTICAgIEMrKyBjb21waWxlciBmbGFncwotICBDWFhDUFAgICAgICBDKysgcHJlcHJvY2Vzc29yCi0KLVVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCi1pdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCi0KLV9BQ0VPRgotZmkKLQotaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgotICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgotICBhY19wb3BkaXI9YHB3ZGAKLSAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKLSAgICB0ZXN0IC1kICRhY19kaXIgfHwgY29udGludWUKLSAgICBhY19idWlsZGRpcj0uCi0KLWlmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KLSAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAotICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwuLi8sZydgCi1lbHNlCi0gIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KLWZpCi0KLWNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCi0gICAgYWNfc3JjZGlyPS4KLSAgICBpZiB0ZXN0IC16ICIkYWNfdG9wX2J1aWxkZGlyIjsgdGhlbgotICAgICAgIGFjX3RvcF9zcmNkaXI9LgotICAgIGVsc2UKLSAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY190b3BfYnVpbGRkaXIgfCBzZWQgJ3MsLyQsLCdgCi0gICAgZmkgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKLWVzYWMKLQotIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCi0jIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgotY2FzZSBgcHdkYCBpbgotLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0qKQotICBjYXNlICIkYWNfZGlyIiBpbgotICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0qKQotICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KLSAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfc3JjZGlyIGluCi0gIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgotICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0gICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKLQotICAgIGNkICRhY19kaXIKLSAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZTsgb3RoZXJ3aXNlIGdldCBDeWdudXMgc3R5bGUgY29uZmlndXJlLgotICAgIGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuZ251OyB0aGVuCi0gICAgICBlY2hvCi0gICAgICAkU0hFTEwgJGFjX3NyY2Rpci9jb25maWd1cmUuZ251ICAtLWhlbHA9cmVjdXJzaXZlCi0gICAgZWxpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlOyB0aGVuCi0gICAgICBlY2hvCi0gICAgICAkU0hFTEwgJGFjX3NyY2Rpci9jb25maWd1cmUgIC0taGVscD1yZWN1cnNpdmUKLSAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuYWMgfHwKLQkgICB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmluOyB0aGVuCi0gICAgICBlY2hvCi0gICAgICAkYWNfY29uZmlndXJlIC0taGVscAotICAgIGVsc2UKLSAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKLSAgICBmaQotICAgIGNkICRhY19wb3BkaXIKLSAgZG9uZQotZmkKLQotdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAwCi1pZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCi0gIGNhdCA8PFxfQUNFT0YKLQotQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KLV9BQ0VPRgotICBleGl0IDAKLWZpCi1leGVjIDU+Y29uZmlnLmxvZwotY2F0ID4mNSA8PF9BQ0VPRgotVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKLXJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCi0KLUl0IHdhcyBjcmVhdGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKLQotICAkICQwICRACi0KLV9BQ0VPRgotewotY2F0IDw8X0FTVU5BTUUKLSMjIC0tLS0tLS0tLSAjIwotIyMgUGxhdGZvcm0uICMjCi0jIyAtLS0tLS0tLS0gIyMKLQotaG9zdG5hbWUgPSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKLXVuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotdW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi11bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLXVuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotCi0vdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLS9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAotCi0vYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCi0vdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCi0vdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi1ob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGwgICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCi0vYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCi0vdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCi0vYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCi0KLV9BU1VOQU1FCi0KLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZWNobyAiUEFUSDogJGFzX2RpciIKLWRvbmUKLQotfSA+JjUKLQotY2F0ID4mNSA8PF9BQ0VPRgotCi0KLSMjIC0tLS0tLS0tLS0tICMjCi0jIyBDb3JlIHRlc3RzLiAjIwotIyMgLS0tLS0tLS0tLS0gIyMKLQotX0FDRU9GCi0KLQotIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KLSMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgotIyBTdHJpcCBvdXQgLS1zaWxlbnQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJlY29yZCBpdCBmb3IgZnV0dXJlIHJ1bnMuCi0jIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCi0jIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KLWFjX2NvbmZpZ3VyZV9hcmdzPQotYWNfY29uZmlndXJlX2FyZ3MwPQotYWNfY29uZmlndXJlX2FyZ3MxPQotYWNfc2VwPQotYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKLWZvciBhY19wYXNzIGluIDEgMgotZG8KLSAgZm9yIGFjX2FyZwotICBkbwotICAgIGNhc2UgJGFjX2FyZyBpbgotICAgIC1uby1jcmVhdGUgfCAtLW5vLWMqIHwgLW4gfCAtbm8tcmVjdXJzaW9uIHwgLS1uby1yKikgY29udGludWUgOzsKLSAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAotICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQotICAgICAgY29udGludWUgOzsKLSAgICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKLSAgICAgIGFjX2FyZz1gZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKLSAgICBlc2FjCi0gICAgY2FzZSAkYWNfcGFzcyBpbgotICAgIDEpIGFjX2NvbmZpZ3VyZV9hcmdzMD0iJGFjX2NvbmZpZ3VyZV9hcmdzMCAnJGFjX2FyZyciIDs7Ci0gICAgMikKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCi0gICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KLQlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCi0gICAgICBlbHNlCi0JY2FzZSAkYWNfYXJnIGluCi0JICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKLQkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKLQkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKLQkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQotCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KLQkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyRhY19zZXAnJGFjX2FyZyciCi0gICAgICAjIEdldCByaWQgb2YgdGhlIGxlYWRpbmcgc3BhY2UuCi0gICAgICBhY19zZXA9IiAiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotZG9uZQotJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMCB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMCtzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczA9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MwOyB9Ci0kYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MxK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczE7IH0KLQotIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQotIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKLSMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgotIyBXQVJOSU5HOiBCZSBzdXJlIG5vdCB0byB1c2Ugc2luZ2xlIHF1b3RlcyBpbiB0aGVyZSwgYXMgc29tZSBzaGVsbHMsCi0jIHN1Y2ggYXMgb3VyIERVIDUuMCBmcmllbmQsIHdpbGwgdGhlbiBgY2xvc2UnIHRoZSB0cmFwLgotdHJhcCAnZXhpdF9zdGF0dXM9JD8KLSAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCi0gIHsKLSAgICBlY2hvCi0KLSAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBDYWNoZSB2YXJpYWJsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICBlY2hvCi0gICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKLXsKLSAgKHNldCkgMj4mMSB8Ci0gICAgY2FzZSBgKGFjX3NwYWNlPSciJyInICciJyInOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgotICAgICphY19zcGFjZT1cICopCi0gICAgICBzZWQgLW4gXAotCSJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKLQkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9JyInIidcXDInIiciJy9wIgotICAgICAgOzsKLSAgICAqKQotICAgICAgc2VkIC1uIFwKLQkicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKLSAgICAgIDs7Ci0gICAgZXNhYzsKLX0KLSAgICBlY2hvCi0KLSAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICBlY2hvCi0gICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycwotICAgIGRvCi0gICAgICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKLSAgICAgIGVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCi0gICAgZG9uZSB8IHNvcnQKLSAgICBlY2hvCi0KLSAgICBpZiB0ZXN0IC1uICIkYWNfc3Vic3RfZmlsZXMiOyB0aGVuCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tICMjCi0jIyBPdXRwdXQgZmlsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICAgIGVjaG8KLSAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCi0gICAgICBkbwotCWV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAotCWVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCi0gICAgICBkb25lIHwgc29ydAotICAgICAgZWNobwotICAgIGZpCi0KLSAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tICMjCi0jIyBjb25mZGVmcy5oLiAjIwotIyMgLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICAgZWNobwotICAgICAgc2VkICIvXiQvZCIgY29uZmRlZnMuaCB8IHNvcnQKLSAgICAgIGVjaG8KLSAgICBmaQotICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKLSAgICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgotICAgIGVjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCi0gIH0gPiY1Ci0gIHJtIC1mIGNvcmUgKi5jb3JlICYmCi0gIHJtIC1yZiBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCi0gICAgZXhpdCAkZXhpdF9zdGF0dXMKLSAgICAgJyAwCi1mb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KLSAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCi1kb25lCi1hY19zaWduYWw9MAotCi0jIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgotcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCi0jIEFJWCBjcHAgbG9zZXMgb24gYW4gZW1wdHkgZmlsZSwgc28gbWFrZSBzdXJlIGl0IGNvbnRhaW5zIGF0IGxlYXN0IGEgbmV3bGluZS4KLWVjaG8gPmNvbmZkZWZzLmgKLQotIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgotX0FDRU9GCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCi1fQUNFT0YKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKLV9BQ0VPRgotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKLV9BQ0VPRgotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKLV9BQ0VPRgotCi0KLSMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgotIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KLWlmIHRlc3QgLXogIiRDT05GSUdfU0lURSI7IHRoZW4KLSAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCi0gICAgQ09ORklHX1NJVEU9IiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCi0gIGVsc2UKLSAgICBDT05GSUdfU0lURT0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCi0gIGZpCi1maQotZm9yIGFjX3NpdGVfZmlsZSBpbiAkQ09ORklHX1NJVEU7IGRvCi0gIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQotICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQotICAgIC4gIiRhY19zaXRlX2ZpbGUiCi0gIGZpCi1kb25lCi0KLWlmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgotICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAotICAjIGZpbGVzIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4KLSAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Ci0gICAgY2FzZSAkY2FjaGVfZmlsZSBpbgotICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICRjYWNoZV9maWxlOzsKLSAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gLi8kY2FjaGVfZmlsZTs7Ci0gICAgZXNhYwotICBmaQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQotICA+JGNhY2hlX2ZpbGUKLWZpCi0KLSMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKLSMgdmFsdWUuCi1hY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKLWZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfAotCSAgICAgICBzZWQgLW4gJ3MvXmFjX2Vudl9cKFthLXpBLVpfMC05XSpcKV9zZXQ9LiovXDEvcCdgOyBkbwotICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAotICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAotICBldmFsIGFjX29sZF92YWw9IlwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZSIKLSAgZXZhbCBhY19uZXdfdmFsPSJcJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUiCi0gIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KLSAgICBzZXQsKQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQotICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKLSAgICAsc2V0KQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9Ci0gICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OwotICAgICwpOzsKLSAgICAqKQotICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgotCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9Ci0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1Ci1lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mMjt9Ci0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiY1Ci1lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mMjt9Ci0JYWNfY2FjaGVfY29ycnVwdGVkPToKLSAgICAgIGZpOzsKLSAgZXNhYwotICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCi0gIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgotICAgIGNhc2UgJGFjX25ld192YWwgaW4KLSAgICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKLSAgICAgIGFjX2FyZz0kYWNfdmFyPWBlY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKLSAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OwotICAgIGVzYWMKLSAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KLSAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgotICAgICAgKikgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciIDs7Ci0gICAgZXNhYwotICBmaQotZG9uZQotaWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLWFtX19hcGlfdmVyc2lvbj0iMS45IgotYWNfYXV4X2Rpcj0KLWZvciBhY19kaXIgaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi47IGRvCi0gIGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLXNoOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLnNoOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9zaHRvb2w7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKLSAgICBicmVhawotICBmaQotZG9uZQotaWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1hY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiCi1hY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIKLWFjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgIyBUaGlzIHNob3VsZCBiZSBDeWdudXMgY29uZmlndXJlLgotCi0jIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKLSMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgotIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6Ci0jIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAotIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCi0jIElSSVggL3NiaW4vaW5zdGFsbAotIyBBSVggL2Jpbi9pbnN0YWxsCi0jIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKLSMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCi0jIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKLSMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKLSMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYwotIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCi1jYXNlICRhc19kaXIvIGluCi0gIC4vIHwgLi8vIHwgL2NDLyogfCBcCi0gIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAotICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKLSAgL3Vzci91Y2IvKiApIDs7Ci0gICopCi0gICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KLSAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKLSAgICAjIGJ5IGRlZmF1bHQuCi0gICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbwotICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0JaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KLQkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgotCSAgICA6Ci0JICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgotCSAgICBicmVhayAzCi0JICBmaQotCWZpCi0gICAgICBkb25lCi0gICAgZG9uZQotICAgIDs7Ci1lc2FjCi1kb25lCi0KLQotZmkKLSAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKLSAgZWxzZQotICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIFdlIGRvbid0IGNhY2hlIGEKLSAgICAjIHBhdGggZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKLSAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcwotICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHBhdGggaXMgcmVsYXRpdmUuCi0gICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAotICBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRJTlNUQUxMIiA+JjYKLQotIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgotIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KLXRlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4uLiAkRUNIT19DIiA+JjYKLSMgSnVzdCBpbiBjYXNlCi1zbGVlcCAxCi1lY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKLSMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKLSMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQotIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcwotIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKLSMgZGlyZWN0b3J5KS4KLWlmICgKLSAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCi0gICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KLSAgICAgICMgLUwgZGlkbid0IHdvcmsuCi0gICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZWAKLSAgIGZpCi0gICBybSAtZiBjb25mdGVzdC5maWxlCi0gICBpZiB0ZXN0ICIkKiIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAotICAgICAgJiYgdGVzdCAiJCoiICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCi0KLSAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KLSAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKLSAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKLSAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KLSAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KLWFsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgotYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgZmkKLQotICAgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZQotICAgKQotdGhlbgotICAgIyBPay4KLSAgIDoKLWVsc2UKLSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQotQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCi1DaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotdGVzdCAiJHByb2dyYW1fcHJlZml4IiAhPSBOT05FICYmCi0gIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMsXiwkcHJvZ3JhbV9wcmVmaXgsOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgotIyBVc2UgYSBkb3VibGUgJCBzbyBtYWtlIGlnbm9yZXMgaXQuCi10ZXN0ICIkcHJvZ3JhbV9zdWZmaXgiICE9IE5PTkUgJiYKLSAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyxcJCwkcHJvZ3JhbV9zdWZmaXgsOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgotIyBEb3VibGUgYW55IFwgb3IgJC4gIGVjaG8gbWlnaHQgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KLWNhdCA8PFxfQUNFT0YgPmNvbmZ0ZXN0LnNlZAotcy9bXFwkXS8mJi9nO3MvO3MseCx4LCQvLwotX0FDRU9GCi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWBlY2hvICRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIHwgc2VkIC1mIGNvbmZ0ZXN0LnNlZGAKLXJtIGNvbmZ0ZXN0LnNlZAotCi0jIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCi1hbV9hdXhfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCi0KLXRlc3QgeCIke01JU1NJTkcrc2V0fSIgPSB4c2V0IHx8IE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIgotIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCi1pZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgotICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgotZWxzZQotICBhbV9taXNzaW5nX3J1bj0KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjI7fQotZmkKLQotaWYgbWtkaXIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgotICAjIFdlIHVzZWQgdG8ga2VlcGluZyB0aGUgYC4nIGFzIGZpcnN0IGFyZ3VtZW50LCBpbiBvcmRlciB0bwotICAjIGFsbG93ICQobWtkaXJfcCkgdG8gYmUgdXNlZCB3aXRob3V0IGFyZ3VtZW50LiAgQXMgaW4KLSAgIyAgICQobWtkaXJfcCkgJChzb21lZGlyKQotICAjIHdoZXJlICQoc29tZWRpcikgaXMgY29uZGl0aW9uYWxseSBkZWZpbmVkLiAgSG93ZXZlciB0aGlzIGlzIHdyb25nCi0gICMgZm9yIHR3byByZWFzb25zOgotICAjICAxLiBpZiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgYnkgYSB1c2VyIHdobyBjYW5ub3Qgd3JpdGUgYC4nCi0gICMgICAgIG1ha2UgaW5zdGFsbCB3aWxsIGZhaWwsCi0gICMgIDIuIHRoZSBhYm92ZSBjb21tZW50IHNob3VsZCBtb3N0IGNlcnRhaW5seSByZWFkCi0gICMgICAgICQobWtkaXJfcCkgJChERVNURElSKSQoc29tZWRpcikKLSAgIyAgICAgc28gaXQgZG9lcyBub3Qgd29yayB3aGVuICQoc29tZWRpcikgaXMgdW5kZWZpbmVkIGFuZAotICAjICAgICAkKERFU1RESVIpIGlzIG5vdC4KLSAgIyAgVG8gc3VwcG9ydCB0aGUgbGF0dGVyIGNhc2UsIHdlIGhhdmUgdG8gd3JpdGUKLSAgIyAgICAgdGVzdCAteiAiJChzb21lZGlyKSIgfHwgJChta2Rpcl9wKSAkKERFU1RESVIpJChzb21lZGlyKSwKLSAgIyAgc28gdGhlIGAuJyB0cmljayBpcyBwb2ludGxlc3MuCi0gIG1rZGlyX3A9J21rZGlyIC1wIC0tJwotZWxzZQotICAjIE9uIE5leHRTdGVwIGFuZCBPcGVuU3RlcCwgdGhlIGBta2RpcicgY29tbWFuZCBkb2VzIG5vdAotICAjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKLSAgIyBkaXJlY3RvcmllcyB0byBjcmVhdGUsIGFuZCB0aGVuIGFib3J0IGJlY2F1c2UgYC4nIGFscmVhZHkKLSAgIyBleGlzdHMuCi0gIGZvciBkIGluIC4vLXAgLi8tLXZlcnNpb247Ci0gIGRvCi0gICAgdGVzdCAtZCAkZCAmJiBybWRpciAkZAotICBkb25lCi0gICMgJChta2luc3RhbGxkaXJzKSBpcyBkZWZpbmVkIGJ5IEF1dG9tYWtlIGlmIG1raW5zdGFsbGRpcnMgZXhpc3RzLgotICBpZiB0ZXN0IC1mICIkYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIjsgdGhlbgotICAgIG1rZGlyX3A9JyQobWtpbnN0YWxsZGlycyknCi0gIGVsc2UKLSAgICBta2Rpcl9wPSckKGluc3RhbGxfc2gpIC1kJwotICBmaQotZmkKLQotZm9yIGFjX3Byb2cgaW4gZ2F3ayBtYXdrIG5hd2sgYXdrCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BV0src2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1BV0s9JGFjX2N2X3Byb2dfQVdLCi1pZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVdLIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRBV0siID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCi1kb25lCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAkRUNIT19DIiA+JjYKLXNldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSw6Li8rLSxfX19wXywnYAotaWYgZXZhbCAidGVzdCBcIlwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKLWFsbDoKLQlAZWNobyAnYWNfbWFrZXRlbXA9IiQoTUFLRSkiJwotX0FDRU9GCi0jIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KLWV2YWwgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsIHwgZ3JlcCB0ZW1wPWAKLWlmIHRlc3QgLW4gIiRhY19tYWtldGVtcCI7IHRoZW4KLSAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzCi1lbHNlCi0gIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vCi1maQotcm0gLWYgY29uZnRlc3QubWFrZQotZmkKLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfbWFrZV8nJHthY19tYWtlfV9zZXRgXCIgPSB5ZXMiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBTRVRfTUFLRT0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCi1maQotCi1ybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAotbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAudHN0OyB0aGVuCi0gIGFtX19sZWFkaW5nX2RvdD0uCi1lbHNlCi0gIGFtX19sZWFkaW5nX2RvdD1fCi1maQotcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAotCi0jIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKLWlmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCIgJiYKLSAgIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi0jIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKLWlmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCi0gIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgotICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKLSAgZWxzZQotICAgIENZR1BBVEhfVz1lY2hvCi0gIGZpCi1maQotCi0KLSMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KLSBQQUNLQUdFPW9wcm9maWxlCi0gVkVSU0lPTj0wLjkuMQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRSAiJFBBQ0tBR0UiCi1fQUNFT0YKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgotX0FDRU9GCi0KLSMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KLQotQUNMT0NBTD0ke0FDTE9DQUwtIiR7YW1fbWlzc2luZ19ydW59YWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0ifQotCi0KLUFVVE9DT05GPSR7QVVUT0NPTkYtIiR7YW1fbWlzc2luZ19ydW59YXV0b2NvbmYifQotCi0KLUFVVE9NQUtFPSR7QVVUT01BS0UtIiR7YW1fbWlzc2luZ19ydW59YXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259In0KLQotCi1BVVRPSEVBREVSPSR7QVVUT0hFQURFUi0iJHthbV9taXNzaW5nX3J1bn1hdXRvaGVhZGVyIn0KLQotCi1NQUtFSU5GTz0ke01BS0VJTkZPLSIke2FtX21pc3NpbmdfcnVufW1ha2VpbmZvIn0KLQotaW5zdGFsbF9zaD0ke2luc3RhbGxfc2gtIiRhbV9hdXhfZGlyL2luc3RhbGwtc2gifQotCi0jIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKLSMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKLSMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKLSMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1TVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAotaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JFNUUklQIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgotICBhY19jdF9TVFJJUD0kU1RSSVAKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1NUUklQIiAmJiBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSI6IgotZmkKLWZpCi1hY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAotaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1NUUklQIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBTVFJJUD0kYWNfY3RfU1RSSVAKLWVsc2UKLSAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgotZmkKLQotZmkKLUlOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCR7U0hFTEx9IFwkKGluc3RhbGxfc2gpIC1jIC1zIgotCi0jIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgotIyBzb21lIHBsYXRmb3Jtcy4KLSMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQotQU1UQVI9JHtBTVRBUi0iJHthbV9taXNzaW5nX3J1bn10YXIifQotCi1hbV9fdGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0geGYgLScKLQotCi0KLQotCi0gICAgICAgICAgYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBjb25maWcuaCIKLQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLVJBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSQU5MSUIiID4mNQotZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCi0gIGFjX2N0X1JBTkxJQj0kUkFOTElCCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQiIgJiYgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IjoiCi1maQotZmkKLWFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKLWlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgUkFOTElCPSRhY19jdF9SQU5MSUIKLWVsc2UKLSAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCi1maQotCi0KLURBVEU9ImBkYXRlICcrJWEgJWQgJUIgJVknYCIKLQotCi1PUFJPRklMRV9ESVI9YHB3ZGAKLQotCi0jIHRoaXMgbmVlZHMgdG8gY29tZSBiZWZvcmUgLS13aXRoLWdjYyBzbyB3ZSBsaW5rIHdpdGggYmludXRpbCdzIHZlcnNpb24KLSMgb2YgbGliaWJlcnR5IC4uLiBzaWdoCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYmludXRpbHMgb3IgLS13aXRob3V0LWJpbnV0aWxzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9iaW51dGlscytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9iaW51dGlscyIKLSAgQklOVVRJTFNESVI9JHdpdGh2YWwKLWZpOwotCi1pZiB0ZXN0ICIkQklOVVRJTFNESVIiICE9ICIiOyB0aGVuCi0JTEQ9IiRCSU5VVElMU0RJUi9sZCIKLQlpZiB0ZXN0ICIkQ0ZMQUdTIiA9ICIiOyB0aGVuCi0JCUNGTEFHUz0iLWcgLU8yIgotCWZpCi0JaWYgdGVzdCAiJENYWEZMQUdTIiA9ICIiOyB0aGVuCi0JCUNYWEZMQUdTPSItZyAtTzIiCi0JZmkKLQlDRkxBR1M9IiRDRkxBR1MgLUkgJEJJTlVUSUxTRElSL2luY2x1ZGUiCi0JQ1hYRkxBR1M9IiRDWFhGTEFHUyAtSSAkQklOVVRJTFNESVIvaW5jbHVkZSIKLQlMREZMQUdTPSIkTERGTEFHUyAtTCAkQklOVVRJTFNESVIvbGliIC1YbGlua2VyIC1SIC1YbGlua2VyICRCSU5VVElMU0RJUi9saWIiCi1maQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ2NjIG9yIC0td2l0aG91dC1nY2Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2djYytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9nY2MiCi0gIEdDQ0RJUj0kd2l0aHZhbAotZmk7Ci0KLWlmIHRlc3QgIiRHQ0NESVIiICE9ICIiOyB0aGVuCi0JQ0M9IiRHQ0NESVIvYmluL2djYyIKLQlDWFg9IiRHQ0NESVIvYmluL2crKyIKLQlMREZMQUdTPSIkTERGTEFHUyAtTCAkR0NDRElSL2xpYiAtWGxpbmtlciAtUiAtWGxpbmtlciAkR0NDRElSL2xpYiIKLWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgQ0M9JGFjX2N0X0NDCi1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCi0KLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KLSAgYWNfY3RfQ0M9JENDCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1hY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwotaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBDQz0kYWNfY3RfQ0MKLWVsc2UKLSAgQ0M9IiRhY19jdl9wcm9nX0NDIgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotICBhY19wcm9nX3JlamVjdGVkPW5vCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgotICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCi0gICAgICAgY29udGludWUKLSAgICAgZmkKLSAgICBhY19jdl9wcm9nX0NDPSJjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1pZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCi0gICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KLSAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCi0gIHNoaWZ0Ci0gIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgotICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgotICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KLSAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KLSAgICBzaGlmdAotICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgotICBmaQotZmkKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gY2wKLSAgZG8KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCi0gIGRvbmUKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICBmb3IgYWNfcHJvZyBpbiBjbAotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKLWRvbmUKLQotICBDQz0kYWNfY3RfQ0MKLWZpCi0KLWZpCi0KLQotdGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCi0jIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi1lY2hvICIkYXNfbWU6JExJTkVOTzoiIFwKLSAgICAgImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1hY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwotYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLmV4ZSBiLm91dCIKLSMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KLSMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KLSMgb2YgZXhlZXh0LgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAkRUNIT19DIiA+JjYKLWFjX2xpbmtfZGVmYXVsdD1gZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtfZGVmYXVsdFwiIikgPiY1Ci0gIChldmFsICRhY19saW5rX2RlZmF1bHQpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgIyBGaW5kIHRoZSBvdXRwdXQsIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QgbGlrZWx5LiAgVGhpcyBzY2hlbWUgaXMKLSMgbm90IHJvYnVzdCB0byBqdW5rIGluIGAuJywgaGVuY2UgZ28gdG8gd2lsZGNhcmRzIChhLiopIG9ubHkgYXMgYSBsYXN0Ci0jIHJlc29ydC4KLQotIyBCZSBjYXJlZnVsIHRvIGluaXRpYWxpemUgdGhpcyB2YXJpYWJsZSwgc2luY2UgaXQgdXNlZCB0byBiZSBjYWNoZWQuCi0jIE90aGVyd2lzZSBhbiBvbGQgY2FjaGUgdmFsdWUgb2YgYG5vJyBsZWQgdG8gYEVYRUVYVCA9IG5vJyBpbiBhIE1ha2VmaWxlLgotYWNfY3ZfZXhlZXh0PQotIyBiLm91dCBpcyBjcmVhdGVkIGJ5IGk5NjAgY29tcGlsZXJzLgotZm9yIGFjX2ZpbGUgaW4gYV9vdXQuZXhlIGEuZXhlIGNvbmZ0ZXN0LmV4ZSBhLm91dCBjb25mdGVzdCBhLiogY29uZnRlc3QuKiBiLm91dAotZG8KLSAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubyB8ICoub2JqICkKLQk7OwotICAgIGNvbmZ0ZXN0LiRhY19leHQgKQotCSMgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUuCi0JOzsKLSAgICBbYWJdLm91dCApCi0JIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKLQkjIGNlcnRhaW5seSByaWdodC4KLQlicmVhazs7Ci0gICAgKi4qICkKLQlhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKLQkjIEZJWE1FOiBJIGJlbGlldmUgd2UgZXhwb3J0IGFjX2N2X2V4ZWV4dCBmb3IgTGlidG9vbCwKLQkjIGJ1dCBpdCB3b3VsZCBiZSBjb29sIHRvIGZpbmQgb3V0IGlmIGl0J3MgdHJ1ZS4gIERvZXMgYW55Ym9keQotCSMgbWFpbnRhaW4gTGlidG9vbD8gLS1ha2ltLgotCWV4cG9ydCBhY19jdl9leGVleHQKLQlicmVhazs7Ci0gICAgKiApCi0JYnJlYWs7OwotICBlc2FjCi1kb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9Ci1maQotCi1hY19leGVleHQ9JGFjX2N2X2V4ZWV4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2ZpbGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2ZpbGUiID4mNgotCi0jIENoZWNrIHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKLSMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLSMgRklYTUU6IFRoZXNlIGNyb3NzIGNvbXBpbGVyIGhhY2tzIHNob3VsZCBiZSByZW1vdmVkIGZvciBBdXRvY29uZiAzLjAKLSMgSWYgbm90IGNyb3NzIGNvbXBpbGluZywgY2hlY2sgdGhhdCB3ZSBjYW4gcnVuIGEgc2ltcGxlIHByb2dyYW0uCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KLSAgaWYgeyBhY190cnk9Jy4vJGFjX2ZpbGUnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgICBjcm9zc19jb21waWxpbmc9bm8KLSAgZWxzZQotICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KLQljcm9zc19jb21waWxpbmc9eWVzCi0gICAgZWxzZQotCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgotSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGZpCi0gIGZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0KLXJtIC1mIGEub3V0IGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAotYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKLSMgQ2hlY2sgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgotIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAkRUNIT19DIiA+JjYKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQotZWNobyAiJHtFQ0hPX1R9JGNyb3NzX2NvbXBpbGluZyIgPiY2Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAjIElmIGJvdGggYGNvbmZ0ZXN0LmV4ZScgYW5kIGBjb25mdGVzdCcgYXJlIGBwcmVzZW50JyAod2VsbCwgb2JzZXJ2YWJsZSkKLSMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAotIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKLSMgYHJtJy4KLWZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbwotICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKLSAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5vIHwgKi5vYmogKSA7OwotICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAotCSAgZXhwb3J0IGFjX2N2X2V4ZWV4dAotCSAgYnJlYWs7OwotICAgICogKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZXhlZXh0IiA+JjYKLQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotRVhFRVhUPSRhY19jdl9leGVleHQKLWFjX2V4ZWV4dD0kRVhFRVhUCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gIGZvciBhY19maWxlIGluIGAobHMgY29uZnRlc3QubyBjb25mdGVzdC5vYmo7IGxzIGNvbmZ0ZXN0LiopIDI+L2Rldi9udWxsYDsgZG8KLSAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnICkgOzsKLSAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKLSAgICAgICBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQotcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfb2JqZXh0IiA+JjYKLU9CSkVYVD0kYWNfY3Zfb2JqZXh0Ci1hY19vYmpleHQ9JE9CSkVYVAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2Ci1HQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKLWFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KLWFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0iLWciCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3Byb2dfY2NfZz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNgotaWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgotICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCi1lbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIENGTEFHUz0iLWcgLU8yIgotICBlbHNlCi0gICAgQ0ZMQUdTPSItZyIKLSAgZmkKLWVsc2UKLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBDRkxBR1M9Ii1PMiIKLSAgZWxzZQotICAgIENGTEFHUz0KLSAgZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2Nfc3RkYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KLWFjX3NhdmVfQ0M9JENDCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0vKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCi1zdHJ1Y3QgYnVmIHsgaW50IHg7IH07Ci1GSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOwotc3RhdGljIGNoYXIgKmUgKHAsIGkpCi0gICAgIGNoYXIgKipwOwotICAgICBpbnQgaTsKLXsKLSAgcmV0dXJuIHBbaV07Ci19Ci1zdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCi17Ci0gIGNoYXIgKnM7Ci0gIHZhX2xpc3QgdjsKLSAgdmFfc3RhcnQgKHYscCk7Ci0gIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7Ci0gIHZhX2VuZCAodik7Ci0gIHJldHVybiBzOwotfQotCi0vKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcwotICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgotICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCi0gICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQxIGlzIGFkZGVkIHRvIGdldAotICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgotICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCi0gICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZDEuICAqLwotaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKLQotaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Ci1zdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKLXN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OwotaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7Ci1pbnQgYXJnYzsKLWNoYXIgKiphcmd2OwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLSMgRG9uJ3QgdHJ5IGdjYyAtYW5zaTsgdGhhdCB0dXJucyBvZmYgdXNlZnVsIGV4dGVuc2lvbnMgYW5kCi0jIGJyZWFrcyBzb21lIHN5c3RlbXMnIGhlYWRlciBmaWxlcy4KLSMgQUlYCQkJLXFsYW5nbHZsPWFuc2kKLSMgVWx0cml4IGFuZCBPU0YvMQktc3RkMQotIyBIUC1VWCAxMC4yMCBhbmQgbGF0ZXIJLUFlCi0jIEhQLVVYIG9sZGVyIHZlcnNpb25zCS1BYSAtRF9IUFVYX1NPVVJDRQotIyBTVlI0CQkJLVhjIC1EX19FWFRFTlNJT05TX18KLWZvciBhY19hcmcgaW4gIiIgLXFsYW5nbHZsPWFuc2kgLXN0ZDEgLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKLWRvCi0gIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgotICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfYXJnCi1icmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAotQ0M9JGFjX3NhdmVfQ0MKLQotZmkKLQotY2FzZSAieCRhY19jdl9wcm9nX2NjX3N0ZGMiIGluCi0gIHh8eG5vKQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vbmUgbmVlZGVkIiA+JjYgOzsKLSAgKikKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNgotICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2Nfc3RkYyIgOzsKLWVzYWMKLQotIyBTb21lIHBlb3BsZSB1c2UgYSBDKysgY29tcGlsZXIgdG8gY29tcGlsZSBDLiAgU2luY2Ugd2UgdXNlIGBleGl0JywKLSMgaW4gQysrIHdlIG5lZWQgdG8gZGVjbGFyZSBpdC4gIEluIGNhc2Ugc29tZW9uZSB1c2VzIHRoZSBzYW1lIGNvbXBpbGVyCi0jIGZvciBib3RoIGNvbXBpbGluZyBDIGFuZCBDKysgd2UgbmVlZCB0byBoYXZlIHRoZSBDKysgY29tcGlsZXIgZGVjaWRlCi0jIHRoZSBkZWNsYXJhdGlvbiBvZiBleGl0LCBzaW5jZSBpdCdzIHRoZSBtb3N0IGRlbWFuZGluZyBlbnZpcm9ubWVudC4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2lmbmRlZiBfX2NwbHVzcGx1cwotICBjaG9rZSBtZQotI2VuZGlmCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKLSAgICcnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpIHRocm93ICgpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOycgXAotICAgJ3ZvaWQgZXhpdCAoaW50KTsnCi1kbwotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfZGVjbGFyYXRpb24KLWludAotbWFpbiAoKQotewotZXhpdCAoNDIpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1ybSAtZiBjb25mdGVzdCoKLWlmIHRlc3QgLW4gIiRhY19kZWNsYXJhdGlvbiI7IHRoZW4KLSAgZWNobyAnI2lmZGVmIF9fY3BsdXNwbHVzJyA+PmNvbmZkZWZzLmgKLSAgZWNobyAkYWNfZGVjbGFyYXRpb24gICAgICA+PmNvbmZkZWZzLmgKLSAgZWNobyAnI2VuZGlmJyAgICAgICAgICAgICA+PmNvbmZkZWZzLmgKLWZpCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLURFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKLQotICAgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyIKLQotCi1hbV9tYWtlPSR7TUFLRS1tYWtlfQotY2F0ID4gY29uZmluYyA8PCAnRU5EJwotYW1fX2RvaXQ6Ci0JQGVjaG8gZG9uZQotLlBIT05ZOiBhbV9fZG9pdAotRU5ECi0jIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UuLi4gJEVDSE9fQyIgPiY2Ci1hbV9faW5jbHVkZT0iIyIKLWFtX19xdW90ZT0KLV9hbV9yZXN1bHQ9bm9uZQotIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KLWVjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKLSMgV2UgZ3JlcCBvdXQgYEVudGVyaW5nIGRpcmVjdG9yeScgYW5kIGBMZWF2aW5nIGRpcmVjdG9yeScKLSMgbWVzc2FnZXMgd2hpY2ggY2FuIG9jY3VyIGlmIGB3JyBlbmRzIHVwIGluIE1BS0VGTEFHUy4KLSMgSW4gcGFydGljdWxhciB3ZSBkb24ndCBsb29rIGF0IGBebWFrZTonIGJlY2F1c2UgR05VIG1ha2UgbWlnaHQKLSMgYmUgaW52b2tlZCB1bmRlciBzb21lIG90aGVyIG5hbWUgKHVzdWFsbHkgImdtYWtlIiksIGluIHdoaWNoCi0jIGNhc2UgaXQgcHJpbnRzIGl0cyBuZXcgbmFtZSBpbnN0ZWFkIG9mIGBtYWtlJy4KLWlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsIHwgZ3JlcCAtdiAnaW5nIGRpcmVjdG9yeSdgIiA9ICJkb25lIjsgdGhlbgotICAgYW1fX2luY2x1ZGU9aW5jbHVkZQotICAgYW1fX3F1b3RlPQotICAgX2FtX3Jlc3VsdD1HTlUKLWZpCi0jIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KLWlmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KLSAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKLSAgIGlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCIgPSAiZG9uZSI7IHRoZW4KLSAgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCi0gICAgICBhbV9fcXVvdGU9IlwiIgotICAgICAgX2FtX3Jlc3VsdD1CU0QKLSAgIGZpCi1maQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRfYW1fcmVzdWx0IiA+JjYKLXJtIC1mIGNvbmZpbmMgY29uZm1mCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIG9yIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCi0gIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCi0gIEFNREVQQkFDS1NMQVNIPSdcJwotZmkKLQotCi1pZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KLSAgQU1ERVBfVFJVRT0KLSAgQU1ERVBfRkFMU0U9JyMnCi1lbHNlCi0gIEFNREVQX1RSVUU9JyMnCi0gIEFNREVQX0ZBTFNFPQotZmkKLQotCi0KLQotZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEJy4KLSAgbWtkaXIgY29uZnRlc3QuZGlyCi0gICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCi0gICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCi0gIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCi0gIGNkIGNvbmZ0ZXN0LmRpcgotICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKLSAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKLSAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKLSAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCi0gICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAotICAjIGRpcmVjdG9yeS4KLSAgbWtkaXIgc3ViCi0KLSAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgotICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAotICBmaQotICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KLSAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKLSAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCi0gICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgotICAgICMKLSAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQotICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCi0gICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCi0gICAgOiA+IHN1Yi9jb25mdGVzdC5jCi0gICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCi0gICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCi0gICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAotICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KLSAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAotICAgIGRvbmUKLSAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCi0KLSAgICBjYXNlICRkZXBtb2RlIGluCi0gICAgbm9zaWRlZWZmZWN0KQotICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCi0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCi0gICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KLQljb250aW51ZQotICAgICAgZWxzZQotCWJyZWFrCi0gICAgICBmaQotICAgICAgOzsKLSAgICBub25lKSBicmVhayA7OwotICAgIGVzYWMKLSAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQotICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgotICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKLSAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCi0gICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCi0gICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQotICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCi0gICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAotICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCi0gICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKLSAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCi0gICAgICAgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGZpCi0gIGRvbmUKLQotICBjZCAuLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi1lbHNlCi0gIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLWZpCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjYKLUNDREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQotCi0KLQotaWYKLSAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKLSAgJiYgdGVzdCAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPQotICBhbV9fZmFzdGRlcENDX0ZBTFNFPScjJwotZWxzZQotICBhbV9fZmFzdGRlcENDX1RSVUU9JyMnCi0gIGFtX19mYXN0ZGVwQ0NfRkFMU0U9Ci1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNgotIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KLWlmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCi0gIENQUD0KLWZpCi1pZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKLSAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgotICAgIGRvCi0gICAgICBhY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgotICBicmVhawotZmkKLQotICAgIGRvbmUKLSAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCi0KLWZpCi0gIENQUD0kYWNfY3ZfcHJvZ19DUFAKLWVsc2UKLSAgYWNfY3ZfcHJvZ19DUFA9JENQUAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDUFAiID4mNQotZWNobyAiJHtFQ0hPX1R9JENQUCIgPiY2Ci1hY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgotICA6Ci1lbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluICRDQ0MgZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQwotICBkbwotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgotICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUNYWD0kYWNfY3ZfcHJvZ19DWFgKLWlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JENYWCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KLSAgYWNfY3RfQ1hYPSRDWFgKLSAgZm9yIGFjX3Byb2cgaW4gJENDQyBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1hY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DWFgiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCi1kb25lCi10ZXN0IC1uICIkYWNfY3RfQ1hYIiB8fCBhY19jdF9DWFg9ImcrKyIKLQotICBDWFg9JGFjX2N0X0NYWAotZmkKLQotCi0jIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi1lY2hvICIkYXNfbWU6JExJTkVOTzoiIFwKLSAgICAgImNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1hY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCi17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1hY19jdl9jeHhfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjYKLUdYWD1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAotYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KLWFjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi1DWFhGTEFHUz0iLWciCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jeHhfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3Byb2dfY3h4X2c9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3Byb2dfY3h4X2c9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY3h4X2ciID4mNgotaWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCi0gIENYWEZMQUdTPSRhY19zYXZlX0NYWEZMQUdTCi1lbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBDWFhGTEFHUz0iLWcgLU8yIgotICBlbHNlCi0gICAgQ1hYRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgIENYWEZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBDWFhGTEFHUz0KLSAgZmkKLWZpCi1mb3IgYWNfZGVjbGFyYXRpb24gaW4gXAotICAgJycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCkgdGhyb3cgKCk7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7JyBcCi0gICAndm9pZCBleGl0IChpbnQpOycKLWRvCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2RlY2xhcmF0aW9uCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLWV4aXQgKDQyKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2RlY2xhcmF0aW9uCi1pbnQKLW1haW4gKCkKLXsKLWV4aXQgKDQyKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1ybSAtZiBjb25mdGVzdCoKLWlmIHRlc3QgLW4gIiRhY19kZWNsYXJhdGlvbiI7IHRoZW4KLSAgZWNobyAnI2lmZGVmIF9fY3BsdXNwbHVzJyA+PmNvbmZkZWZzLmgKLSAgZWNobyAkYWNfZGVjbGFyYXRpb24gICAgICA+PmNvbmZkZWZzLmgKLSAgZWNobyAnI2VuZGlmJyAgICAgICAgICAgICA+PmNvbmZkZWZzLmgKLWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KLSAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAotICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgotICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAotICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0Ci0gICMgaW4gRCcuCi0gIG1rZGlyIGNvbmZ0ZXN0LmRpcgotICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQotICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgotICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgotICBjZCBjb25mdGVzdC5kaXIKLSAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCi0gICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCi0gICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCi0gICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgotICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKLSAgIyBkaXJlY3RvcnkuCi0gIG1rZGlyIHN1YgotCi0gIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCi0gIGZpCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgotICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCi0gICAgZG9uZQotICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKLQotICAgIGNhc2UgJGRlcG1vZGUgaW4KLSAgICBub3NpZGVlZmZlY3QpCi0gICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgotCWNvbnRpbnVlCi0gICAgICBlbHNlCi0JYnJlYWsKLSAgICAgIGZpCi0gICAgICA7OwotICAgIG5vbmUpIGJyZWFrIDs7Ci0gICAgZXNhYwotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCi0gICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAotICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKLSAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGZpCi0gIGRvbmUKLQotICBjZCAuLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi1lbHNlCi0gIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjYKLUNYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCi0KLQotCi1pZgotICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAotICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KLSAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KLSAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCi1lbHNlCi0gIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCi0gIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQotZmkKLQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxkIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBsZDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19MRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfTEQ9ImxkIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotTEQ9JGFjX2N2X3Byb2dfTEQKLWlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRMRCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLXRlc3QgIiRMRCIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbGQgbm90IGZvdW5kIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGxkIG5vdCBmb3VuZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrZXJuZWwgT1Byb2ZpbGUgc3VwcG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrZXJuZWwgT1Byb2ZpbGUgc3VwcG9ydC4uLiAkRUNIT19DIiA+JjYKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1rZXJuZWwtc3VwcG9ydCBvciAtLXdpdGhvdXQta2VybmVsLXN1cHBvcnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2tlcm5lbF9zdXBwb3J0K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2tlcm5lbF9zdXBwb3J0IgotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgotCU9QUk9GSUxFXzI2PXllcwotZmkKLQotZmk7Ci0KLWlmIHRlc3QgIiRPUFJPRklMRV8yNiIgIT0gInllcyI7IHRoZW4KLQotCi0JS1NSQz0vbGliL21vZHVsZXMvYHVuYW1lIC1yYC9idWlsZAotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpbnV4IG9yIC0td2l0aG91dC1saW51eCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbGludXgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbGludXgiCi0gIEtTUkM9JHdpdGh2YWwKLWZpOwotCUtJTkM9JEtTUkMvaW5jbHVkZQotCi0KLQotU0FWRV9DRkxBR1M9JENGTEFHUwotQ0ZMQUdTPSItSSRLSU5DIC1PMiAtRF9fS0VSTkVMX18iCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLWludAotbWFpbiAoKQotewotCi0jaWZuZGVmIENPTkZJR19PUFJPRklMRQotYnJlYWtfbWVfaGFyZChcXFwpOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBPUFJPRklMRV8yNj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotT1BST0ZJTEVfMjY9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi0KLQotU0FWRV9DRkxBR1M9JENGTEFHUwotQ0ZMQUdTPSItSSRLSU5DIC1PMiAtRF9fS0VSTkVMX18iCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLWludAotbWFpbiAoKQotewotCi0jaWZuZGVmIENPTkZJR19PUFJPRklMRV9NT0RVTEUKLWJyZWFrX21lX2hhcmQoXFxcKTsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgT1BST0ZJTEVfMjY9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLU9QUk9GSUxFXzI2PSRPUFJPRklMRV8yNgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNGTEFHUz0kU0FWRV9DRkxBR1MKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRPUFJPRklMRV8yNiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kT1BST0ZJTEVfMjYiID4mNgotCi0KLQotaWYgdGVzdCAiJE9QUk9GSUxFXzI2IiA9IHllczsgdGhlbgotICBrZXJuZWxfc3VwcG9ydF9UUlVFPQotICBrZXJuZWxfc3VwcG9ydF9GQUxTRT0nIycKLWVsc2UKLSAga2VybmVsX3N1cHBvcnRfVFJVRT0nIycKLSAga2VybmVsX3N1cHBvcnRfRkFMU0U9Ci1maQotCi0KLQotCi1pZiB0ZXN0ICIkT1BST0ZJTEVfMjYiID0gIm5vIjsgdGhlbgotCi1pZiB0ZXN0ICEgLWYgJEtJTkMvbGludXgvYXV0b2NvbmYuaDsgdGhlbgotCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIHN1aXRhYmx5IGNvbmZpZ3VyZWQga2VybmVsIGluY2x1ZGUgdHJlZSBmb3VuZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBzdWl0YWJseSBjb25maWd1cmVkIGtlcm5lbCBpbmNsdWRlIHRyZWUgZm91bmQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGtlcm5lbCB2ZXJzaW9uIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGtlcm5lbCB2ZXJzaW9uLi4uICRFQ0hPX0MiID4mNgotZXZhbCBLVkVSUz1gZ2NjIC1JJEtJTkMgLUUgLWRNICRLSU5DL2xpbnV4L3ZlcnNpb24uaCB8IGdyZXAgLXcgVVRTX1JFTEVBU0UgfCBhd2sgJ3twcmludCAkM30nYAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEtWRVJTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRLVkVSUyIgPiY2Ci1jYXNlICIkS1ZFUlMiIGluCi0yLjIuKnwyLjQuKikgOzsKLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFVuc3VwcG9ydGVkIGtlcm5lbCB2ZXJzaW9uIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFVuc3VwcG9ydGVkIGtlcm5lbCB2ZXJzaW9uIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1lc2FjCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBrZXJuZWwgdmVyc2lvbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGtlcm5lbCB2ZXJzaW9uLi4uICRFQ0hPX0MiID4mNgotCi1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1JJEtJTkMgLURfX0tFUk5FTF9fIC1XZXJyb3IiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotICAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotICAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLWludAotbWFpbiAoKQotewotCi0gICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiwgMiwgMTApCi0gIGJyZWFrX21lX2hhcmQoXFxcKTsKLSAgI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBvayIgPiY1Ci1lY2hvICIke0VDSE9fVH1vayIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNoZWNrIGh0bWwgZG9jdW1lbnRhdGlvbiBpbnN0YWxsIHNlY3Rpb24iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2hlY2sgaHRtbCBkb2N1bWVudGF0aW9uIGluc3RhbGwgc2VjdGlvbiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNGTEFHUz0kU0FWRV9DRkxBR1MKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRLSU5DL2xpbnV4L3NwaW5sb2NrLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJEtJTkMvbGludXgvc3BpbmxvY2suaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgLWYgJEtJTkMvbGludXgvc3BpbmxvY2suaDsgdGhlbgotCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1ESEFWRV9MSU5VWF9TUElOTE9DS19IRUFERVIiCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci1lbHNlCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBydGNfbG9jayIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBydGNfbG9jay4uLiAkRUNIT19DIiA+JjYKLWdjYyAtSSRLSU5DIC1FICRLSU5DL2xpbnV4L21jMTQ2ODE4cnRjLmggfCBncmVwIHJ0Y19sb2NrID4vZGV2L251bGwKLWlmIHRlc3QgIiQ/IiAtZXEgMDsgdGhlbgotCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1EUlRDX0xPQ0siCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci1lbHNlCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotYXJjaD0idW5rbm93biIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgeDg2IGFyY2hpdGVjdHVyZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB4ODYgYXJjaGl0ZWN0dXJlLi4uICRFQ0hPX0MiID4mNgotCi1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1JJEtJTkMgLU8yIC1EX19LRVJORUxfXyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotaW50Ci1tYWluICgpCi17Ci0KLSNpZm5kZWYgQ09ORklHX1g4NgotYnJlYWtfbWVfaGFyZChcXFwpOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICB4ODY9MQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi14ODY9MAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNGTEFHUz0kU0FWRV9DRkxBR1MKLQotCi1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1JJEtJTkMgLU8yIC1EX19LRVJORUxfXyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotaW50Ci1tYWluICgpCi17Ci0KLSNpZm5kZWYgQ09ORklHX1g4Nl9XUF9XT1JLU19PSwotYnJlYWtfbWVfaGFyZChcXFwpOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICB4ODY9MQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi14ODY9JHg4NgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNGTEFHUz0kU0FWRV9DRkxBR1MKLQoteD1ubwotdGVzdCAieCR4ODYiID0gIngxIiAmJiB4PXllcwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHgiID4mNQotZWNobyAiJHtFQ0hPX1R9JHgiID4mNgotdGVzdCAiJHg4NiIgPSAxICYmIGFyY2g9Ing4NiIKLQotaWYgdGVzdCAiJGFyY2giID0gInVua25vd24iOyB0aGVuCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpYTY0IGFyY2hpdGVjdHVyZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpYTY0IGFyY2hpdGVjdHVyZS4uLiAkRUNIT19DIiA+JjYKLQotU0FWRV9DRkxBR1M9JENGTEFHUwotQ0ZMQUdTPSItSSRLSU5DIC1PMiAtRF9fS0VSTkVMX18iCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLWludAotbWFpbiAoKQotewotCi0jaWZuZGVmIENPTkZJR19JQTY0Ci1icmVha19tZV9oYXJkKFxcXCk7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGlhNjQ9MQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1pYTY0PTAKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi0KLSAJeD1ubwotdGVzdCAieCRpYTY0IiA9ICJ4MSIgJiYgeD15ZXMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICR4IiA+JjUKLWVjaG8gIiR7RUNIT19UfSR4IiA+JjYKLSAJdGVzdCAiJGlhNjQiID0gMSAmJiBhcmNoPSJpYTY0IgotZmkKLQotdGVzdCAiJGFyY2giID0gInVua25vd24iICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFyY2gva2VybmVsIHZlcnNpb24gY29tYmluYXRpb24iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBhcmNoL2tlcm5lbCB2ZXJzaW9uIGNvbWJpbmF0aW9uLi4uICRFQ0hPX0MiID4mNgotY2FzZSAiJGFyY2giIGluCi1pYTY0KQotCi1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1JJEtJTkMgLURfX0tFUk5FTF9fIC1XZXJyb3IiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotICAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotICAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLWludAotbWFpbiAoKQotewotCi0gICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA0LCAxOCkKLSAgYnJlYWtfbWVfaGFyZChcXFwpOwotICAjZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9rIiA+JjUKLWVjaG8gIiR7RUNIT19UfW9rIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5zdXBwb3J0ZWQgYXJjaC9rZXJuZWwiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5zdXBwb3J0ZWQgYXJjaC9rZXJuZWwiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi0gOzsKLSopIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9rIiA+JjUKLWVjaG8gIiR7RUNIT19UfW9rIiA+JjYKLWVzYWMKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwcmVlbXB0IHBhdGNoIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHByZWVtcHQgcGF0Y2guLi4gJEVDSE9fQyIgPiY2Ci0KLVNBVkVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0iLUkkS0lOQyAtTzIgLURfX0tFUk5FTF9fIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotI2lmbmRlZiBDT05GSUdfUFJFRU1QVAotYnJlYWtfbWVfaGFyZChcXFwpOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBwcmVlbXB0PTEKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotcHJlZW1wdD0wCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ0ZMQUdTPSRTQVZFX0NGTEFHUwotCi14PW5vCi10ZXN0ICJ4JHByZWVtcHQiID0gIngxIiAmJiB4PXllcwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHgiID4mNQotZWNobyAiJHtFQ0hPX1R9JHgiID4mNgotdGVzdCAiJHByZWVtcHQiID0gMCB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bnN1cHBvcnRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiA6IENPTkZJR19QUkVFTVBUIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHVuc3VwcG9ydGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIDogQ09ORklHX1BSRUVNUFQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQotCi0KLU1PRElOU1RBTExESVI9L2xpYi9tb2R1bGVzLyRLVkVSUwotCi1PUFJPRklMRV9NT0RVTEVfQVJDSD0kYXJjaAotCi0KLQotZmkKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1vZHVsZS1kaXIgb3IgLS13aXRob3V0LW1vZHVsZS1kaXIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21vZHVsZV9kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbW9kdWxlX2RpciIKLSAgTU9ESU5TVEFMTERJUj0kd2l0aHZhbAotZmk7Ci0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBtYWxsb2MgYXR0cmlidXRlIGlzIHVuZGVyc3Rvb2QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZC4uLiAkRUNIT19DIiA+JjYKLVNBVkVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0iLVdlcnJvciAkQ0ZMQUdTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi12b2lkIG1vbmtleSgpIF9fYXR0cmlidXRlX18oKG1hbGxvYykpOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OwotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTUFMTE9DX0FUVFJJQlVURV9PSyAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ0ZMQUdTPSRTQVZFX0NGTEFHUwotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgX19idWlsdGluX2V4cGVjdCBpcyB1bmRlcnN0b29kIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBfX2J1aWx0aW5fZXhwZWN0IGlzIHVuZGVyc3Rvb2QuLi4gJEVDSE9fQyIgPiY2Ci1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotaW50IGk7Ci1pZiAoX19idWlsdGluX2V4cGVjdChpLCAwKSkgeyB9Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IEVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1ERVhQRUNUX09LIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi0KLQotCi0KLQotdG9wZGlyPWBwd2RgCi0KLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZXh0cmEtaW5jbHVkZXMgb3IgLS13aXRob3V0LWV4dHJhLWluY2x1ZGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9leHRyYV9pbmNsdWRlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9leHRyYV9pbmNsdWRlcyIKLSAgdXNlX2V4dHJhX2luY2x1ZGVzPSIkd2l0aHZhbCIKLWVsc2UKLSAgdXNlX2V4dHJhX2luY2x1ZGVzPU5PCi0KLWZpOwotaWYgdGVzdCAtbiAiJHVzZV9leHRyYV9pbmNsdWRlcyIgJiYgXAotICAgICAgICB0ZXN0ICIkdXNlX2V4dHJhX2luY2x1ZGVzIiAhPSAiTk8iOyB0aGVuCi0gIGFjX3NhdmVfaWZzPSRJRlMKLSAgSUZTPSc6JwotICBmb3IgZGlyIGluICR1c2VfZXh0cmFfaW5jbHVkZXM7IGRvCi0gICAgZXh0cmFfaW5jbHVkZXM9IiRleHRyYV9pbmNsdWRlcyAtSSRkaXIiCi0gIGRvbmUKLSAgSUZTPSRhY19zYXZlX2lmcwotICBDUFBGTEFHUz0iJENQUEZMQUdTICRleHRyYV9pbmNsdWRlcyIKLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1leHRyYS1saWJzIG9yIC0td2l0aG91dC1leHRyYS1saWJzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9leHRyYV9saWJzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2V4dHJhX2xpYnMiCi0gIHVzZV9leHRyYV9saWJzPSR3aXRodmFsCi1lbHNlCi0gIHVzZV9leHRyYV9saWJzPU5PCi0KLWZpOwotaWYgdGVzdCAtbiAiJHVzZV9leHRyYV9saWJzIiAmJiBcCi0gICAgICAgIHRlc3QgIiR1c2VfZXh0cmFfbGlicyIgIT0gIk5PIjsgdGhlbgotICAgYWNfc2F2ZV9pZnM9JElGUwotICAgSUZTPSc6JwotICAgZm9yIGRpciBpbiAkdXNlX2V4dHJhX2xpYnM7IGRvCi0gICAgIGV4dHJhX2xpYnJhcmllcz0iJGV4dHJhX2xpYnJhcmllcyAtTCRkaXIiCi0gICBkb25lCi0gICBJRlM9JGFjX3NhdmVfaWZzCi0gICBMREZMQUdTPSIkTERGTEFHUyAkZXh0cmFfbGlicmFyaWVzIgotZmkKLQotCi0KLU9SSUdfU0FWRV9MSUJTPSIkTElCUyIKLQotCi0KLWZvciBhY19mdW5jIGluIHNjaGVkX3NldGFmZmluaXR5IHBlcmZtb25jdGwKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwb3B0R2V0Q29udGV4dCBpbiAtbHBvcHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcG9wdEdldENvbnRleHQgaW4gLWxwb3B0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfcG9wdF9wb3B0R2V0Q29udGV4dCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHBvcHQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcG9wdEdldENvbnRleHQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXBvcHRHZXRDb250ZXh0ICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9wb3B0X3BvcHRHZXRDb250ZXh0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfcG9wdF9wb3B0R2V0Q29udGV4dD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9wb3B0X3BvcHRHZXRDb250ZXh0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcG9wdF9wb3B0R2V0Q29udGV4dCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfcG9wdF9wb3B0R2V0Q29udGV4dCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCUE9QVCAxCi1fQUNFT0YKLQotICBMSUJTPSItbHBvcHQgJExJQlMiCi0KLWVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogcG9wdCBsaWJyYXJ5IG5vdCBmb3VuZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBwb3B0IGxpYnJhcnkgbm90IGZvdW5kIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19lZ3JlcCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKLSAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCi0gICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKLSAgICBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2VncmVwIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2VncmVwIiA+JjYKLSBFR1JFUD0kYWNfY3ZfcHJvZ19lZ3JlcAotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxmbG9hdC5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hlYWRlcl9zdGRjPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1maQotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1maQotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIDoKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKLSMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKLSMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKLSNlbHNlCi0jIGRlZmluZSBJU0xPV0VSKGMpIFwKLQkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKLQkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCi0JCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCi0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQotI2VuZGlmCi0KLSNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCi1pbnQKLW1haW4gKCkKLXsKLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCi0JfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCi0gICAgICBleGl0KDIpOwotICBleGl0ICgwKTsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKLV9BQ0VPRgotCi1maQotCi0jIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCi0JCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gbGliaWJlcnR5LmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byB0aGUgQUNfUEFDS0FHRV9OQU1FIGxpc3RzLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgY3BsdXNfZGVtYW5nbGUgaW4gLWxpYmVydHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgY3BsdXNfZGVtYW5nbGUgaW4gLWxpYmVydHkuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9pYmVydHlfY3BsdXNfZGVtYW5nbGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxpYmVydHkgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgY3BsdXNfZGVtYW5nbGUgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWNwbHVzX2RlbWFuZ2xlICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9pYmVydHlfY3BsdXNfZGVtYW5nbGU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9pYmVydHlfY3BsdXNfZGVtYW5nbGU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfaWJlcnR5X2NwbHVzX2RlbWFuZ2xlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfaWJlcnR5X2NwbHVzX2RlbWFuZ2xlIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9pYmVydHlfY3BsdXNfZGVtYW5nbGUgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQklCRVJUWSAxCi1fQUNFT0YKLQotICBMSUJTPSItbGliZXJ0eSAkTElCUyIKLQotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBsaWJlcnR5IGxpYnJhcnkgbm90IGZvdW5kIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGxpYmVydHkgbGlicmFyeSBub3QgZm91bmQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLQotZm9yIGFjX2Z1bmMgaW4geGNhbGxvYwotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4geG1lbWR1cAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBkbG9wZW4gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWRsb3BlbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfZGxfZGxvcGVuPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZGxfZGxvcGVuPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxvcGVuID0geWVzOyB0aGVuCi0gIExJQlM9IiRMSUJTIC1sZGwiOyBETF9MSUI9Ii1sZGwiCi1lbHNlCi0gIERMX0xJQj0iIgotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtYWluIGluIC1saW50bCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYWluIGluIC1saW50bC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2ludGxfbWFpbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGludGwgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotaW50Ci1tYWluICgpCi17Ci1tYWluICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9pbnRsX21haW49eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9pbnRsX21haW49bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfaW50bF9tYWluIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfaW50bF9tYWluIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9pbnRsX21haW4gPSB5ZXM7IHRoZW4KLSAgTElCUz0iJExJQlMgLWxpbnRsIjsgSU5UTF9MSUI9Ii1saW50bCIKLWVsc2UKLSAgSU5UTF9MSUI9IiIKLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBiZmRfb3BlbnIgaW4gLWxiZmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYmZkX29wZW5yIGluIC1sYmZkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfYmZkX2JmZF9vcGVucitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGJmZCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBiZmRfb3BlbnIgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWJmZF9vcGVuciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfYmZkX2JmZF9vcGVucj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2JmZF9iZmRfb3BlbnI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfYmZkX2JmZF9vcGVuciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2JmZF9iZmRfb3BlbnIiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2JmZF9iZmRfb3BlbnIgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQkJGRCAxCi1fQUNFT0YKLQotICBMSUJTPSItbGJmZCAkTElCUyIKLQotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiZmQgbGlicmFyeSBub3QgZm91bmQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogYmZkIGxpYnJhcnkgbm90IGZvdW5kIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi0KLSMgRGV0ZXJtaW5lIGlmIGJmZF9nZXRfc3ludGhldGljX3N5bXRhYiBtYWNybyBpcyBhdmFpbGFibGUKLU9TPSJgdW5hbWVgIgotaWYgdGVzdCAiJE9TIiA9ICJMaW51eCI7IHRoZW4KLQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBiZmRfZ2V0X3N5bnRoZXRpY19zeW10YWIoKSBleGlzdHMgaW4gQkZEIGxpYnJhcnkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGJmZF9nZXRfc3ludGhldGljX3N5bXRhYigpIGV4aXN0cyBpbiBCRkQgbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKLQlybSAtZiB0ZXN0LWZvci1zeW50aAotCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGJmZC5oPgotaW50Ci1tYWluICgpCi17Ci1hc3ltYm9sICogc3ludGhzeW1zOwliZmQgKiBpYmZkID0gMDsKLQkJCWxvbmcgc3ludGhfY291bnQgPSBiZmRfZ2V0X3N5bnRoZXRpY19zeW10YWIoaWJmZCwgMCwgMCwgMCwgMCwgJnN5bnRoc3ltcyk7Ci0JCQlleHRlcm4gY29uc3QgYmZkX3RhcmdldCBiZmRfZWxmNjRfcG93ZXJwY192ZWM7Ci0JCQlleHRlcm4gY29uc3QgYmZkX3RhcmdldCBiZmRfZWxmNjRfcG93ZXJwY2xlX3ZlYzsKLQkJCWNoYXIgKiBwcGNfbmFtZSA9IGJmZF9lbGY2NF9wb3dlcnBjX3ZlYy5uYW1lOwotCQkJY2hhciAqIHBwY2xlX25hbWUgPSBiZmRfZWxmNjRfcG93ZXJwY2xlX3ZlYy5uYW1lOwotICA7Ci0gIHJldHVybiAwOwotfQotCi1fQUNFT0YKLQkkQ0MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAtbyAgdGVzdC1mb3Itc3ludGggPiAvZGV2L251bGwgMj4mMQotCWlmIHRlc3QgLWYgdGVzdC1mb3Itc3ludGg7IHRoZW4KLQkJZWNobyAieWVzIgotCQlTWU5USEVTSVpFX1NZTUJPTFM9JzEnCi0JZWxzZQotCQllY2hvICJubyIKLQkJU1lOVEhFU0laRV9TWU1CT0xTPScwJwotCWZpCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgU1lOVEhFU0laRV9TWU1CT0xTICRTWU5USEVTSVpFX1NZTUJPTFMKLV9BQ0VPRgotCi0Jcm0gLWYgdGVzdC1mb3Itc3ludGgqCi0KLWZpCi0KLQotCi0jIEMrKyB0ZXN0cwotCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBwb3B0IHByb3RvdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHBvcHQgcHJvdG90eXBlLi4uICRFQ0hPX0MiID4mNgotU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKLUNYWEZMQUdTPSItV2Vycm9yICRDWFhGTEFHUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHBvcHQuaD4KLWludAotbWFpbiAoKQotewotCi1pbnQgYzsgY2hhciAqKnY7Ci1wb3B0R2V0Q29udGV4dCgwLCBjLCB2LCAwLCAwKTsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdGFrZXMgY2hhciAqKiIgPiY1Ci1lY2hvICIke0VDSE9fVH10YWtlcyBjaGFyICoqIiA+JjY7Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHRha2VzIGNvbnN0IGNoYXIgKioiID4mNQotZWNobyAiJHtFQ0hPX1R9dGFrZXMgY29uc3QgY2hhciAqKiIgPiY2OwotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgQ09OU1RfUE9QVCAxCi1fQUNFT0YKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNYWEZMQUdTPSIkU0FWRV9DWFhGTEFHUyIKLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBpbmNsdWRlZCBzc3RyZWFtIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byB1c2UgaW5jbHVkZWQgc3N0cmVhbS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHNzdHJlYW0+Ci1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyBPUF9DWFhGTEFHUz0iJE9QX0NYWEZMQUdTIC1JXCR7dG9wX3NyY2Rpcn0vaW5jbHVkZSIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBiZmQgZGVmaW5lcyBib29sIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBiZmQgZGVmaW5lcyBib29sLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YmZkLmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OwotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgVFJVRV9GQUxTRV9BTFJFQURZX0RFRklORUQgMQotX0FDRU9GCi0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLQotCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0eXBlIG9mIHNpemVfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHR5cGUgb2Ygc2l6ZV90Li4uICRFQ0hPX0MiID4mNgotCWZvciBmIGluICJ1bnNpZ25lZCIgInVuc2lnbmVkIGxvbmciOyBkbwotCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKLQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSAgI2luY2x1ZGUgPHN0ZGRlZi5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICB0eXBlZGVmIHZvaWQgKCpmY3QxKShzaXplX3QpOwotICB0eXBlZGVmIHZvaWQgKCpmY3QyKSgkZik7Ci0gIGZjdDEgZjEgPSAwOwotICBmY3QyIGYyID0gMDsKLSAgaWYgKGYxID09IGYyKSB7fQotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgU0laRV9UX1RZUEU9IiRmIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1TSVpFX1RfVFlQRT0iIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotQ0ZMQUdTPSRTQVZFX0NGTEFHUwotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLQkJaWYgdGVzdCAtbiAiJHtTSVpFX1RfVFlQRX0iOyB0aGVuCi0JCQlicmVhawotCQlmaQotCWRvbmUKLQlpZiB0ZXN0IC1uICIke1NJWkVfVF9UWVBFfSI7IHRoZW4KLQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHtTSVpFX1RfVFlQRX0iID4mNQotZWNobyAiJHtFQ0hPX1R9JHtTSVpFX1RfVFlQRX0iID4mNgotCWVsc2UKLQkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm90IGZvdW5kIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IG5vdCBmb3VuZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCWZpCi0KLQotCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHR5cGUgb2YgcHRyZGlmZl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdHlwZSBvZiBwdHJkaWZmX3QuLi4gJEVDSE9fQyIgPiY2Ci0JZm9yIGYgaW4gImludCIgImxvbmciOyBkbwotCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKLQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSAgI2luY2x1ZGUgPHN0ZGRlZi5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICB0eXBlZGVmIHZvaWQgKCpmY3QxKShwdHJkaWZmX3QpOwotICB0eXBlZGVmIHZvaWQgKCpmY3QyKSgkZik7Ci0gIGZjdDEgZjEgPSAwOwotICBmY3QyIGYyID0gMDsKLSAgaWYgKGYxID09IGYyKSB7fQotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgUFRSRElGRl9UX1RZUEU9IiRmIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1QVFJESUZGX1RfVFlQRT0iIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotQ0ZMQUdTPSRTQVZFX0NGTEFHUwotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLQkJaWYgdGVzdCAtbiAiJHtQVFJESUZGX1RfVFlQRX0iOyB0aGVuCi0JCQlicmVhawotCQlmaQotCWRvbmUKLQlpZiB0ZXN0IC1uICIke1BUUkRJRkZfVF9UWVBFfSI7IHRoZW4KLQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHtQVFJESUZGX1RfVFlQRX0iID4mNQotZWNobyAiJHtFQ0hPX1R9JHtQVFJESUZGX1RfVFlQRX0iID4mNgotCWVsc2UKLQkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm90IGZvdW5kIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IG5vdCBmb3VuZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCWZpCi0KLQotCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYQ1BQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKLSAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCi0gICAgZG8KLSAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY3h4X3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2N4eF93ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgotICBicmVhawotZmkKLQotICAgIGRvbmUKLSAgICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCi0KLWZpCi0gIENYWENQUD0kYWNfY3ZfcHJvZ19DWFhDUFAKLWVsc2UKLSAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFhDUFAiID4mNQotZWNobyAiJHtFQ0hPX1R9JENYWENQUCIgPiY2Ci1hY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2N4eF93ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jeHhfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgUGFzc2VzIGJvdGggdGVzdHMuCi1hY19wcmVwcm9jX29rPToKLWJyZWFrCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KLSAgOgotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBYIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFguLi4gJEVDSE9fQyIgPiY2Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC14IG9yIC0td2l0aG91dC14IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF94K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3giCi0KLWZpOwotIyAkaGF2ZV94IGlzIGB5ZXMnLCBgbm8nLCBgZGlzYWJsZWQnLCBvciBlbXB0eSB3aGVuIHdlIGRvIG5vdCB5ZXQga25vdy4KLWlmIHRlc3QgIngkd2l0aF94IiA9IHhubzsgdGhlbgotICAjIFRoZSB1c2VyIGV4cGxpY2l0bHkgZGlzYWJsZWQgWC4KLSAgaGF2ZV94PWRpc2FibGVkCi1lbHNlCi0gIGlmIHRlc3QgIngkeF9pbmNsdWRlcyIgIT0geE5PTkUgJiYgdGVzdCAieCR4X2xpYnJhcmllcyIgIT0geE5PTkU7IHRoZW4KLSAgICAjIEJvdGggdmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldC4KLSAgICBoYXZlX3g9eWVzCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICIke2FjX2N2X2hhdmVfeCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICAjIE9uZSBvciBib3RoIG9mIHRoZSB2YXJzIGFyZSBub3Qgc2V0LCBhbmQgdGhlcmUgaXMgbm8gY2FjaGVkIHZhbHVlLgotYWNfeF9pbmNsdWRlcz1ubyBhY194X2xpYnJhcmllcz1ubwotcm0gLWZyIGNvbmZ0ZXN0LmRpcgotaWYgbWtkaXIgY29uZnRlc3QuZGlyOyB0aGVuCi0gIGNkIGNvbmZ0ZXN0LmRpcgotICAjIE1ha2Ugc3VyZSB0byBub3QgcHV0ICJtYWtlIiBpbiB0aGUgSW1ha2VmaWxlIHJ1bGVzLCBzaW5jZSB3ZSBncmVwIGl0IG91dC4KLSAgY2F0ID5JbWFrZWZpbGUgPDwnX0FDRU9GJwotYWNmaW5keDoKLQlAZWNobyAnYWNfaW1faW5jcm9vdD0iJHtJTkNST09UfSI7IGFjX2ltX3VzcmxpYmRpcj0iJHtVU1JMSUJESVJ9IjsgYWNfaW1fbGliZGlyPSIke0xJQkRJUn0iJwotX0FDRU9GCi0gIGlmICh4bWttZikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCAmJiB0ZXN0IC1mIE1ha2VmaWxlOyB0aGVuCi0gICAgIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCi0gICAgZXZhbCBgJHtNQUtFLW1ha2V9IGFjZmluZHggMj4vZGV2L251bGwgfCBncmVwIC12IG1ha2VgCi0gICAgIyBPcGVuIFdpbmRvd3MgeG1rbWYgcmVwb3J0ZWRseSBzZXRzIExJQkRJUiBpbnN0ZWFkIG9mIFVTUkxJQkRJUi4KLSAgICBmb3IgYWNfZXh0ZW5zaW9uIGluIGEgc28gc2w7IGRvCi0gICAgICBpZiB0ZXN0ICEgLWYgJGFjX2ltX3VzcmxpYmRpci9saWJYMTEuJGFjX2V4dGVuc2lvbiAmJgotCSB0ZXN0IC1mICRhY19pbV9saWJkaXIvbGliWDExLiRhY19leHRlbnNpb247IHRoZW4KLQlhY19pbV91c3JsaWJkaXI9JGFjX2ltX2xpYmRpcjsgYnJlYWsKLSAgICAgIGZpCi0gICAgZG9uZQotICAgICMgU2NyZWVuIG91dCBib2d1cyB2YWx1ZXMgZnJvbSB0aGUgaW1ha2UgY29uZmlndXJhdGlvbi4gIFRoZXkgYXJlCi0gICAgIyBib2d1cyBib3RoIGJlY2F1c2UgdGhleSBhcmUgdGhlIGRlZmF1bHQgYW55d2F5LCBhbmQgYmVjYXVzZQotICAgICMgdXNpbmcgdGhlbSB3b3VsZCBicmVhayBnY2Mgb24gc3lzdGVtcyB3aGVyZSBpdCBuZWVkcyBmaXhlZCBpbmNsdWRlcy4KLSAgICBjYXNlICRhY19pbV9pbmNyb290IGluCi0JL3Vzci9pbmNsdWRlKSA7OwotCSopIHRlc3QgLWYgIiRhY19pbV9pbmNyb290L1gxMS9Yb3MuaCIgJiYgYWNfeF9pbmNsdWRlcz0kYWNfaW1faW5jcm9vdDs7Ci0gICAgZXNhYwotICAgIGNhc2UgJGFjX2ltX3VzcmxpYmRpciBpbgotCS91c3IvbGliIHwgL2xpYikgOzsKLQkqKSB0ZXN0IC1kICIkYWNfaW1fdXNybGliZGlyIiAmJiBhY194X2xpYnJhcmllcz0kYWNfaW1fdXNybGliZGlyIDs7Ci0gICAgZXNhYwotICBmaQotICBjZCAuLgotICBybSAtZnIgY29uZnRlc3QuZGlyCi1maQotCi0jIFN0YW5kYXJkIHNldCBvZiBjb21tb24gZGlyZWN0b3JpZXMgZm9yIFggaGVhZGVycy4KLSMgQ2hlY2sgWDExIGJlZm9yZSBYMTFSbiBiZWNhdXNlIGl0IGlzIG9mdGVuIGEgc3ltbGluayB0byB0aGUgY3VycmVudCByZWxlYXNlLgotYWNfeF9oZWFkZXJfZGlycz0nCi0vdXNyL1gxMS9pbmNsdWRlCi0vdXNyL1gxMVI2L2luY2x1ZGUKLS91c3IvWDExUjUvaW5jbHVkZQotL3Vzci9YMTFSNC9pbmNsdWRlCi0KLS91c3IvaW5jbHVkZS9YMTEKLS91c3IvaW5jbHVkZS9YMTFSNgotL3Vzci9pbmNsdWRlL1gxMVI1Ci0vdXNyL2luY2x1ZGUvWDExUjQKLQotL3Vzci9sb2NhbC9YMTEvaW5jbHVkZQotL3Vzci9sb2NhbC9YMTFSNi9pbmNsdWRlCi0vdXNyL2xvY2FsL1gxMVI1L2luY2x1ZGUKLS91c3IvbG9jYWwvWDExUjQvaW5jbHVkZQotCi0vdXNyL2xvY2FsL2luY2x1ZGUvWDExCi0vdXNyL2xvY2FsL2luY2x1ZGUvWDExUjYKLS91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNQotL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI0Ci0KLS91c3IvWDM4Ni9pbmNsdWRlCi0vdXNyL3gzODYvaW5jbHVkZQotL3Vzci9YRnJlZTg2L2luY2x1ZGUvWDExCi0KLS91c3IvaW5jbHVkZQotL3Vzci9sb2NhbC9pbmNsdWRlCi0vdXNyL3Vuc3VwcG9ydGVkL2luY2x1ZGUKLS91c3IvYXRoZW5hL2luY2x1ZGUKLS91c3IvbG9jYWwveDExcjUvaW5jbHVkZQotL3Vzci9scHAvWGFtcGxlcy9pbmNsdWRlCi0KLS91c3Ivb3Blbndpbi9pbmNsdWRlCi0vdXNyL29wZW53aW4vc2hhcmUvaW5jbHVkZScKLQotaWYgdGVzdCAiJGFjX3hfaW5jbHVkZXMiID0gbm87IHRoZW4KLSAgIyBHdWVzcyB3aGVyZSB0byBmaW5kIGluY2x1ZGUgZmlsZXMsIGJ5IGxvb2tpbmcgZm9yIEludHJpbnNpYy5oLgotICAjIEZpcnN0LCB0cnkgdXNpbmcgdGhhdCBmaWxlIHdpdGggbm8gc3BlY2lhbCBkaXJlY3Rvcnkgc3BlY2lmaWVkLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY3h4X3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICAjIFdlIGNhbiBjb21waWxlIHVzaW5nIFggaGVhZGVycyB3aXRoIG5vIHNwZWNpYWwgaW5jbHVkZSBkaXJlY3RvcnkuCi1hY194X2luY2x1ZGVzPQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGZvciBhY19kaXIgaW4gJGFjX3hfaGVhZGVyX2RpcnM7IGRvCi0gIGlmIHRlc3QgLXIgIiRhY19kaXIvWDExL0ludHJpbnNpYy5oIjsgdGhlbgotICAgIGFjX3hfaW5jbHVkZXM9JGFjX2RpcgotICAgIGJyZWFrCi0gIGZpCi1kb25lCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWZpICMgJGFjX3hfaW5jbHVkZXMgPSBubwotCi1pZiB0ZXN0ICIkYWNfeF9saWJyYXJpZXMiID0gbm87IHRoZW4KLSAgIyBDaGVjayBmb3IgdGhlIGxpYnJhcmllcy4KLSAgIyBTZWUgaWYgd2UgZmluZCB0aGVtIHdpdGhvdXQgYW55IHNwZWNpYWwgb3B0aW9ucy4KLSAgIyBEb24ndCBhZGQgdG8gJExJQlMgcGVybWFuZW50bHkuCi0gIGFjX3NhdmVfTElCUz0kTElCUwotICBMSUJTPSItbFh0ICRMSUJTIgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+Ci1pbnQKLW1haW4gKCkKLXsKLVh0TWFsbG9jICgwKQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgTElCUz0kYWNfc2F2ZV9MSUJTCi0jIFdlIGNhbiBsaW5rIFggcHJvZ3JhbXMgd2l0aCBubyBzcGVjaWFsIGxpYnJhcnkgcGF0aC4KLWFjX3hfbGlicmFyaWVzPQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1MSUJTPSRhY19zYXZlX0xJQlMKLWZvciBhY19kaXIgaW4gYGVjaG8gIiRhY194X2luY2x1ZGVzICRhY194X2hlYWRlcl9kaXJzIiB8IHNlZCBzL2luY2x1ZGUvbGliL2dgCi1kbwotICAjIERvbid0IGV2ZW4gYXR0ZW1wdCB0aGUgaGFpciBvZiB0cnlpbmcgdG8gbGluayBhbiBYIHByb2dyYW0hCi0gIGZvciBhY19leHRlbnNpb24gaW4gYSBzbyBzbDsgZG8KLSAgICBpZiB0ZXN0IC1yICRhY19kaXIvbGliWHQuJGFjX2V4dGVuc2lvbjsgdGhlbgotICAgICAgYWNfeF9saWJyYXJpZXM9JGFjX2RpcgotICAgICAgYnJlYWsgMgotICAgIGZpCi0gIGRvbmUKLWRvbmUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkgIyAkYWNfeF9saWJyYXJpZXMgPSBubwotCi1pZiB0ZXN0ICIkYWNfeF9pbmNsdWRlcyIgPSBubyB8fCB0ZXN0ICIkYWNfeF9saWJyYXJpZXMiID0gbm87IHRoZW4KLSAgIyBEaWRuJ3QgZmluZCBYIGFueXdoZXJlLiAgQ2FjaGUgdGhlIGtub3duIGFic2VuY2Ugb2YgWC4KLSAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9bm8iCi1lbHNlCi0gICMgUmVjb3JkIHdoZXJlIHdlIGZvdW5kIFggZm9yIHRoZSBjYWNoZS4KLSAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9eWVzIFwKLQkJYWNfeF9pbmNsdWRlcz0kYWNfeF9pbmNsdWRlcyBhY194X2xpYnJhcmllcz0kYWNfeF9saWJyYXJpZXMiCi1maQotZmkKLQotICBmaQotICBldmFsICIkYWNfY3ZfaGF2ZV94IgotZmkgIyAkd2l0aF94ICE9IG5vCi0KLWlmIHRlc3QgIiRoYXZlX3giICE9IHllczsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGF2ZV94IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXZlX3giID4mNgotICBub194PXllcwotZWxzZQotICAjIElmIGVhY2ggb2YgdGhlIHZhbHVlcyB3YXMgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgb3ZlcnJpZGVzIGVhY2ggZ3Vlc3MuCi0gIHRlc3QgIngkeF9pbmNsdWRlcyIgPSB4Tk9ORSAmJiB4X2luY2x1ZGVzPSRhY194X2luY2x1ZGVzCi0gIHRlc3QgIngkeF9saWJyYXJpZXMiID0geE5PTkUgJiYgeF9saWJyYXJpZXM9JGFjX3hfbGlicmFyaWVzCi0gICMgVXBkYXRlIHRoZSBjYWNoZSB2YWx1ZSB0byByZWZsZWN0IHRoZSBjb21tYW5kIGxpbmUgdmFsdWVzLgotICBhY19jdl9oYXZlX3g9ImhhdmVfeD15ZXMgXAotCQlhY194X2luY2x1ZGVzPSR4X2luY2x1ZGVzIGFjX3hfbGlicmFyaWVzPSR4X2xpYnJhcmllcyIKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbGlicmFyaWVzICR4X2xpYnJhcmllcywgaGVhZGVycyAkeF9pbmNsdWRlcyIgPiY1Ci1lY2hvICIke0VDSE9fVH1saWJyYXJpZXMgJHhfbGlicmFyaWVzLCBoZWFkZXJzICR4X2luY2x1ZGVzIiA+JjYKLWZpCi0KLWlmIHRlc3QgIiRub194IiA9IHllczsgdGhlbgotICAjIE5vdCBhbGwgcHJvZ3JhbXMgbWF5IHVzZSB0aGlzIHN5bWJvbCwgYnV0IGl0IGRvZXMgbm90IGh1cnQgdG8gZGVmaW5lIGl0LgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBYX0RJU1BMQVlfTUlTU0lORyAxCi1fQUNFT0YKLQotICBYX0NGTEFHUz0gWF9QUkVfTElCUz0gWF9MSUJTPSBYX0VYVFJBX0xJQlM9Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiR4X2luY2x1ZGVzIjsgdGhlbgotICAgIFhfQ0ZMQUdTPSIkWF9DRkxBR1MgLUkkeF9pbmNsdWRlcyIKLSAgZmkKLQotICAjIEl0IHdvdWxkIGFsc28gYmUgbmljZSB0byBkbyB0aGlzIGZvciBhbGwgLUwgb3B0aW9ucywgbm90IGp1c3QgdGhpcyBvbmUuCi0gIGlmIHRlc3QgLW4gIiR4X2xpYnJhcmllcyI7IHRoZW4KLSAgICBYX0xJQlM9IiRYX0xJQlMgLUwkeF9saWJyYXJpZXMiCi0gICAgIyBGb3IgU29sYXJpczsgc29tZSB2ZXJzaW9ucyBvZiBTdW4gQ0MgcmVxdWlyZSBhIHNwYWNlIGFmdGVyIC1SIGFuZAotICAgICMgb3RoZXJzIHJlcXVpcmUgbm8gc3BhY2UuICBXb3JkcyBhcmUgbm90IHN1ZmZpY2llbnQgLiAuIC4gLgotICAgIGNhc2UgYCh1bmFtZSAtc3IpIDI+L2Rldi9udWxsYCBpbgotICAgICJTdW5PUyA1IiopCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtUiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgc3BhY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1SIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZS4uLiAkRUNIT19DIiA+JjYKLSAgICAgIGFjX3hzYXZlX0xJQlM9JExJQlM7IExJQlM9IiRMSUJTIC1SJHhfbGlicmFyaWVzIgotICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19SX25vc3BhY2U9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX1Jfbm9zcGFjZT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICBpZiB0ZXN0ICRhY19SX25vc3BhY2UgPSB5ZXM7IHRoZW4KLQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci0JWF9MSUJTPSIkWF9MSUJTIC1SJHhfbGlicmFyaWVzIgotICAgICAgZWxzZQotCUxJQlM9IiRhY194c2F2ZV9MSUJTIC1SICR4X2xpYnJhcmllcyIKLQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX1Jfc3BhY2U9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX1Jfc3BhY2U9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotCWlmIHRlc3QgJGFjX1Jfc3BhY2UgPSB5ZXM7IHRoZW4KLQkgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotCSAgWF9MSUJTPSIkWF9MSUJTIC1SICR4X2xpYnJhcmllcyIKLQllbHNlCi0JICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBuZWl0aGVyIHdvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5laXRoZXIgd29ya3MiID4mNgotCWZpCi0gICAgICBmaQotICAgICAgTElCUz0kYWNfeHNhdmVfTElCUwotICAgIGVzYWMKLSAgZmkKLQotICAjIENoZWNrIGZvciBzeXN0ZW0tZGVwZW5kZW50IGxpYnJhcmllcyBYIHByb2dyYW1zIG11c3QgbGluayB3aXRoLgotICAjIERvIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciB0aGUgc3lzdGVtLWluZGVwZW5kZW50IFI2IGxpYnJhcmllcwotICAjICgtbElDRSksIHNpbmNlIHdlIG1heSBuZWVkIC1sc29ja2V0IG9yIHdoYXRldmVyIGZvciBYIGxpbmtpbmcuCi0KLSAgaWYgdGVzdCAiJElTQyIgPSB5ZXM7IHRoZW4KLSAgICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxuc2xfcyAtbGluZXQiCi0gIGVsc2UKLSAgICAjIE1hcnR5biBKb2huc29uIHNheXMgdGhpcyBpcyBuZWVkZWQgZm9yIFVsdHJpeCwgaWYgdGhlIFgKLSAgICAjIGxpYnJhcmllcyB3ZXJlIGJ1aWx0IHdpdGggREVDbmV0IHN1cHBvcnQuICBBbmQgS2FybCBCZXJyeSBzYXlzCi0gICAgIyB0aGUgQWxwaGEgbmVlZHMgZG5ldF9zdHViIChkbmV0IGRvZXMgbm90IGV4aXN0KS4KLSAgICBhY194c2F2ZV9MSUJTPSIkTElCUyI7IExJQlM9IiRMSUJTICRYX0xJQlMgLWxYMTEiCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgWE9wZW5EaXNwbGF5ICgpOwotaW50Ci1tYWluICgpCi17Ci1YT3BlbkRpc3BsYXkgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZG5ldF9udG9hIGluIC1sZG5ldCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZG5ldF9kbmV0X250b2Erc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkbmV0ICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGRuZXRfbnRvYSAoKTsKLWludAotbWFpbiAoKQotewotZG5ldF9udG9hICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2RuZXRfZG5ldF9udG9hPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZG5ldF9kbmV0X250b2E9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZG5ldF9kbmV0X250b2EiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbmV0X2RuZXRfbnRvYSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZG5ldF9kbmV0X250b2EgPSB5ZXM7IHRoZW4KLSAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sZG5ldCIKLWZpCi0KLSAgICBpZiB0ZXN0ICRhY19jdl9saWJfZG5ldF9kbmV0X250b2EgPSBubzsgdGhlbgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0X3N0dWIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZG5ldF9udG9hIGluIC1sZG5ldF9zdHViLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZG5ldF9zdHViX2RuZXRfbnRvYStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGRuZXRfc3R1YiAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBkbmV0X250b2EgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWRuZXRfbnRvYSAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9kbmV0X3N0dWJfZG5ldF9udG9hPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZG5ldF9zdHViX2RuZXRfbnRvYT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbmV0X3N0dWJfZG5ldF9udG9hIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZG5ldF9zdHViX2RuZXRfbnRvYSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZG5ldF9zdHViX2RuZXRfbnRvYSA9IHllczsgdGhlbgotICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxkbmV0X3N0dWIiCi1maQotCi0gICAgZmkKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgIExJQlM9IiRhY194c2F2ZV9MSUJTIgotCi0gICAgIyBtc2hAY2lzLnVmbC5lZHUgc2F5cyAtbG5zbCAoYW5kIC1sc29ja2V0KSBhcmUgbmVlZGVkIGZvciBoaXMgMzg2L0FULAotICAgICMgdG8gZ2V0IHRoZSBTeXNWIHRyYW5zcG9ydCBmdW5jdGlvbnMuCi0gICAgIyBDaGFkIFIuIExhcnNvbiBzYXlzIHRoZSBQeXJhbWlzIE1JUy1FUyBydW5uaW5nIERDL09TeCAoU1ZSNCkKLSAgICAjIG5lZWRzIC1sbnNsLgotICAgICMgVGhlIG5zbCBsaWJyYXJ5IHByZXZlbnRzIHByb2dyYW1zIGZyb20gb3BlbmluZyB0aGUgWCBkaXNwbGF5Ci0gICAgIyBvbiBJcml4IDUuMiwgYWNjb3JkaW5nIHRvIFQuRS4gRGlja2V5LgotICAgICMgVGhlIGZ1bmN0aW9ucyBnZXRob3N0YnluYW1lLCBnZXRzZXJ2YnluYW1lLCBhbmQgaW5ldF9hZGRyIGFyZQotICAgICMgaW4gLWxic2Qgb24gTHlueE9TIDMuMC4xL2kzODYsIGFjY29yZGluZyB0byBMYXJzIEhlY2tpbmcuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBnZXRob3N0YnluYW1lIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0aG9zdGJ5bmFtZS4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBnZXRob3N0YnluYW1lIGlubm9jdW91c19nZXRob3N0YnluYW1lCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGdldGhvc3RieW5hbWUgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgZ2V0aG9zdGJ5bmFtZQotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldGhvc3RieW5hbWUgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfZ2V0aG9zdGJ5bmFtZSkgfHwgZGVmaW5lZCAoX19zdHViX19fZ2V0aG9zdGJ5bmFtZSkKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gZ2V0aG9zdGJ5bmFtZTsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBnZXRob3N0YnluYW1lOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2dldGhvc3RieW5hbWU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIgPiY2Ci0KLSAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUgPSBubzsgdGhlbgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sbnNsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuc2wuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbG5zbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRob3N0YnluYW1lICgpOwotaW50Ci1tYWluICgpCi17Ci1nZXRob3N0YnluYW1lICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUgPSB5ZXM7IHRoZW4KLSAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sbnNsIgotZmkKLQotICAgICAgaWYgdGVzdCAkYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lID0gbm87IHRoZW4KLQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxic2QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbGJzZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2JzZF9nZXRob3N0YnluYW1lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sYnNkICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldGhvc3RieW5hbWUgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWdldGhvc3RieW5hbWUgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfYnNkX2dldGhvc3RieW5hbWU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9ic2RfZ2V0aG9zdGJ5bmFtZT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9ic2RfZ2V0aG9zdGJ5bmFtZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2JzZF9nZXRob3N0YnluYW1lIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9ic2RfZ2V0aG9zdGJ5bmFtZSA9IHllczsgdGhlbgotICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxic2QiCi1maQotCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIGxpZWRlckBza3lsZXIubWF2ZC5ob25leXdlbGwuY29tIHNheXMgd2l0aG91dCAtbHNvY2tldCwKLSAgICAjIHNvY2tldC9zZXRzb2Nrb3B0IGFuZCBvdGhlciByb3V0aW5lcyBhcmUgdW5kZWZpbmVkIHVuZGVyIFNDTyBPRFQKLSAgICAjIDIuMC4gIEJ1dCAtbHNvY2tldCBpcyBicm9rZW4gb24gSVJJWCA1LjIgKGFuZCBpcyBub3QgbmVjZXNzYXJ5Ci0gICAgIyBvbiBsYXRlciB2ZXJzaW9ucyksIHNheXMgU2ltb24gTGVpbmVuOiBpdCBjb250YWlucyBnZXRob3N0YnkqCi0gICAgIyB2YXJpYW50cyB0aGF0IGRvbid0IHVzZSB0aGUgbmFtZSBzZXJ2ZXIgKG9yIHNvbWV0aGluZykuICAtbHNvY2tldAotICAgICMgbXVzdCBiZSBnaXZlbiBiZWZvcmUgLWxuc2wgaWYgYm90aCBhcmUgbmVlZGVkLiAgV2UgYXNzdW1lIHRoYXQKLSAgICAjIGlmIGNvbm5lY3QgbmVlZHMgLWxuc2wsIHNvIGRvZXMgZ2V0aG9zdGJ5bmFtZS4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGNvbm5lY3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgY29ubmVjdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19jb25uZWN0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGNvbm5lY3QgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBjb25uZWN0LgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGNvbm5lY3QgaW5ub2N1b3VzX2Nvbm5lY3QKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgY29ubmVjdCAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBjb25uZWN0Ci0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgY29ubmVjdCAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9jb25uZWN0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19jb25uZWN0KQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBjb25uZWN0OwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IGNvbm5lY3Q7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2Nvbm5lY3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfY29ubmVjdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfY29ubmVjdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19jb25uZWN0IiA+JjYKLQotICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfY29ubmVjdCA9IG5vOyB0aGVuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGNvbm5lY3QgaW4gLWxzb2NrZXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgY29ubmVjdCBpbiAtbHNvY2tldC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3NvY2tldF9jb25uZWN0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sc29ja2V0ICRYX0VYVFJBX0xJQlMgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBjb25uZWN0ICgpOwotaW50Ci1tYWluICgpCi17Ci1jb25uZWN0ICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX3NvY2tldF9jb25uZWN0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfc29ja2V0X2Nvbm5lY3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc29ja2V0X2Nvbm5lY3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zb2NrZXRfY29ubmVjdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfc29ja2V0X2Nvbm5lY3QgPSB5ZXM7IHRoZW4KLSAgWF9FWFRSQV9MSUJTPSItbHNvY2tldCAkWF9FWFRSQV9MSUJTIgotZmkKLQotICAgIGZpCi0KLSAgICAjIEd1aWxsZXJtbyBHb21leiBzYXlzIC1scG9zaXggaXMgbmVjZXNzYXJ5IG9uIEEvVVguCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciByZW1vdmUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcmVtb3ZlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX3JlbW92ZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSByZW1vdmUgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyByZW1vdmUuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgcmVtb3ZlIGlubm9jdW91c19yZW1vdmUKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgcmVtb3ZlICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIHJlbW92ZQotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHJlbW92ZSAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9yZW1vdmUpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3JlbW92ZSkKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gcmVtb3ZlOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IHJlbW92ZTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfcmVtb3ZlPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX3JlbW92ZT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfcmVtb3ZlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3JlbW92ZSIgPiY2Ci0KLSAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JlbW92ZSA9IG5vOyB0aGVuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJlbW92ZSBpbiAtbHBvc2l4IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJlbW92ZSBpbiAtbHBvc2l4Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfcG9zaXhfcmVtb3ZlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scG9zaXggICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcmVtb3ZlICgpOwotaW50Ci1tYWluICgpCi17Ci1yZW1vdmUgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfcG9zaXhfcmVtb3ZlPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfcG9zaXhfcmVtb3ZlPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3Bvc2l4X3JlbW92ZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3Bvc2l4X3JlbW92ZSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfcG9zaXhfcmVtb3ZlID0geWVzOyB0aGVuCi0gIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbHBvc2l4IgotZmkKLQotICAgIGZpCi0KLSAgICAjIEJTREkgQlNEL09TIDIuMSBuZWVkcyAtbGlwYyBmb3IgWE9wZW5EaXNwbGF5LgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2htYXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2htYXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfc2htYXQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgc2htYXQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBzaG1hdC4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBzaG1hdCBpbm5vY3VvdXNfc2htYXQKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgc2htYXQgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgc2htYXQKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBzaG1hdCAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9zaG1hdCkgfHwgZGVmaW5lZCAoX19zdHViX19fc2htYXQpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IHNobWF0OwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IHNobWF0OwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19zaG1hdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19zaG1hdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2htYXQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc2htYXQiID4mNgotCi0gICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zaG1hdCA9IG5vOyB0aGVuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNobWF0IGluIC1saXBjIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobWF0IGluIC1saXBjLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfaXBjX3NobWF0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1saXBjICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHNobWF0ICgpOwotaW50Ci1tYWluICgpCi17Ci1zaG1hdCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9pcGNfc2htYXQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9pcGNfc2htYXQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfaXBjX3NobWF0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfaXBjX3NobWF0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9pcGNfc2htYXQgPSB5ZXM7IHRoZW4KLSAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1saXBjIgotZmkKLQotICAgIGZpCi0gIGZpCi0KLSAgIyBDaGVjayBmb3IgbGlicmFyaWVzIHRoYXQgWDExUjYgWHQvWGF3IHByb2dyYW1zIG5lZWQuCi0gIGFjX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICB0ZXN0IC1uICIkeF9saWJyYXJpZXMiICYmIExERkxBR1M9IiRMREZMQUdTIC1MJHhfbGlicmFyaWVzIgotICAjIFNNIG5lZWRzIElDRSB0byAoZHluYW1pY2FsbHkpIGxpbmsgdW5kZXIgU3VuT1MgNC54IChzbyB3ZSBoYXZlIHRvCi0gICMgY2hlY2sgZm9yIElDRSBmaXJzdCksIGJ1dCB3ZSBtdXN0IGxpbmsgaW4gdGhlIG9yZGVyIC1sU00gLWxJQ0Ugb3IKLSAgIyB3ZSBnZXQgdW5kZWZpbmVkIHN5bWJvbHMuICBTbyBhc3N1bWUgd2UgaGF2ZSBTTSBpZiB3ZSBoYXZlIElDRS4KLSAgIyBUaGVzZSBoYXZlIHRvIGJlIGxpbmtlZCB3aXRoIGJlZm9yZSAtbFgxMSwgdW5saWtlIHRoZSBvdGhlcgotICAjIGxpYnJhcmllcyB3ZSBjaGVjayBmb3IgYmVsb3csIHNvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZS4KLSAgIyBKb2huIEludGVycmFudGUsIEthcmwgQmVycnkKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBJY2VDb25uZWN0aW9uTnVtYmVyIGluIC1sSUNFIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEljZUNvbm5lY3Rpb25OdW1iZXIgaW4gLWxJQ0UuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9JQ0VfSWNlQ29ubmVjdGlvbk51bWJlcitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbElDRSAkWF9FWFRSQV9MSUJTICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgSWNlQ29ubmVjdGlvbk51bWJlciAoKTsKLWludAotbWFpbiAoKQotewotSWNlQ29ubmVjdGlvbk51bWJlciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9JQ0VfSWNlQ29ubmVjdGlvbk51bWJlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX0lDRV9JY2VDb25uZWN0aW9uTnVtYmVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX0lDRV9JY2VDb25uZWN0aW9uTnVtYmVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfSUNFX0ljZUNvbm5lY3Rpb25OdW1iZXIiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX0lDRV9JY2VDb25uZWN0aW9uTnVtYmVyID0geWVzOyB0aGVuCi0gIFhfUFJFX0xJQlM9IiRYX1BSRV9MSUJTIC1sU00gLWxJQ0UiCi1maQotCi0gIExERkxBR1M9JGFjX3NhdmVfTERGTEFHUwotCi1maQotCi1PUklHX1hfU0FWRV9MSUJTPSIkTElCUyIKLUxJQlM9IiRYX1BSRV9MSUJTICRMSUJTICRYX0xJQlMgLWxYMTEgJFhfRVhUUkFfTElCUyIKLVhfTElCUz0iJExJQlMiCi0KLQotCQkJRkFUQUw9MAotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcXQtZGlyIG9yIC0td2l0aG91dC1xdC1kaXIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3F0X2RpcitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9xdF9kaXIiCi0gICBxdF9jdl9kaXI9YGV2YWwgZWNobyAiJHdpdGh2YWwiL2AKLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcXQtaW5jbHVkZXMgb3IgLS13aXRob3V0LXF0LWluY2x1ZGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9xdF9pbmNsdWRlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9xdF9pbmNsdWRlcyIKLSAgIHF0X2N2X2luY2x1ZGVzPWBldmFsIGVjaG8gIiR3aXRodmFsImAKLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcXQtbGlicmFyaWVzIG9yIC0td2l0aG91dC1xdC1saWJyYXJpZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3F0X2xpYnJhcmllcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9xdF9saWJyYXJpZXMiCi0gICAgcXRfY3ZfbGlicmFyaWVzPWBldmFsIGVjaG8gIiR3aXRodmFsImAKLWZpOwotCi0JCWlmIHRlc3QgLXogIiRxdF9jdl9kaXIiOyB0aGVuCi0JCXF0X2N2X2Rpcj0kUVRESVIKLQlmaQotCi0JCWlmIHRlc3QgLW4gIiRxdF9jdl9kaXIiOyB0aGVuCi0JCWlmIHRlc3QgLXogIiRxdF9jdl9pbmNsdWRlcyI7IHRoZW4KLQkJCXF0X2N2X2luY2x1ZGVzPSRxdF9jdl9kaXIvaW5jbHVkZQotCQlmaQotCQlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlicmFyaWVzIjsgdGhlbgotCQkJcXRfY3ZfbGlicmFyaWVzPSRxdF9jdl9kaXIvbGliCi0JCWZpCi0JZmkKLQotCQlRVF9JTkNMVURFUz0KLQlRVF9MREZMQUdTPQotCWlmIHRlc3QgLW4gIiRxdF9jdl9pbmNsdWRlcyI7IHRoZW4KLQkJUVRfSU5DTFVERVM9Ii1pc3lzdGVtICRxdF9jdl9pbmNsdWRlcyIKLQlmaQotCWlmIHRlc3QgLW4gIiRxdF9jdl9saWJyYXJpZXMiOyB0aGVuCi0JCVFUX0xERkxBR1M9Ii1MJHF0X2N2X2xpYnJhcmllcyIKLQlmaQotCi0KLQotCi0KLQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1vYzIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbW9jMi4uLiAkRUNIT19DIiA+JjYKLQlpZiB0ZXN0ICIke3F0X2N2X3BhdGhfbW9jMitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi0JCXF0X2N2X3BhdGhfbW9jMj0iTk9ORSIKLQkJaWYgdGVzdCAtbiAiJGFjX21vYzIiOyB0aGVuCi0JCQlxdF9jdl9wYXRoX21vYzI9IiRhY19tb2MyIjsKLQkJZWxzZQotCQkJZGlycz0iJHF0X2N2X2Rpci9iaW4iCi0JCQlxdF9zYXZlX0lGUz0kSUZTCi0JCQlJRlM9JzonCi0JCQlmb3IgZGlyIGluICRQQVRIOyBkbwotCQkJCWRpcnM9IiRkaXJzICRkaXIiCi0JCQlkb25lCi0JCQlJRlM9JHF0X3NhdmVfSUZTCi0KLQkJCWZvciBkaXIgaW4gJGRpcnM7IGRvCi0JCQkJaWYgdGVzdCAteCAiJGRpci9tb2MyIjsgdGhlbgotCQkJCQlpZiB0ZXN0IC1uICIiOyB0aGVuCi0JCQkJCQlldmFsc3RyPSIkZGlyL21vYzIgIDI+JjEgIgotCQkJCQkJaWYgZXZhbCAkZXZhbHN0cjsgdGhlbgotCQkJCQkJCXF0X2N2X3BhdGhfbW9jMj0iJGRpci9tb2MyIgotCQkJCQkJCWJyZWFrCi0JCQkJCQlmaQotCQkJCQllbHNlCi0JCQkJCQlxdF9jdl9wYXRoX21vYzI9IiRkaXIvbW9jMiIKLQkJCQkJCWJyZWFrCi0JCQkJCWZpCi0JCQkJZmkKLQkJCWRvbmUKLQkJZmkKLQotZmkKLQotCi0JaWYgdGVzdCAteiAiJHF0X2N2X3BhdGhfbW9jMiIgfHwgdGVzdCAiJHF0X2N2X3BhdGhfbW9jMiIgPSAiTk9ORSI7IHRoZW4KLQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm90IGZvdW5kIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vdCBmb3VuZCIgPiY2Ci0KLQllbHNlCi0JCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRxdF9jdl9wYXRoX21vYzIiID4mNQotZWNobyAiJHtFQ0hPX1R9JHF0X2N2X3BhdGhfbW9jMiIgPiY2Ci0JCWFjX21vYzI9JHF0X2N2X3BhdGhfbW9jMgotCWZpCi0KLQotCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbW9jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1vYy4uLiAkRUNIT19DIiA+JjYKLQlpZiB0ZXN0ICIke3F0X2N2X3BhdGhfbW9jK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLQkJcXRfY3ZfcGF0aF9tb2M9Ik5PTkUiCi0JCWlmIHRlc3QgLW4gIiRhY19tb2MxIjsgdGhlbgotCQkJcXRfY3ZfcGF0aF9tb2M9IiRhY19tb2MxIjsKLQkJZWxzZQotCQkJZGlycz0iJHF0X2N2X2Rpci9iaW4iCi0JCQlxdF9zYXZlX0lGUz0kSUZTCi0JCQlJRlM9JzonCi0JCQlmb3IgZGlyIGluICRQQVRIOyBkbwotCQkJCWRpcnM9IiRkaXJzICRkaXIiCi0JCQlkb25lCi0JCQlJRlM9JHF0X3NhdmVfSUZTCi0KLQkJCWZvciBkaXIgaW4gJGRpcnM7IGRvCi0JCQkJaWYgdGVzdCAteCAiJGRpci9tb2MiOyB0aGVuCi0JCQkJCWlmIHRlc3QgLW4gIiI7IHRoZW4KLQkJCQkJCWV2YWxzdHI9IiRkaXIvbW9jICAyPiYxICIKLQkJCQkJCWlmIGV2YWwgJGV2YWxzdHI7IHRoZW4KLQkJCQkJCQlxdF9jdl9wYXRoX21vYz0iJGRpci9tb2MiCi0JCQkJCQkJYnJlYWsKLQkJCQkJCWZpCi0JCQkJCWVsc2UKLQkJCQkJCXF0X2N2X3BhdGhfbW9jPSIkZGlyL21vYyIKLQkJCQkJCWJyZWFrCi0JCQkJCWZpCi0JCQkJZmkKLQkJCWRvbmUKLQkJZmkKLQotZmkKLQotCi0JaWYgdGVzdCAteiAiJHF0X2N2X3BhdGhfbW9jIiB8fCB0ZXN0ICIkcXRfY3ZfcGF0aF9tb2MiID0gIk5PTkUiOyB0aGVuCi0JCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vdCBmb3VuZCIgPiY1Ci1lY2hvICIke0VDSE9fVH1ub3QgZm91bmQiID4mNgotCi0JZWxzZQotCQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkcXRfY3ZfcGF0aF9tb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JHF0X2N2X3BhdGhfbW9jIiA+JjYKLQkJYWNfbW9jMT0kcXRfY3ZfcGF0aF9tb2MKLQlmaQotCi0KLQlpZiB0ZXN0IC1uICIkYWNfbW9jMSIgLWEgLW4gIiRhY19tb2MyIjsgdGhlbgotCQkJCSRhY19tb2MxIC12IDI+JjEgfCBncmVwICJRdCAzIiA+L2Rldi9udWxsCi0JCWlmIHRlc3QgIiQ/IiA9IDA7IHRoZW4KLQkJCWFjX21vYz0kYWNfbW9jMTsKLQkJZWxzZQotCQkJYWNfbW9jPSRhY19tb2MyOwotCQlmaQotCWVsc2UKLQkJaWYgdGVzdCAtbiAiJGFjX21vYzEiOyB0aGVuCi0JCQlhY19tb2M9JGFjX21vYzE7Ci0JCWVsc2UKLQkJCWFjX21vYz0kYWNfbW9jMjsKLQkJZmkKLQlmaQotCi0JaWYgdGVzdCAteiAiJGFjX21vYyIgIC1hICIkRkFUQUwiID0gMTsgdGhlbgotCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBtb2MgYmluYXJ5IG5vdCBmb3VuZCBpbiBcJFBBVEggb3IgJHF0X2N2X2Rpci9iaW4gISIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBtb2MgYmluYXJ5IG5vdCBmb3VuZCBpbiBcJFBBVEggb3IgJHF0X2N2X2Rpci9iaW4gISIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCWZpCi0KLQlNT0M9JGFjX21vYwotCi0KLQotCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWljIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpYy4uLiAkRUNIT19DIiA+JjYKLQlpZiB0ZXN0ICIke3F0X2N2X3BhdGhfdWljK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLQkJcXRfY3ZfcGF0aF91aWM9Ik5PTkUiCi0JCWlmIHRlc3QgLW4gIiRhY191aWMiOyB0aGVuCi0JCQlxdF9jdl9wYXRoX3VpYz0iJGFjX3VpYyI7Ci0JCWVsc2UKLQkJCWRpcnM9IiRxdF9jdl9kaXIvYmluIgotCQkJcXRfc2F2ZV9JRlM9JElGUwotCQkJSUZTPSc6JwotCQkJZm9yIGRpciBpbiAkUEFUSDsgZG8KLQkJCQlkaXJzPSIkZGlycyAkZGlyIgotCQkJZG9uZQotCQkJSUZTPSRxdF9zYXZlX0lGUwotCi0JCQlmb3IgZGlyIGluICRkaXJzOyBkbwotCQkJCWlmIHRlc3QgLXggIiRkaXIvdWljIjsgdGhlbgotCQkJCQlpZiB0ZXN0IC1uICIiOyB0aGVuCi0JCQkJCQlldmFsc3RyPSIkZGlyL3VpYyAgMj4mMSAiCi0JCQkJCQlpZiBldmFsICRldmFsc3RyOyB0aGVuCi0JCQkJCQkJcXRfY3ZfcGF0aF91aWM9IiRkaXIvdWljIgotCQkJCQkJCWJyZWFrCi0JCQkJCQlmaQotCQkJCQllbHNlCi0JCQkJCQlxdF9jdl9wYXRoX3VpYz0iJGRpci91aWMiCi0JCQkJCQlicmVhawotCQkJCQlmaQotCQkJCWZpCi0JCQlkb25lCi0JCWZpCi0KLWZpCi0KLQotCWlmIHRlc3QgLXogIiRxdF9jdl9wYXRoX3VpYyIgfHwgdGVzdCAiJHF0X2N2X3BhdGhfdWljIiA9ICJOT05FIjsgdGhlbgotCQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub3QgZm91bmQiID4mNQotZWNobyAiJHtFQ0hPX1R9bm90IGZvdW5kIiA+JjYKLQotCWVsc2UKLQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHF0X2N2X3BhdGhfdWljIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRxdF9jdl9wYXRoX3VpYyIgPiY2Ci0JCWFjX3VpYz0kcXRfY3ZfcGF0aF91aWMKLQlmaQotCi0JaWYgdGVzdCAteiAiJGFjX3VpYyIgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCi0JCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVpYyBiaW5hcnkgbm90IGZvdW5kIGluIFwkUEFUSCBvciAkcXRfY3ZfZGlyL2JpbiAhIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHVpYyBiaW5hcnkgbm90IGZvdW5kIGluIFwkUEFUSCBvciAkcXRfY3ZfZGlyL2JpbiAhIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JZmkKLQotCVVJQz0kYWNfdWljCi0KLQotCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBRdCBsaWJyYXJ5IG5hbWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgUXQgbGlicmFyeSBuYW1lLi4uICRFQ0hPX0MiID4mNgotCi0JaWYgdGVzdCAiJHtxdF9jdl9saWJuYW1lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLQkJYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0JCVNBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCi0JCUNYWEZMQUdTPSIkQ1hYRkxBR1MgJFFUX0lOQ0xVREVTICRRVF9MREZMQUdTIgotCi0JCWZvciBsaWJuYW1lIGluIC1scXQtbXQgLWxxdDMgLWxxdDIgLWxxdDsKLQkJZG8KLQotCVNBVkVfTElCUz0iJExJQlMiCi0JTElCUz0iJExJQlMgJGxpYm5hbWUiCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQkjaW5jbHVkZSA8cWdsb2JhbC5oPgotCSNpbmNsdWRlIDxxc3RyaW5nLmg+Ci0KLWludAotbWFpbiAoKQotewotCi0JUVN0cmluZyBzKCJtYW5nbGVfZmFpbHVyZSIpOwotCSNpZiAoUVRfVkVSU0lPTiA8IDIyMSkKLQlicmVha19tZV8oXFxcKTsKLQkjZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgcXRfY3ZfbGlibmFtZT0kbGlibmFtZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQlMSUJTPSIkU0FWRV9MSUJTIgotCi0JCQlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KLQkJCQlicmVhazsKLQkJCWZpCi0JCWRvbmUKLQotCQlDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUwotCi1maQotCi0KLQlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KLQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZmFpbGVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfWZhaWxlZCIgPiY2Ci0JCWlmIHRlc3QgIiRGQVRBTCIgPSAxIDsgdGhlbgotCQkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQ2Fubm90IGNvbXBpbGUgYSBzaW1wbGUgUXQgZXhlY3V0YWJsZS4gQ2hlY2sgeW91IGhhdmUgdGhlIHJpZ2h0IFwkUVRESVIgISIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgY29tcGlsZSBhIHNpbXBsZSBRdCBleGVjdXRhYmxlLiBDaGVjayB5b3UgaGF2ZSB0aGUgcmlnaHQgXCRRVERJUiAhIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JCWZpCi0JZWxzZQotCQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkcXRfY3ZfbGlibmFtZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kcXRfY3ZfbGlibmFtZSIgPiY2Ci0JZmkKLQotCi0JUVRfTElCPSRxdF9jdl9saWJuYW1lOwotCi0KLQlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KLQotCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBRdCB2ZXJzaW9uIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgUXQgdmVyc2lvbi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHl4X2N2X3F0dmVyc2lvbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi0JCWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCQlTQVZFX0NQUEZMQUdTPSRDUFBGTEFHUwotCQlDUFBGTEFHUz0iJENQUEZMQUdTICRRVF9JTkNMVURFUyIKLQotCQljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3OTcxICJjb25maWd1cmUiCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci0iJSUlIlFUX1ZFUlNJT05fU1RSIiUlJSIKLUVPRgotCQlseXhfY3ZfcXR2ZXJzaW9uPWAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8IFwKLQkJCWdyZXAgJ14iJSUlIicgIDI+L2Rldi9udWxsIHwgXAotCQkJc2VkIC1lICdzLyIlJSUiLy9nJyAtZSAncy8iLy9nJ2AKLQkJcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotCQlDUFBGTEFHUz0kU0FWRV9DUFBGTEFHUwotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx5eF9jdl9xdHZlcnNpb24iID4mNQotZWNobyAiJHtFQ0hPX1R9JGx5eF9jdl9xdHZlcnNpb24iID4mNgotCi0JUVRfVkVSU0lPTj0kbHl4X2N2X3F0dmVyc2lvbgotCi0KLQlmaQotCi1MSUJTPSIkT1JJR19YX1NBVkVfTElCUyIKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFiaSBvciAtLWRpc2FibGUtYWJpIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2FiaStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfYWJpIgotICBlbmFibGVfYWJpPSRlbmFibGV2YWwKLWVsc2UKLSAgZW5hYmxlX2FiaT1ubwotZmk7Ci1pZiB0ZXN0ICIkZW5hYmxlX2FiaSIgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgT1BST0ZfQUJJIDEKLV9BQ0VPRgotCi1maQotCi0KLWlmIHRlc3QgIiRlbmFibGVfYWJpIiA9IHllczsgdGhlbgotICBlbmFibGVfYWJpX1RSVUU9Ci0gIGVuYWJsZV9hYmlfRkFMU0U9JyMnCi1lbHNlCi0gIGVuYWJsZV9hYmlfVFJVRT0nIycKLSAgZW5hYmxlX2FiaV9GQUxTRT0KLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBjaCBvciAtLWRpc2FibGUtcGNoIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3BjaCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcGNoIgotICBlbmFibGVfcGNoPSRlbmFibGV2YWwKLWVsc2UKLSAgZW5hYmxlX3BjaD1ubwotZmk7Ci1pZiB0ZXN0ICIkZW5hYmxlX3BjaCIgPSB5ZXM7IHRoZW4KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IHN1cHBvcnQgcHJlY29tcGlsZWQgaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke0NYWH0gc3VwcG9ydCBwcmVjb21waWxlZCBoZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci0KLQotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi1TQVZFX0NYWEZMQUdTPSRDWFhGTEFHUwotQ1hYRkxBR1M9LVdpbnZhbGlkLXBjaAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyBPUF9DWFhGTEFHUz0iJHtPUF9DWFhGTEFHU30gLWluY2x1ZGUgYml0cy9zdGRjKysuaCIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotZmkKLQotCi0jIEl0J3MganVzdCBydWRlIHRvIGdvIG92ZXIgdGhlIG5ldCB0byBidWlsZAotWFNMVFBST0NfRkxBR1M9LS1ub25ldAotRE9DQk9PS19ST09UPQotaWYgdGVzdCAhIC1mIC9ldGMveG1sL2NhdGFsb2c7IHRoZW4KLQlmb3IgaSBpbiAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay9zdHlsZXNoZWV0L3hzbC9ud2Fsc2ggL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLzsKLQlkbwotCQlpZiB0ZXN0IC1kICIkaSI7IHRoZW4KLQkJCURPQ0JPT0tfUk9PVD0kaQotCQlmaQotCWRvbmUKLQotCSMgTGFzdCByZXNvcnQgLSB0cnkgbmV0Ci0JaWYgdGVzdCAteiAiJERPQ0JPT0tfUk9PVCI7IHRoZW4KLQkJWFNMVFBST0NfRkxBR1M9Ci0JZmkKLWVsc2UKLQlYTUxfQ0FUQUxPRz0vZXRjL3htbC9jYXRhbG9nCi0JQ0FUX0VOVFJZX1NUQVJUPSc8IS0tJwotCUNBVF9FTlRSWV9FTkQ9Jy0tPicKLWZpCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAieHNsdHByb2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHhzbHRwcm9jOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX1hTTFRQUk9DK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRYU0xUUFJPQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19YU0xUUFJPQz0iJFhTTFRQUk9DIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19YU0xUUFJPQz0ieHNsdHByb2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1YU0xUUFJPQz0kYWNfY3ZfcHJvZ19YU0xUUFJPQwotaWYgdGVzdCAtbiAiJFhTTFRQUk9DIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkWFNMVFBST0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JFhTTFRQUk9DIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotWFNMVFBST0NfV09SS1M9bm8KLWlmIHRlc3QgLW4gIiRYU0xUUFJPQyI7IHRoZW4KLQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB4c2x0cHJvYyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgeHNsdHByb2Mgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci0KLQlpZiB0ZXN0IC1uICIkWE1MX0NBVEFMT0ciOyB0aGVuCi0JCURCX0ZJTEU9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L3hodG1sL2RvY2Jvb2sueHNsIgotCWVsc2UKLQkJREJfRklMRT0iJERPQ0JPT0tfUk9PVC9kb2Nib29rLnhzbCIKLQlmaQotCi0JJFhTTFRQUk9DICRYU0xUUFJPQ19GTEFHUyAkREJfRklMRSA+L2Rldi9udWxsIDI+JjEgPDwgRU5ECi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4KLTxib29rIGlkPSJ0ZXN0Ij4KLTwvYm9vaz4KLUVORAotCWlmIHRlc3QgIiQ/IiA9IDA7IHRoZW4KLQkJWFNMVFBST0NfV09SS1M9eWVzCi0JZmkKLQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkWFNMVFBST0NfV09SS1MiID4mNQotZWNobyAiJHtFQ0hPX1R9JFhTTFRQUk9DX1dPUktTIiA+JjYKLWZpCi0KLQotaWYgdGVzdCAiJFhTTFRQUk9DX1dPUktTIiA9ICJ5ZXMiOyB0aGVuCi0gIGhhdmVfeHNsdHByb2NfVFJVRT0KLSAgaGF2ZV94c2x0cHJvY19GQUxTRT0nIycKLWVsc2UKLSAgaGF2ZV94c2x0cHJvY19UUlVFPScjJwotICBoYXZlX3hzbHRwcm9jX0ZBTFNFPQotZmkKLQotCi0KLQotCi0KLQotCi0KLUxJQlM9IiRPUklHX1NBVkVfTElCUyIKLUxJQkVSVFlfTElCUz0iLWxpYmVydHkgJERMX0xJQiAkSU5UTF9MSUIiCi1CRkRfTElCUz0iLWxiZmQgLWxpYmVydHkgJERMX0xJQiAkSU5UTF9MSUIiCi1QT1BUX0xJQlM9Ii1scG9wdCIKLQotCi0KLQotIyBkbyBOT1QgcHV0IHRlc3RzIGhlcmUsIHRoZXkgd2lsbCBmYWlsIGluIHRoZSBjYXNlIFggaXMgbm90IGluc3RhbGxlZCAhCi0KLQotCi1pZiB0ZXN0IC1uICIkUVRfTElCIjsgdGhlbgotICBoYXZlX3F0X1RSVUU9Ci0gIGhhdmVfcXRfRkFMU0U9JyMnCi1lbHNlCi0gIGhhdmVfcXRfVFJVRT0nIycKLSAgaGF2ZV9xdF9GQUxTRT0KLWZpCi0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke0NDfSAtVyBpcyB1bmRlcnN0b29kIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke0NDfSAtVyBpcyB1bmRlcnN0b29kLi4uICRFQ0hPX0MiID4mNgotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotU0FWRV9DRkxBR1M9JENGTEFHUwotQ0ZMQUdTPS1XCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci07Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyBPUF9DRkxBR1M9IiR7T1BfQ0ZMQUdTfSAtVyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNGTEFHUz0kU0FWRV9DRkxBR1MKLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7Q1hYfSAtVyBpcyB1bmRlcnN0b29kIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLVcgaXMgdW5kZXJzdG9vZC4uLiAkRUNIT19DIiA+JjYKLQotCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLVNBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCi1DWFhGTEFHUz0tVwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyBPUF9DWFhGTEFHUz0iJHtPUF9DWFhGTEFHU30gLVciCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DWFhGTEFHUz0kU0FWRV9DWFhGTEFHUwotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtDQ30gLVdhbGwgaXMgdW5kZXJzdG9vZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtDQ30gLVdhbGwgaXMgdW5kZXJzdG9vZC4uLiAkRUNIT19DIiA+JjYKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLVNBVkVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0tV2FsbAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgT1BfQ0ZMQUdTPSIke09QX0NGTEFHU30gLVdhbGwiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLVdhbGwgaXMgdW5kZXJzdG9vZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IC1XYWxsIGlzIHVuZGVyc3Rvb2QuLi4gJEVDSE9fQyIgPiY2Ci0KLQotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi1TQVZFX0NYWEZMQUdTPSRDWFhGTEFHUwotQ1hYRkxBR1M9LVdhbGwKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgT1BfQ1hYRkxBR1M9IiR7T1BfQ1hYRkxBR1N9IC1XYWxsIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7Q0N9IC1mbm8tY29tbW9uIGlzIHVuZGVyc3Rvb2QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7Q0N9IC1mbm8tY29tbW9uIGlzIHVuZGVyc3Rvb2QuLi4gJEVDSE9fQyIgPiY2Ci0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9LWZuby1jb21tb24KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IE9QX0NGTEFHUz0iJHtPUF9DRkxBR1N9IC1mbm8tY29tbW9uIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ0ZMQUdTPSRTQVZFX0NGTEFHUwotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IC1mbm8tY29tbW9uIGlzIHVuZGVyc3Rvb2QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7Q1hYfSAtZm5vLWNvbW1vbiBpcyB1bmRlcnN0b29kLi4uICRFQ0hPX0MiID4mNgotCi0KLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKLUNYWEZMQUdTPS1mbm8tY29tbW9uCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci07Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IE9QX0NYWEZMQUdTPSIke09QX0NYWEZMQUdTfSAtZm5vLWNvbW1vbiIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLWZ0ZW1wbGF0ZS1kZXB0aC01MCBpcyB1bmRlcnN0b29kIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLWZ0ZW1wbGF0ZS1kZXB0aC01MCBpcyB1bmRlcnN0b29kLi4uICRFQ0hPX0MiID4mNgotCi0KLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKLUNYWEZMQUdTPS1mdGVtcGxhdGUtZGVwdGgtNTAKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgT1BfQ1hYRkxBR1M9IiR7T1BfQ1hYRkxBR1N9IC1mdGVtcGxhdGUtZGVwdGgtNTAiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DWFhGTEFHUz0kU0FWRV9DWFhGTEFHUwotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtDQ30gLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgaXMgdW5kZXJzdG9vZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtDQ30gLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgaXMgdW5kZXJzdG9vZC4uLiAkRUNIT19DIiA+JjYKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLVNBVkVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0tV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgT1BfQ0ZMQUdTPSIke09QX0NGTEFHU30gLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2NvdiBvciAtLWRpc2FibGUtZ2NvdiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9nY292K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9nY292IgotICBlbmFibGVfZ2Nvdj0kZW5hYmxldmFsCi1lbHNlCi0gIGVuYWJsZV9nY292PW5vCi1maTsKLWlmIHRlc3QgIiRlbmFibGVfZ2NvdiIgPSB5ZXM7IHRoZW4KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtDQ30gLWZwcm9maWxlLWFyY3MgaXMgdW5kZXJzdG9vZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtDQ30gLWZwcm9maWxlLWFyY3MgaXMgdW5kZXJzdG9vZC4uLiAkRUNIT19DIiA+JjYKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLVNBVkVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0tZnByb2ZpbGUtYXJjcwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgT1BfQ0ZMQUdTPSIke09QX0NGTEFHU30gLWZwcm9maWxlLWFyY3MiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLWZwcm9maWxlLWFyY3MgaXMgdW5kZXJzdG9vZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IC1mcHJvZmlsZS1hcmNzIGlzIHVuZGVyc3Rvb2QuLi4gJEVDSE9fQyIgPiY2Ci0KLQotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi1TQVZFX0NYWEZMQUdTPSRDWFhGTEFHUwotQ1hYRkxBR1M9LWZwcm9maWxlLWFyY3MKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgT1BfQ1hYRkxBR1M9IiR7T1BfQ1hYRkxBR1N9IC1mcHJvZmlsZS1hcmNzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7Q0N9IC1mdGVzdC1jb3ZlcmFnZSBpcyB1bmRlcnN0b29kIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke0NDfSAtZnRlc3QtY292ZXJhZ2UgaXMgdW5kZXJzdG9vZC4uLiAkRUNIT19DIiA+JjYKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLVNBVkVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0tZnRlc3QtY292ZXJhZ2UKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IE9QX0NGTEFHUz0iJHtPUF9DRkxBR1N9IC1mdGVzdC1jb3ZlcmFnZSIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNGTEFHUz0kU0FWRV9DRkxBR1MKLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7Q1hYfSAtZnRlc3QtY292ZXJhZ2UgaXMgdW5kZXJzdG9vZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IC1mdGVzdC1jb3ZlcmFnZSBpcyB1bmRlcnN0b29kLi4uICRFQ0hPX0MiID4mNgotCi0KLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKLUNYWEZMQUdTPS1mdGVzdC1jb3ZlcmFnZQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyBPUF9DWFhGTEFHUz0iJHtPUF9DWFhGTEFHU30gLWZ0ZXN0LWNvdmVyYWdlIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd2Vycm9yIG9yIC0tZGlzYWJsZS13ZXJyb3Igd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfd2Vycm9yK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV93ZXJyb3IiCi0gIGVuYWJsZV93ZXJyb3I9JGVuYWJsZXZhbAotZWxzZQotICBlbmFibGVfd2Vycm9yPXllcwotZmk7Ci1pZiB0ZXN0ICIkZW5hYmxlX3dlcnJvciIgPSB5ZXM7IHRoZW4KLQkjIGVuYWJsZSAtV2Vycm9yIGZvciBub24tcmVsZWFzZSB2ZXJzaW9ucy4KLQlpZiBlY2hvICIkVkVSU0lPTiIgfCBncmVwIGN2cyA+L2Rldi9udWxsOyB0aGVuCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7Q0N9IC1XZXJyb3IgaXMgdW5kZXJzdG9vZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtDQ30gLVdlcnJvciBpcyB1bmRlcnN0b29kLi4uICRFQ0hPX0MiID4mNgotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotU0FWRV9DRkxBR1M9JENGTEFHUwotQ0ZMQUdTPS1XZXJyb3IKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IE9QX0NGTEFHUz0iJHtPUF9DRkxBR1N9IC1XZXJyb3IiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLVdlcnJvciBpcyB1bmRlcnN0b29kIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLVdlcnJvciBpcyB1bmRlcnN0b29kLi4uICRFQ0hPX0MiID4mNgotCi0KLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKLUNYWEZMQUdTPS1XZXJyb3IKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgT1BfQ1hYRkxBR1M9IiR7T1BfQ1hYRkxBR1N9IC1XZXJyb3IiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DWFhGTEFHUz0kU0FWRV9DWFhGTEFHUwotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLQlmaQotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wdGltaXphdGlvbiBvciAtLWRpc2FibGUtb3B0aW1pemF0aW9uIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX29wdGltaXphdGlvbitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfb3B0aW1pemF0aW9uIgotICBlbmFibGVfb3B0aW1pemF0aW9uPSRlbmFibGV2YWwKLWVsc2UKLSAgZW5hYmxlX29wdGltaXNhdGlvbj15ZXMKLWZpOwotaWYgdGVzdCAiJGVuYWJsZV9vcHRpbWl6YXRpb24iID0gIm5vIjsgdGhlbgotCUNGTEFHUz1gZWNobyAkQ0ZMQUdTIHwgc2VkICdzLy1PMi8vZydgCi0JQ1hYRkxBR1M9YGVjaG8gJENYWEZMQUdTIHwgc2VkICdzLy1PMi8vZydgCi1maQotCi0KLQotCi0jIGZpeHVwcyBmb3IgY29uZmlnLmgKLWlmIHRlc3QgIiRwcmVmaXgiID0gIk5PTkUiOyB0aGVuCi0JbXlfb3BfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCi1lbHNlCi0JbXlfb3BfcHJlZml4PSIkcHJlZml4IgotZmkKLW15X29wX2RhdGFkaXI9IiRteV9vcF9wcmVmaXgvc2hhcmUiCi0KLWlmIHRlc3QgIiRleGVjX3ByZWZpeCIgPSAiTk9ORSI7IHRoZW4KLQlteV9vcF9leGVjX3ByZWZpeD0iJG15X29wX3ByZWZpeCIKLWVsc2UKLQlteV9vcF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotZmkKLW15X29wX2JpbmRpcj0iJG15X29wX2V4ZWNfcHJlZml4L2JpbiIKLQotT1BfREFUQURJUj1gZXZhbCBlY2hvICIkbXlfb3BfZGF0YWRpci8kUEFDS0FHRS8iYAotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE9QX0RBVEFESVIgIiRPUF9EQVRBRElSIgotX0FDRU9GCi0KLU9QX0JJTkRJUj1gZXZhbCBlY2hvICIkbXlfb3BfYmluZGlyLyJgCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgT1BfQklORElSICIkT1BfQklORElSIgotX0FDRU9GCi0KLU9QX0RPQ0RJUj1gZXZhbCBlY2hvICIke215X29wX3ByZWZpeH0vc2hhcmUvZG9jLyRQQUNLQUdFLyJgCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUgbTQvTWFrZWZpbGUgbGlidXRpbC9NYWtlZmlsZSBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlIGxpYnV0aWwrKy9NYWtlZmlsZSBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUgbGlib3AvTWFrZWZpbGUgbGlib3AvdGVzdHMvTWFrZWZpbGUgbGlib3B0KysvTWFrZWZpbGUgbGliZGIvTWFrZWZpbGUgbGliZGIvdGVzdHMvTWFrZWZpbGUgbGliYWJpL01ha2VmaWxlIGxpYmFiaS90ZXN0cy9NYWtlZmlsZSBsaWJyZWdleC9NYWtlZmlsZSBsaWJyZWdleC90ZXN0cy9NYWtlZmlsZSBsaWJyZWdleC9zdGwucGF0IGxpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZSBkYWVtb24vTWFrZWZpbGUgZGFlbW9uL2xpYmxlZ2FjeS9NYWtlZmlsZSBldmVudHMvTWFrZWZpbGUgdXRpbHMvTWFrZWZpbGUgZG9jL01ha2VmaWxlIGRvYy94c2wvY2F0YWxvZy0xLnhtbCBkb2Mvb3Byb2ZpbGUuMSBkb2Mvb3Bjb250cm9sLjEgZG9jL29waGVscC4xIGRvYy9vcHJlcG9ydC4xIGRvYy9vcGFubm90YXRlLjEgZG9jL29wZ3Byb2YuMSBkb2Mvb3BhcmNoaXZlLjEgZG9jL3NyY2RvYy9Eb3h5ZmlsZSBsaWJwcC9NYWtlZmlsZSBwcC9NYWtlZmlsZSBndWkvTWFrZWZpbGUgZ3VpL3VpL01ha2VmaWxlIG1vZHVsZS9NYWtlZmlsZSBtb2R1bGUveDg2L01ha2VmaWxlIG1vZHVsZS9pYTY0L01ha2VmaWxlIgotY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCi0jIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKLSMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQotIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KLSMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKLSMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgotIwotIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKLSMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgotIwotIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCi0jIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCi0jIGZvbGxvd2luZyB2YWx1ZXMuCi0KLV9BQ0VPRgotCi0jIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAotIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KLSMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4KLSMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAotIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KLXsKLSAgKHNldCkgMj4mMSB8Ci0gICAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KLSAgICAqYWNfc3BhY2U9XCAqKQotICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQotICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCi0gICAgICBzZWQgLW4gXAotCSJzLycvJ1xcXFwnJy9nOwotCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgotICAgICAgOzsKLSAgICAqKQotICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KLSAgICAgIHNlZCAtbiBcCi0JInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCi0gICAgICA7OwotICAgIGVzYWM7Ci19IHwKLSAgc2VkICcKLSAgICAgdCBjbGVhcgotICAgICA6IGNsZWFyCi0gICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KLSAgICAgdCBlbmQKLSAgICAgL15hY19jdl9lbnYvIXMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LwotICAgICA6IGVuZCcgPj5jb25mY2FjaGUKLWlmIGRpZmYgJGNhY2hlX2ZpbGUgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCi0gIGlmIHRlc3QgLXcgJGNhY2hlX2ZpbGU7IHRoZW4KLSAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJiBlY2hvICJ1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKLSAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQotICBlbHNlCi0gICAgZWNobyAibm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiCi0gIGZpCi1maQotcm0gLWYgY29uZmNhY2hlCi0KLXRlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKLSMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgotdGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JwotCi0jIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKLSMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCi0jIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQotIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgotaWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KLSAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPS97Ci1zLzoqXCQoc3JjZGlyKToqLzovOwotcy86Klwke3NyY2Rpcn06Ki86LzsKLXMvOipAc3JjZGlyQDoqLzovOwotcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvOwotcy86KiQvLzsKLXMvXltePV0qPVsJIF0qJC8vOwotfScKLWZpCi0KLURFRlM9LURIQVZFX0NPTkZJR19ICi0KLWFjX2xpYm9ianM9Ci1hY19sdGxpYm9ianM9Ci1mb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKLSAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgotICBhY19pPWBlY2hvICIkYWNfaSIgfAotCSBzZWQgJ3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLydgCi0gICMgMi4gQWRkIHRoZW0uCi0gIGFjX2xpYm9ianM9IiRhY19saWJvYmpzICRhY19pXCRVLiRhY19vYmpleHQiCi0gIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyAkYWNfaSInJFUubG8nCi1kb25lCi1MSUJPQkpTPSRhY19saWJvYmpzCi0KLUxUTElCT0JKUz0kYWNfbHRsaWJvYmpzCi0KLQotaWYgdGVzdCAteiAiJHtBTURFUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtBTURFUF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ1hYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke2tlcm5lbF9zdXBwb3J0X1RSVUV9IiAmJiB0ZXN0IC16ICIke2tlcm5lbF9zdXBwb3J0X0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJrZXJuZWxfc3VwcG9ydFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwia2VybmVsX3N1cHBvcnRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7ZW5hYmxlX2FiaV9UUlVFfSIgJiYgdGVzdCAteiAiJHtlbmFibGVfYWJpX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJlbmFibGVfYWJpXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJlbmFibGVfYWJpXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke2hhdmVfeHNsdHByb2NfVFJVRX0iICYmIHRlc3QgLXogIiR7aGF2ZV94c2x0cHJvY19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiaGF2ZV94c2x0cHJvY1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiaGF2ZV94c2x0cHJvY1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtoYXZlX3F0X1RSVUV9IiAmJiB0ZXN0IC16ICIke2hhdmVfcXRfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImhhdmVfcXRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcImhhdmVfcXRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQotOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQotYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKLWFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQotY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotIyEgJFNIRUxMCi0jIEdlbmVyYXRlZCBieSAkYXNfbWUuCi0jIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KLSMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKLSMgY29uZmlndXJlLCBpcyBpbiBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KLQotZGVidWc9ZmFsc2UKLWFjX2NzX3JlY2hlY2s9ZmFsc2UKLWFjX2NzX3NpbGVudD1mYWxzZQotU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KLV9BQ0VPRgotCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBCZSBCb3VybmUgY29tcGF0aWJsZQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGVtdWxhdGUgc2gKLSAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKLSAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCi1lbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBzZXQgLW8gcG9zaXgKLWZpCi1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi0KLSMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgotaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX3Vuc2V0PXVuc2V0Ci1lbHNlCi0gIGFzX3Vuc2V0PWZhbHNlCi1maQotCi0KLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgotJGFzX3Vuc2V0IEVOViBNQUlMIE1BSUxQQVRICi1QUzE9JyQgJwotUFMyPSc+ICcKLVBTND0nKyAnCi0KLSMgTkxTIG51aXNhbmNlcy4KLWZvciBhc192YXIgaW4gXAotICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAotICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAotICBMQ19URUxFUEhPTkUgTENfVElNRQotZG8KLSAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KLSAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKLSAgZWxzZQotICAgICRhc191bnNldCAkYXNfdmFyCi0gIGZpCi1kb25lCi0KLSMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KLWlmIChiYXNlbmFtZSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KLSAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKLWVsc2UKLSAgYXNfYmFzZW5hbWU9ZmFsc2UKLWZpCi0KLQotIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgotYXNfbWU9YCRhc19iYXNlbmFtZSAiJDAiIHx8Ci0kYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCkkJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYLyIkMCIgfAotICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXC9cKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXC9cKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLQotCi0jIFBBVEggbmVlZHMgQ1IsIGFuZCBMSU5FTk8gbmVlZHMgQ1IgYW5kIFBBVEguCi0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCi1hc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKLWFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwotYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCi1hc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCi1hc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKLQotIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCi1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAotZmkKLQotCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgIHx8IHsKLSAgIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gcGF0aCBhdCBhbGwKLSAgIyByZWxhdGl2ZSBvciBub3QuCi0gIGNhc2UgJDAgaW4KLSAgICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7Ci0gICAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhawotZG9uZQotCi0gICAgICAgOzsKLSAgZXNhYwotICAjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCi0gICMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgotICBpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCi0gICAgYXNfbXlzZWxmPSQwCi0gIGZpCi0gIGlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBmaQotICBjYXNlICRDT05GSUdfU0hFTEwgaW4KLSAgJycpCi0gICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCi0JIGNhc2UgJGFzX2RpciBpbgotCSAvKikKLQkgICBpZiAoIiRhc19kaXIvJGFzX2Jhc2UiIC1jICcKLSAgYXNfbGluZW5vXzE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PCi0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCi0gIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAnKSAyPi9kZXYvbnVsbDsgdGhlbgotCSAgICAgJGFzX3Vuc2V0IEJBU0hfRU5WIHx8IHRlc3QgIiR7QkFTSF9FTlYrc2V0fSIgIT0gc2V0IHx8IHsgQkFTSF9FTlY9OyBleHBvcnQgQkFTSF9FTlY7IH0KLQkgICAgICRhc191bnNldCBFTlYgfHwgdGVzdCAiJHtFTlYrc2V0fSIgIT0gc2V0IHx8IHsgRU5WPTsgZXhwb3J0IEVOVjsgfQotCSAgICAgQ09ORklHX1NIRUxMPSRhc19kaXIvJGFzX2Jhc2UKLQkgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLQkgICAgIGV4ZWMgIiRDT05GSUdfU0hFTEwiICIkMCIgJHsxKyIkQCJ9Ci0JICAgZmk7OwotCSBlc2FjCi0gICAgICAgZG9uZQotZG9uZQotOzsKLSAgZXNhYwotCi0gICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KLSAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQotICAjIGxpbmUtbnVtYmVyIGxpbmUgYmVmb3JlIGVhY2ggbGluZTsgdGhlIHNlY29uZCAnc2VkJyBkb2VzIHRoZSByZWFsCi0gICMgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaCBsaW5lLW51bWJlciBsaW5lCi0gICMgd2l0aCB0aGUgbnVtYmVyZWQgbGluZSwgYW5kIGFwcGVuZHMgdHJhaWxpbmcgJy0nIGR1cmluZwotICAjIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbCBjYXNlIGF0IGxpbmUgZW5kLgotICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKLSAgIyBzZWNvbmQgJ3NlZCcgc2NyaXB0LiAgQmxhbWUgTGVlIEUuIE1jTWFob24gZm9yIHNlZCdzIHN5bnRheC4gIDotKQotICBzZWQgJz0nIDwkYXNfbXlzZWxmIHwKLSAgICBzZWQgJwotICAgICAgTgotICAgICAgcywkLC0sCi0gICAgICA6IGxvb3AKLSAgICAgIHMsXlwoWyckYXNfY3JfZGlnaXRzJ10qXClcKC4qXClbJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXVwpLFwxXDJcMVwzLAotICAgICAgdCBsb29wCi0gICAgICBzLC0kLCwKLSAgICAgIHMsXlsnJGFzX2NyX2RpZ2l0cyddKlxuLCwKLSAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICRhc19tZS5saW5lbm8gfHwKLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCi0gICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCi0gICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQotICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2libGUgdG8gdGhpcykuCi0gIC4gLi8kYXNfbWUubGluZW5vCi0gICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgotICBleGl0Ci19Ci0KLQotY2FzZSBgZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsM2AsYGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsM2AgaW4KLSAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JwotJyBFQ0hPX1Q9JwknIDs7Ci0gICpjKiwqICApIEVDSE9fTj0tbiBFQ0hPX0M9IEVDSE9fVD0gOzsKLSAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7Ci1lc2FjCi0KLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX2V4cHI9ZXhwcgotZWxzZQotICBhc19leHByPWZhbHNlCi1maQotCi1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQotZWNobyA+Y29uZiQkLmZpbGUKLWlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgZm9yIERKR1BQOyBidXQgdGhpcyB0ZXN0IGEpIHdvcmtzIGIpIGlzIG1vcmUgZ2VuZXJpYwotICAjIGFuZCBjKSB3aWxsIHJlbWFpbiB2YWxpZCBvbmNlIERKR1BQIHN1cHBvcnRzIHN5bWxpbmtzIChESkdQUCAyLjA0KS4KLSAgaWYgdGVzdCAtZiBjb25mJCQuZXhlOyB0aGVuCi0gICAgIyBEb24ndCB1c2UgbG4gYXQgYWxsOyB3ZSBkb24ndCBoYXZlIGFueSBsaW5rcwotICAgIGFzX2xuX3M9J2NwIC1wJwotICBlbHNlCi0gICAgYXNfbG5fcz0nbG4gLXMnCi0gIGZpCi1lbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19sbl9zPWxuCi1lbHNlCi0gIGFzX2xuX3M9J2NwIC1wJwotZmkKLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi0KLWlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbWtkaXJfcD06Ci1lbHNlCi0gIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCi0gIGFzX21rZGlyX3A9ZmFsc2UKLWZpCi0KLWFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKLQotIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgotYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKLQotIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCi1hc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgotCi0KLSMgSUZTCi0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgotYXNfbmw9JwotJwotSUZTPSIgCSRhc19ubCIKLQotIyBDRFBBVEguCi0kYXNfdW5zZXQgQ0RQQVRICi0KLWV4ZWMgNj4mMQotCi0jIE9wZW4gdGhlIGxvZyByZWFsIHNvb24sIHRvIGtlZXAgXCRbMF0gYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bwotIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCi0jIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLiAgTG9nZ2luZyAtLXZlcnNpb24gZXRjLiBpcyBPSy4KLWV4ZWMgNT4+Y29uZmlnLmxvZwotewotICBlY2hvCi0gIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCi0jIyBSdW5uaW5nICRhc19tZS4gIyMKLV9BU0JPWAotfSA+JjUKLWNhdCA+JjUgPDxfQ1NFT0YKLQotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSAkYXNfbWUsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCi0KLSAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwotICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKLSAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUwotICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCi0gICQgJDAgJEAKLQotX0NTRU9GCi1lY2hvICJvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAiID4mNQotZWNobyA+JjUKLV9BQ0VPRgotCi0jIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2ZpbGVzIjsgdGhlbgotICBlY2hvICJjb25maWdfZmlsZXM9XCIkYWNfY29uZmlnX2ZpbGVzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCi0KLWlmIHRlc3QgLW4gIiRhY19jb25maWdfaGVhZGVycyI7IHRoZW4KLSAgZWNobyAiY29uZmlnX2hlYWRlcnM9XCIkYWNfY29uZmlnX2hlYWRlcnNcIiIgPj4kQ09ORklHX1NUQVRVUwotZmkKLQotaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19saW5rcyI7IHRoZW4KLSAgZWNobyAiY29uZmlnX2xpbmtzPVwiJGFjX2NvbmZpZ19saW5rc1wiIiA+PiRDT05GSUdfU1RBVFVTCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2NvbW1hbmRzIjsgdGhlbgotICBlY2hvICJjb25maWdfY29tbWFuZHM9XCIkYWNfY29uZmlnX2NvbW1hbmRzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotCi1hY19jc191c2FnZT0iXAotXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCi1jdXJyZW50IGNvbmZpZ3VyYXRpb24uCi0KLVVzYWdlOiAkMCBbT1BUSU9OU10gW0ZJTEVdLi4uCi0KLSAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAotICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKLSAgLXEsIC0tcXVpZXQgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKLSAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCi0gICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKLSAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQotCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKLSAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCi0JCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCi0KLUNvbmZpZ3VyYXRpb24gZmlsZXM6Ci0kY29uZmlnX2ZpbGVzCi0KLUNvbmZpZ3VyYXRpb24gaGVhZGVyczoKLSRjb25maWdfaGVhZGVycwotCi1Db25maWd1cmF0aW9uIGNvbW1hbmRzOgotJGNvbmZpZ19jb21tYW5kcwotCi1SZXBvcnQgYnVncyB0byA8YnVnLWF1dG9jb25mQGdudS5vcmc+LiIKLV9BQ0VPRgotCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotYWNfY3NfdmVyc2lvbj0iXFwKLWNvbmZpZy5zdGF0dXMKLWNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSwKLSAgd2l0aCBvcHRpb25zIFxcImBlY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCi0KLUNvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLVRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKLXNyY2Rpcj0kc3JjZGlyCi1JTlNUQUxMPSIkSU5TVEFMTCIKLV9BQ0VPRgotCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSMgSWYgbm8gZmlsZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGVuIHdlIG5lZWQgdG8gcHJvdmlkZSBkZWZhdWx0Ci0jIHZhbHVlLiAgQnkgd2UgbmVlZCB0byBrbm93IGlmIGZpbGVzIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgotYWNfbmVlZF9kZWZhdWx0cz06Ci13aGlsZSB0ZXN0ICQjICE9IDAKLWRvCi0gIGNhc2UgJDEgaW4KLSAgLS0qPSopCi0gICAgYWNfb3B0aW9uPWBleHByICJ4JDEiIDogJ3hcKFtePV0qXCk9J2AKLSAgICBhY19vcHRhcmc9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSdgCi0gICAgYWNfc2hpZnQ9OgotICAgIDs7Ci0gIC0qKQotICAgIGFjX29wdGlvbj0kMQotICAgIGFjX29wdGFyZz0kMgotICAgIGFjX3NoaWZ0PXNoaWZ0Ci0gICAgOzsKLSAgKikgIyBUaGlzIGlzIG5vdCBhbiBvcHRpb24sIHNvIHRoZSB1c2VyIGhhcyBwcm9iYWJseSBnaXZlbiBleHBsaWNpdAotICAgICAjIGFyZ3VtZW50cy4KLSAgICAgYWNfb3B0aW9uPSQxCi0gICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OwotICBlc2FjCi0KLSAgY2FzZSAkYWNfb3B0aW9uIGluCi0gICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKLSAgICBhY19jc19yZWNoZWNrPTogOzsKLSAgLS12ZXJzaW9uIHwgLS12ZXJzKiB8IC1WICkKLSAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgMCA7OwotICAtLWhlIHwgLS1oKQotICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7Ci0gIC0taGVscCB8IC0taGVsIHwgLWggKQotICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgMCA7OwotICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKLSAgICBkZWJ1Zz06IDs7Ci0gIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCi0gICAgJGFjX3NoaWZ0Ci0gICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCi0gICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7Ci0gIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKLSAgICAkYWNfc2hpZnQKLSAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICRhY19vcHRhcmciCi0gICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7Ci0gIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCi0gIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKLSAgICBhY19jc19zaWxlbnQ9OiA7OwotCi0gICMgVGhpcyBpcyBhbiBlcnJvci4KLSAgLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKLQotICAqKSBhY19jb25maWdfdGFyZ2V0cz0iJGFjX2NvbmZpZ190YXJnZXRzICQxIiA7OwotCi0gIGVzYWMKLSAgc2hpZnQKLWRvbmUKLQotYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9Ci0KLWlmICRhY19jc19zaWxlbnQ7IHRoZW4KLSAgZXhlYyA2Pi9kZXYvbnVsbAotICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgotZmkKLQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotaWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCi0gIGVjaG8gInJ1bm5pbmcgJFNIRUxMICQwICIgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgIiAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIgPiY2Ci0gIGV4ZWMgJFNIRUxMICQwICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCi1maQotCi1fQUNFT0YKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLSMKLSMgSU5JVC1DT01NQU5EUyBzZWN0aW9uLgotIwotCi1BTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiCi0KLV9BQ0VPRgotCi0KLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi1mb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKLWRvCi0gIGNhc2UgIiRhY19jb25maWdfdGFyZ2V0IiBpbgotICAjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KLSAgIk1ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKLSAgIm00L01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtNC9NYWtlZmlsZSIgOzsKLSAgImxpYnV0aWwvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnV0aWwvTWFrZWZpbGUiIDs7Ci0gICJsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlIiA7OwotICAibGlidXRpbCsrL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJ1dGlsKysvTWFrZWZpbGUiIDs7Ci0gICJsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZSIgOzsKLSAgImxpYm9wL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJvcC9NYWtlZmlsZSIgOzsKLSAgImxpYm9wL3Rlc3RzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJvcC90ZXN0cy9NYWtlZmlsZSIgOzsKLSAgImxpYm9wdCsrL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJvcHQrKy9NYWtlZmlsZSIgOzsKLSAgImxpYmRiL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJkYi9NYWtlZmlsZSIgOzsKLSAgImxpYmRiL3Rlc3RzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJkYi90ZXN0cy9NYWtlZmlsZSIgOzsKLSAgImxpYmFiaS9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGliYWJpL01ha2VmaWxlIiA7OwotICAibGliYWJpL3Rlc3RzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJhYmkvdGVzdHMvTWFrZWZpbGUiIDs7Ci0gICJsaWJyZWdleC9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicmVnZXgvTWFrZWZpbGUiIDs7Ci0gICJsaWJyZWdleC90ZXN0cy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUiIDs7Ci0gICJsaWJyZWdleC9zdGwucGF0IiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJyZWdleC9zdGwucGF0IiA7OwotICAibGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJyZWdleC90ZXN0cy9tYW5nbGVkLW5hbWUiIDs7Ci0gICJkYWVtb24vTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRhZW1vbi9NYWtlZmlsZSIgOzsKLSAgImRhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUiIDs7Ci0gICJldmVudHMvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV2ZW50cy9NYWtlZmlsZSIgOzsKLSAgInV0aWxzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB1dGlscy9NYWtlZmlsZSIgOzsKLSAgImRvYy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL01ha2VmaWxlIiA7OwotICAiZG9jL3hzbC9jYXRhbG9nLTEueG1sIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2MveHNsL2NhdGFsb2ctMS54bWwiIDs7Ci0gICJkb2Mvb3Byb2ZpbGUuMSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL29wcm9maWxlLjEiIDs7Ci0gICJkb2Mvb3Bjb250cm9sLjEiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9vcGNvbnRyb2wuMSIgOzsKLSAgImRvYy9vcGhlbHAuMSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL29waGVscC4xIiA7OwotICAiZG9jL29wcmVwb3J0LjEiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9vcHJlcG9ydC4xIiA7OwotICAiZG9jL29wYW5ub3RhdGUuMSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL29wYW5ub3RhdGUuMSIgOzsKLSAgImRvYy9vcGdwcm9mLjEiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9vcGdwcm9mLjEiIDs7Ci0gICJkb2Mvb3BhcmNoaXZlLjEiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9vcGFyY2hpdmUuMSIgOzsKLSAgImRvYy9zcmNkb2MvRG94eWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9zcmNkb2MvRG94eWZpbGUiIDs7Ci0gICJsaWJwcC9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicHAvTWFrZWZpbGUiIDs7Ci0gICJwcC9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcHAvTWFrZWZpbGUiIDs7Ci0gICJndWkvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGd1aS9NYWtlZmlsZSIgOzsKLSAgImd1aS91aS9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3VpL3VpL01ha2VmaWxlIiA7OwotICAibW9kdWxlL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtb2R1bGUvTWFrZWZpbGUiIDs7Ci0gICJtb2R1bGUveDg2L01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtb2R1bGUveDg2L01ha2VmaWxlIiA7OwotICAibW9kdWxlL2lhNjQvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1vZHVsZS9pYTY0L01ha2VmaWxlIiA7OwotICAiZGVwZmlsZXMiICkgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlcGZpbGVzIiA7OwotICAiY29uZmlnLmgiICkgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb25maWcuaCIgOzsKLSAgKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OwotICBlc2FjCi1kb25lCi0KLSMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKLSMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgotIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQotIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KLWlmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCi0gIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCi0gIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCi0gIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCi1maQotCi0jIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKLSMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHB1dCBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCi0jIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCBob29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgotJGRlYnVnIHx8Ci17Ci0gIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/OyBybSAtcmYgJHRtcCAmJiBleGl0ICRleGl0X3N0YXR1cycgMAotICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQotfQotCi0jIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KLQotewotICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIuL2NvbmZzdGF0WFhYWFhYIikgMj4vZGV2L251bGxgICYmCi0gIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCi19ICB8fAotewotICB0bXA9Li9jb25mc3RhdCQkLSRSQU5ET00KLSAgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKQotfSB8fAotewotICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotfQotCi1fQUNFT0YKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLQotIwotIyBDT05GSUdfRklMRVMgc2VjdGlvbi4KLSMKLQotIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCi0jIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKLWlmIHRlc3QgLW4gIlwkQ09ORklHX0ZJTEVTIjsgdGhlbgotICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgotICBzZWQgJ3MvLEAvQEAvOyBzL0AsL0BALzsgcy8sO3QgdFwkL0A7dCB0LzsgL0A7dCB0XCQvcy9bXFxcXCYsXS9cXFxcJi9nOwotICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0XCQvLDt0IHQvJyA+XCR0bXAvc3Vicy5zZWQgPDxcXENFT0YKLXMsQFNIRUxMQCwkU0hFTEwsO3QgdAotcyxAUEFUSF9TRVBBUkFUT1JALCRQQVRIX1NFUEFSQVRPUiw7dCB0Ci1zLEBQQUNLQUdFX05BTUVALCRQQUNLQUdFX05BTUUsO3QgdAotcyxAUEFDS0FHRV9UQVJOQU1FQCwkUEFDS0FHRV9UQVJOQU1FLDt0IHQKLXMsQFBBQ0tBR0VfVkVSU0lPTkAsJFBBQ0tBR0VfVkVSU0lPTiw7dCB0Ci1zLEBQQUNLQUdFX1NUUklOR0AsJFBBQ0tBR0VfU1RSSU5HLDt0IHQKLXMsQFBBQ0tBR0VfQlVHUkVQT1JUQCwkUEFDS0FHRV9CVUdSRVBPUlQsO3QgdAotcyxAZXhlY19wcmVmaXhALCRleGVjX3ByZWZpeCw7dCB0Ci1zLEBwcmVmaXhALCRwcmVmaXgsO3QgdAotcyxAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAsJHByb2dyYW1fdHJhbnNmb3JtX25hbWUsO3QgdAotcyxAYmluZGlyQCwkYmluZGlyLDt0IHQKLXMsQHNiaW5kaXJALCRzYmluZGlyLDt0IHQKLXMsQGxpYmV4ZWNkaXJALCRsaWJleGVjZGlyLDt0IHQKLXMsQGRhdGFkaXJALCRkYXRhZGlyLDt0IHQKLXMsQHN5c2NvbmZkaXJALCRzeXNjb25mZGlyLDt0IHQKLXMsQHNoYXJlZHN0YXRlZGlyQCwkc2hhcmVkc3RhdGVkaXIsO3QgdAotcyxAbG9jYWxzdGF0ZWRpckAsJGxvY2Fsc3RhdGVkaXIsO3QgdAotcyxAbGliZGlyQCwkbGliZGlyLDt0IHQKLXMsQGluY2x1ZGVkaXJALCRpbmNsdWRlZGlyLDt0IHQKLXMsQG9sZGluY2x1ZGVkaXJALCRvbGRpbmNsdWRlZGlyLDt0IHQKLXMsQGluZm9kaXJALCRpbmZvZGlyLDt0IHQKLXMsQG1hbmRpckAsJG1hbmRpciw7dCB0Ci1zLEBidWlsZF9hbGlhc0AsJGJ1aWxkX2FsaWFzLDt0IHQKLXMsQGhvc3RfYWxpYXNALCRob3N0X2FsaWFzLDt0IHQKLXMsQHRhcmdldF9hbGlhc0AsJHRhcmdldF9hbGlhcyw7dCB0Ci1zLEBERUZTQCwkREVGUyw7dCB0Ci1zLEBFQ0hPX0NALCRFQ0hPX0MsO3QgdAotcyxARUNIT19OQCwkRUNIT19OLDt0IHQKLXMsQEVDSE9fVEAsJEVDSE9fVCw7dCB0Ci1zLEBMSUJTQCwkTElCUyw7dCB0Ci1zLEBJTlNUQUxMX1BST0dSQU1ALCRJTlNUQUxMX1BST0dSQU0sO3QgdAotcyxASU5TVEFMTF9TQ1JJUFRALCRJTlNUQUxMX1NDUklQVCw7dCB0Ci1zLEBJTlNUQUxMX0RBVEFALCRJTlNUQUxMX0RBVEEsO3QgdAotcyxAQ1lHUEFUSF9XQCwkQ1lHUEFUSF9XLDt0IHQKLXMsQFBBQ0tBR0VALCRQQUNLQUdFLDt0IHQKLXMsQFZFUlNJT05ALCRWRVJTSU9OLDt0IHQKLXMsQEFDTE9DQUxALCRBQ0xPQ0FMLDt0IHQKLXMsQEFVVE9DT05GQCwkQVVUT0NPTkYsO3QgdAotcyxAQVVUT01BS0VALCRBVVRPTUFLRSw7dCB0Ci1zLEBBVVRPSEVBREVSQCwkQVVUT0hFQURFUiw7dCB0Ci1zLEBNQUtFSU5GT0AsJE1BS0VJTkZPLDt0IHQKLXMsQGluc3RhbGxfc2hALCRpbnN0YWxsX3NoLDt0IHQKLXMsQFNUUklQQCwkU1RSSVAsO3QgdAotcyxAYWNfY3RfU1RSSVBALCRhY19jdF9TVFJJUCw7dCB0Ci1zLEBJTlNUQUxMX1NUUklQX1BST0dSQU1ALCRJTlNUQUxMX1NUUklQX1BST0dSQU0sO3QgdAotcyxAbWtkaXJfcEAsJG1rZGlyX3AsO3QgdAotcyxAQVdLQCwkQVdLLDt0IHQKLXMsQFNFVF9NQUtFQCwkU0VUX01BS0UsO3QgdAotcyxAYW1fX2xlYWRpbmdfZG90QCwkYW1fX2xlYWRpbmdfZG90LDt0IHQKLXMsQEFNVEFSQCwkQU1UQVIsO3QgdAotcyxAYW1fX3RhckAsJGFtX190YXIsO3QgdAotcyxAYW1fX3VudGFyQCwkYW1fX3VudGFyLDt0IHQKLXMsQFJBTkxJQkAsJFJBTkxJQiw7dCB0Ci1zLEBhY19jdF9SQU5MSUJALCRhY19jdF9SQU5MSUIsO3QgdAotcyxAREFURUAsJERBVEUsO3QgdAotcyxAT1BST0ZJTEVfRElSQCwkT1BST0ZJTEVfRElSLDt0IHQKLXMsQENDQCwkQ0MsO3QgdAotcyxAQ0ZMQUdTQCwkQ0ZMQUdTLDt0IHQKLXMsQExERkxBR1NALCRMREZMQUdTLDt0IHQKLXMsQENQUEZMQUdTQCwkQ1BQRkxBR1MsO3QgdAotcyxAYWNfY3RfQ0NALCRhY19jdF9DQyw7dCB0Ci1zLEBFWEVFWFRALCRFWEVFWFQsO3QgdAotcyxAT0JKRVhUQCwkT0JKRVhULDt0IHQKLXMsQERFUERJUkAsJERFUERJUiw7dCB0Ci1zLEBhbV9faW5jbHVkZUAsJGFtX19pbmNsdWRlLDt0IHQKLXMsQGFtX19xdW90ZUAsJGFtX19xdW90ZSw7dCB0Ci1zLEBBTURFUF9UUlVFQCwkQU1ERVBfVFJVRSw7dCB0Ci1zLEBBTURFUF9GQUxTRUAsJEFNREVQX0ZBTFNFLDt0IHQKLXMsQEFNREVQQkFDS1NMQVNIQCwkQU1ERVBCQUNLU0xBU0gsO3QgdAotcyxAQ0NERVBNT0RFQCwkQ0NERVBNT0RFLDt0IHQKLXMsQGFtX19mYXN0ZGVwQ0NfVFJVRUAsJGFtX19mYXN0ZGVwQ0NfVFJVRSw7dCB0Ci1zLEBhbV9fZmFzdGRlcENDX0ZBTFNFQCwkYW1fX2Zhc3RkZXBDQ19GQUxTRSw7dCB0Ci1zLEBDUFBALCRDUFAsO3QgdAotcyxAQ1hYQCwkQ1hYLDt0IHQKLXMsQENYWEZMQUdTQCwkQ1hYRkxBR1MsO3QgdAotcyxAYWNfY3RfQ1hYQCwkYWNfY3RfQ1hYLDt0IHQKLXMsQENYWERFUE1PREVALCRDWFhERVBNT0RFLDt0IHQKLXMsQGFtX19mYXN0ZGVwQ1hYX1RSVUVALCRhbV9fZmFzdGRlcENYWF9UUlVFLDt0IHQKLXMsQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQCwkYW1fX2Zhc3RkZXBDWFhfRkFMU0UsO3QgdAotcyxATERALCRMRCw7dCB0Ci1zLEBLU1JDQCwkS1NSQyw7dCB0Ci1zLEBLSU5DQCwkS0lOQyw7dCB0Ci1zLEBrZXJuZWxfc3VwcG9ydF9UUlVFQCwka2VybmVsX3N1cHBvcnRfVFJVRSw7dCB0Ci1zLEBrZXJuZWxfc3VwcG9ydF9GQUxTRUAsJGtlcm5lbF9zdXBwb3J0X0ZBTFNFLDt0IHQKLXMsQEtWRVJTQCwkS1ZFUlMsO3QgdAotcyxAT1BST0ZJTEVfTU9EVUxFX0FSQ0hALCRPUFJPRklMRV9NT0RVTEVfQVJDSCw7dCB0Ci1zLEBNT0RJTlNUQUxMRElSQCwkTU9ESU5TVEFMTERJUiw7dCB0Ci1zLEBFWFRSQV9DRkxBR1NfTU9EVUxFQCwkRVhUUkFfQ0ZMQUdTX01PRFVMRSw7dCB0Ci1zLEB0b3BkaXJALCR0b3BkaXIsO3QgdAotcyxARUdSRVBALCRFR1JFUCw7dCB0Ci1zLEBTSVpFX1RfVFlQRUAsJFNJWkVfVF9UWVBFLDt0IHQKLXMsQFBUUkRJRkZfVF9UWVBFQCwkUFRSRElGRl9UX1RZUEUsO3QgdAotcyxAQ1hYQ1BQQCwkQ1hYQ1BQLDt0IHQKLXMsQFhfQ0ZMQUdTQCwkWF9DRkxBR1MsO3QgdAotcyxAWF9QUkVfTElCU0AsJFhfUFJFX0xJQlMsO3QgdAotcyxAWF9MSUJTQCwkWF9MSUJTLDt0IHQKLXMsQFhfRVhUUkFfTElCU0AsJFhfRVhUUkFfTElCUyw7dCB0Ci1zLEBRVF9JTkNMVURFU0AsJFFUX0lOQ0xVREVTLDt0IHQKLXMsQFFUX0xERkxBR1NALCRRVF9MREZMQUdTLDt0IHQKLXMsQE1PQ0AsJE1PQyw7dCB0Ci1zLEBVSUNALCRVSUMsO3QgdAotcyxAUVRfTElCQCwkUVRfTElCLDt0IHQKLXMsQFFUX1ZFUlNJT05ALCRRVF9WRVJTSU9OLDt0IHQKLXMsQGVuYWJsZV9hYmlfVFJVRUAsJGVuYWJsZV9hYmlfVFJVRSw7dCB0Ci1zLEBlbmFibGVfYWJpX0ZBTFNFQCwkZW5hYmxlX2FiaV9GQUxTRSw7dCB0Ci1zLEBYU0xUUFJPQ0AsJFhTTFRQUk9DLDt0IHQKLXMsQGhhdmVfeHNsdHByb2NfVFJVRUAsJGhhdmVfeHNsdHByb2NfVFJVRSw7dCB0Ci1zLEBoYXZlX3hzbHRwcm9jX0ZBTFNFQCwkaGF2ZV94c2x0cHJvY19GQUxTRSw7dCB0Ci1zLEBYTUxfQ0FUQUxPR0AsJFhNTF9DQVRBTE9HLDt0IHQKLXMsQFhTTFRQUk9DX0ZMQUdTQCwkWFNMVFBST0NfRkxBR1MsO3QgdAotcyxARE9DQk9PS19ST09UQCwkRE9DQk9PS19ST09ULDt0IHQKLXMsQENBVF9FTlRSWV9TVEFSVEAsJENBVF9FTlRSWV9TVEFSVCw7dCB0Ci1zLEBDQVRfRU5UUllfRU5EQCwkQ0FUX0VOVFJZX0VORCw7dCB0Ci1zLEBMSUJFUlRZX0xJQlNALCRMSUJFUlRZX0xJQlMsO3QgdAotcyxAQkZEX0xJQlNALCRCRkRfTElCUyw7dCB0Ci1zLEBQT1BUX0xJQlNALCRQT1BUX0xJQlMsO3QgdAotcyxAaGF2ZV9xdF9UUlVFQCwkaGF2ZV9xdF9UUlVFLDt0IHQKLXMsQGhhdmVfcXRfRkFMU0VALCRoYXZlX3F0X0ZBTFNFLDt0IHQKLXMsQE9QX0NGTEFHU0AsJE9QX0NGTEFHUyw7dCB0Ci1zLEBPUF9DWFhGTEFHU0AsJE9QX0NYWEZMQUdTLDt0IHQKLXMsQE9QX0RPQ0RJUkAsJE9QX0RPQ0RJUiw7dCB0Ci1zLEBMSUJPQkpTQCwkTElCT0JKUyw7dCB0Ci1zLEBMVExJQk9CSlNALCRMVExJQk9CSlMsO3QgdAotQ0VPRgotCi1fQUNFT0YKLQotICBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSAgIyBTcGxpdCB0aGUgc3Vic3RpdHV0aW9ucyBpbnRvIGJpdGUtc2l6ZWQgcGllY2VzIGZvciBzZWRzIHdpdGgKLSAgIyBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCi0gIGFjX21heF9zZWRfbGluZXM9NDgKLSAgYWNfc2VkX2ZyYWc9MSAjIE51bWJlciBvZiBjdXJyZW50IGZpbGUuCi0gIGFjX2JlZz0xICMgRmlyc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgotICBhY19lbmQ9JGFjX21heF9zZWRfbGluZXMgIyBMaW5lIGFmdGVyIGxhc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgotICBhY19tb3JlX2xpbmVzPToKLSAgYWNfc2VkX2NtZHM9Ci0gIHdoaWxlICRhY19tb3JlX2xpbmVzOyBkbwotICAgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgotICAgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiICR0bXAvc3Vicy5zZWQgPiR0bXAvc3Vicy5mcmFnCi0gICAgZWxzZQotICAgICAgc2VkICIke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZwotICAgIGZpCi0gICAgaWYgdGVzdCAhIC1zICR0bXAvc3Vicy5mcmFnOyB0aGVuCi0gICAgICBhY19tb3JlX2xpbmVzPWZhbHNlCi0gICAgZWxzZQotICAgICAgIyBUaGUgcHVycG9zZSBvZiB0aGUgbGFiZWwgYW5kIG9mIHRoZSBicmFuY2hpbmcgY29uZGl0aW9uIGlzIHRvCi0gICAgICAjIHNwZWVkIHVwIHRoZSBzZWQgcHJvY2Vzc2luZyAoaWYgdGhlcmUgYXJlIG5vIGBAJyBhdCBhbGwsIHRoZXJlCi0gICAgICAjIGlzIG5vIG5lZWQgdG8gYnJvd3NlIGFueSBvZiB0aGUgc3Vic3RpdHV0aW9ucykuCi0gICAgICAjIFRoZXNlIGFyZSB0aGUgdHdvIGV4dHJhIHNlZCBjb21tYW5kcyBtZW50aW9uZWQgYWJvdmUuCi0gICAgICAoZWNobyAnOnQKLSAgL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYicgJiYgY2F0ICR0bXAvc3Vicy5mcmFnKSA+JHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQKLSAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KLQlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgotICAgICAgZWxzZQotCWFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCi0gICAgICBmaQotICAgICAgYWNfc2VkX2ZyYWc9YGV4cHIgJGFjX3NlZF9mcmFnICsgMWAKLSAgICAgIGFjX2JlZz0kYWNfZW5kCi0gICAgICBhY19lbmQ9YGV4cHIgJGFjX2VuZCArICRhY19tYXhfc2VkX2xpbmVzYAotICAgIGZpCi0gIGRvbmUKLSAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgotICAgIGFjX3NlZF9jbWRzPWNhdAotICBmaQotZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgotCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0ZJTEVTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKLSAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgotICBjYXNlICRhY19maWxlIGluCi0gIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgotCWNhdCA+JHRtcC9zdGRpbgotCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKLSAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLQlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7Ci0gIGVzYWMKLQotICAjIENvbXB1dGUgQHNyY2RpckAsIEB0b3Bfc3JjZGlyQCwgYW5kIEBJTlNUQUxMQCBmb3Igc3ViZGlyZWN0b3JpZXMuCi0gIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYWNfZmlsZSIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAiJGFjX2RpciIKLSAgZWxzZQotICAgIGFzX2Rpcj0iJGFjX2RpciIKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQotICBhY19idWlsZGRpcj0uCi0KLWlmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KLSAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAotICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwuLi8sZydgCi1lbHNlCi0gIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KLWZpCi0KLWNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCi0gICAgYWNfc3JjZGlyPS4KLSAgICBpZiB0ZXN0IC16ICIkYWNfdG9wX2J1aWxkZGlyIjsgdGhlbgotICAgICAgIGFjX3RvcF9zcmNkaXI9LgotICAgIGVsc2UKLSAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY190b3BfYnVpbGRkaXIgfCBzZWQgJ3MsLyQsLCdgCi0gICAgZmkgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKLWVzYWMKLQotIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCi0jIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgotY2FzZSBgcHdkYCBpbgotLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0qKQotICBjYXNlICIkYWNfZGlyIiBpbgotICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0qKQotICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KLSAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfc3JjZGlyIGluCi0gIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgotICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0gICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKLQotCi0gIGNhc2UgJElOU1RBTEwgaW4KLSAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OwotICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRkaXIkSU5TVEFMTCA7OwotICBlc2FjCi0KLSAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9Ci0gICAgcm0gLWYgIiRhY19maWxlIgotICBmaQotICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAotICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6Ci0gICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgPSB4LTsgdGhlbgotICAgIGNvbmZpZ3VyZV9pbnB1dD0KLSAgZWxzZQotICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAiCi0gIGZpCi0gIGNvbmZpZ3VyZV9pbnB1dD0kY29uZmlndXJlX2lucHV0IkdlbmVyYXRlZCBmcm9tIGBlY2hvICRhY19maWxlX2luIHwKLQkJCQkgICAgIHNlZCAncywuKi8sLCdgIGJ5IGNvbmZpZ3VyZS4iCi0KLSAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKLSAgIyBzcmMgdHJlZS4KLSAgYWNfZmlsZV9pbnB1dHM9YElGUz06Ci0gICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCi0gICAgICBjYXNlICRmIGluCi0gICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKLSAgICAgIFtcXC8kXSopCi0JICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCi0JIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCSBlY2hvICIkZiI7OwotICAgICAgKikgIyBSZWxhdGl2ZQotCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KLQkgICAjIEJ1aWxkIHRyZWUKLQkgICBlY2hvICIkZiIKLQkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgotCSAgICMgU291cmNlIHRyZWUKLQkgICBlY2hvICIkc3JjZGlyLyRmIgotCSBlbHNlCi0JICAgIyAvZGV2L251bGwgdHJlZQotCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JIGZpOzsKLSAgICAgIGVzYWMKLSAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLSAgc2VkICIkYWNfdnBzdWIKLSRleHRyYXN1YgotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLTp0Ci0vQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCi1zLEBjb25maWd1cmVfaW5wdXRALCRjb25maWd1cmVfaW5wdXQsO3QgdAotcyxAc3JjZGlyQCwkYWNfc3JjZGlyLDt0IHQKLXMsQGFic19zcmNkaXJALCRhY19hYnNfc3JjZGlyLDt0IHQKLXMsQHRvcF9zcmNkaXJALCRhY190b3Bfc3JjZGlyLDt0IHQKLXMsQGFic190b3Bfc3JjZGlyQCwkYWNfYWJzX3RvcF9zcmNkaXIsO3QgdAotcyxAYnVpbGRkaXJALCRhY19idWlsZGRpciw7dCB0Ci1zLEBhYnNfYnVpbGRkaXJALCRhY19hYnNfYnVpbGRkaXIsO3QgdAotcyxAdG9wX2J1aWxkZGlyQCwkYWNfdG9wX2J1aWxkZGlyLDt0IHQKLXMsQGFic190b3BfYnVpbGRkaXJALCRhY19hYnNfdG9wX2J1aWxkZGlyLDt0IHQKLXMsQElOU1RBTExALCRhY19JTlNUQUxMLDt0IHQKLSIgJGFjX2ZpbGVfaW5wdXRzIHwgKGV2YWwgIiRhY19zZWRfY21kcyIpID4kdG1wL291dAotICBybSAtZiAkdG1wL3N0ZGluCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICBtdiAkdG1wL291dCAkYWNfZmlsZQotICBlbHNlCi0gICAgY2F0ICR0bXAvb3V0Ci0gICAgcm0gLWYgJHRtcC9vdXQKLSAgZmkKLQotZG9uZQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLQotIwotIyBDT05GSUdfSEVBREVSIHNlY3Rpb24uCi0jCi0KLSMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBOQU1FIEMgVkFMVUUgRCIsIHdoZXJlCi0jIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCi0jCi0jIGFjX2Qgc2V0cyB0aGUgdmFsdWUgaW4gIiNkZWZpbmUgTkFNRSBWQUxVRSIgbGluZXMuCi1hY19kQT0ncyxeXChbCSBdKlwpI1woWwkgXSpkZWZpbmVbCSBdWwkgXSpcKScKLWFjX2RCPSdbCSBdLiokLFwxI1wyJwotYWNfZEM9JyAnCi1hY19kRD0nLDt0JwotIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KLWFjX3VBPSdzLF5cKFsJIF0qXCkjXChbCSBdKlwpdW5kZWZcKFsJIF1bCSBdKlwpJwotYWNfdUI9JyQsXDEjXDJkZWZpbmVcMycKLWFjX3VDPScgJwotYWNfdUQ9Jyw7dCcKLQotZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0hFQURFUlM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQotICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCi0JY2F0ID4kdG1wL3N0ZGluCi0JYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLQlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7Ci0gICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKLSAgZXNhYwotCi0gIHRlc3QgeCIkYWNfZmlsZSIgIT0geC0gJiYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KLQotICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQotICAjIHNyYyB0cmVlLgotICBhY19maWxlX2lucHV0cz1gSUZTPToKLSAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KLSAgICAgIGNhc2UgJGYgaW4KLSAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OwotICAgICAgW1xcLyRdKikKLQkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKLQkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JICMgRG8gcXVvdGUgJGYsIHRvIHByZXZlbnQgRE9TIHBhdGhzIGZyb20gYmVpbmcgSUZTJ2QuCi0JIGVjaG8gIiRmIjs7Ci0gICAgICAqKSAjIFJlbGF0aXZlCi0JIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgotCSAgICMgQnVpbGQgdHJlZQotCSAgIGVjaG8gIiRmIgotCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCi0JICAgIyBTb3VyY2UgdHJlZQotCSAgIGVjaG8gIiRzcmNkaXIvJGYiCi0JIGVsc2UKLQkgICAjIC9kZXYvbnVsbCB0cmVlCi0JICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgZmk7OwotICAgICAgZXNhYwotICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotICAjIFJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2VzLgotICBzZWQgJ3MvWwkgXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgotCi1fQUNFT0YKLQotIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIHR3byBzZWQgc2NyaXB0cywgYGNvbmZ0ZXN0LmRlZmluZXMnIGFuZAotIyBgY29uZnRlc3QudW5kZWZzJywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCi0jIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguICBUaGUgZmlyc3QgaGFuZGxlcyBgI2RlZmluZScKLSMgdGVtcGxhdGVzLCBhbmQgdGhlIHNlY29uZCBgI3VuZGVmJyB0ZW1wbGF0ZXMuCi0jIEFuZCBmaXJzdDogUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0IGluCi0jIGNvbmZpZy5zdGF0dXMuICBQcm90ZWN0IGFnYWluc3QgYmVpbmcgaW4gYW4gdW5xdW90ZWQgaGVyZSBkb2N1bWVudAotIyBpbiBjb25maWcuc3RhdHVzLgotcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC51bmRlZnMKLSMgVXNpbmcgYSBoZXJlIGRvY3VtZW50IGluc3RlYWQgb2YgYSBzdHJpbmcgcmVkdWNlcyB0aGUgcXVvdGluZyBuaWdodG1hcmUuCi0jIFB1dHRpbmcgY29tbWVudHMgaW4gc2VkIHNjcmlwdHMgaXMgbm90IHBvcnRhYmxlLgotIwotIyBgZW5kJyBpcyB1c2VkIHRvIGF2b2lkIHRoYXQgdGhlIHNlY29uZCBtYWluIHNlZCBjb21tYW5kIChtZWFudCBmb3IKLSMgMC1hcnkgQ1BQIG1hY3JvcykgYXBwbGllcyB0byBuLWFyeSBtYWNybyBkZWZpbml0aW9ucy4KLSMgU2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIGZvciBgY2xlYXInLgotY2F0ID5jb25mZGVmMnNlZC5zZWQgPDxcX0FDRU9GCi1zL1tcXCYsXS9cXCYvZwotcyxbXFwkYF0sXFwmLGcKLXQgY2xlYXIKLTogY2xlYXIKLXMsXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgKF1bXgkgKF0qXClcKChbXildKilcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMVwyJHthY19kQ31cMyR7YWNfZER9LGdwCi10IGVuZAotcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSBdW14JIF0qXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0sZ3AKLTogZW5kCi1fQUNFT0YKLSMgSWYgc29tZSBtYWNyb3Mgd2VyZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB0aGVyZSBtaWdodCBiZSBzZXZlcmFsIHRpbWVzCi0jIHRoZSBzYW1lICNkZWZpbmVzLCB3aGljaCBpcyB1c2VsZXNzLiAgTmV2ZXJ0aGVsZXNzLCB3ZSBtYXkgbm90IHdhbnQgdG8KLSMgc29ydCB0aGVtLCBzaW5jZSB3ZSB3YW50IHRoZSAqbGFzdCogQUMtREVGSU5FIHRvIGJlIGhvbm9yZWQuCi11bmlxIGNvbmZkZWZzLmggfCBzZWQgLW4gLWYgY29uZmRlZjJzZWQuc2VkID5jb25mdGVzdC5kZWZpbmVzCi1zZWQgJ3MvYWNfZC9hY191L2cnIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnVuZGVmcwotcm0gLWYgY29uZmRlZjJzZWQuc2VkCi0KLSMgVGhpcyBzZWQgY29tbWFuZCByZXBsYWNlcyAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IKLSMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKLSMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgotY2F0ID4+Y29uZnRlc3QudW5kZWZzIDw8XF9BQ0VPRgotcyxeWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKlthLXpBLVpfXVthLXpBLVpfMC05XSosLyogJiAqLywKLV9BQ0VPRgotCi0jIEJyZWFrIHVwIGNvbmZ0ZXN0LmRlZmluZXMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKLSMgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28gKDEwMCBjbWRzKS4KLWVjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjZGVmaW5lIHRlbXBsYXRlcyBvbmx5IGlmIG5lY2Vzc2FyeS4nID4+JENPTkZJR19TVEFUVVMKLWVjaG8gJyAgaWYgZ3JlcCAiXlsJIF0qI1sJIF0qZGVmaW5lIiAkdG1wL2luID4vZGV2L251bGw7IHRoZW4nID4+JENPTkZJR19TVEFUVVMKLWVjaG8gJyAgIyBJZiB0aGVyZSBhcmUgbm8gZGVmaW5lcywgd2UgbWF5IGhhdmUgYW4gZW1wdHkgaWYvZmknID4+JENPTkZJR19TVEFUVVMKLWVjaG8gJyAgOicgPj4kQ09ORklHX1NUQVRVUwotcm0gLWYgY29uZnRlc3QudGFpbAotd2hpbGUgZ3JlcCAuIGNvbmZ0ZXN0LmRlZmluZXMgPi9kZXYvbnVsbAotZG8KLSAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvZGVmaW5lcy5zZWQuCi0gIGVjaG8gJyAgY2F0ID4kdG1wL2RlZmluZXMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUwotICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjZGVmaW5lJyBsaW5lcy4KLSAgZWNobyAnL15bCSBdKiNbCSBdKmRlZmluZS8hYicgPj4kQ09ORklHX1NUQVRVUwotICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgotICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LmRlZmluZXMgPj4kQ09ORklHX1NUQVRVUwotICBlY2hvICdDRU9GCi0gIHNlZCAtZiAkdG1wL2RlZmluZXMuc2VkICR0bXAvaW4gPiR0bXAvb3V0Ci0gIHJtIC1mICR0bXAvaW4KLSAgbXYgJHRtcC9vdXQgJHRtcC9pbgotJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC5kZWZpbmVzID5jb25mdGVzdC50YWlsCi0gIHJtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKLSAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC5kZWZpbmVzCi1kb25lCi1ybSAtZiBjb25mdGVzdC5kZWZpbmVzCi1lY2hvICcgIGZpICMgZ3JlcCcgPj4kQ09ORklHX1NUQVRVUwotZWNobyA+PiRDT05GSUdfU1RBVFVTCi0KLSMgQnJlYWsgdXAgY29uZnRlc3QudW5kZWZzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uIHRoZSBzaXplCi0jIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vICgxMDAgY21kcykuCi1lY2hvICcgICMgSGFuZGxlIGFsbCB0aGUgI3VuZGVmIHRlbXBsYXRlcycgPj4kQ09ORklHX1NUQVRVUwotcm0gLWYgY29uZnRlc3QudGFpbAotd2hpbGUgZ3JlcCAuIGNvbmZ0ZXN0LnVuZGVmcyA+L2Rldi9udWxsCi1kbwotICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC91bmRlZnMuc2VkLgotICBlY2hvICcgIGNhdCA+JHRtcC91bmRlZnMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUwotICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjdW5kZWYnCi0gIGVjaG8gJy9eWwkgXSojWwkgXSp1bmRlZi8hYicgPj4kQ09ORklHX1NUQVRVUwotICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgotICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LnVuZGVmcyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJ0NFT0YKLSAgc2VkIC1mICR0bXAvdW5kZWZzLnNlZCAkdG1wL2luID4kdG1wL291dAotICBybSAtZiAkdG1wL2luCi0gIG12ICR0bXAvb3V0ICR0bXAvaW4KLScgPj4kQ09ORklHX1NUQVRVUwotICBzZWQgMSwke2FjX21heF9oZXJlX2xpbmVzfWQgY29uZnRlc3QudW5kZWZzID5jb25mdGVzdC50YWlsCi0gIHJtIC1mIGNvbmZ0ZXN0LnVuZGVmcwotICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LnVuZGVmcwotZG9uZQotcm0gLWYgY29uZnRlc3QudW5kZWZzCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAotICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6Ci0gICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgPSB4LTsgdGhlbgotICAgIGVjaG8gIi8qIEdlbmVyYXRlZCBieSBjb25maWd1cmUuICAqLyIgPiR0bXAvY29uZmlnLmgKLSAgZWxzZQotICAgIGVjaG8gIi8qICRhY19maWxlLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAotICBmaQotICBjYXQgJHRtcC9pbiA+PiR0bXAvY29uZmlnLmgKLSAgcm0gLWYgJHRtcC9pbgotICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgaWYgZGlmZiAkYWNfZmlsZSAkdG1wL2NvbmZpZy5oID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKLWVjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQotICAgIGVsc2UKLSAgICAgIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYWNfZmlsZSIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gICAgICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCi0gICAgbWtkaXIgLXAgIiRhY19kaXIiCi0gIGVsc2UKLSAgICBhc19kaXI9IiRhY19kaXIiCi0gICAgYXNfZGlycz0KLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbwotICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFzX2RpciIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gICAgZG9uZQotICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCi0gIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Ci0KLSAgICAgIHJtIC1mICRhY19maWxlCi0gICAgICBtdiAkdG1wL2NvbmZpZy5oICRhY19maWxlCi0gICAgZmkKLSAgZWxzZQotICAgIGNhdCAkdG1wL2NvbmZpZy5oCi0gICAgcm0gLWYgJHRtcC9jb25maWcuaAotICBmaQotIyBDb21wdXRlICRhY19maWxlJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgotX2FtX3N0YW1wX2NvdW50PTEKLWZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbwotICBjYXNlICRfYW1faGVhZGVyIGluCi0gICAgJGFjX2ZpbGUgfCAkYWNfZmlsZToqICkKLSAgICAgIGJyZWFrIDs7Ci0gICAgKiApCi0gICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7Ci0gIGVzYWMKLWRvbmUKLWVjaG8gInRpbWVzdGFtcCBmb3IgJGFjX2ZpbGUiID5gKGRpcm5hbWUgJGFjX2ZpbGUpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYJGFjX2ZpbGUgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCRhY19maWxlIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgkYWNfZmlsZSA6ICdYXCgvL1wpJCcgXHwgXAotCSBYJGFjX2ZpbGUgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYJGFjX2ZpbGUgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgL3N0YW1wLWgkX2FtX3N0YW1wX2NvdW50Ci1kb25lCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotCi0jCi0jIENPTkZJR19DT01NQU5EUyBzZWN0aW9uLgotIwotZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0NPTU1BTkRTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKLSAgYWNfZGVzdD1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AKLSAgYWNfc291cmNlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotICBhY19kaXI9YChkaXJuYW1lICIkYWNfZGVzdCIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhY19kZXN0IiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhY19kZXN0IiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhY19kZXN0IiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhY19kZXN0IiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFjX2Rlc3QiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCi0gICAgbWtkaXIgLXAgIiRhY19kaXIiCi0gIGVsc2UKLSAgICBhc19kaXI9IiRhY19kaXIiCi0gICAgYXNfZGlycz0KLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbwotICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFzX2RpciIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gICAgZG9uZQotICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCi0gIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Ci0KLSAgYWNfYnVpbGRkaXI9LgotCi1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KLSAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAotZWxzZQotICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9Ci1maQotCi1jYXNlICRzcmNkaXIgaW4KLSAgLikgICMgTm8gLS1zcmNkaXIgb3B0aW9uLiAgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgotICAgIGFjX3NyY2Rpcj0uCi0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KLSAgICAgICBhY190b3Bfc3JjZGlyPS4KLSAgICBlbHNlCi0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAotICAgIGZpIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KLSAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OwotICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpciA7OwotICAqKSAjIFJlbGF0aXZlIHBhdGguCi0gICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKLSAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7Ci1lc2FjCi0KLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQotIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KLWNhc2UgYHB3ZGAgaW4KLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotKikKLSAgY2FzZSAiJGFjX2RpciIgaW4KLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotKikKLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCi0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3NyY2RpciBpbgotICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi0KLQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBleGVjdXRpbmcgJGFjX2Rlc3QgY29tbWFuZHMiID4mNQotZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2Rlc3QgY29tbWFuZHMiID4mNjt9Ci0gIGNhc2UgJGFjX2Rlc3QgaW4KLSAgICBkZXBmaWxlcyApIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IGZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbwotICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgotICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAotICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgotICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0Ci0gICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgotICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcwotICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgotICAjIFNvIGxldCdzIGdyZXAgd2hvbGUgZmlsZS4KLSAgaWYgZ3JlcCAnXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZScgJG1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBkaXJwYXJ0PWAoZGlybmFtZSAiJG1mIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJG1mIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRtZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkbWYiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJG1mIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJG1mIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgZWxzZQotICAgIGNvbnRpbnVlCi0gIGZpCi0gICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCi0gICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KLSAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKLSAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKLSAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCi0gIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQotICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAotICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAotICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCi0gICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKLSAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCi0gICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCi0gICMgZXhwYW5zaW9uLgotICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKLSAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKLSAgICAgICBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KLSAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKLSAgICBmZGlyPWAoZGlybmFtZSAiJGZpbGUiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRmaWxlIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCi0gICAgbWtkaXIgLXAgJGRpcnBhcnQvJGZkaXIKLSAgZWxzZQotICAgIGFzX2Rpcj0kZGlycGFydC8kZmRpcgotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgIGRvbmUKLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycwotICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkZGlycGFydC8kZmRpciIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkZGlycGFydC8kZmRpciIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQotCi0gICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKLSAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKLSAgZG9uZQotZG9uZQotIDs7Ci0gIGVzYWMKLWRvbmUKLV9BQ0VPRgotCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLQoteyAoZXhpdCAwKTsgZXhpdCAwOyB9Ci1fQUNFT0YKLWNobW9kICt4ICRDT05GSUdfU1RBVFVTCi1hY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQotCi0KLSMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KLSMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgotIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KLSMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cwotIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKLSMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKLSMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQotIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KLWlmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgotICBhY19jc19zdWNjZXNzPToKLSAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQotICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgotICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgotICBleGVjIDU+L2Rldi9udWxsCi0gICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKLSAgZXhlYyA1Pj5jb25maWcubG9nCi0gICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCi0gICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgotICAkYWNfY3Nfc3VjY2VzcyB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KLWZpCi0KLQotCi1pZiB0ZXN0IC1yIGRvYy94c2wvY2F0YWxvZy54bWw7IHRoZW4KLQlpZiBjbXAgZG9jL3hzbC9jYXRhbG9nLTEueG1sIGRvYy94c2wvY2F0YWxvZy54bWwgPiAvZGV2L251bGw7IHRoZW4KLQkJZWNobyBkb2MveHNsL2NhdGFsb2cueG1sIGlzIHVuY2hhbmdlZAotCWVsc2UKLQkJY3AgLWYgZG9jL3hzbC9jYXRhbG9nLTEueG1sIGRvYy94c2wvY2F0YWxvZy54bWwKLQlmaQotZWxzZQotCWNwIC1mIGRvYy94c2wvY2F0YWxvZy0xLnhtbCBkb2MveHNsL2NhdGFsb2cueG1sCi1maQotCi0KLWlmIHRlc3QgLXogIiRRVF9MSUIiOyB0aGVuCi0JZWNobyAiV2FybmluZzogYSB3b3JraW5nIFF0IG5vdCBmb3VuZDsgbm8gR1VJIHdpbGwgYmUgYnVpbHQiCi1maQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzg1ZjE2Li4wMDAwMDAwCi0tLSBhL2NvbmZpZ3VyZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0jICAgQXV0b2NvbmYgc2NyaXB0IGZvciBvcHJvZmlsZQotIwotIyAgIENvcHlyaWdodCAxOTk5IE9sYWYgVGl0eiA8b2xhZkBiaWdyZWQuaW5rYS5kZT4KLSMgICBBZGFwdGVkIGZvciBvcHJvZmlsZQotIwotIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotIyAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0KLUFDX1BSRVJFUSgyLjEzKQotCi1BQ19JTklUKGxpYm9wL29wX2NvbmZpZy5oKQotQU1fSU5JVF9BVVRPTUFLRShvcHJvZmlsZSwgMC45LjEpCi1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQotCi1BQ19QUk9HX1JBTkxJQgotCi1kbmwgZm9yIHRoZSBtYW4gcGFnZQotREFURT0iYGRhdGUgJyslYSAlZCAlQiAlWSdgIgotQUNfU1VCU1QoREFURSkKLQotZG5sIG5lZWRlZCBmb3IgbW9kdWxlIGJ1aWxkCi1PUFJPRklMRV9ESVI9YHB3ZGAKLUFDX1NVQlNUKE9QUk9GSUxFX0RJUikKLSAKLSMgdGhpcyBuZWVkcyB0byBjb21lIGJlZm9yZSAtLXdpdGgtZ2NjIHNvIHdlIGxpbmsgd2l0aCBiaW51dGlsJ3MgdmVyc2lvbgotIyBvZiBsaWJpYmVydHkgLi4uIHNpZ2gKLUFDX0FSR19XSVRIKGJpbnV0aWxzLAotWyAgLS13aXRoLWJpbnV0aWxzPWRpcgkJUGF0aCB0byBiaW51dGlscyBpbnN0YWxsYXRpb24gdG8gdXNlXSwgQklOVVRJTFNESVI9JHdpdGh2YWwpCi0KLWlmIHRlc3QgIiRCSU5VVElMU0RJUiIgIT0gIiI7IHRoZW4KLQlMRD0iJEJJTlVUSUxTRElSL2xkIgotCWlmIHRlc3QgIiRDRkxBR1MiID0gIiI7IHRoZW4KLQkJQ0ZMQUdTPSItZyAtTzIiCi0JZmkKLQlpZiB0ZXN0ICIkQ1hYRkxBR1MiID0gIiI7IHRoZW4KLQkJQ1hYRkxBR1M9Ii1nIC1PMiIKLQlmaQotCUNGTEFHUz0iJENGTEFHUyAtSSAkQklOVVRJTFNESVIvaW5jbHVkZSIKLQlDWFhGTEFHUz0iJENYWEZMQUdTIC1JICRCSU5VVElMU0RJUi9pbmNsdWRlIgotCUxERkxBR1M9IiRMREZMQUdTIC1MICRCSU5VVElMU0RJUi9saWIgLVhsaW5rZXIgLVIgLVhsaW5rZXIgJEJJTlVUSUxTRElSL2xpYiIKLWZpCi0KLUFDX0FSR19XSVRIKGdjYywKLVsgIC0td2l0aC1nY2M9ZGlyCQlQYXRoIHRvIEdDQyBpbnN0YWxsYXRpb24gdG8gdXNlXSwgR0NDRElSPSR3aXRodmFsKQotCi1pZiB0ZXN0ICIkR0NDRElSIiAhPSAiIjsgdGhlbgotCUNDPSIkR0NDRElSL2Jpbi9nY2MiCi0JQ1hYPSIkR0NDRElSL2Jpbi9nKysiCi0JTERGTEFHUz0iJExERkxBR1MgLUwgJEdDQ0RJUi9saWIgLVhsaW5rZXIgLVIgLVhsaW5rZXIgJEdDQ0RJUi9saWIiCi1maQotCi1BQ19QUk9HX0NDCi1BQ19QUk9HX0NQUAotQUNfUFJPR19DWFgKLUFDX0NIRUNLX1BST0coTEQsbGQsbGQsKQotdGVzdCAiJExEIiB8fCBBQ19FUlJPUihsZCBub3QgZm91bmQpCi0KLUFYX0ZJTkRfS0VSTkVMCi0KLWlmIHRlc3QgIiRPUFJPRklMRV8yNiIgPSAibm8iOyB0aGVuCi0JQVhfQ09ORklHX01PRFVMRQotZmkKLQotQUNfQVJHX1dJVEgobW9kdWxlLWRpciwKLVsgIC0td2l0aC1tb2R1bGUtZGlyPWRpciAgICAgICAgUGF0aCB0byBtb2R1bGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeV0sIE1PRElOU1RBTExESVI9JHdpdGh2YWwpCi1BQ19TVUJTVChNT0RJTlNUQUxMRElSKQotCi1BWF9NQUxMT0NfQVRUUklCVVRFCi1BWF9CVUlMVElOX0VYUEVDVAotCi1BQ19TVUJTVChFWFRSQV9DRkxBR1NfTU9EVUxFKQotCi10b3BkaXI9YHB3ZGAKLUFDX1NVQlNUKHRvcGRpcikKLSAKLUFYX0VYVFJBX0RJUlMKLQotT1JJR19TQVZFX0xJQlM9IiRMSUJTIgotCi1kbmwgYWR2YW5jZWQgZ2xpYmMgZmVhdHVyZXMgd2hpY2ggd2UgbmVlZCBidXQgbWF5IG5vdCBiZSBwcmVzZW50Ci1BQ19DSEVDS19GVU5DUyhzY2hlZF9zZXRhZmZpbml0eSBwZXJmbW9uY3RsKQotCi1BQ19DSEVDS19MSUIocG9wdCwgcG9wdEdldENvbnRleHQsLCBBQ19NU0dfRVJST1IoW3BvcHQgbGlicmFyeSBub3QgZm91bmRdKSkKLQotQVhfQklOVVRJTFMKLQotIyBDKysgdGVzdHMKLSAKLUFDX0xBTkdfQ1BMVVNQTFVTCi0KLUFYX1BPUFRfQ09OU1QKLUFYX0NIRUNLX1NTVFJFQU0KLQotZG5sIGJmZC5oIHByZSAxOTk4IGNoZWNrIG9ubHkgZm9yIGdudSAyLnh4IHNlcmllcywgc28gZ2NjIDMuMCBjYW4ndCBjb21waWxlIGl0Ci1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgYmZkIGRlZmluZXMgYm9vbF0pCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGJmZC5oPl0sIFtdLCAKLUFDX01TR19SRVNVTFQoW25vXSk7LAotQUNfTVNHX1JFU1VMVChbeWVzXSk7IEFDX0RFRklORShUUlVFX0ZBTFNFX0FMUkVBRFlfREVGSU5FRCwgMSwgW3doZXRoZXIgYmZkLmggZGVmaW5lcyBib29sIHZhbHVlc10pKQotCi1kbmwgc21hcnQgZGVtYW5nbGVyIG5lZWQgdG8ga25vdyB3aGF0IGFyZSB0aGUgdW5kZXJsaW5lZCB0eXBlIGZvciBzb21lIHR5cGVkZWYKLUFYX1RZUEVERUZFRF9OQU1FKHNpemVfdCwgInVuc2lnbmVkIiAidW5zaWduZWQgbG9uZyIsIFNJWkVfVF9UWVBFKQotQUNfU1VCU1QoU0laRV9UX1RZUEUpCi1BWF9UWVBFREVGRURfTkFNRShwdHJkaWZmX3QsICJpbnQiICJsb25nIiwgUFRSRElGRl9UX1RZUEUpCi1BQ19TVUJTVChQVFJESUZGX1RfVFlQRSkKLQotQUNfUEFUSF9YVFJBCi1PUklHX1hfU0FWRV9MSUJTPSIkTElCUyIKLUxJQlM9IiRYX1BSRV9MSUJTICRMSUJTICRYX0xJQlMgLWxYMTEgJFhfRVhUUkFfTElCUyIKLVhfTElCUz0iJExJQlMiCi1BQ19TVUJTVChYX0xJQlMpCi1RVF9ET19JVF9BTEwKLUxJQlM9IiRPUklHX1hfU0FWRV9MSUJTIgotCi1kbmwgZW5hYmxlIGNvZGUgdG8gZGVzY3JpYmUgdGhlIGJpbmFyeSBsYXlvdXQgb2YgbGliZGIgZmlsZXMsIGZvciBwbGF0Zm9ybSBwb3J0YWJpbGl0eQotQUNfQVJHX0VOQUJMRShhYmksCi0JWyAgLS1lbmFibGUtYWJpICAgICAgICAgICAgICAgICBlbmFibGUgYWJpIHBvcnRhYmlsaXR5IGNvZGUgKGRlZmF1bHQgaXMgZGlzYWJsZWQpXSwKLQllbmFibGVfYWJpPSRlbmFibGV2YWwsIGVuYWJsZV9hYmk9bm8pCi1pZiB0ZXN0ICIkZW5hYmxlX2FiaSIgPSB5ZXM7IHRoZW4KLQlBQ19ERUZJTkUoT1BST0ZfQUJJLCAxLCBbd2hldGhlciB0byBidWlsZCBBQkkgdG9vbHNdKQotZmkKLUFNX0NPTkRJVElPTkFMKGVuYWJsZV9hYmksIHRlc3QgIiRlbmFibGVfYWJpIiA9IHllcykKLQotZG5sIGVuYWJsZSBwY2ggZm9yIGMrKwotQUNfQVJHX0VOQUJMRShwY2gsCi0JWyAgLS1lbmFibGUtcGNoICAgICAgICAgICAgICAgICBlbmFibGUgcHJlY29tcGlsZWQgaGVhZGVyIChkZWZhdWx0IGlzIGRpc2FibGVkKV0sCi0JZW5hYmxlX3BjaD0kZW5hYmxldmFsLCBlbmFibGVfcGNoPW5vKQotaWYgdGVzdCAiJGVuYWJsZV9wY2giID0geWVzOyB0aGVuCi0JQVhfQ0hFQ0tfUFJFQ09NUElMRURfSEVBREVSKE9QX0NYWEZMQUdTKQotZmkKLQotQVhfQ0hFQ0tfRE9DQk9PSwotCi1kbmwgZmluYWxseSByZXN0b3JlIHRoZSBvcmlnaW5hbCBsaWJzIHNldHRpbmcKLUxJQlM9IiRPUklHX1NBVkVfTElCUyIKLUxJQkVSVFlfTElCUz0iLWxpYmVydHkgJERMX0xJQiAkSU5UTF9MSUIiCi1CRkRfTElCUz0iLWxiZmQgLWxpYmVydHkgJERMX0xJQiAkSU5UTF9MSUIiCi1QT1BUX0xJQlM9Ii1scG9wdCIKLUFDX1NVQlNUKExJQkVSVFlfTElCUykKLUFDX1NVQlNUKEJGRF9MSUJTKQotQUNfU1VCU1QoUE9QVF9MSUJTKQotCi0jIGRvIE5PVCBwdXQgdGVzdHMgaGVyZSwgdGhleSB3aWxsIGZhaWwgaW4gdGhlIGNhc2UgWCBpcyBub3QgaW5zdGFsbGVkICEKLSAKLUFNX0NPTkRJVElPTkFMKGhhdmVfcXQsIHRlc3QgLW4gIiRRVF9MSUIiKQotCi1BWF9DRkxBR1NfT1BUSU9OKE9QX0NGTEFHUyxbLVddKQotQVhfQ1hYRkxBR1NfT1BUSU9OKE9QX0NYWEZMQUdTLFstV10pCi1BWF9DRkxBR1NfT1BUSU9OKE9QX0NGTEFHUyxbLVdhbGxdKQotQVhfQ1hYRkxBR1NfT1BUSU9OKE9QX0NYWEZMQUdTLFstV2FsbF0pCi1BWF9DRkxBR1NfT1BUSU9OKE9QX0NGTEFHUyxbLWZuby1jb21tb25dKQotQVhfQ1hYRkxBR1NfT1BUSU9OKE9QX0NYWEZMQUdTLFstZm5vLWNvbW1vbl0pCi1BWF9DWFhGTEFHU19PUFRJT04oT1BfQ1hYRkxBR1MsWy1mdGVtcGxhdGUtZGVwdGgtNTBdKQotQVhfQ0ZMQUdTX09QVElPTihPUF9DRkxBR1MsWy1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50XSkKLQotZG5sIGVuYWJsZSBvcHRpb24gdG8gdXNlIEdDQyB0ZXN0IGNvdmVyYWdlCi1BQ19BUkdfRU5BQkxFKGdjb3YsCi0JWyAgLS1lbmFibGUtZ2NvdiAgICAgICAgICAgICAgICBlbmFibGUgb3B0aW9uIGZvciBnY292IGNvdmVyYWdlIHRlc3RpbmcgKGRlZmF1bHQgaXMgZGlzYWJsZWQpXSwKLQllbmFibGVfZ2Nvdj0kZW5hYmxldmFsLCBlbmFibGVfZ2Nvdj1ubykKLWlmIHRlc3QgIiRlbmFibGVfZ2NvdiIgPSB5ZXM7IHRoZW4KLQlBWF9DRkxBR1NfT1BUSU9OKE9QX0NGTEFHUyxbLWZwcm9maWxlLWFyY3NdKQotCUFYX0NYWEZMQUdTX09QVElPTihPUF9DWFhGTEFHUyxbLWZwcm9maWxlLWFyY3NdKQotCUFYX0NGTEFHU19PUFRJT04oT1BfQ0ZMQUdTLFstZnRlc3QtY292ZXJhZ2VdKQotCUFYX0NYWEZMQUdTX09QVElPTihPUF9DWFhGTEFHUyxbLWZ0ZXN0LWNvdmVyYWdlXSkKLWZpCi0KLUFDX0FSR19FTkFCTEUod2Vycm9yLAotCVsgIC0tZGlzYWJsZS13ZXJyb3IgICAgICAgICAgICBkaXNhYmxlIC1XZXJyb3IgZmxhZyAoZGVmYXVsdCBpcyBlbmFibGVkIGZvciBub24tcmVsZWFzZSldLAotICAgICAgICBlbmFibGVfd2Vycm9yPSRlbmFibGV2YWwsIGVuYWJsZV93ZXJyb3I9eWVzKQotaWYgdGVzdCAiJGVuYWJsZV93ZXJyb3IiID0geWVzOyB0aGVuCi0JIyBlbmFibGUgLVdlcnJvciBmb3Igbm9uLXJlbGVhc2UgdmVyc2lvbnMuCi0JaWYgZWNobyAiJFZFUlNJT04iIHwgZ3JlcCBjdnMgPi9kZXYvbnVsbDsgdGhlbgotCQlBWF9DRkxBR1NfT1BUSU9OKE9QX0NGTEFHUyxbLVdlcnJvcl0pCi0JCUFYX0NYWEZMQUdTX09QVElPTihPUF9DWFhGTEFHUyxbLVdlcnJvcl0pCi0JZmkKLWZpCi0KLUFDX0FSR19FTkFCTEUob3B0aW1pemF0aW9uLAotCVsgIC0tZGlzYWJsZS1vcHRpbWl6YXRpb24gICAgICBkaXNhYmxlIG9wdGltaXphdGlvbiBmbGFncyAoZGVmYXVsdCBpcyBlbmFibGVkKV0sCi0JZW5hYmxlX29wdGltaXphdGlvbj0kZW5hYmxldmFsLCBlbmFibGVfb3B0aW1pc2F0aW9uPXllcykKLWlmIHRlc3QgIiRlbmFibGVfb3B0aW1pemF0aW9uIiA9ICJubyI7IHRoZW4KLQlDRkxBR1M9YGVjaG8gJENGTEFHUyB8IHNlZCAncy8tTzIvL2cnYAotCUNYWEZMQUdTPWBlY2hvICRDWFhGTEFHUyB8IHNlZCAncy8tTzIvL2cnYAotZmkKLQotQUNfU1VCU1QoT1BfQ0ZMQUdTKQotQUNfU1VCU1QoT1BfQ1hYRkxBR1MpCi0KLSMgZml4dXBzIGZvciBjb25maWcuaAotaWYgdGVzdCAiJHByZWZpeCIgPSAiTk9ORSI7IHRoZW4KLQlteV9vcF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKLWVsc2UKLQlteV9vcF9wcmVmaXg9IiRwcmVmaXgiCi1maQotbXlfb3BfZGF0YWRpcj0iJG15X29wX3ByZWZpeC9zaGFyZSIKLQotaWYgdGVzdCAiJGV4ZWNfcHJlZml4IiA9ICJOT05FIjsgdGhlbgotCW15X29wX2V4ZWNfcHJlZml4PSIkbXlfb3BfcHJlZml4IgotZWxzZQotCW15X29wX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi1maQotbXlfb3BfYmluZGlyPSIkbXlfb3BfZXhlY19wcmVmaXgvYmluIgotCi1PUF9EQVRBRElSPWBldmFsIGVjaG8gIiRteV9vcF9kYXRhZGlyLyRQQUNLQUdFLyJgCi1BQ19ERUZJTkVfVU5RVU9URUQoT1BfREFUQURJUiwgIiRPUF9EQVRBRElSIiwgW3BhY2thZ2UgZGF0YSBkaXJlY3RvcnldKQotT1BfQklORElSPWBldmFsIGVjaG8gIiRteV9vcF9iaW5kaXIvImAKLUFDX0RFRklORV9VTlFVT1RFRChPUF9CSU5ESVIsICIkT1BfQklORElSIiwgW3BhY2thZ2UgYmluYXJ5IGRpcmVjdG9yeV0pCi1PUF9ET0NESVI9YGV2YWwgZWNobyAiJHtteV9vcF9wcmVmaXh9L3NoYXJlL2RvYy8kUEFDS0FHRS8iYAotQUNfU1VCU1QoT1BfRE9DRElSKQotCi1BQ19PVVRQVVQoTWFrZWZpbGUgXAotCW00L01ha2VmaWxlIFwKLQlsaWJ1dGlsL01ha2VmaWxlIFwKLQlsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlIFwKLQlsaWJ1dGlsKysvTWFrZWZpbGUgXAotCWxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZSBcCi0JbGlib3AvTWFrZWZpbGUgXAotCWxpYm9wL3Rlc3RzL01ha2VmaWxlIFwKLQlsaWJvcHQrKy9NYWtlZmlsZSBcCi0JbGliZGIvTWFrZWZpbGUgXAotCWxpYmRiL3Rlc3RzL01ha2VmaWxlIFwKLQlsaWJhYmkvTWFrZWZpbGUgXAotCWxpYmFiaS90ZXN0cy9NYWtlZmlsZSBcCi0JbGlicmVnZXgvTWFrZWZpbGUgXAotCWxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlIFwKLQlsaWJyZWdleC9zdGwucGF0IFwKLQlsaWJyZWdleC90ZXN0cy9tYW5nbGVkLW5hbWUgXAotCWRhZW1vbi9NYWtlZmlsZSBcCi0JZGFlbW9uL2xpYmxlZ2FjeS9NYWtlZmlsZSBcCi0JZXZlbnRzL01ha2VmaWxlIFwKLQl1dGlscy9NYWtlZmlsZSBcCi0JZG9jL01ha2VmaWxlIFwKLQlkb2MveHNsL2NhdGFsb2ctMS54bWwgXAotCWRvYy9vcHJvZmlsZS4xIFwKLQlkb2Mvb3Bjb250cm9sLjEgXAotCWRvYy9vcGhlbHAuMSBcCi0JZG9jL29wcmVwb3J0LjEgXAotCWRvYy9vcGFubm90YXRlLjEgXAotCWRvYy9vcGdwcm9mLjEgXAotCWRvYy9vcGFyY2hpdmUuMSBcCi0JZG9jL3NyY2RvYy9Eb3h5ZmlsZSBcCi0JbGlicHAvTWFrZWZpbGUgXAotCXBwL01ha2VmaWxlIFwKLQlndWkvTWFrZWZpbGUgXAotCWd1aS91aS9NYWtlZmlsZSBcCi0JbW9kdWxlL01ha2VmaWxlIFwKLQltb2R1bGUveDg2L01ha2VmaWxlIFwKLQltb2R1bGUvaWE2NC9NYWtlZmlsZSkKLQotQVhfQ09QWV9JRl9DSEFOR0UoZG9jL3hzbC9jYXRhbG9nLTEueG1sLCBkb2MveHNsL2NhdGFsb2cueG1sKQotCi1pZiB0ZXN0IC16ICIkUVRfTElCIjsgdGhlbgotCWVjaG8gIldhcm5pbmc6IGEgd29ya2luZyBRdCBub3QgZm91bmQ7IG5vIEdVSSB3aWxsIGJlIGJ1aWx0IgotZmkKZGlmZiAtLWdpdCBhL2RhZW1vbi9BbmRyb2lkLm1rIGIvZGFlbW9uL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3YWNhZQotLS0gL2Rldi9udWxsCisrKyBiL2RhZW1vbi9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMzEgQEAKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUzo9IFwKKwlpbml0LmMgXAorCW9wZF9hbm9uLmMgXAorCW9wZF9jb29raWUuYyBcCisJb3BkX2V2ZW50cy5jIFwKKwlvcGRfa2VybmVsLmMgXAorCW9wZF9tYW5nbGluZy5jIFwKKwlvcGRfcGVyZm1vbi5jIFwKKwlvcGRfc2ZpbGUuYyBcCisJb3BkX3N0YXRzLmMgXAorCW9wZF90cmFucy5jIFwKKwlvcHJvZmlsZWQuYworCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IFwKKwlsaWJwb3B0IGxpYnV0aWwgbGliZGIgbGliYWJpYyBsaWJvcAorCitMT0NBTF9DX0lOQ0xVREVTIDo9IFwKKwkkKExPQ0FMX1BBVEgpLy4uIFwKKwkkKExPQ0FMX1BBVEgpLy4uL2xpYmRiIFwKKwkkKExPQ0FMX1BBVEgpLy4uL2xpYnV0aWwgXAorCSQoTE9DQUxfUEFUSCkvLi4vbGlib3AgXAorCSQoTE9DQUxfUEFUSCkvLi4vbGliYWJpYworCitMT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT1BUSU9OQUxfRVhFQ1VUQUJMRVMpCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBkZWJ1ZworTE9DQUxfTU9EVUxFOj0gb3Byb2ZpbGVkCisKK2luY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQpkaWZmIC0tZ2l0IGEvZGFlbW9uL01ha2VmaWxlLmFtIGIvZGFlbW9uL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmNjMWIzLi4wMDAwMDAwCi0tLSBhL2RhZW1vbi9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLVNVQkRJUlMgPSBsaWJsZWdhY3kgLgotCi1vcHJvZmlsZWRfU09VUkNFUyA9IFwKLQlpbml0LmMgXAotCW9wcm9maWxlZC5jIFwKLQlvcHJvZmlsZWQuaCBcCi0Jb3BkX3N0YXRzLmMgXAotCW9wZF9zZmlsZS5jIFwKLQlvcGRfc2ZpbGUuaCBcCi0Jb3BkX2tlcm5lbC5jIFwKLQlvcGRfa2VybmVsLmggXAotCW9wZF90cmFucy5jIFwKLQlvcGRfdHJhbnMuaCBcCi0Jb3BkX3ByaW50Zi5oIFwKLQlvcGRfc3RhdHMuaCBcCi0Jb3BkX2Nvb2tpZS5jIFwKLQlvcGRfY29va2llLmggXAotCW9wZF9ldmVudHMuYyBcCi0Jb3BkX2V2ZW50cy5oIFwKLQlvcGRfaW50ZXJmYWNlLmggXAotCW9wZF9tYW5nbGluZy5jIFwKLQlvcGRfbWFuZ2xpbmcuaCBcCi0Jb3BkX3BlcmZtb24uaCBcCi0Jb3BkX3BlcmZtb24uYyBcCi0Jb3BkX2Fub24uaCBcCi0Jb3BkX2Fub24uYwotCi1MSUJTPUBQT1BUX0xJQlNAIEBMSUJFUlRZX0xJQlNACi0KLUFNX0NQUEZMQUdTID0gXAotCS1JICR7dG9wX3NyY2Rpcn0vbGliYWJpIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGliZGIKLQotIyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBuZWVkZWQgZm9yIGRhZW1vbiBidWlsZDogc2VlIENoYW5nZUxvZyAyMDA0LTAyLTIzCi1BTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQCAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgotCi1iaW5fUFJPR1JBTVMgPSBvcHJvZmlsZWQKLQotaWYgZW5hYmxlX2FiaQotb3Byb2ZpbGVkX0xEQUREID0gXAotCWxpYmxlZ2FjeS9saWJsZWdhY3kuYSBcCi0JLi4vbGliYWJpL2xpYmFiaS5hIFwKLQkuLi9saWJkYi9saWJvZGIuYSBcCi0JLi4vbGlib3AvbGlib3AuYSBcCi0JLi4vbGlidXRpbC9saWJ1dGlsLmEKLUxJTktFUj0kKENYWCkKLWVsc2UKLW9wcm9maWxlZF9MREFERCA9IFwKLQlsaWJsZWdhY3kvbGlibGVnYWN5LmEgXAotCS4uL2xpYmRiL2xpYm9kYi5hIFwKLQkuLi9saWJvcC9saWJvcC5hIFwKLQkuLi9saWJ1dGlsL2xpYnV0aWwuYQotTElOS0VSPSQoQ0MpCi1lbmRpZgotCi1vcHJvZmlsZWRfTElOSyA9ICQoTElOS0VSKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQApkaWZmIC0tZ2l0IGEvZGFlbW9uL01ha2VmaWxlLmluIGIvZGFlbW9uL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTE5ODk4Li4wMDAwMDAwCi0tLSBhL2RhZW1vbi9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDYzNCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVNPVVJDRVMgPSAkKG9wcm9maWxlZF9TT1VSQ0VTKQotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1iaW5fUFJPR1JBTVMgPSBvcHJvZmlsZWQkKEVYRUVYVCkKLXN1YmRpciA9IGRhZW1vbgotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiCi1iaW5QUk9HUkFNU19JTlNUQUxMID0gJChJTlNUQUxMX1BST0dSQU0pCi1QUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQotYW1fb3Byb2ZpbGVkX09CSkVDVFMgPSBpbml0LiQoT0JKRVhUKSBvcHJvZmlsZWQuJChPQkpFWFQpIFwKLQlvcGRfc3RhdHMuJChPQkpFWFQpIG9wZF9zZmlsZS4kKE9CSkVYVCkgb3BkX2tlcm5lbC4kKE9CSkVYVCkgXAotCW9wZF90cmFucy4kKE9CSkVYVCkgb3BkX2Nvb2tpZS4kKE9CSkVYVCkgb3BkX2V2ZW50cy4kKE9CSkVYVCkgXAotCW9wZF9tYW5nbGluZy4kKE9CSkVYVCkgb3BkX3BlcmZtb24uJChPQkpFWFQpIFwKLQlvcGRfYW5vbi4kKE9CSkVYVCkKLW9wcm9maWxlZF9PQkpFQ1RTID0gJChhbV9vcHJvZmlsZWRfT0JKRUNUUykKLUBlbmFibGVfYWJpX0ZBTFNFQG9wcm9maWxlZF9ERVBFTkRFTkNJRVMgPSBsaWJsZWdhY3kvbGlibGVnYWN5LmEgXAotQGVuYWJsZV9hYmlfRkFMU0VACS4uL2xpYmRiL2xpYm9kYi5hIC4uL2xpYm9wL2xpYm9wLmEgXAotQGVuYWJsZV9hYmlfRkFMU0VACS4uL2xpYnV0aWwvbGlidXRpbC5hCi1AZW5hYmxlX2FiaV9UUlVFQG9wcm9maWxlZF9ERVBFTkRFTkNJRVMgPSBsaWJsZWdhY3kvbGlibGVnYWN5LmEgXAotQGVuYWJsZV9hYmlfVFJVRUAJLi4vbGliYWJpL2xpYmFiaS5hIC4uL2xpYmRiL2xpYm9kYi5hIFwKLUBlbmFibGVfYWJpX1RSVUVACS4uL2xpYm9wL2xpYm9wLmEgLi4vbGlidXRpbC9saWJ1dGlsLmEKLURFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1TT1VSQ0VTID0gJChvcHJvZmlsZWRfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQob3Byb2ZpbGVkX1NPVVJDRVMpCi1SRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAotCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgXAotCXBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCi0JdW5pbnN0YWxsLXJlY3Vyc2l2ZQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVF9TVUJESVJTID0gJChTVUJESVJTKQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBAUE9QVF9MSUJTQCBATElCRVJUWV9MSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKLVhfTElCUyA9IEBYX0xJQlNACi1YX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWVuYWJsZV9hYmlfRkFMU0UgPSBAZW5hYmxlX2FiaV9GQUxTRUAKLWVuYWJsZV9hYmlfVFJVRSA9IEBlbmFibGVfYWJpX1RSVUVACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhhdmVfcXRfRkFMU0UgPSBAaGF2ZV9xdF9GQUxTRUAKLWhhdmVfcXRfVFJVRSA9IEBoYXZlX3F0X1RSVUVACi1oYXZlX3hzbHRwcm9jX0ZBTFNFID0gQGhhdmVfeHNsdHByb2NfRkFMU0VACi1oYXZlX3hzbHRwcm9jX1RSVUUgPSBAaGF2ZV94c2x0cHJvY19UUlVFQAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAota2VybmVsX3N1cHBvcnRfRkFMU0UgPSBAa2VybmVsX3N1cHBvcnRfRkFMU0VACi1rZXJuZWxfc3VwcG9ydF9UUlVFID0gQGtlcm5lbF9zdXBwb3J0X1RSVUVACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10b3BkaXIgPSBAdG9wZGlyQAotU1VCRElSUyA9IGxpYmxlZ2FjeSAuCi1vcHJvZmlsZWRfU09VUkNFUyA9IFwKLQlpbml0LmMgXAotCW9wcm9maWxlZC5jIFwKLQlvcHJvZmlsZWQuaCBcCi0Jb3BkX3N0YXRzLmMgXAotCW9wZF9zZmlsZS5jIFwKLQlvcGRfc2ZpbGUuaCBcCi0Jb3BkX2tlcm5lbC5jIFwKLQlvcGRfa2VybmVsLmggXAotCW9wZF90cmFucy5jIFwKLQlvcGRfdHJhbnMuaCBcCi0Jb3BkX3ByaW50Zi5oIFwKLQlvcGRfc3RhdHMuaCBcCi0Jb3BkX2Nvb2tpZS5jIFwKLQlvcGRfY29va2llLmggXAotCW9wZF9ldmVudHMuYyBcCi0Jb3BkX2V2ZW50cy5oIFwKLQlvcGRfaW50ZXJmYWNlLmggXAotCW9wZF9tYW5nbGluZy5jIFwKLQlvcGRfbWFuZ2xpbmcuaCBcCi0Jb3BkX3BlcmZtb24uaCBcCi0Jb3BkX3BlcmZtb24uYyBcCi0Jb3BkX2Fub24uaCBcCi0Jb3BkX2Fub24uYwotCi1BTV9DUFBGTEFHUyA9IFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYmFiaSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYmRiCi0KLQotIyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBuZWVkZWQgZm9yIGRhZW1vbiBidWlsZDogc2VlIENoYW5nZUxvZyAyMDA0LTAyLTIzCi1BTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQCAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgotQGVuYWJsZV9hYmlfRkFMU0VAb3Byb2ZpbGVkX0xEQUREID0gXAotQGVuYWJsZV9hYmlfRkFMU0VACWxpYmxlZ2FjeS9saWJsZWdhY3kuYSBcCi1AZW5hYmxlX2FiaV9GQUxTRUAJLi4vbGliZGIvbGlib2RiLmEgXAotQGVuYWJsZV9hYmlfRkFMU0VACS4uL2xpYm9wL2xpYm9wLmEgXAotQGVuYWJsZV9hYmlfRkFMU0VACS4uL2xpYnV0aWwvbGlidXRpbC5hCi0KLUBlbmFibGVfYWJpX1RSVUVAb3Byb2ZpbGVkX0xEQUREID0gXAotQGVuYWJsZV9hYmlfVFJVRUAJbGlibGVnYWN5L2xpYmxlZ2FjeS5hIFwKLUBlbmFibGVfYWJpX1RSVUVACS4uL2xpYmFiaS9saWJhYmkuYSBcCi1AZW5hYmxlX2FiaV9UUlVFQAkuLi9saWJkYi9saWJvZGIuYSBcCi1AZW5hYmxlX2FiaV9UUlVFQAkuLi9saWJvcC9saWJvcC5hIFwKLUBlbmFibGVfYWJpX1RSVUVACS4uL2xpYnV0aWwvbGlidXRpbC5hCi0KLUBlbmFibGVfYWJpX0ZBTFNFQExJTktFUiA9ICQoQ0MpCi1AZW5hYmxlX2FiaV9UUlVFQExJTktFUiA9ICQoQ1hYKQotb3Byb2ZpbGVkX0xJTksgPSAkKExJTktFUikgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLWFsbDogYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGRhZW1vbi9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZGFlbW9uL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotaW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChiaW5kaXIpIgotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIHAxPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JICBpZiB0ZXN0IC1mICQkcCBcCi0JICA7IHRoZW4gXAotCSAgICBmPWBlY2hvICIkJHAxIiB8IHNlZCAncyxeLiovLCw7JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCi0JICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAnJCRwJyAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAotCSAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAiJCRwIiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWJpblBST0dSQU1TOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj1gZWNobyAiJCRwIiB8IHNlZCAncyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1iaW5QUk9HUkFNUzoKLQktdGVzdCAteiAiJChiaW5fUFJPR1JBTVMpIiB8fCBybSAtZiAkKGJpbl9QUk9HUkFNUykKLW9wcm9maWxlZCQoRVhFRVhUKTogJChvcHJvZmlsZWRfT0JKRUNUUykgJChvcHJvZmlsZWRfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgb3Byb2ZpbGVkJChFWEVFWFQpCi0JJChvcHJvZmlsZWRfTElOSykgJChvcHJvZmlsZWRfTERGTEFHUykgJChvcHJvZmlsZWRfT0JKRUNUUykgJChvcHJvZmlsZWRfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2luaXQuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF9hbm9uLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfY29va2llLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfZXZlbnRzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfa2VybmVsLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfbWFuZ2xpbmcuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF9wZXJmbW9uLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfc2ZpbGUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF9zdGF0cy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BkX3RyYW5zLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcHJvZmlsZWQuUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKLXVuaW5zdGFsbC1pbmZvLWFtOgotCi0jIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAotIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCi0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCi0jICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKLSMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7Ci0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgotJChSRUNVUlNJVkVfVEFSR0VUUyk6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBkb3Rfc2Vlbj15ZXM7IFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKLW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgotCUBmYWlsY29tPSdleGl0IDEnOyBcCi0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAotCSAgY2FzZSAkJGYgaW4gXAotCSAgICAqPSogfCAtLVsha10qKTs7IFwKLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAotCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JcmV2PSIkJHJldiAuIjsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgotdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAotCWRvbmUKLWN0YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAotCWRvbmUKLQotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUwotCi1UQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD0uOyBcCi0JZWxzZSBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD07IFwKLQlmaTsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAotCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCi0JZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgIHx8ICQobWtkaXJfcCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIChjZCAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktcmVjdXJzaXZlCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1yZWN1cnNpdmUKLQotaW5mbzogaW5mby1yZWN1cnNpdmUKLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLWluZm8tYW0KLQotdW5pbnN0YWxsLWluZm86IHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi0uUEhPTlk6ICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gXAotCWNsZWFuIGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tcmVjdXJzaXZlIGN0YWdzIFwKLQljdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1iaW5QUk9HUkFNUyBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgXAotCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1iaW5QUk9HUkFNUyB1bmluc3RhbGwtaW5mby1hbQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kYWVtb24vaW5pdC5jIGIvZGFlbW9uL2luaXQuYwppbmRleCAwNzZkZGQ4Li4xNjI4NjFiIDEwMDY0NAotLS0gYS9kYWVtb24vaW5pdC5jCisrKyBiL2RhZW1vbi9pbml0LmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqLwogc3RhdGljIHZvaWQgb3BkX29wZW5fZmlsZXModm9pZCkKIHsKLQlkZXZmZCA9IG9wX29wZW5fZGV2aWNlKCIvZGV2L29wcm9maWxlL2J1ZmZlciIpOworCWRldmZkID0gb3Bfb3Blbl9kZXZpY2UoT1BfRFJJVkVSX0JBU0UiL2J1ZmZlciIpOwogCWlmIChkZXZmZCA9PSAtMSkgewogCQlpZiAoZXJybm8gPT0gRUlOVkFMKQogCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiBkZXZpY2UuIFBvc3NpYmx5IHlvdSBoYXZlIHBhc3NlZCBpbmNvcnJlY3RcbiIKQEAgLTIyMyw4ICsyMjMsOCBAQAogCiAJb3BkX2NyZWF0ZV92bWxpbnV4KHZtbGludXgsIGtlcm5lbF9yYW5nZSk7CiAKLQlvcGRfYnVmX3NpemUgPSBvcGRfcmVhZF9mc19pbnQoIi9kZXYvb3Byb2ZpbGUvIiwgImJ1ZmZlcl9zaXplIiwgMSk7Ci0Ja2VybmVsX3BvaW50ZXJfc2l6ZSA9IG9wZF9yZWFkX2ZzX2ludCgiL2Rldi9vcHJvZmlsZS8iLCAicG9pbnRlcl9zaXplIiwgMSk7CisJb3BkX2J1Zl9zaXplID0gb3BkX3JlYWRfZnNfaW50KE9QX0RSSVZFUl9CQVNFIi8iLCAiYnVmZmVyX3NpemUiLCAxKTsKKwlrZXJuZWxfcG9pbnRlcl9zaXplID0gb3BkX3JlYWRfZnNfaW50KE9QX0RSSVZFUl9CQVNFIi8iLCAicG9pbnRlcl9zaXplIiwgMSk7CiAKIAlzX2J1Zl9ieXRlc2l6ZSA9IG9wZF9idWZfc2l6ZSAqIGtlcm5lbF9wb2ludGVyX3NpemU7CiAKZGlmZiAtLWdpdCBhL2RhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUuYW0gYi9kYWVtb24vbGlibGVnYWN5L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2JmYzJmLi4wMDAwMDAwCi0tLSBhL2RhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1ub2luc3RfTElCUkFSSUVTID0gbGlibGVnYWN5LmEKLQotIyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBuZWVkZWQgZm9yIGRhZW1vbiBidWlsZDogc2VlIENoYW5nZUxvZyAyMDA0LTAyLTIzCi1BTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQCAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgotCi1BTV9DUFBGTEFHUyA9IFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGliZGIgXAotCS1JICR7dG9wX3NyY2Rpcn0vZGFlbW9uCi0KLWxpYmxlZ2FjeV9hX1NPVVJDRVMgPSBcCi0Jb3BkXzI0X3N0YXRzLmMgXAotCW9wZF8yNF9zdGF0cy5oIFwKLQlvcGRfa2VybmVsLmMgXAotCW9wZF9wcm9jLmMgXAotCW9wZF9pbWFnZS5jIFwKLQlvcGRfbWFwcGluZy5jIFwKLQlvcGRfcGFyc2VfcHJvYy5jIFwKLQlvcGRfaW1hZ2UuaCBcCi0Jb3BkX21hcHBpbmcuaCBcCi0JcF9tb2R1bGUuaCBcCi0Jb3BkX2tlcm5lbC5oIFwKLQlvcGRfcGFyc2VfcHJvYy5oIFwKLQlvcGRfcHJvYy5oIFwKLQlvcGRfc2FtcGxlX2ZpbGVzLmMgXAotCW9wZF9zYW1wbGVfZmlsZXMuaCBcCi0JaW5pdC5jCmRpZmYgLS1naXQgYS9kYWVtb24vbGlibGVnYWN5L01ha2VmaWxlLmluIGIvZGFlbW9uL2xpYmxlZ2FjeS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ3NjEwOC4uMDAwMDAwMAotLS0gYS9kYWVtb24vbGlibGVnYWN5L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDY4ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS41IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotU09VUkNFUyA9ICQobGlibGVnYWN5X2FfU09VUkNFUykKLQotc3JjZGlyID0gQHNyY2RpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLVZQQVRIID0gQHNyY2RpckAKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi10b3BfYnVpbGRkaXIgPSAuLi8uLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotc3ViZGlyID0gZGFlbW9uL2xpYmxlZ2FjeQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotTElCUkFSSUVTID0gJChub2luc3RfTElCUkFSSUVTKQotQVIgPSBhcgotQVJGTEFHUyA9IGNydQotbGlibGVnYWN5X2FfQVIgPSAkKEFSKSAkKEFSRkxBR1MpCi1saWJsZWdhY3lfYV9MSUJBREQgPQotYW1fbGlibGVnYWN5X2FfT0JKRUNUUyA9IG9wZF8yNF9zdGF0cy4kKE9CSkVYVCkgb3BkX2tlcm5lbC4kKE9CSkVYVCkgXAotCW9wZF9wcm9jLiQoT0JKRVhUKSBvcGRfaW1hZ2UuJChPQkpFWFQpIG9wZF9tYXBwaW5nLiQoT0JKRVhUKSBcCi0Jb3BkX3BhcnNlX3Byb2MuJChPQkpFWFQpIG9wZF9zYW1wbGVfZmlsZXMuJChPQkpFWFQpIFwKLQlpbml0LiQoT0JKRVhUKQotbGlibGVnYWN5X2FfT0JKRUNUUyA9ICQoYW1fbGlibGVnYWN5X2FfT0JKRUNUUykKLURFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1TT1VSQ0VTID0gJChsaWJsZWdhY3lfYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJsZWdhY3lfYV9TT1VSQ0VTKQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1PQyA9IEBNT0NACi1NT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACi1PQkpFWFQgPSBAT0JKRVhUQAotT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKLU9QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAotT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLU9QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBPUFRfTElCUyA9IEBQT1BUX0xJQlNACi1QVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKLVFUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAotUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAotUVRfTElCID0gQFFUX0xJQkAKLVFUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACi1TVFJJUCA9IEBTVFJJUEAKLVVJQyA9IEBVSUNACi1WRVJTSU9OID0gQFZFUlNJT05ACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACi1YX0xJQlMgPSBAWF9MSUJTQAotWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1kYXRhZGlyID0gQGRhdGFkaXJACi1lbmFibGVfYWJpX0ZBTFNFID0gQGVuYWJsZV9hYmlfRkFMU0VACi1lbmFibGVfYWJpX1RSVUUgPSBAZW5hYmxlX2FiaV9UUlVFQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1oYXZlX3F0X0ZBTFNFID0gQGhhdmVfcXRfRkFMU0VACi1oYXZlX3F0X1RSVUUgPSBAaGF2ZV9xdF9UUlVFQAotaGF2ZV94c2x0cHJvY19GQUxTRSA9IEBoYXZlX3hzbHRwcm9jX0ZBTFNFQAotaGF2ZV94c2x0cHJvY19UUlVFID0gQGhhdmVfeHNsdHByb2NfVFJVRUAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWtlcm5lbF9zdXBwb3J0X0ZBTFNFID0gQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAota2VybmVsX3N1cHBvcnRfVFJVRSA9IEBrZXJuZWxfc3VwcG9ydF9UUlVFQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdG9wZGlyID0gQHRvcGRpckAKLW5vaW5zdF9MSUJSQVJJRVMgPSBsaWJsZWdhY3kuYQotCi0jIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIG5lZWRlZCBmb3IgZGFlbW9uIGJ1aWxkOiBzZWUgQ2hhbmdlTG9nIDIwMDQtMDItMjMKLUFNX0NGTEFHUyA9IEBPUF9DRkxBR1NAIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyCi1BTV9DUFBGTEFHUyA9IFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGliZGIgXAotCS1JICR7dG9wX3NyY2Rpcn0vZGFlbW9uCi0KLWxpYmxlZ2FjeV9hX1NPVVJDRVMgPSBcCi0Jb3BkXzI0X3N0YXRzLmMgXAotCW9wZF8yNF9zdGF0cy5oIFwKLQlvcGRfa2VybmVsLmMgXAotCW9wZF9wcm9jLmMgXAotCW9wZF9pbWFnZS5jIFwKLQlvcGRfbWFwcGluZy5jIFwKLQlvcGRfcGFyc2VfcHJvYy5jIFwKLQlvcGRfaW1hZ2UuaCBcCi0Jb3BkX21hcHBpbmcuaCBcCi0JcF9tb2R1bGUuaCBcCi0Jb3BkX2tlcm5lbC5oIFwKLQlvcGRfcGFyc2VfcHJvYy5oIFwKLQlvcGRfcHJvYy5oIFwKLQlvcGRfc2FtcGxlX2ZpbGVzLmMgXAotCW9wZF9zYW1wbGVfZmlsZXMuaCBcCi0JaW5pdC5jCi0KLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZGFlbW9uL2xpYmxlZ2FjeS9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZGFlbW9uL2xpYmxlZ2FjeS9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotY2xlYW4tbm9pbnN0TElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCi1saWJsZWdhY3kuYTogJChsaWJsZWdhY3lfYV9PQkpFQ1RTKSAkKGxpYmxlZ2FjeV9hX0RFUEVOREVOQ0lFUykgCi0JLXJtIC1mIGxpYmxlZ2FjeS5hCi0JJChsaWJsZWdhY3lfYV9BUikgbGlibGVnYWN5LmEgJChsaWJsZWdhY3lfYV9PQkpFQ1RTKSAkKGxpYmxlZ2FjeV9hX0xJQkFERCkKLQkkKFJBTkxJQikgbGlibGVnYWN5LmEKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2luaXQuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF8yNF9zdGF0cy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BkX2ltYWdlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfa2VybmVsLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfbWFwcGluZy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BkX3BhcnNlX3Byb2MuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF9wcm9jLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfc2FtcGxlX2ZpbGVzLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCi11bmluc3RhbGwtaW5mby1hbToKLQotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUwotCi1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAotCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExJQlJBUklFUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1ub2luc3RMSUJSQVJJRVMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLW5vaW5zdExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAotCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgXAotCXVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kYWVtb24vbGlibGVnYWN5L2luaXQuYyBiL2RhZW1vbi9saWJsZWdhY3kvaW5pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWQzYzQ2Li4wMDAwMDAwCi0tLSBhL2RhZW1vbi9saWJsZWdhY3kvaW5pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzkyICswLDAgQEAKLS8qKgotICogQGZpbGUgZGFlbW9uL2xpYmxlZ2FjeS9pbml0LmMKLSAqIERhZW1vbiBzZXQgdXAgYW5kIG1haW4gbG9vcCBmb3IgMi40Ci0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotIAotI2luY2x1ZGUgIm9wZF9wcm9jLmgiCi0jaW5jbHVkZSAib3BkX21hcHBpbmcuaCIKLSNpbmNsdWRlICJvcGRfMjRfc3RhdHMuaCIKLSNpbmNsdWRlICJvcGRfc2FtcGxlX2ZpbGVzLmgiCi0jaW5jbHVkZSAib3BkX2ltYWdlLmgiCi0jaW5jbHVkZSAib3BkX3BhcnNlX3Byb2MuaCIKLSNpbmNsdWRlICJvcGRfa2VybmVsLmgiCi0jaW5jbHVkZSAib3BkX3ByaW50Zi5oIgotI2luY2x1ZGUgIm9wcm9maWxlZC5oIgotCi0jaW5jbHVkZSAib3Bfc2FtcGxlX2ZpbGUuaCIKLSNpbmNsdWRlICJvcF9jb25maWdfMjQuaCIKLSNpbmNsdWRlICJvcF9pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKLSNpbmNsdWRlICJvcF9kZXZpY2Vpby5oIgotI2luY2x1ZGUgIm9wX2V2ZW50cy5oIgotI2luY2x1ZGUgIm9wX2dldF90aW1lLmgiCi0jaW5jbHVkZSAib3BfZmlsZWlvLmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotZmRfdCBoYXNobWFwZGV2ZmQ7Ci0KLWludCBjcHVfbnVtYmVyOwotCi1zdGF0aWMgZmRfdCBkZXZmZDsKLXN0YXRpYyBmZF90IG5vdGVkZXZmZDsKLXN0YXRpYyBzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQgKiBzYnVmOwotc3RhdGljIHNpemVfdCBzX2J1Zl9ieXRlc2l6ZTsKLXN0YXRpYyBzdHJ1Y3Qgb3Bfbm90ZSAqIG5idWY7Ci1zdGF0aWMgc2l6ZV90IG5fYnVmX2J5dGVzaXplOwotCi1zdGF0aWMgdm9pZCBvcGRfc2lnaHVwKHZvaWQpOwotc3RhdGljIHZvaWQgb3BkX2FsYXJtKHZvaWQpOwotc3RhdGljIHZvaWQgb3BkX3NpZ3Rlcm0odm9pZCk7Ci0KLQotLyoqCi0gKiBvcF9vcGVuX2ZpbGVzIC0gb3BlbiBuZWNlc3NhcnkgZmlsZXMKLSAqCi0gKiBPcGVuIHRoZSBkZXZpY2UgZmlsZXMgYW5kIHRoZSBsb2cgZmlsZSwKLSAqIGFuZCBtbWFwKCkgdGhlIGhhc2ggbWFwLgotICovCi1zdGF0aWMgdm9pZCBvcF9vcGVuX2ZpbGVzKHZvaWQpCi17Ci0JaGFzaG1hcGRldmZkID0gb3Bfb3Blbl9kZXZpY2UoT1BfSEFTSF9ERVZJQ0UpOwotCWlmIChoYXNobWFwZGV2ZmQgPT0gLTEpIHsKLQkJcGVycm9yKCJGYWlsZWQgdG8gb3BlbiBoYXNoIG1hcCBkZXZpY2UiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCW5vdGVkZXZmZCA9IG9wX29wZW5fZGV2aWNlKE9QX05PVEVfREVWSUNFKTsKLQlpZiAobm90ZWRldmZkID09IC0xKSB7Ci0JCWlmIChlcnJubyA9PSBFSU5WQUwpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIG5vdGUgZGV2aWNlLiBQb3NzaWJseSB5b3UgaGF2ZSBwYXNzZWQgaW5jb3JyZWN0XG4iCi0JCQkJInBhcmFtZXRlcnMuIENoZWNrIC92YXIvbG9nL21lc3NhZ2VzLiIpOwotCQllbHNlCi0JCQlwZXJyb3IoIkZhaWxlZCB0byBvcGVuIG5vdGUgZGV2aWNlIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlkZXZmZCA9IG9wX29wZW5fZGV2aWNlKE9QX0RFVklDRSk7Ci0JaWYgKGRldmZkID09IC0xKSB7Ci0JCWlmIChlcnJubyA9PSBFSU5WQUwpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIGRldmljZS4gUG9zc2libHkgeW91IGhhdmUgcGFzc2VkIGluY29ycmVjdFxuIgotCQkJCSJwYXJhbWV0ZXJzLiBDaGVjayAvdmFyL2xvZy9tZXNzYWdlcy4iKTsKLQkJZWxzZQotCQkJcGVycm9yKCJGYWlsZWQgdG8gb3BlbiBwcm9maWxlIGRldmljZSIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0Jb3BkX2luaXRfaGFzaF9tYXAoKTsKLQotCS8qIGdpdmUgb3V0cHV0IGJlZm9yZSByZS1vcGVuaW5nIHN0ZG91dCBhcyB0aGUgbG9nZmlsZSAqLwotCXByaW50ZigiVXNpbmcgbG9nIGZpbGUgIiBPUF9MT0dfRklMRSAiXG4iKTsKLQotCS8qIHNldCB1cCBsb2dmaWxlICovCi0JY2xvc2UoMCk7Ci0JY2xvc2UoMSk7Ci0KLQlpZiAob3BlbigiL2Rldi9udWxsIiwgT19SRE9OTFkpID09IC0xKSB7Ci0JCXBlcnJvcigib3Byb2ZpbGVkOiBjb3VsZG4ndCByZS1vcGVuIHN0ZGluIGFzIC9kZXYvbnVsbDogIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlvcGRfb3Blbl9sb2dmaWxlKCk7Ci0KLQlwcmludGYoIm9wcm9maWxlZCBzdGFydGVkICVzIiwgb3BfZ2V0X3RpbWUoKSk7Ci0JZmZsdXNoKHN0ZG91dCk7Ci19Ci0gCi0KLXN0YXRpYyB2b2lkIG9wZF9kb19zYW1wbGVzKHN0cnVjdCBvcF9idWZmZXJfaGVhZCBjb25zdCAqIGJ1Zik7Ci1zdGF0aWMgdm9pZCBvcGRfZG9fbm90ZXMoc3RydWN0IG9wX25vdGUgY29uc3QgKiBvcGRfYnVmLCBzaXplX3QgY291bnQpOwotCi0vKioKLSAqIGRvX3NodXRkb3duIC0gc2h1dGRvd24gY2xlYW5seSwgcmVhZGluZyBhcyBtdWNoIHJlbWFpbmluZyBkYXRhIGFzIHBvc3NpYmxlLgotICogQHBhcmFtIGJ1ZiAgc2FtcGxlIGJ1ZmZlciBhcmVhCi0gKiBAcGFyYW0gc2l6ZSAgc2l6ZSBvZiBzYW1wbGUgYnVmZmVyCi0gKiBAcGFyYW0gbmJ1ZiAgbm90ZSBidWZmZXIgYXJlYQotICogQHBhcmFtIG5zaXplICBzaXplIG9mIG5vdGUgYnVmZmVyCi0gKi8KLXN0YXRpYyB2b2lkIG9wZF9zaHV0ZG93bihzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQgKiBidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3Qgb3Bfbm90ZSAqIG5idWYsIHNpemVfdCBuc2l6ZSkKLXsKLQlzc2l6ZV90IGNvdW50ID0gLTE7Ci0Jc3NpemVfdCBuY291bnQgPSAtMTsKLQotCS8qIHRoZSBkdW1wIG1heSBoYXZlIGFkZGVkIG5vIHNhbXBsZXMsIHNvIHdlIG11c3Qgc2V0Ci0JICogbm9uLWJsb2NraW5nICovCi0JaWYgKGZjbnRsKGRldmZkLCBGX1NFVEZMLCBmY250bChkZXZmZCwgRl9HRVRGTCkgfCBPX05PTkJMT0NLKSA8IDApIHsKLQkJcGVycm9yKCJGYWlsZWQgdG8gc2V0IG5vbi1ibG9ja2luZyByZWFkIGZvciBkZXZpY2U6ICIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JLyogaXQncyBhbHdheXMgT0sgdG8gcmVhZCB0aGUgbm90ZSBkZXZpY2UgKi8KLQl3aGlsZSAobmNvdW50IDwgMCkgewotCQluY291bnQgPSBvcF9yZWFkX2RldmljZShub3RlZGV2ZmQsIG5idWYsIG5zaXplKTsKLQl9Ci0KLQlpZiAobmNvdW50ID4gMCkgewotCQlvcGRfZG9fbm90ZXMobmJ1ZiwgbmNvdW50KTsKLQl9Ci0KLQkvKiByZWFkIGFzIG11Y2ggYXMgd2UgY2FuIHVudGlsIHdlIGhhdmUgZXhoYXVzdGVkIHRoZSBkYXRhCi0JICogKEVBR0FJTiBpcyByZXR1cm5lZCkuCi0JICoKLQkgKiBUaGlzIHdpbGwgbm90IGxpdmVsb2NrIGFzIHRoZSBwcm9maWxlciBoYXMgYmVlbiBwYXJ0aWFsbHkKLQkgKiBzaHV0IGRvd24gYnkgbm93LgotCSAqLwotCXdoaWxlICgxKSB7Ci0JCWNvdW50ID0gb3BfcmVhZF9kZXZpY2UoZGV2ZmQsIGJ1Ziwgc2l6ZSk7Ci0JCWlmIChjb3VudCA8IDAgJiYgZXJybm8gPT0gRUFHQUlOKQotCQkJYnJlYWs7Ci0JCXZlcmJwcmludGYodm1pc2MsICJTaHV0dGluZyBkb3duLCBzdGF0ZSAlZFxuIiwgYnVmLT5zdGF0ZSk7Ci0JCW9wZF9kb19zYW1wbGVzKGJ1Zik7Ci0JfQotfQotIAotCi0vKioKLSAqIG9wZF9kb19yZWFkIC0gZW50ZXIgcHJvY2Vzc2luZyBsb29wCi0gKiBAcGFyYW0gYnVmICBidWZmZXIgdG8gcmVhZCBpbnRvCi0gKiBAcGFyYW0gc2l6ZSAgc2l6ZSBvZiBidWZmZXIKLSAqIEBwYXJhbSBuYnVmICBub3RlIGJ1ZmZlcgotICogQHBhcmFtIG5zaXplICBzaXplIG9mIG5vdGUgYnVmZmVyCi0gKgotICogUmVhZCBzb21lIG9mIGEgYnVmZmVyIGZyb20gdGhlIGRldmljZSBhbmQgcHJvY2VzcwotICogdGhlIGNvbnRlbnRzLgotICovCi1zdGF0aWMgdm9pZCBvcGRfZG9fcmVhZChzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQgKiBidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3Qgb3Bfbm90ZSAqIG5idWYsIHNpemVfdCBuc2l6ZSkKLXsKLQl3aGlsZSAoMSkgewotCQlzc2l6ZV90IGNvdW50ID0gLTE7Ci0JCXNzaXplX3QgbmNvdW50ID0gLTE7Ci0KLQkJLyogbG9vcCB0byBoYW5kbGUgRUlOVFIgKi8KLQkJd2hpbGUgKGNvdW50IDwgMCkgewotCQkJY291bnQgPSBvcF9yZWFkX2RldmljZShkZXZmZCwgYnVmLCBzaXplKTsKLQotCQl9Ci0KLQkJd2hpbGUgKG5jb3VudCA8IDApIHsKLQkJCW5jb3VudCA9IG9wX3JlYWRfZGV2aWNlKG5vdGVkZXZmZCwgbmJ1ZiwgbnNpemUpOwotCQl9Ci0KLQkJb3BkX2RvX25vdGVzKG5idWYsIG5jb3VudCk7Ci0JCW9wZF9kb19zYW1wbGVzKGJ1Zik7Ci0KLQkJLy8gd2UgY2FuIGxvc3QgYSBzaWduYWwgYWxhcm0gb3IgYSBzaWduYWwgaHVwIGJ1dCB3ZSBkb24ndAotCQkvLyB0YWtlIGNhcmUuCi0JCWlmIChzaWduYWxfYWxhcm0pIHsKLQkJCXNpZ25hbF9hbGFybSA9IDA7Ci0JCQlvcGRfYWxhcm0oKTsKLQkJfQotCi0JCWlmIChzaWduYWxfaHVwKSB7Ci0JCQlzaWduYWxfaHVwID0gMDsKLQkJCW9wZF9zaWdodXAoKTsKLQkJfQotCi0JCWlmIChzaWduYWxfdGVybSkKLQkJCW9wZF9zaWd0ZXJtKCk7Ci0gCi0JCS8qIHJlcXVlc3QgdG8gc3RvcCBhcnJpdmVkICovCi0JCWlmIChidWYtPnN0YXRlID09IFNUT1BQSU5HKSB7Ci0JCQl2ZXJicHJpbnRmKHZtaXNjLCAiU2h1dHRpbmcgZG93biBieSByZXF1ZXN0LlxuIik7Ci0JCQlvcGRfc2h1dGRvd24oYnVmLCBzaXplLCBuYnVmLCBuc2l6ZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci19Ci0KLS8qKgotICogb3BkX2RvX25vdGVzIC0gcHJvY2VzcyBhIG5vdGVzIGJ1ZmZlcgotICogQHBhcmFtIG9wZF9idWYgIGJ1ZmZlciB0byBwcm9jZXNzCi0gKiBAcGFyYW0gY291bnQgIG51bWJlciBvZiBieXRlcyBpbiBidWZmZXIKLSAqCi0gKiBQcm9jZXNzIGEgYnVmZmVyIG9mIG5vdGVzLgotICovCi1zdGF0aWMgdm9pZCBvcGRfZG9fbm90ZXMoc3RydWN0IG9wX25vdGUgY29uc3QgKiBvcGRfYnVmLCBzaXplX3QgY291bnQpCi17Ci0JdWludCBpOwotCXN0cnVjdCBvcF9ub3RlIGNvbnN0ICogbm90ZTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudC9zaXplb2Yoc3RydWN0IG9wX25vdGUpOyBpKyspIHsKLQkJbm90ZSA9ICZvcGRfYnVmW2ldOwotCi0JCW9wZF8yNF9zdGF0c1tPUERfTk9USUZJQ0FUSU9OU10rKzsKLQotCQlzd2l0Y2ggKG5vdGUtPnR5cGUpIHsKLQkJCWNhc2UgT1BfTUFQOgotCQkJY2FzZSBPUF9FWEVDOgotCQkJCWlmIChub3RlLT50eXBlID09IE9QX0VYRUMpCi0JCQkJCW9wZF9oYW5kbGVfZXhlYyhub3RlLT5waWQsIG5vdGUtPnRnaWQpOwotCQkJCW9wZF9oYW5kbGVfbWFwcGluZyhub3RlKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBPUF9GT1JLOgotCQkJCW9wZF9oYW5kbGVfZm9yayhub3RlKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBPUF9EUk9QX01PRFVMRVM6Ci0JCQkJb3BkX2NsZWFyX21vZHVsZV9pbmZvKCk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgT1BfRVhJVDoKLQkJCQlvcGRfaGFuZGxlX2V4aXQobm90ZSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJZnByaW50ZihzdGRlcnIsICJSZWNlaXZlZCB1bmtub3duIG5vdGlmaWNhdGlvbiB0eXBlICV1XG4iLCBub3RlLT50eXBlKTsKLQkJCQlhYm9ydCgpOwotCQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi0vKioKLSAqIG9wZF9kb19zYW1wbGVzIC0gcHJvY2VzcyBhIHNhbXBsZSBidWZmZXIKLSAqIEBwYXJhbSBvcGRfYnVmICBidWZmZXIgdG8gcHJvY2VzcwotICoKLSAqIFByb2Nlc3MgYSBidWZmZXIgb2Ygc2FtcGxlcy4KLSAqIFRoZSBzaWduYWxzIHNwZWNpZmllZCBieSB0aGUgZ2xvYmFsIHZhcmlhYmxlIG1hc2tzZXQgYXJlCi0gKiBtYXNrZWQuCi0gKgotICogSWYgdGhlIHNhbXBsZSBjb3VsZCBiZSBwcm9jZXNzZWQgY29ycmVjdGx5LCBpdCBpcyB3cml0dGVuCi0gKiB0byB0aGUgcmVsZXZhbnQgc2FtcGxlIGZpbGUuIEFkZGl0aW9uYWxseSBtYXBwaW5nIGFuZAotICogcHJvY2VzcyBub3RpZmljYXRpb25zIGFyZSBoYW5kbGVkIGhlcmUuCi0gKi8KLXN0YXRpYyB2b2lkIG9wZF9kb19zYW1wbGVzKHN0cnVjdCBvcF9idWZmZXJfaGVhZCBjb25zdCAqIG9wZF9idWYpCi17Ci0JdWludCBpOwotCXN0cnVjdCBvcF9zYW1wbGUgY29uc3QgKiBidWZmZXIgPSBvcGRfYnVmLT5idWZmZXI7IAotCi0Jb3BkXzI0X3N0YXRzW09QRF9EVU1QX0NPVU5UXSsrOwotCi0JdmVyYnByaW50Zih2bWlzYywgIlJlYWQgYnVmZmVyIG9mICVkIGVudHJpZXMgZm9yIGNwdSAlZC5cbiIsCi0JCSAgICh1bnNpZ25lZCBpbnQpb3BkX2J1Zi0+Y291bnQsIG9wZF9idWYtPmNwdV9ucik7Ci0gCi0JaWYgKHNlcGFyYXRlX2NwdSkKLQkJY3B1X251bWJlciA9IG9wZF9idWYtPmNwdV9ucjsKLQlmb3IgKGkgPSAwOyBpIDwgb3BkX2J1Zi0+Y291bnQ7IGkrKykgewotCQl2ZXJicHJpbnRmKHZzYW1wbGVzLCAiJS42dTogRUlQOiAweCUuOGx4IHBpZDogJS42ZFxuIiwKLQkJCWksIGJ1ZmZlcltpXS5laXAsIGJ1ZmZlcltpXS5waWQpOwotCQlvcGRfcHV0X3NhbXBsZSgmYnVmZmVyW2ldKTsKLQl9Ci19Ci0KLQotLyoqCi0gKiBvcGRfYWxhcm0gLSBjbGVhbiB1cCBvbGQgcHJvY3MsIG1zeW5jLCBhbmQgcmVwb3J0IHN0YXRzCi0gKi8KLXN0YXRpYyB2b2lkIG9wZF9hbGFybSh2b2lkKQotewotCW9wZF9zeW5jX3NhbXBsZXNfZmlsZXMoKTsKLQotCW9wZF9hZ2VfcHJvY3MoKTsKLQotCW9wZF9wcmludF8yNF9zdGF0cygpOwotCi0JYWxhcm0oNjAgKiAxMCk7Ci19Ci0gCi0KLS8qIHJlLW9wZW4gbG9nZmlsZSBmb3IgbG9ncm90YXRlICovCi1zdGF0aWMgdm9pZCBvcGRfc2lnaHVwKHZvaWQpCi17Ci0JcHJpbnRmKCJSZWNlaXZlZCBTSUdIVVAuXG4iKTsKLQljbG9zZSgxKTsKLQljbG9zZSgyKTsKLQlvcGRfb3Blbl9sb2dmaWxlKCk7Ci0JLyogV2UganVzdCBjbG9zZSB0aGVtLCBhbmQgcmUtb3BlbiB0aGVtIGxhemlseSBhcyB1c3VhbC4gKi8KLQlvcGRfZm9yX2VhY2hfaW1hZ2Uob3BkX2Nsb3NlX2ltYWdlX3NhbXBsZXNfZmlsZXMpOwotfQotCi0KLXN0YXRpYyB2b2lkIGNsZWFuX2V4aXQodm9pZCkKLXsKLQlvcGRfY2xlYW51cF9oYXNoX25hbWUoKTsKLQlvcF9mcmVlX2V2ZW50cygpOwotCXVubGluayhPUF9MT0NLX0ZJTEUpOwotfQotCi0KLXN0YXRpYyB2b2lkIG9wZF9zaWd0ZXJtKHZvaWQpCi17Ci0Jb3BkX3ByaW50XzI0X3N0YXRzKCk7Ci0JcHJpbnRmKCJvcHJvZmlsZWQgc3RvcHBlZCAlcyIsIG9wX2dldF90aW1lKCkpOwotCWV4aXQoRVhJVF9GQUlMVVJFKTsKLX0KLSAKLQotc3RhdGljIHZvaWQgb3BkXzI0X2luaXQodm9pZCkKLXsKLQlzaXplX3QgaTsKLQlpbnQgb3BkX2J1Zl9zaXplID0gT1BfREVGQVVMVF9CVUZfU0laRTsKLQlpbnQgb3BkX25vdGVfYnVmX3NpemUgPSBPUF9ERUZBVUxUX05PVEVfU0laRTsKLQotCWlmICghbm9fdm1saW51eCkKLQkJb3BkX3BhcnNlX2tlcm5lbF9yYW5nZShrZXJuZWxfcmFuZ2UpOwotCW9wZF9idWZfc2l6ZSA9IG9wZF9yZWFkX2ZzX2ludChPUF9NT1VOVCwgImJ1ZnNpemUiLCAxKTsKLQlvcGRfbm90ZV9idWZfc2l6ZSA9IG9wZF9yZWFkX2ZzX2ludChPUF9NT1VOVCwgIm5vdGVzaXplIiwgMSk7Ci0KLQlzX2J1Zl9ieXRlc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQpICsgb3BkX2J1Zl9zaXplICogc2l6ZW9mKHN0cnVjdCBvcF9zYW1wbGUpOwotCi0Jc2J1ZiA9IHhtYWxsb2Moc19idWZfYnl0ZXNpemUpOwotCi0Jbl9idWZfYnl0ZXNpemUgPSBvcGRfbm90ZV9idWZfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgb3Bfbm90ZSk7Ci0JbmJ1ZiA9IHhtYWxsb2Mobl9idWZfYnl0ZXNpemUpOwotCi0Jb3BkX2luaXRfaW1hZ2VzKCk7Ci0Jb3BkX2luaXRfcHJvY3MoKTsKLQlvcGRfaW5pdF9rZXJuZWxfaW1hZ2UoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBPUERfTUFYX1NUQVRTOyBpKyspCi0JCW9wZF8yNF9zdGF0c1tpXSA9IDA7Ci0KLQlpZiAoYXRleGl0KGNsZWFuX2V4aXQpKSB7Ci0JCXBlcnJvcigib3Byb2ZpbGVkOiBjb3VsZG4ndCBzZXQgZXhpdCBjbGVhbnVwOiAiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCBvcGRfMjRfc3RhcnQodm9pZCkKLXsKLQlvcF9vcGVuX2ZpbGVzKCk7Ci0KLQkvKiB5ZXMsIHRoaXMgaXMgcmFjZXkuICovCi0Jb3BkX2dldF9hc2NpaV9wcm9jcygpOwotCi0JLyogc2ltcGxlIHNsZWVwLXRoZW4tcHJvY2VzcyBsb29wICovCi0Jb3BkX2RvX3JlYWQoc2J1Ziwgc19idWZfYnl0ZXNpemUsIG5idWYsIG5fYnVmX2J5dGVzaXplKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBvcGRfMjRfZXhpdCh2b2lkKQotewotCW9wZF9wcmludF8yNF9zdGF0cygpOwotCXByaW50Zigib3Byb2ZpbGVkIHN0b3BwZWQgJXMiLCBvcF9nZXRfdGltZSgpKTsKLQotCWZyZWUoc2J1Zik7Ci0JZnJlZShuYnVmKTsKLQlvcGRfY2xlYXJfbW9kdWxlX2luZm8oKTsKLQlvcGRfcHJvY19jbGVhbnVwKCk7Ci0JLyoga2VybmVsL21vZHVsZSBpbWFnZSBhcmUgbm90IG93bmVkIGJ5IGEgcHJvYywgd2UgbXVzdCBjbGVhbnVwIHRoZW0gKi8KLQlvcGRfZm9yX2VhY2hfaW1hZ2Uob3BkX2RlbGV0ZV9pbWFnZSk7Ci19Ci0KLQotc3RydWN0IG9wcm9maWxlZF9vcHMgb3BkXzI0X29wcyA9IHsKLQkuaW5pdCA9IG9wZF8yNF9pbml0LAotCS5zdGFydCA9IG9wZF8yNF9zdGFydCwKLQkuZXhpdCA9IG9wZF8yNF9leGl0Ci19OwpkaWZmIC0tZ2l0IGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfMjRfc3RhdHMuYyBiL2RhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNDI1YzQuLjAwMDAwMDAKLS0tIGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfMjRfc3RhdHMuYworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BkXzI0X3N0YXRzLmMKLSAqIE1hbmFnZW1lbnQgb2YgZGFlbW9uIHN0YXRpc3RpY3MKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSAib3BkXzI0X3N0YXRzLmgiCi0jaW5jbHVkZSAib3BkX3Byb2MuaCIKLSNpbmNsdWRlICJvcGRfaW1hZ2UuaCIKLSNpbmNsdWRlICJvcHJvZmlsZWQuaCIKLQotI2luY2x1ZGUgIm9wX2dldF90aW1lLmgiCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi11bnNpZ25lZCBsb25nIG9wZF8yNF9zdGF0c1tPUERfTUFYX1NUQVRTXTsKLQotdm9pZCBvcGRfcHJpbnRfMjRfc3RhdHModm9pZCkKLXsKLQlwcmludGYoIlxuJXNcbiIsIG9wX2dldF90aW1lKCkpOwotCXByaW50ZigiTnIuIHByb2Mgc3RydWN0OiAlZFxuIiwgb3BkX2dldF9ucl9wcm9jcygpKTsKLQlwcmludGYoIk5yLiBpbWFnZSBzdHJ1Y3Q6ICVkXG4iLCBvcGRfZ2V0X25yX2ltYWdlcygpKTsKLQlwcmludGYoIk5yLiBrZXJuZWwgc2FtcGxlczogJWx1XG4iLCBvcGRfMjRfc3RhdHNbT1BEX0tFUk5FTF0pOwotCXByaW50ZigiTnIuIG1vZHVsZXMgc2FtcGxlczogJWx1XG4iLCBvcGRfMjRfc3RhdHNbT1BEX01PRFVMRV0pOwotCXByaW50ZigiTnIuIG1vZHVsZXMgc2FtcGxlcyBsb3N0OiAlbHVcbiIsIG9wZF8yNF9zdGF0c1tPUERfTE9TVF9NT0RVTEVdKTsKLQlwcmludGYoIk5yLiBzYW1wbGVzIGxvc3QgZHVlIHRvIG5vIHByb2Nlc3MgaW5mb3JtYXRpb246ICVsdVxuIiwKLQkJb3BkXzI0X3N0YXRzW09QRF9MT1NUX1BST0NFU1NdKTsKLQlwcmludGYoIk5yLiBzYW1wbGVzIGxvc3QgZHVlIHRvIHNhbXBsZSBmaWxlIG9wZW4gZmFpbHVyZTogJWx1XG4iLAotCQlvcGRfMjRfc3RhdHNbT1BEX0xPU1RfU0FNUExFRklMRV0pOwotCXByaW50ZigiTnIuIHByb2Nlc3Mgc2FtcGxlcyBpbiB1c2VyLXNwYWNlOiAlbHVcbiIsIG9wZF8yNF9zdGF0c1tPUERfUFJPQ0VTU10pOwotCXByaW50ZigiTnIuIHNhbXBsZXMgbG9zdCBkdWUgdG8gbm8gbWFwIGluZm9ybWF0aW9uOiAlbHVcbiIsCi0JCW9wZF8yNF9zdGF0c1tPUERfTE9TVF9NQVBfUFJPQ0VTU10pOwotCWlmIChvcGRfMjRfc3RhdHNbT1BEX1BST0NfUVVFVUVfQUNDRVNTXSkgewotCQlwcmludGYoIkF2ZXJhZ2UgZGVwdGggb2Ygc2VhcmNoIG9mIHByb2MgcXVldWU6ICVmXG4iLAotCQkJKGRvdWJsZSlvcGRfMjRfc3RhdHNbT1BEX1BST0NfUVVFVUVfREVQVEhdCi0JCQkvIChkb3VibGUpb3BkXzI0X3N0YXRzW09QRF9QUk9DX1FVRVVFX0FDQ0VTU10pOwotCX0KLQlpZiAob3BkXzI0X3N0YXRzW09QRF9NQVBfQVJSQVlfQUNDRVNTXSkgewotCQlwcmludGYoIkF2ZXJhZ2UgZGVwdGggb2YgaXRlcmF0aW9uIHRocm91Z2ggbWFwcGluZyBhcnJheTogJWZcbiIsCi0JCQkoZG91YmxlKW9wZF8yNF9zdGF0c1tPUERfTUFQX0FSUkFZX0RFUFRIXQotCQkJLyAoZG91YmxlKW9wZF8yNF9zdGF0c1tPUERfTUFQX0FSUkFZX0FDQ0VTU10pOwotCX0KLQlpZiAob3BkXzI0X3N0YXRzW09QRF9JTUFHRV9IQVNIX0FDQ0VTU10pIHsKLQkJcHJpbnRmKCJBdmVyYWdlIGRlcHRoIG9mIGl0ZXJhdGlvbiB0aHJvdWdoIGltYWdlIGhhc2ggYXJyYXk6ICVmXG4iLAotCQkJKGRvdWJsZSlvcGRfMjRfc3RhdHNbT1BEX0lNQUdFX0hBU0hfREVQVEhdCi0JCQkvIChkb3VibGUpb3BkXzI0X3N0YXRzW09QRF9JTUFHRV9IQVNIX0FDQ0VTU10pOwotCX0KLQlwcmludGYoIk5yLiBzYW1wbGUgZHVtcHM6ICVsdVxuIiwgb3BkXzI0X3N0YXRzW09QRF9EVU1QX0NPVU5UXSk7Ci0JcHJpbnRmKCJOci4gc2FtcGxlcyB0b3RhbDogJWx1XG4iLCBvcGRfMjRfc3RhdHNbT1BEX1NBTVBMRVNdKTsKLQlwcmludGYoIk5yLiBub3RpZmljYXRpb25zOiAlbHVcbiIsIG9wZF8yNF9zdGF0c1tPUERfTk9USUZJQ0FUSU9OU10pOwotCXByaW50ZigiTnIuIGtlcm5lbCBub3RlIGJ1ZmZlciBvdmVyZmxvdzogJXVcbiIsCi0JICAgICAgIG9wZF9yZWFkX2ZzX2ludChPUF9NT1VOVCwgIm5vdGVfYnVmZmVyX292ZXJmbG93IiwgMCkpOwotCXByaW50ZigiTnIuIGtlcm5lbCBzYW1wbGVzIGJ1ZmZlciBvdmVyZmxvdzogJXVcbiIsCi0JICAgICAgIG9wZF9yZWFkX2ZzX2ludChPUF9NT1VOVCwgImJ1ZmZlcl9vdmVyZmxvdyIsIDApKTsKLQlmZmx1c2goc3Rkb3V0KTsKLX0KZGlmZiAtLWdpdCBhL2RhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmggYi9kYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWNkODYwLi4wMDAwMDAwCi0tLSBhL2RhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wZF8yNF9zdGF0cy5oCi0gKiBNYW5hZ2VtZW50IG9mIGRhZW1vbiBzdGF0aXN0aWNzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUERfMjRfU1RBVFNfSAotI2RlZmluZSBPUERfMjRfU1RBVFNfSAotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBvcGRfMjRfc3RhdHNbXTsKLQotZW51bSB7ICBPUERfS0VSTkVMLCAvKio8IG5yIGtlcm5lbCBzYW1wbGVzICovCi0JT1BEX01PRFVMRSwgLyoqPCBuciBtb2R1bGUgc2FtcGxlcyAqLwotCU9QRF9MT1NUX01PRFVMRSwgLyoqPCBuciBzYW1wbGVzIGluIG1vZHVsZSBmb3Igd2hpY2ggbW9kdWxlcyBjYW4gbm90IGJlIGxvY2F0ZWQgKi8KLQlPUERfTE9TVF9QUk9DRVNTLCAvKio8IG5yIHNhbXBsZXMgZm9yIHdoaWNoIHByb2Nlc3MgaW5mbyBjb3VsZG4ndCBiZSBhY2Nlc3NlZCAqLwotCU9QRF9QUk9DRVNTLCAvKio8IG5yIHVzZXJzcGFjZSBzYW1wbGVzICovCi0JT1BEX0xPU1RfTUFQX1BST0NFU1MsIC8qKjwgbnIgc2FtcGxlcyBmb3Igd2hpY2ggbWFwIGluZm8gY291bGRuJ3QgYmUgYWNjZXNzZWQgKi8KLQlPUERfTE9TVF9TQU1QTEVGSUxFLCAvKio8IG5yIHNhbXBsZXMgZm9yIHdoaWNoIHNhbXBsZSBmaWxlIGNhbid0IGJlIG9wZW5lZCAqLwotCU9QRF9QUk9DX1FVRVVFX0FDQ0VTUywgLyoqPCBuciBhY2Nlc3NlcyBvZiBwcm9jIHF1ZXVlICovCi0JT1BEX1BST0NfUVVFVUVfREVQVEgsIC8qKjwgY3VtdWxhdGl2ZSBkZXB0aCBvZiBwcm9jIHF1ZXVlIGFjY2Vzc2VzICovCi0JT1BEX0RVTVBfQ09VTlQsIC8qKjwgbnIgb2YgdGltZXMgYnVmZmVyIGlzIHJlYWQgKi8KLQlPUERfTUFQX0FSUkFZX0FDQ0VTUywgLyoqPCBuciBhY2Nlc3NlcyBvZiBtYXAgYXJyYXkgKi8KLQlPUERfTUFQX0FSUkFZX0RFUFRILCAvKio8IGN1bXVsYXRpdmUgZGVwdGggb2YgbWFwIGFycmF5IGFjY2Vzc2VzICovCi0JT1BEX0lNQUdFX0hBU0hfQUNDRVNTLCAgLyoqPCBuciBvcGRfZmluZF9pbWFnZSgpICovCi0JT1BEX0lNQUdFX0hBU0hfREVQVEgsICAvKio8IGN1bXVsYXRpdmUgZGVwdGggb2YgaW1hZ2Ugc2VhcmNoICovCi0JT1BEX1NBTVBMRVMsIC8qKjwgbnIgZGlzdGluY3Qgc2FtcGxlcyAqLwotCU9QRF9OT1RJRklDQVRJT05TLCAvKio8IG5yIG5vdGlmaWNhdGlvbnMgKi8KLQlPUERfTUFYX1NUQVRTIC8qKjwgZW5kIG9mIHN0YXRzICovCi0JfTsKLQotLyoqIG9wZF9wcmludF8yNF9zdGF0cyAtIHByaW50IG91dCBsYXRlc3Qgc3RhdGlzdGljcyAqLwotdm9pZCBvcGRfcHJpbnRfMjRfc3RhdHModm9pZCk7Ci0KLSNlbmRpZiAvKiBPUERfMjRfU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYyBiL2RhZW1vbi9saWJsZWdhY3kvb3BkX2ltYWdlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOGUwNjguLjAwMDAwMDAKLS0tIGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wZF9pbWFnZS5jCi0gKiBNYW5hZ2VtZW50IG9mIGJpbmFyeSBpbWFnZXMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSAib3BkX2ltYWdlLmgiCi0jaW5jbHVkZSAib3BkX3ByaW50Zi5oIgotI2luY2x1ZGUgIm9wZF9zYW1wbGVfZmlsZXMuaCIKLSNpbmNsdWRlICJvcGRfMjRfc3RhdHMuaCIKLSNpbmNsdWRlICJvcHJvZmlsZWQuaCIKLQotI2luY2x1ZGUgIm9wX2ZpbGUuaCIKLSNpbmNsdWRlICJvcF9jb25maWdfMjQuaCIKLSNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKLSNpbmNsdWRlICJvcF9zdHJpbmcuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qIG1haW50YWluZWQgZm9yIHN0YXRpc3RpY3MgcHVycG9zZSBvbmx5ICovCi1zdGF0aWMgaW50IG5yX2ltYWdlczsKLQotLyogbGlzdCBvZiBpbWFnZXMgKi8KLSNkZWZpbmUgT1BEX0lNQUdFX0hBU0hfU0laRSAyMDQ4Ci1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBvcGRfaW1hZ2VzW09QRF9JTUFHRV9IQVNIX1NJWkVdOwotCi0KLXZvaWQgb3BkX2luaXRfaW1hZ2VzKHZvaWQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IE9QRF9JTUFHRV9IQVNIX1NJWkU7ICsraSkgewotCQlsaXN0X2luaXQoJm9wZF9pbWFnZXNbaV0pOwotCX0KLX0KLQotCi1pbnQgb3BkX2dldF9ucl9pbWFnZXModm9pZCkKLXsKLQlyZXR1cm4gbnJfaW1hZ2VzOwotfQotCi0KLXZvaWQgb3BkX2RlbGV0ZV9pbWFnZShzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UpCi17Ci0JdmVyYnByaW50Zih2bWlzYywgIkRlbGV0aW5nIGltYWdlOiBuYW1lICVzIGFwcF9uYW1lICVzLCBrZXJuZWwgJWQsICIKLQkgICAgICAgICAgICJ0aWQgJWQsIHRnaWQgJWQgcmVmIGNvdW50ICV1XG4iLAotCSAgICAgICAgICAgaW1hZ2UtPm5hbWUsIGltYWdlLT5hcHBfbmFtZSwgaW1hZ2UtPmtlcm5lbCwKLQkgICAgICAgICAgIGltYWdlLT50aWQsIGltYWdlLT50Z2lkLCAoaW50KWltYWdlLT5yZWZfY291bnQpOwotCi0JaWYgKGltYWdlLT5yZWZfY291bnQgPD0gMCkgewotCQlwcmludGYoImltYWdlLT5yZWZfY291bnQgPCAwIGZvciBpbWFnZTogbmFtZSAlcyBhcHBfbmFtZSAlcywgIgotCQkgICAgICAgImtlcm5lbCAlZCwgdGlkICVkLCB0Z2lkICVkIHJlZiBjb3VudCAldVxuIiwKLQkJICAgICAgIGltYWdlLT5uYW1lLCBpbWFnZS0+YXBwX25hbWUsIGltYWdlLT5rZXJuZWwsCi0JCSAgICAgICBpbWFnZS0+dGlkLCBpbWFnZS0+dGdpZCwgaW1hZ2UtPnJlZl9jb3VudCk7Ci0JCWFib3J0KCk7Ci0JfQotCi0JaWYgKC0taW1hZ2UtPnJlZl9jb3VudCAhPSAwKQotCQlyZXR1cm47Ci0KLQlpZiAoaW1hZ2UtPm5hbWUpCi0JCWZyZWUoaW1hZ2UtPm5hbWUpOwotCWlmIChpbWFnZS0+YXBwX25hbWUpCi0JCWZyZWUoaW1hZ2UtPmFwcF9uYW1lKTsKLQlsaXN0X2RlbCgmaW1hZ2UtPmhhc2hfbmV4dCk7Ci0Jb3BkX2Nsb3NlX2ltYWdlX3NhbXBsZXNfZmlsZXMoaW1hZ2UpOwotCWZyZWUoaW1hZ2UpOwotCi0JbnJfaW1hZ2VzLS07Ci19Ci0KLQotdm9pZCBvcGRfZm9yX2VhY2hfaW1hZ2Uob3BkX2ltYWdlX2NiIGltYWdlX2NiKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIHBvczI7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgT1BEX0lNQUdFX0hBU0hfU0laRTsgKytpKSB7Ci0JCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZvcGRfaW1hZ2VzW2ldKSB7Ci0JCQlzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UgPQotCQkJCWxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkX2ltYWdlLCBoYXNoX25leHQpOwotCQkJaW1hZ2VfY2IoaW1hZ2UpOwotCQl9Ci0JfQotfQotIAotCi0vKioKLSAqIG9wZF9oYXNoX2ltYWdlIC0gaGFzaCBhbiBpbWFnZQotICogQHBhcmFtIGhhc2ggIGhhc2ggb2YgaW1hZ2UgbmFtZQotICogQHBhcmFtIHRpZCAgdGhyZWFkIGlkCi0gKiBAcGFyYW0gdGdpZCAgdGhyZWFkIGdyb3VwIGlkCi0gKgotICogcmV0dXJuIHRoZSBoYXNoIGNvZGUgZm9yIHRoZSBwYXNzZWQgcGFyYW1ldGVycwotICovCi1zdGF0aWMgc2l6ZV90IG9wZF9oYXNoX2ltYWdlKGNoYXIgY29uc3QgKiBuYW1lLCBwaWRfdCB0aWQsIHBpZF90IHRnaWQpCi17Ci0Jc2l6ZV90IGhhc2ggPSBvcF9oYXNoX3N0cmluZyhuYW1lKTsKLQlpZiAoc2VwYXJhdGVfdGhyZWFkKQotCQloYXNoICs9IHRpZCArIHRnaWQ7Ci0JcmV0dXJuICBoYXNoICUgT1BEX0lNQUdFX0hBU0hfU0laRTsKLX0KLQotCi0vKioKLSAqIG9wZF9uZXdfaW1hZ2UgLSBjcmVhdGUgYW4gaW1hZ2Ugc2FtcGxlIGZpbGUKLSAqIEBwYXJhbSBhcHBfbmFtZSAgdGhlIGFwcGxpY2F0aW9uIG5hbWUgd2hlcmUgYmVsb25ncyB0aGlzIGltYWdlCi0gKiBAcGFyYW0gbmFtZSAgbmFtZSBvZiB0aGUgaW1hZ2UgdG8gYWRkCi0gKiBAcGFyYW0ga2VybmVsICBpcyB0aGUgaW1hZ2UgYSBrZXJuZWwvbW9kdWxlIGltYWdlCi0gKiBAcGFyYW0gdGlkICB0aHJlYWQgaWQKLSAqIEBwYXJhbSB0Z2lkICB0aHJlYWQgZ3JvdXAgaWQKLSAqCi0gKiBpbWFnZSBhdCBmdW50aW9uIGVudHJ5IGlzIHVuaW5pdGlhbGlzZWQKLSAqIG5hbWUgaXMgY29waWVkIGkuZS4gc2hvdWxkIGJlIEdDJ2Qgc2VwYXJhdGVseSBmcm9tIHRoZQotICogaW1hZ2Ugc3RydWN0dXJlIGlmIGFwcHJvcHJpYXRlLgotICoKLSAqIEluaXRpYWxpc2UgYW4gb3BkX2ltYWdlIHN0cnVjdCBmb3IgdGhlIGltYWdlIGltYWdlCi0gKiB3aXRob3V0IG9wZW5pbmcgdGhlIGFzc29jaWF0ZWQgc2FtcGxlcyBmaWxlcy4gQXQgcmV0dXJuCi0gKiB0aGUgaW1hZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgb3BkX2ltYWdlICoKLW9wZF9uZXdfaW1hZ2UoY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgY29uc3QgKiBhcHBfbmFtZSwgaW50IGtlcm5lbCwKLSAgICAgICAgICAgICAgcGlkX3QgdGlkLCBwaWRfdCB0Z2lkKQotewotCXNpemVfdCBoYXNoX2ltYWdlOwotCXN0cnVjdCBvcGRfaW1hZ2UgKiBpbWFnZTsKLQotCXZlcmJwcmludGYodm1pc2MsICJDcmVhdGluZyBpbWFnZTogJXMgJXMsIGtlcm5lbCAlZCwgdGlkICVkLCAiCi0JICAgICAgICAgICAidGdpZCAlZFxuIiwgbmFtZSwgYXBwX25hbWUsIGtlcm5lbCwgdGlkLCB0Z2lkKTsKLQotCWltYWdlID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG9wZF9pbWFnZSkpOwotCi0JbGlzdF9pbml0KCZpbWFnZS0+aGFzaF9uZXh0KTsKLQlpbWFnZS0+bmFtZSA9IHhzdHJkdXAobmFtZSk7Ci0JaW1hZ2UtPmtlcm5lbCA9IGtlcm5lbDsKLQlpbWFnZS0+dGlkID0gdGlkOwotCWltYWdlLT50Z2lkID0gdGdpZDsKLQlpbWFnZS0+cmVmX2NvdW50ID0gMDsKLQlpbWFnZS0+YXBwX25hbWUgPSBhcHBfbmFtZSA/IHhzdHJkdXAoYXBwX25hbWUpIDogTlVMTDsKLQlpbWFnZS0+bXRpbWUgPSBvcF9nZXRfbXRpbWUoaW1hZ2UtPm5hbWUpOwotCi0JaW1hZ2UtPmlnbm9yZWQgPSAxOwotCWlmIChzZXBhcmF0ZV9saWIgJiYgYXBwX25hbWUpCi0JCWltYWdlLT5pZ25vcmVkID0gaXNfaW1hZ2VfaWdub3JlZChhcHBfbmFtZSk7Ci0JaWYgKGltYWdlLT5pZ25vcmVkKQotCQlpbWFnZS0+aWdub3JlZCA9IGlzX2ltYWdlX2lnbm9yZWQobmFtZSk7Ci0KLQltZW1zZXQoaW1hZ2UtPnNmaWxlcywgJ1wwJywgTlJfQ1BVUyAqIHNpemVvZihzdHJ1Y3Qgb3BkXzI0X3NmaWxlICoqKSk7Ci0KLQloYXNoX2ltYWdlID0gb3BkX2hhc2hfaW1hZ2UobmFtZSwgdGlkLCB0Z2lkKTsKLQlsaXN0X2FkZCgmaW1hZ2UtPmhhc2hfbmV4dCwgJm9wZF9pbWFnZXNbaGFzaF9pbWFnZV0pOwotCi0JbnJfaW1hZ2VzKys7Ci0KLQlyZXR1cm4gaW1hZ2U7Ci19Ci0KLQotLyoqCi0gKiBpc19zYW1lX2ltYWdlIC0gY2hlY2sgZm9yIGlkZW50aWNhbCBpbWFnZQotICogQHBhcmFtIGltYWdlICBpbWFnZSB0byBjb21wYXJlCi0gKiBAcGFyYW0gbmFtZSAgbmFtZSBvZiBpbWFnZQotICogQHBhcmFtIGFwcF9uYW1lIGltYWdlIG11c3QgYmVsb25nIHRvIHRoaXMgYXBwbGljYXRpb24gbmFtZQotICogQHBhcmFtIHRpZCAgdGhyZWFkIGlkCi0gKiBAcGFyYW0gdGdpZCAgdGhyZWFkIGdyb3VwIGlkCi0gKgotICogb24gZW50cnkgY2FsbGVyIGhhdmUgY2hlY2tlZCB0aGFuIHN0cmNtcChpbWFnZS0+bmFtZSwgbmFtZSkgPT0gMAotICogcmV0dXJuIDAgaWYgdGhlIGNvdXBsZSAobmFtZSwgYXBwX25hbWUpIHJlZmVycyB0byBzYW1lIGltYWdlCi0gKi8KLXN0YXRpYyBpbnQgaXNfc2FtZV9pbWFnZShzdHJ1Y3Qgb3BkX2ltYWdlIGNvbnN0ICogaW1hZ2UsIGNoYXIgY29uc3QgKiBhcHBfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCB0aWQsIHBpZF90IHRnaWQpCi17Ci0JLyogY29ycmVjdG5lc3MgaXMgcmVhbGx5IGltcG9ydGFudCBoZXJlLCBpZiB3ZSBmYWlsIHRvIHJlY29nbml6ZQotCSAqIGlkZW50aWNhbCBpbWFnZSB3ZSB3aWxsIG9wZW4vbW1hcCBtdWx0aXBsZSB0aW1lIHRoZSBzYW1lIHNhbXBsZXMKLQkgKiBmaWxlcyB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwsIHN0cmFuZ2UgYXNzZXJ0aW9uCi0JICogZmFpbHVyZSBpbiBsaWJmZCBpcyBhIHR5cGljYWwgc3ltcHRvbSBvZiB0aGF0ICovCi0KLQlpZiAoc2VwYXJhdGVfdGhyZWFkKSB7Ci0JCWlmIChpbWFnZS0+dGlkICE9IHRpZCB8fCBpbWFnZS0+dGdpZCAhPSB0Z2lkKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogaWYgIXNlcGFyYXRlX2xpYiwgdGhlIGNvbXBhcmlzb24gbWFkZSBieSBjYWxsZXIgaXMgZW5vdWdoICovCi0JaWYgKCFzZXBhcmF0ZV9saWIpCi0JCXJldHVybiAwOwotCi0JaWYgKGltYWdlLT5hcHBfbmFtZSA9PSBOVUxMICYmIGFwcF9uYW1lID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JaWYgKGltYWdlLT5hcHBfbmFtZSAhPSBOVUxMICYmIGFwcF9uYW1lICE9IE5VTEwgJiYKLQkgICAgIXN0cmNtcChpbWFnZS0+YXBwX25hbWUsIGFwcF9uYW1lKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiAvcHJvYyBwYXJzZWQgaW1hZ2UgY29tZSB3aXRoIGEgbm9uIG51bGwgYXBwX25hbWUgYnV0IG5vdGlmaWNhdGlvbgotCSAqIGZvciBhcHBsaWNhdGlvbiBpdHNlbGYgY29tZSB3aXRoIGEgbnVsbCBhcHBfbmFtZSwgaW4gdGhpcyBjYXNlCi0JICogdGhlIHRlc3QgYWJvdmUgZmFpbCBzbyBjaGVjayBmb3IgdGhpcyBjYXNlLiAqLwotCWlmIChpbWFnZS0+YXBwX25hbWUgJiYgIWFwcF9uYW1lICYmICFzdHJjbXAoaW1hZ2UtPmFwcF9uYW1lLCBpbWFnZS0+bmFtZSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLQotLyoqCi0gKiBvcGRfZmluZF9pbWFnZSAtIGZpbmQgYW4gaW1hZ2UKLSAqIEBwYXJhbSBuYW1lICBuYW1lIG9mIGltYWdlIHRvIGZpbmQKLSAqIEBwYXJhbSBoYXNoICBoYXNoIG9mIGltYWdlIHRvIGZpbmQKLSAqIEBwYXJhbSBhcHBfbmFtZSAgdGhlIGFwcGxpY2F0aW9uIG5hbWUgd2hlcmUgYmVsb25ncyB0aGlzIGltYWdlCi0gKiBAcGFyYW0gdGlkICB0aHJlYWQgaWQKLSAqIEBwYXJhbSB0Z2lkICB0aHJlYWQgZ3JvdXAgaWQKLSAqCi0gKiBSZXR1cm5zIHRoZSBpbWFnZSBwb2ludGVyIGZvciB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgbmFtZSwgb3IgJU5VTEwuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgb3BkX2ltYWdlICogb3BkX2ZpbmRfaW1hZ2UoY2hhciBjb25zdCAqIG5hbWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogYXBwX25hbWUsIHBpZF90IHRpZCwgcGlkX3QgdGdpZCkKLXsKLQkvKiBzdXBwcmVzcyB1bmluaXRpYWxpemVkIHVzZSB3YXJuaW5nICovCi0Jc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlID0gMDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOwotCXNpemVfdCBidWNrZXQ7Ci0KLQlvcGRfMjRfc3RhdHNbT1BEX0lNQUdFX0hBU0hfQUNDRVNTXSsrOwotCWJ1Y2tldCA9IG9wZF9oYXNoX2ltYWdlKG5hbWUsIHRpZCwgdGdpZCk7Ci0JbGlzdF9mb3JfZWFjaChwb3MsICZvcGRfaW1hZ2VzW2J1Y2tldF0pIHsKLQkJb3BkXzI0X3N0YXRzW09QRF9JTUFHRV9IQVNIX0RFUFRIXSsrOwotCQlpbWFnZSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkX2ltYWdlLCBoYXNoX25leHQpOwotCi0JCWlmICghc3RyY21wKGltYWdlLT5uYW1lLCBuYW1lKSkgewotCQkJaWYgKCFpc19zYW1lX2ltYWdlKGltYWdlLCBhcHBfbmFtZSwgdGlkLCB0Z2lkKSkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChwb3MgPT0gJm9wZF9pbWFnZXNbYnVja2V0XSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBUaGUgYXBwX25hbWUgZmllbGQgaXMgYWx3YXlzIHZhbGlkICovCi0JcmV0dXJuIGltYWdlOwotfQotCi0gCi1zdHJ1Y3Qgb3BkX2ltYWdlICogb3BkX2dldF9pbWFnZShjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBjb25zdCAqIGFwcF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtlcm5lbCwgcGlkX3QgdGlkLCBwaWRfdCB0Z2lkKQotewotCXN0cnVjdCBvcGRfaW1hZ2UgKiBpbWFnZTsKLQlpZiAoKGltYWdlID0gb3BkX2ZpbmRfaW1hZ2UobmFtZSwgYXBwX25hbWUsIHRpZCwgdGdpZCkpID09IE5VTEwpCi0JCWltYWdlID0gb3BkX25ld19pbWFnZShuYW1lLCBhcHBfbmFtZSwga2VybmVsLCB0aWQsIHRnaWQpOwotCi0JcmV0dXJuIGltYWdlOwotfQotCi0KLXN0cnVjdCBvcGRfaW1hZ2UgKiBvcGRfZ2V0X2tlcm5lbF9pbWFnZShjaGFyIGNvbnN0ICogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogYXBwX25hbWUsIHBpZF90IHRpZCwgcGlkX3QgdGdpZCkKLXsKLQlyZXR1cm4gb3BkX2dldF9pbWFnZShuYW1lLCBhcHBfbmFtZSwgMSwgdGlkLCB0Z2lkKTsKLX0KZGlmZiAtLWdpdCBhL2RhZW1vbi9saWJsZWdhY3kvb3BkX2ltYWdlLmggYi9kYWVtb24vbGlibGVnYWN5L29wZF9pbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDU1MjcwLi4wMDAwMDAwCi0tLSBhL2RhZW1vbi9saWJsZWdhY3kvb3BkX2ltYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcGRfaW1hZ2UuaAotICogTWFuYWdlbWVudCBvZiBiaW5hcnkgaW1hZ2VzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUERfSU1BR0VfSAotI2RlZmluZSBPUERfSU1BR0VfSAotCi0jaW5jbHVkZSAib3BfbGlzdC5oIgotI2luY2x1ZGUgIm9wX2NvbmZpZ18yNC5oIgotI2luY2x1ZGUgIm9wX3R5cGVzLmgiCi0KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLXN0cnVjdCBvcGRfMjRfc2ZpbGU7Ci0KLS8qKgotICogQSBiaW5hcnkgKGxpYnJhcnksIGFwcGxpY2F0aW9uLCBrZXJuZWwgb3IgbW9kdWxlKQotICogaXMgcmVwcmVzZW50ZWQgYnkgYSBzdHJ1Y3Qgb3BkX2ltYWdlLgotICovCi1zdHJ1Y3Qgb3BkX2ltYWdlIHsKLQkvKiogdXNlZCBieSBjb250YWluZXIgb2Ygb3BkX2ltYWdlcyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgaGFzaF9uZXh0OwotCS8qKiBob3cgbWFueSB0aW1lIHRoaXMgb3BkX2ltYWdlIGlzIHJlZmVyZW5jZWQgKi8KLQlpbnQgcmVmX2NvdW50OwotCS8qKiBhbGwgc2FtcGxlcyBmaWxlcyBiZWxvbmdpbmcgdG8gdGhpcyBpbWFnZSAqLwotCXN0cnVjdCBvcGRfMjRfc2ZpbGUgKiogc2ZpbGVzW05SX0NQVVNdOwotCS8qKiBuYW1lIG9mIHRoaXMgaW1hZ2UgKi8KLQljaGFyICogbmFtZTsKLQkvKiogdGhlIGFwcGxpY2F0aW9uIG5hbWUgd2hlcmUgYmVsb25ncyB0aGlzIGltYWdlLCBOVUxMIGlmIGltYWdlIGhhcwotCSAqIG5vIG93bmVyIChzdWNoIGFzIHZtbGludXggb3IgbW9kdWxlKSAqLwotCWNoYXIgKiBhcHBfbmFtZTsKLQkvKiogdGhyZWFkIGlkLCBvbiAyLjIga2VybmVsIGFsd2F5cyA9PSB0byB0Z2lkICovCi0JcGlkX3QgdGlkOwotCS8qKiB0aHJlYWQgZ3JvdXAgaWQgICovCi0JcGlkX3QgdGdpZDsKLQkvKiogdGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiAqLwotCXRpbWVfdCBtdGltZTsKLQkvKioga2VybmVsIGltYWdlIG9yIG5vdCAqLwotCWludCBrZXJuZWw7Ci0JLyoqIG5vbiB6ZXJvIGlmIHRoaXMgaW1hZ2UgbXVzdCBiZSBwcm9maWxlZCAqLwotCWludCBpZ25vcmVkOwotfTsKLQotLyoqIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3NlZCB0byBvcGRfZm9yX2VhY2hfaW1hZ2UoKSAqLwotdHlwZWRlZiB2b2lkICgqb3BkX2ltYWdlX2NiKShzdHJ1Y3Qgb3BkX2ltYWdlICopOwotCi0vKioKLSAqIEBwYXJhbSBpbWFnZWNiIGNhbGxiYWNrIHRvIGFwcGx5IG9udG8gZWFjaCBleGlzdGluZyBpbWFnZSBzdHJ1Y3QKLSAqCi0gKiB0aGUgY2FsbGJhY2sgcmVjZWl2ZSBhIHN0cnVjdCBvcGRfaW1hZ2UgKiAobm90IGEgY29uc3Qgc3RydWN0KSBhbmQgaXMKLSAqIGFsbG93ZWQgdG8gZnJlZXplIHRoZSBpbWFnZSBzdHJ1Y3QgaXRzZWxmLgotICovCi12b2lkIG9wZF9mb3JfZWFjaF9pbWFnZShvcGRfaW1hZ2VfY2IgaW1hZ2VjYik7Ci0KLS8qKgotICogaW5pdGlhbGl6ZSBvcGRfaW1hZ2UgY29udGFpbmVyCi0gKi8KLXZvaWQgb3BkX2luaXRfaW1hZ2VzKHZvaWQpOwotCi0vKioKLSAqIEBwYXJhbSBpbWFnZSAgdGhlIGltYWdlIHBvaW50ZXIKLSAqCi0gKiBEZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG9mIGltYWdlLCBpZiByZWZlcmVuY2UgY291bnQgaXMgemVybyBmbHVzaCBhbmQKLSAqIGNsb3NlIHRoZSBzYW1wbGVzIGZpbGVzIHRoZW4gZnJlZXplIGFsbCBtZW1vcnkgYmVsb25naW5nIHRvIHRoaXMgaW1hZ2UuCi0gKi8KLXZvaWQgb3BkX2RlbGV0ZV9pbWFnZShzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UpOwotCi0vKioKLSAqIG9wZF9nZXRfa2VybmVsX2ltYWdlIC0gZ2V0IGEga2VybmVsIGltYWdlCi0gKiBAcGFyYW0gbmFtZSBvZiBpbWFnZQotICogQHBhcmFtIGFwcF9uYW1lIGFwcGxpY2F0aW9uIG93bmVyIG9mIHRoaXMga2VybmVsIGltYWdlLiBub24tbnVsbCBvbmx5Ci0gKiAgd2hlbiBzZXBhcmF0ZV9rZXJuZWxfc2FtcGxlICE9IDAKLSAqIEBwYXJhbSB0aWQgIHRocmVhZCBpZAotICogQHBhcmFtIHRnaWQgIHRocmVhZCBncm91cCBpZAotICoKLSAqIENyZWF0ZSBhbmQgaW5pdGlhbGlzZSBhbiBpbWFnZSBhZGRpbmcgaXQgdG8gdGhlIGltYWdlIGxpc3RzIGFuZCB0byBpbWFnZQotICogaGFzaCBsaXN0LiBOb3RlIHRoYW4gYXQgY3JlYXRpb24gcmVmZXJlbmNlIGNvdW50IGlzIHplcm8sIGl0J3MgY2FsbGVyCi0gKiByZXNwb25zYWJpbGl0aWVzIHRvIGluY3IgdGhpcyBjb3VudC4KLSAqLwotc3RydWN0IG9wZF9pbWFnZSAqIG9wZF9nZXRfa2VybmVsX2ltYWdlKGNoYXIgY29uc3QgKiBuYW1lLAotICAgICBjaGFyIGNvbnN0ICogYXBwX25hbWUsIHBpZF90IHRpZCwgcGlkX3QgdGdpZCk7Ci0KLS8qKgotICogb3BkX2dldF9pbWFnZSAtIGdldCBhbiBpbWFnZSBmcm9tIHRoZSBpbWFnZSBzdHJ1Y3R1cmUKLSAqIEBwYXJhbSBuYW1lICBuYW1lIG9mIGltYWdlCi0gKiBAcGFyYW0gYXBwX25hbWUgIHRoZSBhcHBsaWNhdGlvbiBuYW1lIHdoZXJlIGJlbG9uZ3MgdGhpcyBpbWFnZQotICogQHBhcmFtIGtlcm5lbCAgaXMgdGhlIGltYWdlIGEga2VybmVsL21vZHVsZSBpbWFnZQotICogQHBhcmFtIHRpZCAgdGhyZWFkIGlkCi0gKiBAcGFyYW0gdGdpZCAgdGhyZWFkIGdyb3VwIGlkCi0gKgotICogR2V0IHRoZSBpbWFnZSBzcGVjaWZpZWQgYnkgdGhlIGZpbGUgbmFtZSBuYW1lIGZyb20gdGhlCi0gKiBpbWFnZSBzdHJ1Y3R1cmUuIElmIGl0IGlzIG5vdCBwcmVzZW50LCB0aGUgaW1hZ2UgaXMKLSAqIGFkZGVkIHRvIHRoZSBzdHJ1Y3R1cmUuIEluIGVpdGhlciBjYXNlLCB0aGUgaW1hZ2UgbnVtYmVyCi0gKiBpcyByZXR1cm5lZC4KLSAqLwotc3RydWN0IG9wZF9pbWFnZSAqIG9wZF9nZXRfaW1hZ2UoY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgY29uc3QgKiBhcHBfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXJuZWwsIHBpZF90IHRpZCwgcGlkX3QgdGdpZCk7Ci0KLS8qKgotICogb3BkX2dldF9ucl9pbWFnZXMgLSByZXR1cm4gbnVtYmVyIG9mIGltYWdlcwotICovCi1pbnQgb3BkX2dldF9ucl9pbWFnZXModm9pZCk7Ci0KLSNlbmRpZiAvKiBPUERfSU1BR0VfSCAqLwpkaWZmIC0tZ2l0IGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmMgYi9kYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEzMWFhNy4uMDAwMDAwMAotLS0gYS9kYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuYworKysgL2Rldi9udWxsCkBAIC0xLDQ2NCArMCwwIEBACi0vKioKLSAqIEBmaWxlIGRhZW1vbi9saWJsZWdhY3kvb3BkX2tlcm5lbC5jCi0gKiBEZWFsaW5nIHdpdGggdGhlIGtlcm5lbCBhbmQga2VybmVsIG1vZHVsZSBzYW1wbGVzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgIm9wZF9rZXJuZWwuaCIKLSNpbmNsdWRlICJvcGRfcHJvYy5oIgotI2luY2x1ZGUgIm9wZF9pbWFnZS5oIgotI2luY2x1ZGUgIm9wZF9tYXBwaW5nLmgiCi0jaW5jbHVkZSAib3BkX3ByaW50Zi5oIgotI2luY2x1ZGUgIm9wZF8yNF9zdGF0cy5oIgotI2luY2x1ZGUgIm9wcm9maWxlZC5oIgotCi0jaW5jbHVkZSAib3BfZmlsZWlvLmgiCi0jaW5jbHVkZSAib3BfY29uZmlnXzI0LmgiCi0jaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCi0KLSNpbmNsdWRlICJwX21vZHVsZS5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qIGtlcm5lbCBtb2R1bGUgKi8KLXN0cnVjdCBvcGRfbW9kdWxlIHsKLQljaGFyICogbmFtZTsKLQlzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2U7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG1vZHVsZV9saXN0OwotfTsKLQotc3RhdGljIHN0cnVjdCBvcGRfaW1hZ2UgKiBrZXJuZWxfaW1hZ2U7Ci0KLS8qIGtlcm5lbCBhbmQgbW9kdWxlIHN1cHBvcnQgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGtlcm5lbF9zdGFydDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGtlcm5lbF9lbmQ7Ci1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBvcGRfbW9kdWxlcyA9IHsgJm9wZF9tb2R1bGVzLCAmb3BkX21vZHVsZXMgfTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfbW9kdWxlcz0wOwotCi12b2lkIG9wZF9pbml0X2tlcm5lbF9pbWFnZSh2b2lkKQotewotCS8qIGZvciBubyB2bWxpbnV4ICovCi0JaWYgKCF2bWxpbnV4KQotCQl2bWxpbnV4ID0gIm5vLXZtbGludXgiOwotCWtlcm5lbF9pbWFnZSA9IG9wZF9nZXRfa2VybmVsX2ltYWdlKHZtbGludXgsIE5VTEwsIDAsIDApOwotCWtlcm5lbF9pbWFnZS0+cmVmX2NvdW50Kys7Ci19Ci0KLQotdm9pZCBvcGRfcGFyc2Vfa2VybmVsX3JhbmdlKGNoYXIgY29uc3QgKiBhcmcpCi17Ci0Jc3NjYW5mKGFyZywgIiVseCwlbHgiLCAma2VybmVsX3N0YXJ0LCAma2VybmVsX2VuZCk7Ci0KLQl2ZXJicHJpbnRmKHZtaXNjLCAiT1BEX1BBUlNFX0tFUk5FTF9SQU5HRToga2VybmVsX3N0YXJ0ID0gJWx4LCBrZXJuZWxfZW5kID0gJWx4XG4iLAotCQkgICBrZXJuZWxfc3RhcnQsIGtlcm5lbF9lbmQpOwotCi0JaWYgKCFrZXJuZWxfc3RhcnQgJiYgIWtlcm5lbF9lbmQpIHsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkiV2FybmluZzogbWlzLXBhcnNlZCBrZXJuZWwgcmFuZ2U6ICVseC0lbHhcbiIsCi0JCQlrZXJuZWxfc3RhcnQsIGtlcm5lbF9lbmQpOwotCQlmcHJpbnRmKHN0ZGVyciwgImtlcm5lbCBwcm9maWxlcyB3aWxsIGJlIHdyb25nLlxuIik7Ci0JfQotfQotCi0KLS8qKgotICogb3BkX2NyZWF0ZV9tb2R1bGUgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhIG1vZHVsZSBkZXNjcmlwdGlvbgotICogQHBhcmFtIG5hbWUgbW9kdWxlIG5hbWUKLSAqIEBwYXJhbSBzdGFydCBzdGFydCBhZGRyZXNzCi0gKiBAcGFyYW0gZW5kIGVuZCBhZGRyZXNzCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgb3BkX21vZHVsZSAqCi1vcGRfY3JlYXRlX21vZHVsZShjaGFyICogbmFtZSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0Jc3RydWN0IG9wZF9tb2R1bGUgKiBtb2R1bGUgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BkX21vZHVsZSkpOwotCi0JbW9kdWxlLT5uYW1lID0geHN0cmR1cChuYW1lKTsKLQltb2R1bGUtPmltYWdlID0gTlVMTDsKLQltb2R1bGUtPnN0YXJ0ID0gc3RhcnQ7Ci0JbW9kdWxlLT5lbmQgPSBlbmQ7Ci0JbGlzdF9hZGQoJm1vZHVsZS0+bW9kdWxlX2xpc3QsICZvcGRfbW9kdWxlcyk7Ci0KLQlyZXR1cm4gbW9kdWxlOwotfQotCi0KLS8qKgotICogb3BkX2ZpbmRfbW9kdWxlX2J5X25hbWUgLSBmaW5kIGEgbW9kdWxlIGJ5IG5hbWUsIGNjcmVhdGluZyBhIG5ldyBvbmNlIGlmCi0gKiBzZWFyY2ggZmFpbAotICogQHBhcmFtIG5hbWUgbW9kdWxlIG5hbWUKLSAqLwotc3RhdGljIHN0cnVjdCBvcGRfbW9kdWxlICogb3BkX2ZpbmRfbW9kdWxlX2J5X25hbWUoY2hhciAqIG5hbWUpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKLQlzdHJ1Y3Qgb3BkX21vZHVsZSAqIG1vZHVsZTsKLQotCWxpc3RfZm9yX2VhY2gocG9zLCAmb3BkX21vZHVsZXMpIHsKLQkJbW9kdWxlID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcGRfbW9kdWxlLCBtb2R1bGVfbGlzdCk7Ci0JCWlmICghc3RyY21wKG5hbWUsIG1vZHVsZS0+bmFtZSkpCi0JCQlyZXR1cm4gbW9kdWxlOwotCX0KLQotCXJldHVybiBvcGRfY3JlYXRlX21vZHVsZShuYW1lLCAwLCAwKTsKLX0KLQotCi12b2lkIG9wZF9jbGVhcl9tb2R1bGVfaW5mbyh2b2lkKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIHBvczI7Ci0Jc3RydWN0IG9wZF9tb2R1bGUgKiBtb2R1bGU7Ci0KLQl2ZXJicHJpbnRmKHZtb2R1bGUsICJSZW1vdmluZyBtb2R1bGUgbGlzdFxuIik7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcG9zMiwgJm9wZF9tb2R1bGVzKSB7Ci0JCW1vZHVsZSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkX21vZHVsZSwgbW9kdWxlX2xpc3QpOwotCQlmcmVlKG1vZHVsZS0+bmFtZSk7Ci0JCWZyZWUobW9kdWxlKTsKLQl9Ci0KLQlsaXN0X2luaXQoJm9wZF9tb2R1bGVzKTsKLQotCW9wZF9jbGVhcl9rZXJuZWxfbWFwcGluZygpOwotfQotCi0KLS8qKgotICogb3BkX2dldF9tb2R1bGVfaW5mbyAtIHBhcnNlIG1hcHBpbmcgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzCi0gKgotICogUGFyc2UgdGhlIGZpbGUgL3Byb2Mva3N5bXMgdG8gcmVhZCBpbiBtYXBwaW5nIGluZm9ybWF0aW9uIGZvcgotICogYWxsIGtlcm5lbCBtb2R1bGVzLiBUaGUgbW9kdXRpbHMgcGFja2FnZSBhZGRzIHNwZWNpYWwgc3ltYm9scwotICogdG8gdGhpcyBmaWxlIHdoaWNoIGFsbG93cyBkZXRlcm1pbmF0aW9uIG9mIHRoZSBtb2R1bGUgaW1hZ2UKLSAqIGFuZCBtYXBwaW5nIGFkZHJlc3NlcyBvZiB0aGUgZm9ybSA6Ci0gKgotICogX19pbnNtb2RfbW9kdWxlbmFtZV9Pb2JqZWN0ZmlsZV9NbXRpbWVfVnZlcnNpb24KLSAqIF9faW5zbW9kX21vZHVsZW5hbWVfU3NlY3Rpb25uYW1lX0xsZW5ndGgKLSAqCi0gKiBDdXJyZW50bHkgdGhlIGltYWdlIGZpbGUgIm9iamVjdGZpbGUiIGlzIHN0b3JlZCwgYW5kIGRldGFpbHMgb2YKLSAqICIudGV4dCIgc2VjdGlvbnMuCi0gKgotICogVGhlcmUgaXMgbm8gcXVlcnlfbW9kdWxlIEFQSSB0aGF0IGFsbG93IHRvIGdldCBkaXJlY3RseSB0aGUgcGF0aG5hbWUKLSAqIG9mIGEgbW9kdWxlIHNvIHdlIG5lZWQgdG8gcGFyc2UgYWxsIHRoZSAvcHJvYy9rc3ltcy4KLSAqLwotc3RhdGljIHZvaWQgb3BkX2dldF9tb2R1bGVfaW5mbyh2b2lkKQotewotCWNoYXIgKiBsaW5lOwotCWNoYXIgKiBjcCwgKiBjcDIsICogY3AzOwotCUZJTEUgKiBmcDsKLQlzdHJ1Y3Qgb3BkX21vZHVsZSAqIG1vZDsKLQljaGFyICogbW9kbmFtZTsKLQljaGFyICogZmlsZW5hbWU7Ci0KLQlucl9tb2R1bGVzPTA7Ci0KLQlmcCA9IG9wX3RyeV9vcGVuX2ZpbGUoIi9wcm9jL2tzeW1zIiwgInIiKTsKLQotCWlmICghZnApIHsKLQkJcHJpbnRmKCJvcHJvZmlsZWQ6IC9wcm9jL2tzeW1zIG5vdCByZWFkYWJsZSwgY2FuJ3QgcHJvY2VzcyBtb2R1bGUgc2FtcGxlcy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JdmVyYnByaW50Zih2bW9kdWxlLCAiUmVhZCBtb2R1bGUgaW5mby5cbiIpOwotCi0Jd2hpbGUgKDEpIHsKLQkJbGluZSA9IG9wX2dldF9saW5lKGZwKTsKLQotCQlpZiAoIWxpbmUpCi0JCQlicmVhazsKLQotCQlpZiAoIXN0cmNtcCgiIiwgbGluZSkpIHsKLQkJCWZyZWUobGluZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChzdHJsZW4obGluZSkgPCA5KSB7Ci0JCQlwcmludGYoIm9wcm9maWxlZDogY29ycnVwdCAvcHJvYy9rc3ltcyBsaW5lIFwiJXNcIlxuIiwgbGluZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChzdHJuY21wKCJfX2luc21vZF8iLCBsaW5lICsgOSwgOSkpIHsKLQkJCWZyZWUobGluZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWNwID0gbGluZSArIDE4OwotCQljcDIgPSBjcDsKLQkJd2hpbGUgKCgqY3AyKSAmJiAhIXN0cm5jbXAoIl9TIiwgY3AyKzEsIDIpICYmICEhc3RybmNtcCgiX08iLCBjcDIrMSwgMikpCi0JCQljcDIrKzsKLQotCQlpZiAoISpjcDIpIHsKLQkJCXByaW50Zigib3Byb2ZpbGVkOiBjb3JydXB0IC9wcm9jL2tzeW1zIGxpbmUgXCIlc1wiXG4iLCBsaW5lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY3AyKys7Ci0KLQkJbW9kbmFtZSA9IHhtYWxsb2MoKHNpemVfdCkoKGNwMi1jcCkgKyAxKSk7Ci0JCXN0cm5jcHkobW9kbmFtZSwgY3AsIChzaXplX3QpKChjcDItY3ApKSk7Ci0JCW1vZG5hbWVbY3AyLWNwXSA9ICdcMCc7Ci0KLQkJbW9kID0gb3BkX2ZpbmRfbW9kdWxlX2J5X25hbWUobW9kbmFtZSk7Ci0KLQkJZnJlZShtb2RuYW1lKTsKLQotCQlzd2l0Y2ggKCooKytjcDIpKSB7Ci0JCQljYXNlICdPJzoKLQkJCQkvKiBnZXQgZmlsZW5hbWUgKi8KLQkJCQljcDIrKzsKLQkJCQljcDMgPSBjcDI7Ci0KLQkJCQl3aGlsZSAoKCpjcDMpICYmICEhc3RybmNtcCgiX00iLCBjcDMrMSwgMikpCi0JCQkJCWNwMysrOwotCi0JCQkJaWYgKCEqY3AzKSB7Ci0JCQkJCWZyZWUobGluZSk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWNwMysrOwotCQkJCWZpbGVuYW1lID0geG1hbGxvYygoc2l6ZV90KShjcDMgLSBjcDIgKyAxKSk7Ci0JCQkJc3RybmNweShmaWxlbmFtZSwgY3AyLCAoc2l6ZV90KShjcDMgLSBjcDIpKTsKLQkJCQlmaWxlbmFtZVtjcDMtY3AyXSA9ICdcMCc7Ci0KLQkJCQltb2QtPmltYWdlID0gb3BkX2dldF9rZXJuZWxfaW1hZ2UoZmlsZW5hbWUsIE5VTEwsIDAsIDApOwotCQkJCW1vZC0+aW1hZ2UtPnJlZl9jb3VudCsrOwotCQkJCWZyZWUoZmlsZW5hbWUpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlICdTJzoKLQkJCQkvKiBnZXQgZXh0ZW50IG9mIC50ZXh0IHNlY3Rpb24gKi8KLQkJCQljcDIrKzsKLQkJCQlpZiAoc3RybmNtcCgiLnRleHRfTCIsIGNwMiwgNykpIHsKLQkJCQkJZnJlZShsaW5lKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJY3AyICs9IDc7Ci0JCQkJc3NjYW5mKGxpbmUsICIlbHgiLCAmbW9kLT5zdGFydCk7Ci0JCQkJc3NjYW5mKGNwMiwgIiVsdSIsICZtb2QtPmVuZCk7Ci0JCQkJbW9kLT5lbmQgKz0gbW9kLT5zdGFydDsKLQkJCQlicmVhazsKLQkJfQotCi0JCWZyZWUobGluZSk7Ci0JfQotCi0JaWYgKGxpbmUpCi0JCWZyZWUobGluZSk7Ci0Jb3BfY2xvc2VfZmlsZShmcCk7Ci19Ci0gCi0KLS8qKgotICogb3BkX2Ryb3BfbW9kdWxlX3NhbXBsZSAtIGRyb3AgYSBtb2R1bGUgc2FtcGxlIGVmZmljaWVudGx5Ci0gKiBAcGFyYW0gZWlwICBlaXAgb2Ygc2FtcGxlCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcmVjb3ZlciBmcm9tIGZhaWxpbmcgdG8gcHV0IGEgc2FtcGxlcyBldmVuCi0gKiBhZnRlciByZS1yZWFkaW5nIC9wcm9jL2tzeW1zLiBJdCdzIGVpdGhlciBhIHJvZ3VlIHNhbXBsZSwgb3IgZnJvbSBhIG1vZHVsZQotICogdGhhdCBkaWRuJ3QgY3JlYXRlIHN5bWJvbHMgKGxpa2UgaW4gc29tZSBpbml0cmQgc2V0dXBzKS4gU28gd2UgY2hlY2sgd2l0aAotICogcXVlcnlfbW9kdWxlKCkgaWYgd2UgY2FuIHBsYWNlIGl0IGluIGEgc3ltYm9sLWxlc3MgbW9kdWxlLCBhbmQgaWYgc28gY3JlYXRlCi0gKiBhIG5lZ2F0aXZlIGVudHJ5IGZvciBpdCwgdG8gcXVpY2tseSBpZ25vcmUgZnV0dXJlIHNhbXBsZXMuCi0gKgotICogUHJvYmxlbSB1bmNvdmVyZWQgYnkgQm9iIE1vbnRnb21lcnkgPGJvYm1AZmMuaHAuY29tPgotICoKLSAqLwotc3RhdGljIHZvaWQgb3BkX2Ryb3BfbW9kdWxlX3NhbXBsZSh1bnNpZ25lZCBsb25nIGVpcCkKLXsKLQljaGFyICogbW9kdWxlX25hbWVzOwotCWNoYXIgKiBuYW1lOwotCXNpemVfdCBzaXplID0gMTAyNDsKLQlzaXplX3QgcmV0OwotCXVpbnQgbnJfbW9kczsKLQl1aW50IG1vZCA9IDA7Ci0KLQlvcGRfMjRfc3RhdHNbT1BEX0xPU1RfTU9EVUxFXSsrOwotCi0JbW9kdWxlX25hbWVzID0geG1hbGxvYyhzaXplKTsKLQl3aGlsZSAocXVlcnlfbW9kdWxlKE5VTEwsIFFNX01PRFVMRVMsIG1vZHVsZV9uYW1lcywgc2l6ZSwgJnJldCkpIHsKLQkJaWYgKGVycm5vICE9IEVOT1NQQykgewotCQkJdmVyYnByaW50Zih2bW9kdWxlLCAicXVlcnlfbW9kdWxlIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2l6ZSA9IHJldDsKLQkJbW9kdWxlX25hbWVzID0geHJlYWxsb2MobW9kdWxlX25hbWVzLCBzaXplKTsKLQl9Ci0KLQlucl9tb2RzID0gcmV0OwotCW5hbWUgPSBtb2R1bGVfbmFtZXM7Ci0KLQl3aGlsZSAobW9kIDwgbnJfbW9kcykgewotCQlzdHJ1Y3QgbW9kdWxlX2luZm8gaW5mbzsKLQkJaWYgKCFxdWVyeV9tb2R1bGUobmFtZSwgUU1fSU5GTywgJmluZm8sIHNpemVvZihpbmZvKSwgJnJldCkpIHsKLQkJCWlmIChlaXAgPj0gaW5mby5hZGRyICYmIGVpcCA8IGluZm8uYWRkciArIGluZm8uc2l6ZSkgewotCQkJCXZlcmJwcmludGYodm1vZHVsZSwgIlNhbXBsZSBmcm9tIHVucHJvZmlsYWJsZSBtb2R1bGUgJXNcbiIsIG5hbWUpOwotCQkJCW9wZF9jcmVhdGVfbW9kdWxlKG5hbWUsIGluZm8uYWRkciwgaW5mby5hZGRyICsgaW5mby5zaXplKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQltb2QrKzsKLQkJbmFtZSArPSBzdHJsZW4obmFtZSkgKyAxOwotCX0KLQotCWlmIChtb2R1bGVfbmFtZXMpCi0JCWZyZWUobW9kdWxlX25hbWVzKTsKLX0KLQotCi0vKioKLSAqIG9wZF9maW5kX21vZHVsZV9ieV9laXAgLSBmaW5kIGEgbW9kdWxlIGJ5IGl0cyBlaXAKLSAqIEBwYXJhbSBlaXAgIEVJUCB2YWx1ZQotICoKLSAqIGZpbmQgaW4gdGhlIG1vZHVsZXMgY29udGFpbmVyIHRoZSBtb2R1bGUgd2hpY2gKLSAqIGNvbnRhaW4gdGhpcyBlaXAgcmV0dXJuICVOVUxMIGlmIG5vdCBmb3VuZC4KLSAqIGNhbGxlciBtdXN0IGNoZWNrIHRoYW4gdGhlIG1vZHVsZSBpbWFnZSBpcyB2YWxpZAotICovCi1zdGF0aWMgc3RydWN0IG9wZF9tb2R1bGUgKiBvcGRfZmluZF9tb2R1bGVfYnlfZWlwKHVuc2lnbmVkIGxvbmcgZWlwKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7Ci0Jc3RydWN0IG9wZF9tb2R1bGUgKiBtb2R1bGU7Ci0KLQlsaXN0X2Zvcl9lYWNoKHBvcywgJm9wZF9tb2R1bGVzKSB7Ci0JCW1vZHVsZSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkX21vZHVsZSwgbW9kdWxlX2xpc3QpOwotCQlpZiAobW9kdWxlLT5zdGFydCA8PSBlaXAgJiYgbW9kdWxlLT5lbmQgPiBlaXApCi0JCQlyZXR1cm4gbW9kdWxlOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi0KLS8qKgotICogb3BkX2hhbmRsZV9tb2R1bGVfc2FtcGxlIC0gcHJvY2VzcyBhIG1vZHVsZSBzYW1wbGUKLSAqIEBwYXJhbSBlaXAgIEVJUCB2YWx1ZQotICogQHBhcmFtIGNvdW50ZXIgIGNvdW50ZXIgbnVtYmVyCi0gKgotICogUHJvY2VzcyBhIHNhbXBsZSBpbiBtb2R1bGUgYWRkcmVzcyBzcGFjZS4gVGhlIHNhbXBsZSBlaXAKLSAqIGlzIG1hdGNoZWQgYWdhaW5zdCBtb2R1bGUgaW5mb3JtYXRpb24uIElmIHRoZSBzZWFyY2ggd2FzCi0gKiBzdWNjZXNzZnVsLCB0aGUgc2FtcGxlIGlzIG91dHB1dCB0byB0aGUgcmVsZXZhbnQgZmlsZS4KLSAqCi0gKiBOb3RlIHRoYXQgZm9yIG1vZHVsZXMgYW5kIHRoZSBrZXJuZWwsIHRoZSBvZmZzZXQgd2lsbCBiZQotICogd3JvbmcgaW4gdGhlIGZpbGUsIGFzIGl0IGlzIG5vdCBhIGZpbGUgb2Zmc2V0LCBidXQgdGhlIG9mZnNldAotICogZnJvbSB0aGUgdGV4dCBzZWN0aW9uLiBUaGlzIGlzIGZpeGVkIHVwIGluIHBwLgotICoKLSAqIElmIHRoZSBzYW1wbGUgY291bGQgbm90IGJlIGxvY2F0ZWQgaW4gYSBtb2R1bGUsIGl0IGlzIHRyZWF0ZWQKLSAqIGFzIGEga2VybmVsIHNhbXBsZS4KLSAqLwotc3RhdGljIHZvaWQgb3BkX2hhbmRsZV9tb2R1bGVfc2FtcGxlKHVuc2lnbmVkIGxvbmcgZWlwLCB1MzIgY291bnRlcikKLXsKLQlzdHJ1Y3Qgb3BkX21vZHVsZSAqIG1vZHVsZTsKLQotCW1vZHVsZSA9IG9wZF9maW5kX21vZHVsZV9ieV9laXAoZWlwKTsKLQlpZiAoIW1vZHVsZSkgewotCQkvKiBub3QgZm91bmQgaW4ga25vd24gbW9kdWxlcywgcmUtcmVhZCBvdXIgaW5mbyBhbmQgcmV0cnkgKi8KLQkJb3BkX2NsZWFyX21vZHVsZV9pbmZvKCk7Ci0JCW9wZF9nZXRfbW9kdWxlX2luZm8oKTsKLQotCQltb2R1bGUgPSBvcGRfZmluZF9tb2R1bGVfYnlfZWlwKGVpcCk7Ci0JfQotCi0JaWYgKG1vZHVsZSkgewotCQlpZiAobW9kdWxlLT5pbWFnZSAhPSBOVUxMKSB7Ci0JCQlvcGRfMjRfc3RhdHNbT1BEX01PRFVMRV0rKzsKLQkJCW9wZF9wdXRfaW1hZ2Vfc2FtcGxlKG1vZHVsZS0+aW1hZ2UsCi0JCQkJCSAgICAgZWlwIC0gbW9kdWxlLT5zdGFydCwgY291bnRlcik7Ci0JCX0gZWxzZSB7Ci0JCQlvcGRfMjRfc3RhdHNbT1BEX0xPU1RfTU9EVUxFXSsrOwotCQkJdmVyYnByaW50Zih2bW9kdWxlLCAiTm8gaW1hZ2UgZm9yIHNhbXBsZWQgbW9kdWxlICVzXG4iLAotCQkJCSAgIG1vZHVsZS0+bmFtZSk7Ci0JCX0KLQl9IGVsc2UgewotCQlvcGRfZHJvcF9tb2R1bGVfc2FtcGxlKGVpcCk7Ci0JfQotfQotCi0KLXZvaWQgb3BkX2hhbmRsZV9rZXJuZWxfc2FtcGxlKHVuc2lnbmVkIGxvbmcgZWlwLCB1MzIgY291bnRlcikKLXsKLQlpZiAobm9fdm1saW51eCB8fCBlaXAgPCBrZXJuZWxfZW5kKSB7Ci0JCW9wZF8yNF9zdGF0c1tPUERfS0VSTkVMXSsrOwotCQlvcGRfcHV0X2ltYWdlX3NhbXBsZShrZXJuZWxfaW1hZ2UsIGVpcCAtIGtlcm5lbF9zdGFydCwgY291bnRlcik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBpbiBhIG1vZHVsZSAqLwotCW9wZF9oYW5kbGVfbW9kdWxlX3NhbXBsZShlaXAsIGNvdW50ZXIpOwotfQotIAotCi1pbnQgb3BkX2VpcF9pc19rZXJuZWwodW5zaWduZWQgbG9uZyBlaXApCi17Ci0jaWZkZWYgX19pMzg2Ci0jZGVmaW5lIEtFUk5FTF9PRkZTRVQgMHhDMDAwMDAwMAotCS8qCi0JICoga2VybmVsX3N0YXJ0ID09IDAgd2hlbiB1c2luZyAtLW5vLXZtbGludXguCi0JICogVGhpcyBpcyB3cm9uZywgd3JvbmcsIHdyb25nLCB3cm9uZywgYnV0IHdlIGRvbid0IGhhdmUgbXVjaAotCSAqIGNob2ljZS4gSXQgb2J2aW91c2x5IGJyZWFrcyBmb3IgSUE2NC4KLQkgKi8KLQlpZiAoIWtlcm5lbF9zdGFydCkKLQkJcmV0dXJuIGVpcCA+PSBLRVJORUxfT0ZGU0VUOwotI2VuZGlmCi0KLQlyZXR1cm4gZWlwID49IGtlcm5lbF9zdGFydDsKLX0KLQotCi12b2lkIG9wZF9hZGRfa2VybmVsX21hcChzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jLCB1bnNpZ25lZCBsb25nIGVpcCkKLXsKLQlzdHJ1Y3Qgb3BkX21vZHVsZSAqIG1vZHVsZTsKLQlzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2U7Ci0JY2hhciBjb25zdCAqIGFwcF9uYW1lOwotCi0JYXBwX25hbWUgPSBwcm9jLT5uYW1lOwotCWlmICghYXBwX25hbWUpIHsKLQkJdmVyYnByaW50Zih2bWlzYywgInVuLW5hbWVkIHByb2MgZm9yIHRpZCAlZFxuIiwgcHJvYy0+dGlkKTsKLQkJcmV0dXJuOwotCX0KLQotCi0JaWYgKGVpcCA8IGtlcm5lbF9lbmQpIHsKLQkJaW1hZ2UgPSBvcGRfZ2V0X2tlcm5lbF9pbWFnZSh2bWxpbnV4LCBhcHBfbmFtZSwgcHJvYy0+dGlkLCBwcm9jLT50Z2lkKTsKLQkJaWYgKCFpbWFnZSkgewotCQkJdmVyYnByaW50Zih2bWlzYywgIkNhbid0IGNyZWF0ZSBpbWFnZSBmb3IgJXMgJXNcbiIsIHZtbGludXgsIGFwcF9uYW1lKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCW9wZF9hZGRfbWFwcGluZyhwcm9jLCBpbWFnZSwga2VybmVsX3N0YXJ0LCAwLCBrZXJuZWxfZW5kKTsKLQkJcmV0dXJuOwotCX0KLQotCW1vZHVsZSA9IG9wZF9maW5kX21vZHVsZV9ieV9laXAoZWlwKTsKLQlpZiAoIW1vZHVsZSkgewotCQkvKiBub3QgZm91bmQgaW4ga25vd24gbW9kdWxlcywgcmUtcmVhZCBvdXIgaW5mbyBhbmQgcmV0cnkgKi8KLQkJb3BkX2NsZWFyX21vZHVsZV9pbmZvKCk7Ci0JCW9wZF9nZXRfbW9kdWxlX2luZm8oKTsKLQotCQltb2R1bGUgPSBvcGRfZmluZF9tb2R1bGVfYnlfZWlwKGVpcCk7Ci0JfQotCi0JaWYgKG1vZHVsZSkgewotCQkvKiBtb2R1bGUtPm5hbWUgaXMgb25seSB0aGUgbW9kdWxlIG5hbWUgbm90IHRoZSBmdWxsIHBhdGggKi8KLQkJY2hhciBjb25zdCAqIG1vZHVsZV9uYW1lID0gMDsKLQkJaWYgKG1vZHVsZS0+aW1hZ2UpCi0JCQltb2R1bGVfbmFtZSA9IG1vZHVsZS0+aW1hZ2UtPm5hbWU7Ci0JCWlmICghbW9kdWxlX25hbWUpIHsKLQkJCXZlcmJwcmludGYodm1vZHVsZSwgInVuYWJsZSB0byBnZXQgcGF0aCBuYW1lIGZvciBtb2R1bGUgJXNcbiIsCi0JCQkgICAgICAgbW9kdWxlLT5uYW1lKTsKLQkJCW1vZHVsZV9uYW1lID0gbW9kdWxlLT5uYW1lOwotCQl9Ci0JCWltYWdlID0gb3BkX2dldF9rZXJuZWxfaW1hZ2UobW9kdWxlX25hbWUsIGFwcF9uYW1lLCBwcm9jLT50aWQsIHByb2MtPnRnaWQpOwotCQlpZiAoIWltYWdlKSB7Ci0JCQl2ZXJicHJpbnRmKHZtb2R1bGUsICJDYW4ndCBjcmVhdGUgaW1hZ2UgZm9yICVzICVzXG4iLAotCQkJICAgICAgIG1vZHVsZS0+bmFtZSwgYXBwX25hbWUpOwotCQkJcmV0dXJuOwotCQl9Ci0JCW9wZF9hZGRfbWFwcGluZyhwcm9jLCBpbWFnZSwgbW9kdWxlLT5zdGFydCwgMCwgbW9kdWxlLT5lbmQpOwotCX0gZWxzZSB7Ci0JCW9wZF9kcm9wX21vZHVsZV9zYW1wbGUoZWlwKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuaCBiL2RhZW1vbi9saWJsZWdhY3kvb3BkX2tlcm5lbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODU0YWUwLi4wMDAwMDAwCi0tLSBhL2RhZW1vbi9saWJsZWdhY3kvb3BkX2tlcm5lbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBkYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuaAotICogRGVhbGluZyB3aXRoIHRoZSBrZXJuZWwgYW5kIGtlcm5lbCBtb2R1bGUgc2FtcGxlcwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpZm5kZWYgT1BEX0tFUk5FTF9ICi0jZGVmaW5lIE9QRF9LRVJORUxfSAotCi0jaW5jbHVkZSAib3BfdHlwZXMuaCIKLQotc3RydWN0IG9wZF9wcm9jOwotCi0vKioKLSAqIG9wZF9pbml0X2tlcm5lbF9pbWFnZSAtIGluaXRpYWxpc2UgdGhlIGtlcm5lbCBpbWFnZQotICovCi12b2lkIG9wZF9pbml0X2tlcm5lbF9pbWFnZSh2b2lkKTsKLQotLyoqCi0gKiBvcGRfcGFyc2Vfa2VybmVsX3JhbmdlIC0gcGFyc2UgdGhlIGtlcm5lbCByYW5nZSB2YWx1ZXMKLSAqLwotdm9pZCBvcGRfcGFyc2Vfa2VybmVsX3JhbmdlKGNoYXIgY29uc3QgKiBhcmcpOwotCi0vKioKLSAqIG9wZF9jbGVhcl9tb2R1bGVfaW5mbyAtIGNsZWFyIGtlcm5lbCBtb2R1bGUgaW5mb3JtYXRpb24KLSAqCi0gKiBDbGVhciBhbmQgZnJlZSBhbGwga2VybmVsIG1vZHVsZSBpbmZvcm1hdGlvbiBhbmQgcmVzZXQKLSAqIHZhbHVlcy4KLSAqLwotdm9pZCBvcGRfY2xlYXJfbW9kdWxlX2luZm8odm9pZCk7Ci0KLS8qKgotICogb3BkX2hhbmRsZV9rZXJuZWxfc2FtcGxlIC0gcHJvY2VzcyBhIGtlcm5lbCBzYW1wbGUKLSAqIEBwYXJhbSBlaXAgIEVJUCB2YWx1ZSBvZiBzYW1wbGUKLSAqIEBwYXJhbSBjb3VudGVyICBjb3VudGVyIG51bWJlcgotICoKLSAqIEhhbmRsZSBhIHNhbXBsZSBpbiBrZXJuZWwgYWRkcmVzcyBzcGFjZSBvciBpbiBhIG1vZHVsZS4gVGhlIHNhbXBsZSBpcwotICogb3V0cHV0IHRvIHRoZSByZWxldmFudCBpbWFnZSBmaWxlLgotICovCi12b2lkIG9wZF9oYW5kbGVfa2VybmVsX3NhbXBsZSh1bnNpZ25lZCBsb25nIGVpcCwgdTMyIGNvdW50ZXIpOwotCi0vKioKLSAqIG9wZF9laXBfaXNfa2VybmVsIC0gaXMgdGhlIHNhbXBsZSBmcm9tIGtlcm5lbC9tb2R1bGUgc3BhY2UKLSAqIEBwYXJhbSBlaXAgIEVJUCB2YWx1ZQotICoKLSAqIFJldHVybnMgJTEgaWYgZWlwIGlzIGluIHRoZSBhZGRyZXNzIHNwYWNlIHN0YXJ0aW5nIGF0Ci0gKiBrZXJuZWxfc3RhcnQsICUwIG90aGVyd2lzZS4KLSAqLwotaW50IG9wZF9laXBfaXNfa2VybmVsKHVuc2lnbmVkIGxvbmcgZWlwKTsKLQotLyoqCi0gKiBvcGRfYWRkX2tlcm5lbF9tYXAgLSBhZGQgYSBtb2R1bGUgb3Iga2VybmVsIG1hcHMgdG8gYSBwcm9jIHN0cnVjdAotICoKLSAqIEBwYXJhbSBwcm9jIG93bmluZyBwcm9jIG9mIHRoZSBuZXcgbWFwcGluZwotICogQHBhcmFtIGVpcCBlaXAgaW5zaWRlIHRoZSBuZXcgbWFwcGluZwotICoKLSAqIFdlIGFzc3VtZSB0aGFuIGVpcCA+PSBrZXJuZWxfc3RhcnQKLSAqCi0gKi8KLXZvaWQgb3BkX2FkZF9rZXJuZWxfbWFwKHN0cnVjdCBvcGRfcHJvYyAqIHByb2MsIHVuc2lnbmVkIGxvbmcgZWlwKTsKLQotI2VuZGlmIC8qIE9QRF9LRVJORUxfSCAqLwpkaWZmIC0tZ2l0IGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfbWFwcGluZy5jIGIvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfbWFwcGluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTljNDc1Li4wMDAwMDAwCi0tLSBhL2RhZW1vbi9saWJsZWdhY3kvb3BkX21hcHBpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wZF9tYXBwaW5nLmMKLSAqIE1hbmFnZW1lbnQgb2YgcHJvY2VzcyBtYXBwaW5ncwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlICJvcGRfbWFwcGluZy5oIgotI2luY2x1ZGUgIm9wZF9wcm9jLmgiCi0jaW5jbHVkZSAib3BkX2ltYWdlLmgiCi0jaW5jbHVkZSAib3BkX3ByaW50Zi5oIgotCi0jaW5jbHVkZSAib3BfaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAib3BfY29uZmlnXzI0LmgiCi0jaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCi0KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIGhhc2ggbWFwIGRldmljZSBtbWFwICovCi1zdGF0aWMgc3RydWN0IG9wX2hhc2hfaW5kZXggKiBoYXNobWFwOwotLyogYWxyZWFkeSBzZWVuIG1hcHBpbmcgbmFtZSAqLwotc3RhdGljIGNoYXIgY29uc3QgKiBoYXNoX25hbWVbT1BfSEFTSF9NQVBfTlJdOwotCi0KLXZvaWQgb3BkX2NsZWFudXBfaGFzaF9uYW1lKHZvaWQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IE9QX0hBU0hfTUFQX05SOyArK2kpCi0JCWZyZWUoKGNoYXIgKiloYXNoX25hbWVbaV0pOwotCQotfQotCi0KLXZvaWQgb3BkX2luaXRfaGFzaF9tYXAodm9pZCkKLXsKLQlleHRlcm4gZmRfdCBoYXNobWFwZGV2ZmQ7Ci0KLQloYXNobWFwID0gbW1hcCgwLCBPUF9IQVNIX01BUF9TSVpFLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGhhc2htYXBkZXZmZCwgMCk7Ci0JaWYgKChsb25nKWhhc2htYXAgPT0gLTEpIHsKLQkJcGVycm9yKCJvcHJvZmlsZWQ6IGNvdWxkbid0IG1tYXAgaGFzaCBtYXAiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotfQotCi0KLXZvaWQgb3BkX2tpbGxfbWFwcyhzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MsICogcG9zMjsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZwcm9jLT5tYXBzKSB7Ci0JCXN0cnVjdCBvcGRfbWFwICogbWFwID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcGRfbWFwLCBuZXh0KTsKLQkJbGlzdF9kZWwocG9zKTsKLQkJb3BkX2RlbGV0ZV9pbWFnZShtYXAtPmltYWdlKTsKLQkJZnJlZShtYXApOwotCX0KLX0KLQotCi12b2lkIG9wZF9hZGRfbWFwcGluZyhzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jLCBzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UsCi0JCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlzdHJ1Y3Qgb3BkX21hcCAqIG1hcDsKLQotCXZlcmJwcmludGYodm1pc2MsICJBZGRpbmcgbWFwcGluZyBmb3IgcHJvY2VzcyAlZDogMHglLjhseC0weCUuOGx4LCBvZmYgMHglLjhseCwgXCIlc1wiXG4iLAotCQlwcm9jLT50aWQsIHN0YXJ0LCBlbmQsIG9mZnNldCwgaW1hZ2UtPm5hbWUpOwotCi0JbWFwID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BkX21hcCkpOwotCi0JLyogZmlyc3QgbWFwIGlzIHRoZSBwcmltYXJ5IGltYWdlICovCi0JaWYgKGxpc3RfZW1wdHkoJnByb2MtPm1hcHMpKSB7Ci0JCWlmIChwcm9jLT5uYW1lKQotCQkJZnJlZSgoY2hhciAqKXByb2MtPm5hbWUpOwotCQlwcm9jLT5uYW1lID0geHN0cmR1cChpbWFnZS0+bmFtZSk7Ci0JfQotCi0JaW1hZ2UtPnJlZl9jb3VudCsrOwotCi0JbWFwLT5pbWFnZSA9IGltYWdlOwotCW1hcC0+c3RhcnQgPSBzdGFydDsKLQltYXAtPm9mZnNldCA9IG9mZnNldDsKLQltYXAtPmVuZCA9IGVuZDsKLQlsaXN0X2FkZF90YWlsKCZtYXAtPm5leHQsICZwcm9jLT5tYXBzKTsKLX0KLQotCi0vKioKLSAqIGdldF9mcm9tX3Bvb2wgLSByZXRyaWV2ZSBzdHJpbmcgZnJvbSBoYXNoIG1hcCBwb29sCi0gKiBAcGFyYW0gaW5kIGluZGV4IGludG8gcG9vbAotICovCi1pbmxpbmUgc3RhdGljIGNoYXIgKiBnZXRfZnJvbV9wb29sKHVpbnQgaW5kKQotewotCXJldHVybiAoKGNoYXIgKikoaGFzaG1hcCArIE9QX0hBU0hfTUFQX05SKSArIGluZCk7Ci19Ci0KLQotLyoqCi0gKiBvcGdfZ2V0X2hhc2hfbmFtZSAtIGZpbmQgYSBtYXBwaW5nIG5hbWUgZnJvbSBhIGhhc2gKLSAqIEBwYXJhbSBoYXNoIGhhc2ggdmFsdWUgZm9yIHRoaXMgbmFtZQotICovCi1zdGF0aWMgY2hhciBjb25zdCAqIG9wZF9nZXRfaGFzaF9uYW1lKGludCBoYXNoKQotewotCWNoYXIgZmlsZVtQQVRIX01BWF07Ci0JY2hhciAqIGMgPSAmZmlsZVtQQVRIX01BWC0xXTsKLQlpbnQgb3JpZ2hhc2ggPSBoYXNoOwotCi0JaWYgKGhhc2hfbmFtZVtoYXNoXSkKLQkJcmV0dXJuIGhhc2hfbmFtZVtoYXNoXTsKLQotCSpjID0gJ1wwJzsKLQl3aGlsZSAoaGFzaCkgewotCQljaGFyICogbmFtZSA9IGdldF9mcm9tX3Bvb2woaGFzaG1hcFtoYXNoXS5uYW1lKTsKLQotCQlpZiAoc3RybGVuKG5hbWUpICsgMSArIHN0cmxlbihjKSA+PSBQQVRIX01BWCkgewotCQkJZnByaW50ZihzdGRlcnIsICJTdHJpbmcgXCIlc1wiIHRvbyBsYXJnZS5cbiIsIGMpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0KLQkJYyAtPSBzdHJsZW4obmFtZSkgKyAxOwotCQkqYyA9ICcvJzsKLQkJc3RybmNweShjICsgMSwgbmFtZSwgc3RybGVuKG5hbWUpKTsKLQotCQkvKiBtb3ZlIG9udG8gcGFyZW50ICovCi0JCWhhc2ggPSBoYXNobWFwW2hhc2hdLnBhcmVudDsKLQl9Ci0KLQlyZXR1cm4gaGFzaF9uYW1lW29yaWdoYXNoXSA9IHhzdHJkdXAoYyk7Ci19Ci0KLQotdm9pZCBvcGRfaGFuZGxlX21hcHBpbmcoc3RydWN0IG9wX25vdGUgY29uc3QgKiBub3RlKQotewotCXN0cnVjdCBvcGRfcHJvYyAqIHByb2M7Ci0Jc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlOwotCWludCBoYXNoOwotCWNoYXIgY29uc3QgKiBuYW1lOwotCi0JcHJvYyA9IG9wZF9nZXRfcHJvYyhub3RlLT5waWQsIG5vdGUtPnRnaWQpOwotCi0JaWYgKCFwcm9jKSB7Ci0JCXZlcmJwcmludGYodm1pc2MsICJUb2xkIGFib3V0IG1hcHBpbmcgZm9yIG5vbi1leGlzdGVudCBwcm9jZXNzICV1LlxuIiwgbm90ZS0+cGlkKTsKLQkJcHJvYyA9IG9wZF9uZXdfcHJvYyhub3RlLT5waWQsIG5vdGUtPnRnaWQpOwotCX0KLQotCWhhc2ggPSBub3RlLT5oYXNoOwotCi0JaWYgKGhhc2ggPT0gLTEpIHsKLQkJLyogcG9zc2libHkgZGVsZXRlZCBmaWxlICovCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaGFzaCA8IDAgfHwgaGFzaCA+PSBPUF9IQVNIX01BUF9OUikgewotCQlmcHJpbnRmKHN0ZGVyciwgImhhc2ggdmFsdWUgJXUgb3V0IG9mIHJhbmdlLlxuIiwgaGFzaCk7Ci0JCXJldHVybjsKLQl9Ci0KLQluYW1lID0gb3BkX2dldF9oYXNoX25hbWUoaGFzaCk7Ci0JaW1hZ2UgPSBvcGRfZ2V0X2ltYWdlKG5hbWUsIHByb2MtPm5hbWUsIDAsIG5vdGUtPnBpZCwgbm90ZS0+dGdpZCk7Ci0KLQlvcGRfYWRkX21hcHBpbmcocHJvYywgaW1hZ2UsIG5vdGUtPmFkZHIsIG5vdGUtPm9mZnNldCwKLQkgICAgICAgICAgICAgICAgbm90ZS0+YWRkciArIG5vdGUtPmxlbik7Ci19CmRpZmYgLS1naXQgYS9kYWVtb24vbGlibGVnYWN5L29wZF9tYXBwaW5nLmggYi9kYWVtb24vbGlibGVnYWN5L29wZF9tYXBwaW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMGIwYzguLjAwMDAwMDAKLS0tIGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfbWFwcGluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BkX21hcHBpbmcuaAotICogTWFuYWdlbWVudCBvZiBwcm9jZXNzIG1hcHBpbmdzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUERfTUFQUElOR19ICi0jZGVmaW5lIE9QRF9NQVBQSU5HX0gKLQotI2luY2x1ZGUgIm9wX2xpc3QuaCIKLQotc3RydWN0IG9wZF9pbWFnZTsKLXN0cnVjdCBvcGRfcHJvYzsKLXN0cnVjdCBvcF9ub3RlOwotCi0vKioKLSAqIHJlcHJlc2VudCBhIG1tYXAnZWQgYXJlYSwgd2UgY3JlYXRlIHN1Y2ggYXJlYSBvbmx5IGZvciB2bWEgYXJlYSB3aXRoIGV4ZWMKLSAqIGFjY2VzcyByaWdodAotICovCi1zdHJ1Y3Qgb3BkX21hcCB7Ci0JLyoqIG5leHQgbWFwcGluZyBmb3IgdGhpcyBpbWFnZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsKLQkvKiogb3duaW5nIGltYWdlICovCi0Jc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlOwotCS8qKiBtYXBwaW5nIHN0YXJ0IHZtYSAqLwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JLyoqIG1hcHBpbmcgb2Zmc2V0ICovCi0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0JLyoqIG1hcHBpbmcgZW5kIHZtYSAqLwotCXVuc2lnbmVkIGxvbmcgZW5kOwotfTsKLQotLyoqCi0gKiBvcGRfaW5pdF9oYXNoX21hcCAtIGluaXRpYWxpc2UgdGhlIGhhc2htYXAKLSAqLwotdm9pZCBvcGRfaW5pdF9oYXNoX21hcCh2b2lkKTsKLQotLyoqCi0gKiBvcF9jbGVhbnVwX2hhc2hfbmFtZQotICoKLSAqIHJlbGVhc2UgcmVzb3VyY2Ugb3duZWQgYnkgaGFzaF9uYW1lIGFycmF5Ci0gKi8KLXZvaWQgb3BkX2NsZWFudXBfaGFzaF9uYW1lKHZvaWQpOwotCi0vKioKLSAqIG9wZF9oYW5kbGVfbWFwcGluZyAtIGRlYWwgd2l0aCBtYXBwaW5nIG5vdGlmaWNhdGlvbgotICogQHBhcmFtIG5vdGUgIG1hcHBpbmcgbm90aWZpY2F0aW9uCi0gKgotICogRGVhbCB3aXRoIG9uZSBub3RpZmljYXRpb24gdGhhdCBhIHByb2Nlc3MgaGFzIG1hcHBlZAotICogaW4gYSBuZXcgZXhlY3V0YWJsZSBmaWxlLiBUaGUgbWFwcGluZyBpbmZvcm1hdGlvbiBpcwotICogYWRkZWQgdG8gdGhlIHByb2Nlc3Mgc3RydWN0dXJlLgotICovCi12b2lkIG9wZF9oYW5kbGVfbWFwcGluZyhzdHJ1Y3Qgb3Bfbm90ZSBjb25zdCAqIG5vdGUpOwotCi0vKioKLSAqIG9wZF9wdXRfbWFwcGluZyAtIGFkZCBhIG1hcHBpbmcgdG8gYSBwcm9jZXNzCi0gKiBAcGFyYW0gcHJvYyAgcHJvY2VzcyB0byBhZGQgbWFwIHRvCi0gKiBAcGFyYW0gaW1hZ2UgIG1hcHBlZCBpbWFnZSBwb2ludGVyCi0gKiBAcGFyYW0gc3RhcnQgIHN0YXJ0IG9mIG1hcHBpbmcKLSAqIEBwYXJhbSBvZmZzZXQgIGZpbGUgb2Zmc2V0IG9mIG1hcHBpbmcKLSAqIEBwYXJhbSBlbmQgIGVuZCBvZiBtYXBwaW5nCi0gKgotICogQWRkIHRoZSBtYXBwaW5nIHNwZWNpZmllZCB0byB0aGUgcHJvY2VzcyBwcm9jIGdyb3dpbmcgdGhlIG1hcHMgYXJyYXkKLSAqIGlmIG5lY2Vzc2FyeS4KLSAqLwotdm9pZCBvcGRfYWRkX21hcHBpbmcoc3RydWN0IG9wZF9wcm9jICogcHJvYywgc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlLAotCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBlbmQpOwotCi0vKioKLSAqIG9wZF9raWxsX21hcHMgLSBkZWxldGUgbWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgYSBwcm9jZXNzCi0gKiBAcGFyYW0gcHJvYyAgcHJvY2VzcyB0byB3b3JrIG9uCi0gKgotICogRnJlZXMgc3RydWN0dXJlcyBob2xkaW5nIG1hcHBpbmcgaW5mb3JtYXRpb24KLSAqLwotdm9pZCBvcGRfa2lsbF9tYXBzKHN0cnVjdCBvcGRfcHJvYyAqIHByb2MpOwotCi0vKioKLSAqIG9wZF9pc19pbl9tYXAgLSBjaGVjayB3aGV0aGVyIGFuIEVJUCBpcyB3aXRoaW4gYSBtYXBwaW5nCi0gKiBAcGFyYW0gbWFwICBtYXAgdG8gY2hlY2sKLSAqIEBwYXJhbSBlaXAgIEVJUCB2YWx1ZQotICoKLSAqIFJldHVybiAlMSBpZiB0aGUgRUlQIHZhbHVlIEBlaXAgaXMgd2l0aGluIHRoZSBib3VuZGFyaWVzCi0gKiBvZiB0aGUgbWFwIEBtYXAsICUwIG90aGVyd2lzZS4KLSAqLwotaW5saW5lIHN0YXRpYyBpbnQgb3BkX2lzX2luX21hcChzdHJ1Y3Qgb3BkX21hcCAqIG1hcCwgdW5zaWduZWQgbG9uZyBlaXApCi17Ci0JcmV0dXJuIChlaXAgPj0gbWFwLT5zdGFydCAmJiBlaXAgPCBtYXAtPmVuZCk7Ci19Ci0KLQotLyoKLSAqIG9wZF9tYXBfb2Zmc2V0IC0gcmV0dXJuIG9mZnNldCBvZiBzYW1wbGUgYWdhaW5zdCBtYXAKLSAqIEBwYXJhbSBtYXAgIG1hcCB0byB1c2UKLSAqIEBwYXJhbSBlaXAgIEVJUCB2YWx1ZSB0byB1c2UKLSAqCi0gKiBSZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIEVJUCB2YWx1ZSBAZWlwIGludG8KLSAqIHRoZSBtYXAgQG1hcCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIGZpbGUgb2Zmc2V0Ci0gKiBmb3IgdGhlIHJlbGV2YW50IGJpbmFyeSBpbWFnZS4KLSAqLwotaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9wZF9tYXBfb2Zmc2V0KHN0cnVjdCBvcGRfbWFwICogbWFwLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGVpcCkKLXsKLQlyZXR1cm4gKGVpcCAtIG1hcC0+c3RhcnQpICsgbWFwLT5vZmZzZXQ7Ci19Ci0KLSNlbmRpZiAvKiBPUERfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9kYWVtb24vbGlibGVnYWN5L29wZF9wYXJzZV9wcm9jLmMgYi9kYWVtb24vbGlibGVnYWN5L29wZF9wYXJzZV9wcm9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMGY3YmUuLjAwMDAwMDAKLS0tIGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcGFyc2VfcHJvYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BkX3BhcnNlX3Byb2MuYwotICogUGFyc2luZyBvZiAvcHJvYy8jcGlkCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgotCi0jaW5jbHVkZSAib3BkX3BhcnNlX3Byb2MuaCIKLSNpbmNsdWRlICJvcGRfcHJvYy5oIgotI2luY2x1ZGUgIm9wZF9tYXBwaW5nLmgiCi0jaW5jbHVkZSAib3BkX2ltYWdlLmgiCi0jaW5jbHVkZSAib3BkX3ByaW50Zi5oIgotCi0jaW5jbHVkZSAib3BfZmlsZS5oIgotI2luY2x1ZGUgIm9wX2ZpbGVpby5oIgotCi0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLyoqCi0gKiBvcGRfYWRkX2FzY2lpX21hcCAtIHBhcnNlIGFuIEFTQ0lJIG1hcCBzdHJpbmcgZm9yIGEgcHJvY2VzcwotICogQHBhcmFtIHByb2MgIHByb2Nlc3MgdG8gYWRkIG1hcCB0bwotICogQHBhcmFtIGxpbmUgIDAtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcKLSAqIEBwYXJhbSBpbWFnZV9uYW1lIHRoZSBiaW5hcnkgYXBwbGljYXRpb24gbmFtZQotICoKLSAqIEF0dGVtcHQgdG8gcGFyc2UgdGhlIHN0cmluZyBAbGluZSBmb3IgbWFwIGluZm9ybWF0aW9uCi0gKiBhbmQgYWRkIHRoZSBpbmZvIHRvIHRoZSBwcm9jZXNzIEBwcm9jLiBSZXR1cm5zICUxCi0gKiBvbiBzdWNjZXNzLCAlMCBvdGhlcndpc2UuCi0gKgotICogVGhlIHBhcnNpbmcgaXMgYmFzZWQgb24gTGludXggMi40IGZvcm1hdCwgd2hpY2ggbG9va3MgbGlrZSB0aGlzIDoKLSAqCi0gKiA0MDAxZTAwMC00MDBmYzAwMCByLXhwIDAwMDAwMDAwIDAzOjA0IDMxMDExICAgICAgL2xpYi9saWJjLTIuMS4yLnNvCi0gKi8KLS8qIEZJWE1FOiBoYW5kbGUgKGRlbGV0ZWQpICovCi1zdGF0aWMgaW50IG9wZF9hZGRfYXNjaWlfbWFwKHN0cnVjdCBvcGRfcHJvYyAqIHByb2MsIGNoYXIgY29uc3QgKiBsaW5lLAotCQkJICAgICBjaGFyICogY29uc3QgaW1hZ2VfbmFtZSkKLXsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RhcnQsIGVuZDsKLQlzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2U7Ci0JY2hhciBjb25zdCAqIGNwID0gbGluZTsKLQotCS8qIHNraXAgdG8gcHJvdGVjdGlvbiBmaWVsZCAqLwotCXdoaWxlICgqY3AgJiYgKmNwICE9ICcgJykKLQkJY3ArKzsKLQotCS8qIGhhbmRsZSByd3ggKi8KLQlpZiAoISpjcCB8fCAoISooKytjcCkpIHx8ICghKigrK2NwKSkgfHwgKCooKytjcCkgIT0gJ3gnKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBnZXQgc3RhcnQgYW5kIGVuZCBmcm9tICI0MDAwMDAwMC00MDAxZjAwMCIgKi8KLQlpZiAoc3NjYW5mKGxpbmUsICIlbHgtJWx4IiwgJnN0YXJ0LCAmZW5kKSAhPSAyKQotCQlyZXR1cm4gMDsKLQotCS8qICJwICIgKi8KLQljcCArPSAyOwotCi0JLyogcmVhZCBvZmZzZXQgKi8KLQlpZiAoc3NjYW5mKGNwLCAiJWx4IiwgJm9mZnNldCkgIT0gMSkKLQkJcmV0dXJuIDA7Ci0KLQl3aGlsZSAoKmNwICYmICpjcCAhPSAnLycpCi0JCWNwKys7Ci0KLQlpZiAoISpjcCkKLQkJcmV0dXJuIDA7Ci0KLQlpbWFnZSA9IG9wZF9nZXRfaW1hZ2UoY3AsIGltYWdlX25hbWUsIDAsIHByb2MtPnRpZCwgcHJvYy0+dGdpZCk7Ci0JaWYgKCFpbWFnZSkKLQkJcmV0dXJuIDA7Ci0KLQlvcGRfYWRkX21hcHBpbmcocHJvYywgaW1hZ2UsIHN0YXJ0LCBvZmZzZXQsIGVuZCk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi0vKioKLSAqIG9wZF9nZXRfYXNjaWlfbWFwcyAtIHJlYWQgYWxsIG1hcHMgZm9yIGEgcHJvY2VzcwotICogQHBhcmFtIHByb2MgIHByb2Nlc3MgdG8gd29yayBvbgotICoKLSAqIFJlYWQgdGhlIC9wcm9jLzxwaWQ+L21hcHMgZmlsZSBhbmQgYWRkIGFsbAotICogbWFwcGluZyBpbmZvcm1hdGlvbiBmb3VuZCB0byB0aGUgcHJvY2VzcyBAcHJvYy4KLSAqLwotc3RhdGljIHZvaWQgb3BkX2dldF9hc2NpaV9tYXBzKHN0cnVjdCBvcGRfcHJvYyAqIHByb2MpCi17Ci0JRklMRSAqIGZwOwotCWNoYXIgbWFwc2ZpbGVbMjBdID0gIi9wcm9jLyI7Ci0JY2hhciAqIGxpbmU7Ci0JY2hhciBleGVfbmFtZVsyMF07Ci0JY2hhciAqIGltYWdlX25hbWU7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKLQotCXNucHJpbnRmKG1hcHNmaWxlICsgNiwgNiwgIiVodSIsIHByb2MtPnRpZCk7Ci0KLQlzdHJjcHkoZXhlX25hbWUsIG1hcHNmaWxlKTsKLQotCXN0cmNhdChtYXBzZmlsZSwgIi9tYXBzIik7Ci0KLQlmcCA9IG9wX3RyeV9vcGVuX2ZpbGUobWFwc2ZpbGUsICJyIik7Ci0JaWYgKCFmcCkKLQkJcmV0dXJuOwotCi0Jc3RyY2F0KGV4ZV9uYW1lLCAiL2V4ZSIpOwotCWltYWdlX25hbWUgPSB4bWFsbG9jKFBBVEhfTUFYKTsKLQlpZiAoIXJlYWxwYXRoKGV4ZV9uYW1lLCBpbWFnZV9uYW1lKSkKLQkJLyoga2VybmVsIHRocmVhZCBhcmUgaW52YWxpZCBzeW1saW5rICovCi0JCXN0cmNweShpbWFnZV9uYW1lLCBleGVfbmFtZSk7Ci0KLQl2ZXJicHJpbnRmKHZtaXNjLCAiaW1hZ2UgbmFtZSAlcyBmb3IgcGlkICV1ICV1XG4iLCBpbWFnZV9uYW1lLCBwcm9jLT50aWQsIHByb2MtPnRnaWQpOwotCi0Jd2hpbGUgKDEpIHsKLQkJbGluZSA9IG9wX2dldF9saW5lKGZwKTsKLQkJaWYgKCFsaW5lKQotCQkJYnJlYWs7Ci0KLQkJb3BkX2FkZF9hc2NpaV9tYXAocHJvYywgbGluZSwgaW1hZ2VfbmFtZSk7Ci0JCWZyZWUobGluZSk7Ci0JfQotCi0JLyogZGFlIGFzc3VtZSB0aGFuIHRoZSBmaXJzdCBtYXAgYWRkZWQgaXMgdGhlIHByaW1hcnkgaW1hZ2UgbmFtZSwgdGhpcwotCSAqIGlzIGFsd2F5cyB0cnVlIGF0IGV4ZWMgdGltZSBidXQgbm90IGZvciAvcHJvYy9waWQgc28gcmVzdG9yZQotCSAqIHRoZSBwcmltYXJ5IGltYWdlIG5hbWUKLQkgKi8KLQlsaXN0X2Zvcl9lYWNoKHBvcywgJnByb2MtPm1hcHMpIHsKLQkJc3RydWN0IG9wZF9tYXAgKiBtYXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9tYXAsIG5leHQpOwotCQlpZiAoIXN0cmNtcChtYXAtPmltYWdlLT5uYW1lLCBpbWFnZV9uYW1lKSkgewotCQkJaWYgKHBvcyAhPSBwcm9jLT5tYXBzLm5leHQpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgInN3YXAgbWFwIGZvciBpbWFnZSAlcyBmcm9tICVzIHRvICVzXG4iLCBpbWFnZV9uYW1lLCBwcm9jLT5uYW1lLCBtYXAtPmltYWdlLT5uYW1lKTsKLQkJCQlmcmVlKChjaGFyICopcHJvYy0+bmFtZSk7Ci0JCQkJcHJvYy0+bmFtZSA9IHhzdHJkdXAobWFwLT5pbWFnZS0+bmFtZSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChsaXN0X2VtcHR5KCZwcm9jLT5tYXBzKSkgewotCQkvKiB3ZSBhbHdheXMgbmVlZCBhIHZhbGlkIHByb2MtPm1hcHNbMF0sIHdlIGFydGlmaWNpYWxseSBnaXZlCi0JCSAqIGEgbWFwIG9mIGxlbmd0aCB6ZXJvIHNvIG9uIG5vIHNhbXBsZXMgd2lsbCBuZXZlciBnbyB0byB0aGlzCi0JCSAqIG1hcC4gVGhpcyBpcyB1c2VkIG9ubHkgd2l0aCAtLXNlcGFyYXRlLXNhbXBsZXMgYW5kIGtlcm5lbAotCQkgKiB0aHJlYWQgd2hlbiBhZGRpbmcgdm1saW51eCBhbmQgbW9kdWxlIG1hcHMgdG8gcHJvYy0+bWFwc1tdCi0JCSAqLwotCQkvKiBGSVhNRTogdXNlIHRoZSBmaXJzdCBmaWVsZCBvZiAvcHJvYy9waWQvc3RhdHVzIGFzIHByb2MgbmFtZQotCQkgKiBmb3Igbm93IHdlIHVzZSAvcHJvYy8lcGlkL2V4ZSBhcyBuYW1lICovCi0JCXN0cnVjdCBvcGRfaW1hZ2UgKiBpbWFnZSA9IG9wZF9nZXRfaW1hZ2UoaW1hZ2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX25hbWUsIDAsIHByb2MtPnRpZCwgcHJvYy0+dGdpZCk7Ci0JCWlmIChpbWFnZSkgewotCQkJb3BkX2FkZF9tYXBwaW5nKHByb2MsIGltYWdlLCAwLCAwLCAwKTsKLQkJfQotCX0KLQotCWlmIChpbWFnZV9uYW1lKQotCQlmcmVlKGltYWdlX25hbWUpOwotCi0Jb3BfY2xvc2VfZmlsZShmcCk7Ci19Ci0KLQotc3RhdGljIHUzMiByZWFkX3RnaWQodTMyIHRpZCkKLXsKLQljaGFyIHN0YXR1c19maWxlWzMwXSA9ICIvcHJvYy8iOwotCWNoYXIgKiBsaW5lOwotCUZJTEUgKiBmcDsKLQl1MzIgdGdpZDsKLQotCXNucHJpbnRmKHN0YXR1c19maWxlICsgNiwgNiwgIiVodSIsIHRpZCk7Ci0KLQlzdHJjYXQoc3RhdHVzX2ZpbGUsICIvc3RhdHVzIik7Ci0KLQlmcCA9IG9wX3RyeV9vcGVuX2ZpbGUoc3RhdHVzX2ZpbGUsICJyIik7Ci0JaWYgKCFmcCkKLQkJcmV0dXJuIDA7Ci0KLQl3aGlsZSAoMSkgewotCQlsaW5lID0gb3BfZ2V0X2xpbmUoZnApOwotCQlpZiAoIWxpbmUpCi0JCQlicmVhazsKLQotCQlpZiAoc3NjYW5mKGxpbmUsICJUZ2lkOiAldSIsICZ0Z2lkKSA9PSAxKSB7Ci0JCQlmcmVlKGxpbmUpOwotCQkJb3BfY2xvc2VfZmlsZShmcCk7Ci0JCQlyZXR1cm4gdGdpZDsKLQkJfQotCQlmcmVlKGxpbmUpOwotCX0KLQotCW9wX2Nsb3NlX2ZpbGUoZnApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotdm9pZCBvcGRfZ2V0X2FzY2lpX3Byb2NzKHZvaWQpCi17Ci0JRElSICogZGlyOwotCXN0cnVjdCBkaXJlbnQgKiBkaXJlbnQ7Ci0Jc3RydWN0IG9wZF9wcm9jICogcHJvYzsKLQl1MzIgcGlkOwotCi0JaWYgKCEoZGlyID0gb3BlbmRpcigiL3Byb2MiKSkpIHsKLQkJcGVycm9yKCJvcHJvZmlsZWQ6IC9wcm9jIGRpcmVjdG9yeSBjb3VsZCBub3QgYmUgb3BlbmVkLiAiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCXdoaWxlICgoZGlyZW50ID0gcmVhZGRpcihkaXIpKSkgewotCQlpZiAoc3NjYW5mKGRpcmVudC0+ZF9uYW1lLCAiJXUiLCAmcGlkKSA9PSAxKSB7Ci0JCQl1MzIgdGdpZCA9IHJlYWRfdGdpZChwaWQpOwotCQkJdmVyYnByaW50Zih2bWlzYywgIkFTQ0lJIGFkZGVkICV1ICV1XG4iLCBwaWQsIHRnaWQpOwotCQkJcHJvYyA9IG9wZF9nZXRfcHJvYyhwaWQsIHRnaWQpOwotCQkJaWYgKCFwcm9jKQotCQkJCXByb2MgPSBvcGRfbmV3X3Byb2MocGlkLCB0Z2lkKTsKLQkJCW9wZF9nZXRfYXNjaWlfbWFwcyhwcm9jKTsKLQkJfQotCX0KLQotCWNsb3NlZGlyKGRpcik7Ci19CmRpZmYgLS1naXQgYS9kYWVtb24vbGlibGVnYWN5L29wZF9wYXJzZV9wcm9jLmggYi9kYWVtb24vbGlibGVnYWN5L29wZF9wYXJzZV9wcm9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMjRiZTQuLjAwMDAwMDAKLS0tIGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcGFyc2VfcHJvYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcGRfcGFyc2VfcHJvYy5oCi0gKiBQYXJzaW5nIG9mIC9wcm9jLyNwaWQKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaWZuZGVmIE9QRF9QQVJTRV9QUk9DX0gKLSNkZWZpbmUgT1BEX1BBUlNFX1BST0NfSAotCi0vKioKLSAqIG9wZF9nZXRfYXNjaWlfcHJvY3MgLSByZWFkIHByb2Nlc3MgYW5kIG1hcHBpbmcgaW5mb3JtYXRpb24gZnJvbSAvcHJvYwotICoKLSAqIFJlYWQgaW5mb3JtYXRpb24gb24gZWFjaCBwcm9jZXNzIGFuZCBpdHMgbWFwcGluZ3MgZnJvbSB0aGUgL3Byb2MKLSAqIGZpbGVzeXN0ZW0uCi0gKi8KLXZvaWQgb3BkX2dldF9hc2NpaV9wcm9jcyh2b2lkKTsKLQotI2VuZGlmIC8qIE9QRF9QQVJTRV9QUk9DX0ggKi8KZGlmZiAtLWdpdCBhL2RhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuYyBiL2RhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1YTVhNS4uMDAwMDAwMAotLS0gYS9kYWVtb24vbGlibGVnYWN5L29wZF9wcm9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzIgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcGRfcHJvYy5jCi0gKiBNYW5hZ2VtZW50IG9mIHByb2Nlc3NlcwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlICJvcF9od19jb25maWcuaCIKLSNpbmNsdWRlICJvcGRfcHJvYy5oIgotI2luY2x1ZGUgIm9wZF9pbWFnZS5oIgotI2luY2x1ZGUgIm9wZF9tYXBwaW5nLmgiCi0jaW5jbHVkZSAib3BkX3NhbXBsZV9maWxlcy5oIgotI2luY2x1ZGUgIm9wZF9rZXJuZWwuaCIKLSNpbmNsdWRlICJvcGRfMjRfc3RhdHMuaCIKLSNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCi0jaW5jbHVkZSAib3Byb2ZpbGVkLmgiCi0KLSNpbmNsdWRlICJvcF9pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIHNpemUgb2YgcHJvY2VzcyBoYXNoIHRhYmxlICovCi0jZGVmaW5lIE9QRF9NQVhfUFJPQ19IQVNIIDEwMjQKLQotZXh0ZXJuIGludCBjcHVfbnVtYmVyOwotCi0vKiBoYXNoIG9mIHByb2Nlc3MgbGlzdHMgKi8KLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG9wZF9wcm9jc1tPUERfTUFYX1BST0NfSEFTSF07Ci0KLS8qIHN0YXRpc3RpY3MgcHVycG9zZSAqLwotc3RhdGljIGludCBucl9wcm9jczsKLQotCi12b2lkIG9wZF9pbml0X3Byb2NzKHZvaWQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IE9QRF9NQVhfUFJPQ19IQVNIOyBpKyspCi0JCWxpc3RfaW5pdCgmb3BkX3Byb2NzW2ldKTsKLX0KLQotCi1pbnQgb3BkX2dldF9ucl9wcm9jcyh2b2lkKQotewotCXJldHVybiBucl9wcm9jczsKLX0KLQotCi0vKioKLSAqIHByb2NfaGFzaCAtIGhhc2ggcGlkIHZhbHVlCi0gKiBAcGFyYW0gdGlkICBwaWQgdmFsdWUgdG8gaGFzaAotICoKLSAqLwotaW5saW5lIHN0YXRpYyB1aW50IHByb2NfaGFzaChwaWRfdCB0aWQpCi17Ci0JLyogRklYTUU6IGhhc2ggdGdpZCB0b28hICovCi0JcmV0dXJuICgodGlkID4+IDQpIF4gKHRpZCkpICUgT1BEX01BWF9QUk9DX0hBU0g7Ci19Ci0KLQotc3RydWN0IG9wZF9wcm9jICogb3BkX25ld19wcm9jKHBpZF90IHRpZCwgcGlkX3QgdGdpZCkKLXsKLQlzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jOwotCi0JbnJfcHJvY3MrKzsKLQlwcm9jID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG9wZF9wcm9jKSk7Ci0JbGlzdF9pbml0KCZwcm9jLT5tYXBzKTsKLQlwcm9jLT5uYW1lID0gTlVMTDsKLQlwcm9jLT50aWQgPSB0aWQ7Ci0JcHJvYy0+dGdpZCA9IHRnaWQ7Ci0JcHJvYy0+ZGVhZCA9IDA7Ci0JcHJvYy0+YWNjZXNzZWQgPSAwOwotCWxpc3RfYWRkKCZwcm9jLT5uZXh0LCAmb3BkX3Byb2NzW3Byb2NfaGFzaCh0aWQpXSk7Ci0JcmV0dXJuIHByb2M7Ci19Ci0KLQotc3RydWN0IG9wZF9wcm9jICogb3BkX2dldF9wcm9jKHBpZF90IHRpZCwgcGlkX3QgdGdpZCkKLXsKLQlzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jOwotCXVpbnQgaGFzaCA9IHByb2NfaGFzaCh0aWQpOwotCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MsICpwb3MyOwotCi0Jb3BkXzI0X3N0YXRzW09QRF9QUk9DX1FVRVVFX0FDQ0VTU10rKzsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBwb3MyLCAmb3BkX3Byb2NzW2hhc2hdKSB7Ci0JCW9wZF8yNF9zdGF0c1tPUERfUFJPQ19RVUVVRV9ERVBUSF0rKzsKLQkJcHJvYyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkX3Byb2MsIG5leHQpOwotCQlpZiAodGlkID09IHByb2MtPnRpZCAmJiB0Z2lkID09IHByb2MtPnRnaWQpIHsKLQkJCS8qIExSVSB0byBoZWFkICovCi0JCQlsaXN0X2RlbCgmcHJvYy0+bmV4dCk7Ci0JCQlsaXN0X2FkZCgmcHJvYy0+bmV4dCwgJm9wZF9wcm9jc1toYXNoXSk7Ci0JCQlyZXR1cm4gcHJvYzsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi0KLS8qKgotICogdmVyYl9zaG93X3NhbXBsZSAtIHByaW50IHRoZSBzYW1wbGUgb3V0IHRvIHRoZSBsb2cKLSAqIEBwYXJhbSBvZmZzZXQgIHRoZSBvZmZzZXQgdmFsdWUKLSAqIEBwYXJhbSBtYXAgIG1hcCB0byBwcmludAotICovCi1pbmxpbmUgc3RhdGljIHZvaWQKLXZlcmJfc2hvd19zYW1wbGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBvcGRfbWFwICogbWFwKQotewotCXZlcmJwcmludGYodnNhbXBsZXMsICJET19QVVRfU0FNUExFIDogY2FsYyBvZmZzZXQgMHglLjhseCwgIgotCQkibWFwIHN0YXJ0IDB4JS44bHgsIGVuZCAweCUuOGx4LCBvZmZzZXQgMHglLjhseCwgbmFtZSBcIiVzXCJcbiIsCi0JCW9mZnNldCwgbWFwLT5zdGFydCwgbWFwLT5lbmQsIG1hcC0+b2Zmc2V0LCAKLQkJbWFwLT5pbWFnZS0+bmFtZSk7Ci19Ci0KLQotdm9pZCBvcGRfcHV0X2ltYWdlX3NhbXBsZShzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgY291bnRlcikKLXsKLQlzdHJ1Y3Qgb3BkXzI0X3NmaWxlICogc2ZpbGU7Ci0JaW50IGVycjsKLQotCWlmIChpbWFnZS0+aWdub3JlZCkKLQkJcmV0dXJuOwotCi0JaWYgKCFpbWFnZS0+c2ZpbGVzW2NwdV9udW1iZXJdKSB7Ci0JCWltYWdlLT5zZmlsZXNbY3B1X251bWJlcl0gPQotCQkJeGNhbGxvYyhPUF9NQVhfQ09VTlRFUlMsIHNpemVvZihzdHJ1Y3Qgb3BfMjRfc2ZpbGUgKikpOwotCX0KLQlzZmlsZSA9IGltYWdlLT5zZmlsZXNbY3B1X251bWJlcl1bY291bnRlcl07Ci0KLQlpZiAoIXNmaWxlIHx8ICFvZGJfb3Blbl9jb3VudCgmc2ZpbGUtPnNhbXBsZV9maWxlKSkgewotCQlpZiAob3BkX29wZW5fMjRfc2FtcGxlX2ZpbGUoaW1hZ2UsIGNvdW50ZXIsIGNwdV9udW1iZXIpKSB7Ci0JCQkvKiBvcGRfb3Blbl8yNF9zYW1wbGVfZmlsZSBvdXRwdXQgYW4gZXJyb3IgbWVzc2FnZSAqLwotCQkJb3BkXzI0X3N0YXRzW09QRF9MT1NUX1NBTVBMRUZJTEVdKys7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2ZpbGUgPSBpbWFnZS0+c2ZpbGVzW2NwdV9udW1iZXJdW2NvdW50ZXJdOwotCX0KLQotCWVyciA9IG9kYl9pbnNlcnQoJnNmaWxlLT5zYW1wbGVfZmlsZSwgb2Zmc2V0LCAxKTsKLQlpZiAoZXJyKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cmVycm9yKGVycikpOwotCQlhYm9ydCgpOwotCX0KLQotCW9wZF8yNF9zZmlsZV9scnUoc2ZpbGUpOwotfQotCi0KLS8qKgotICogb3BkX2xvb2t1cF9tYXBzIC0gbG9va3VwIGEgcHJvYyBtYXBwaW5ncyBmb3IgYSBzYW1wbGUKLSAqIEBwYXJhbSBwcm9jIHByb2MgdG8gbG9va3VwCi0gKiBAcGFyYW0gc2FtcGxlIHNhbXBsZSB0byBsb29rdXAKLSAqCi0gKiBpdGVyYXRlIHRocm91Z2ggdGhlIHByb2MgbWFwcyBzZWFyY2hpbmcgdGhlIG1hcHBpbmcgd2hpY2ggb3ducyBzYW1wbGUKLSAqIGlmIHN1Y2Vzc2Z1bCBzYW1wbGUgY291bnQgd2lsbCBiZSB1cGRhdGVkIGFuZCB3ZSByZXR1cm4gbm9uLXplcm8KLSAqLwotc3RhdGljIGludCBvcGRfbG9va3VwX21hcHMoc3RydWN0IG9wZF9wcm9jICogcHJvYywKLQkJCXN0cnVjdCBvcF9zYW1wbGUgY29uc3QgKiBzYW1wbGUpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKLQotCXByb2MtPmFjY2Vzc2VkID0gMTsKLQotCW9wZF8yNF9zdGF0c1tPUERfTUFQX0FSUkFZX0FDQ0VTU10rKzsKLQlsaXN0X2Zvcl9lYWNoKHBvcywgJnByb2MtPm1hcHMpIHsKLQkJc3RydWN0IG9wZF9tYXAgKiBtYXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9tYXAsIG5leHQpOwotCQlpZiAob3BkX2lzX2luX21hcChtYXAsIHNhbXBsZS0+ZWlwKSkgewotCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBvcGRfbWFwX29mZnNldChtYXAsIHNhbXBsZS0+ZWlwKTsKLQkJCWlmIChtYXAtPmltYWdlICE9IE5VTEwpIHsKLQkJCQl2ZXJiX3Nob3dfc2FtcGxlKG9mZnNldCwgbWFwKTsKLQkJCQlvcGRfcHV0X2ltYWdlX3NhbXBsZShtYXAtPmltYWdlLCBvZmZzZXQsIHNhbXBsZS0+Y291bnRlcik7Ci0JCQl9Ci0JCQlvcGRfMjRfc3RhdHNbT1BEX1BST0NFU1NdKys7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlvcGRfMjRfc3RhdHNbT1BEX01BUF9BUlJBWV9ERVBUSF0rKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi12b2lkIG9wZF9wdXRfc2FtcGxlKHN0cnVjdCBvcF9zYW1wbGUgY29uc3QgKiBzYW1wbGUpCi17Ci0Jc3RydWN0IG9wZF9wcm9jICogcHJvYzsKLQlpbnQgaW5fa2VybmVsX2VpcCA9IG9wZF9laXBfaXNfa2VybmVsKHNhbXBsZS0+ZWlwKTsKLQotCW9wZF8yNF9zdGF0c1tPUERfU0FNUExFU10rKzsKLQotCXZlcmJwcmludGYodnNhbXBsZXMsICJET19QVVRfU0FNUExFOiBjJWQsIEVJUCAweCUuOGx4LCB0Z2lkICUuNmQgcGlkICUuNmRcbiIsCi0JCXNhbXBsZS0+Y291bnRlciwgc2FtcGxlLT5laXAsIHNhbXBsZS0+dGdpZCwgc2FtcGxlLT5waWQpOwotCi0JaWYgKCFzZXBhcmF0ZV9rZXJuZWwgJiYgaW5fa2VybmVsX2VpcCkgewotCQlvcGRfaGFuZGxlX2tlcm5lbF9zYW1wbGUoc2FtcGxlLT5laXAsIHNhbXBsZS0+Y291bnRlcik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIShwcm9jID0gb3BkX2dldF9wcm9jKHNhbXBsZS0+cGlkLCBzYW1wbGUtPnRnaWQpKSkgewotCQlpZiAoaW5fa2VybmVsX2VpcCB8fCBub192bWxpbnV4KSB7Ci0JCQkvKiBpZGxlIHRhc2sgZ2V0IGEgMCBwaWQgYW5kIGlzIGhpZGRlbiB3ZSBjYW4gbmV2ZXIgZ2V0Ci0JCQkgKiBhIHByb2Mgc28gb24gd2UgZmFsbCBiYWNrIHRvIHB1dCBzYW1wbGUgaW4gdm1saW51eAotCQkJICogb3IgbW9kdWxlIHNhbXBsZXMgZmlsZXMuIEhlcmUgd2Ugd2lsbCBjYXRjaCBhbHNvCi0JCQkgKiBzYW1wbGUgZm9yIG5ld2x5IGNyZWF0ZWQga2VybmVsIHRocmVhZCwgY3VycmVudGx5IAotCQkJICogd2UgY2FuIGhhbmRsZSBwcm9wZXJseSBvbmx5IGtlbmVsIHRocmVhZCBjcmVhdGVkCi0JCQkgKiBhdCBkYWVtb24gc3RhcnR1cCB0aW1lICovCi0JCQlvcGRfaGFuZGxlX2tlcm5lbF9zYW1wbGUoc2FtcGxlLT5laXAsIHNhbXBsZS0+Y291bnRlcik7Ci0JCX0gZWxzZSB7Ci0JCQl2ZXJicHJpbnRmKHZtaXNjLCAiTm8gcHJvYyBpbmZvIGZvciB0Z2lkICUuNmQgcGlkICUuNmQuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGUtPnRnaWQsIHNhbXBsZS0+cGlkKTsKLQkJCW9wZF8yNF9zdGF0c1tPUERfTE9TVF9QUk9DRVNTXSsrOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAob3BkX2xvb2t1cF9tYXBzKHByb2MsIHNhbXBsZSkpCi0JCXJldHVybjsKLQotCWlmIChpbl9rZXJuZWxfZWlwKSB7Ci0JCW9wZF9hZGRfa2VybmVsX21hcChwcm9jLCBzYW1wbGUtPmVpcCk7Ci0JCWlmIChvcGRfbG9va3VwX21hcHMocHJvYywgc2FtcGxlKSkKLQkJCXJldHVybjsKLQl9Ci0KLQkvKiBjb3VsZG4ndCBsb2NhdGUgaXQgKi8KLQl2ZXJicHJpbnRmKHZzYW1wbGVzLCAiQ291bGRuJ3QgZmluZCBtYXAgZm9yIHBpZCAlLjZkLCBFSVAgMHglLjhseC5cbiIsCi0JCSAgIHNhbXBsZS0+cGlkLCBzYW1wbGUtPmVpcCk7Ci0Jb3BkXzI0X3N0YXRzW09QRF9MT1NUX01BUF9QUk9DRVNTXSsrOwotfQotCi0KLXZvaWQgb3BkX2hhbmRsZV9mb3JrKHN0cnVjdCBvcF9ub3RlIGNvbnN0ICogbm90ZSkKLXsKLQlzdHJ1Y3Qgb3BkX3Byb2MgKiBvbGQ7Ci0Jc3RydWN0IG9wZF9wcm9jICogcHJvYzsKLQlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOwotCi0JdmVyYnByaW50Zih2bWlzYywgIkRPX0ZPUks6IGZyb20gJWQsICVkIHRvICVsZCwgJWxkXG4iLCBub3RlLT5waWQsIG5vdGUtPnRnaWQsCi0JICAgICAgICAgICBub3RlLT5hZGRyLCBub3RlLT5sZW4pOwotCi0Jb2xkID0gb3BkX2dldF9wcm9jKG5vdGUtPnBpZCwgbm90ZS0+dGdpZCk7Ci0KLQkvKiB3ZSBjYW4gcXVpdGUgZWFzaWx5IGdldCBhIGZvcmsoKSBhZnRlciB0aGUgZXhlY3ZlKCkgYmVjYXVzZSB0aGUKLQkgKiBub3RpZmljYXRpb25zIGFyZSByYWN5LiBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9yayBub3RpZmljYXRpb24gaXMKLQkgKiBkb25lIG9uIHBhcmVudCByZXR1cm4gKHNvIHdlIGtub3cgdGhlIHBpZCksIGJ1dCB0aGlzIHdpbGwgb2Z0ZW4gYmUKLQkgKiBhZnRlciB0aGUgZXhlY3ZlIGlzIGRvbmUgYnkgdGhlIGNoaWxkLgotCSAqCi0JICogU28gd2Ugb25seSBjcmVhdGUgYSBuZXcgc2V0dXAgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5LCBhbGxvd2luZwotCSAqIGJvdGggdGhlIGNsb25lKCkgYW5kIHRoZSBleGVjdmUoKSBjYXNlcyB0byB3b3JrLgotCSAqLwotCWlmIChvcGRfZ2V0X3Byb2Mobm90ZS0+YWRkciwgbm90ZS0+bGVuKSkKLQkJcmV0dXJuOwotCi0JLyogZWlwL2xlbiBpcyBhY3R1YWxseSB0aWQvdGdpZCBvZiBuZXcgcHJvY2VzcyAqLwotCXByb2MgPSBvcGRfbmV3X3Byb2Mobm90ZS0+YWRkciwgbm90ZS0+bGVuKTsKLQotCWlmICghb2xkKQotCQlyZXR1cm47Ci0KLQkvKiBjb3B5IHRoZSBtYXBzICovCi0JbGlzdF9mb3JfZWFjaChwb3MsICZvbGQtPm1hcHMpIHsKLQkJc3RydWN0IG9wZF9tYXAgKiBtYXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9tYXAsIG5leHQpOwotCQlpZiAoIXNlcGFyYXRlX3RocmVhZCkgewotCQkJb3BkX2FkZF9tYXBwaW5nKHByb2MsIG1hcC0+aW1hZ2UsIG1hcC0+c3RhcnQsCi0JCQkgICAgICAgICAgICAgICAgbWFwLT5vZmZzZXQsIG1hcC0+ZW5kKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHdoZW4gc2VwYXJhdGluZyB0aHJlYWQgd2UgY2FuJ3QgY3JlYXRlIGJsaW5kbHkgYSBuZXcKLQkJCSAqIGltYWdlIGUuZy4gcGlkIHJlLXVzZSwgbXVsdGlwbGUgbWFwcGluZyB3aXRoIHRoZQotCQkJICogc2FtZSBtYXBwaW5nIG5hbWUgZXRjLiAqLwotCQkJc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlID0gCi0JCQkJb3BkX2dldF9pbWFnZShtYXAtPmltYWdlLT5uYW1lLCBvbGQtPm5hbWUsCi0JCQkJbWFwLT5pbWFnZS0+a2VybmVsLCBub3RlLT5hZGRyLCBub3RlLT5sZW4pOwotCQkJb3BkX2FkZF9tYXBwaW5nKHByb2MsIGltYWdlLCBtYXAtPnN0YXJ0LCBtYXAtPm9mZnNldCwKLQkJCSAgICAgICAgICAgICAgICBtYXAtPmVuZCk7Ci0JCX0KLQl9Ci19Ci0KLQotdm9pZCBvcGRfaGFuZGxlX2V4ZWMocGlkX3QgdGlkLCBwaWRfdCB0Z2lkKQotewotCXN0cnVjdCBvcGRfcHJvYyAqIHByb2M7Ci0KLQl2ZXJicHJpbnRmKHZtaXNjLCAiRE9fRVhFQzogcGlkICV1ICV1XG4iLCB0aWQsIHRnaWQpOwotCi0JLyogVGhlcmUgaXMgYSByYWNlIGZvciBzYW1wbGVzIHJlY2VpdmVkIGJldHdlZW4gZm9yay9leGVjIHNlcXVlbmNlLgotCSAqIFRoZXNlIHNhbXBsZXMgYmVsb25nIHRvIHRoZSBvbGQgbWFwcGluZyBidXQgd2UgY2FuIG5vdCBzYXkgaWYKLQkgKiBzYW1wbGVzIGhhcyBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGUgZXhlYyBvciBhZnRlci4gVGhpcyBleHBsYWlucwotCSAqIHRoZSBtZXNzYWdlICJDb3VsZG4ndCBmaW5kIG1hcCBmb3IgLi4uIiBpbiB2ZXJib3NlIG1vZGUuCi0JICoKLQkgKiBVbmhhcHBpbHksIGl0IGlzIGRpZmZpY3VsdCB0byBnZXQgYW4gZXN0aW1hdGlvbiBvZiB0aGVzZSBtaXNwbGFjZWQKLQkgKiBzYW1wbGVzLCB0aGUgZXJyb3IgbWVzc2FnZSBjYW4gY291bnQgb25seSBvdXQgb2YgbWFwcGluZyBzYW1wbGVzIGJ1dAotCSAqIG5vdCBzYW1wbGVzIGJldHdlZW4gdGhlIHJhY2UgYW5kIGluc2lkZSB0aGUgbWFwcGluZyBvZiB0aGUgZXhlYydlZAotCSAqIHByb2Nlc3MgOi8uCi0JICoKLQkgKiBUcnlpbmcgdG8gc2F2ZSBvbGQgbWFwcGluZyBpcyBub3QgY29ycmVjdCBkdWUgdGhlIGFib3ZlIHJlYXNvbi4gVGhlCi0JICogb25seSBtYW5uZXIgdG8gaGFuZGxlIHRoaXMgaXMgdG8gZmx1c2ggdGhlIG1vZHVsZSBzYW1wbGVzIGhhc2ggdGFibGUKLQkgKiBhZnRlciBlYWNoIGZvcmsgd2hpY2ggaXMgdW5hY2NlcHRhYmxlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zICovCi0JcHJvYyA9IG9wZF9nZXRfcHJvYyh0aWQsIHRnaWQpOwotCWlmIChwcm9jKSB7Ci0JCW9wZF9raWxsX21hcHMocHJvYyk7Ci0JCS8qIHByb2MtPm5hbWUgd2lsbCBiZSBzZXQgd2hlbiB0aGUgbmV4dCBtYXBwaW5nIG9jY3VycyAqLwotCQlmcmVlKChjaGFyICopcHJvYy0+bmFtZSk7Ci0JCXByb2MtPm5hbWUgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCW9wZF9uZXdfcHJvYyh0aWQsIHRnaWQpOwotCX0KLX0KLQotCi12b2lkIG9wZF9oYW5kbGVfZXhpdChzdHJ1Y3Qgb3Bfbm90ZSBjb25zdCAqIG5vdGUpCi17Ci0Jc3RydWN0IG9wZF9wcm9jICogcHJvYzsKLQotCXZlcmJwcmludGYodm1pc2MsICJET19FWElUOiBwcm9jZXNzICVkXG4iLCBub3RlLT5waWQpOwotCi0JcHJvYyA9IG9wZF9nZXRfcHJvYyhub3RlLT5waWQsIG5vdGUtPnRnaWQpOwotCWlmIChwcm9jKSB7Ci0JCXByb2MtPmRlYWQgPSAxOwotCQlwcm9jLT5hY2Nlc3NlZCA9IDE7Ci0JfSBlbHNlIHsKLQkJdmVyYnByaW50Zih2bWlzYywgInVua25vd24gcHJvYyAldSBqdXN0IGV4aXRlZC5cbiIsIG5vdGUtPnBpZCk7Ci0JfQotfQotCi0KLXR5cGVkZWYgdm9pZCAoKm9wZF9wcm9jX2NiKShzdHJ1Y3Qgb3BkX3Byb2MgKik7Ci0KLS8qKgotICogQHBhcmFtIHByb2NfY2IgY2FsbGJhY2sgdG8gYXBwbHkgb250byBlYWNoIGV4aXN0aW5nIHByb2Mgc3RydWN0Ci0gKgotICogdGhlIGNhbGxiYWNrIHJlY2VpdmUgYSBzdHJ1Y3Qgb3BkX3Byb2MgKiAobm90IGEgY29uc3Qgc3RydWN0KSBhbmQgaXMKLSAqIGFsbG93ZWQgdG8gZnJlZXplIHRoZSBwcm9jIHN0cnVjdCBpdHNlbGYuCi0gKi8KLXN0YXRpYyB2b2lkIG9wZF9mb3JfZWFjaF9wcm9jKG9wZF9wcm9jX2NiIHByb2NfY2IpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zMjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBPUERfTUFYX1BST0NfSEFTSDsgKytpKSB7Ci0JCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZvcGRfcHJvY3NbaV0pIHsKLQkJCXN0cnVjdCBvcGRfcHJvYyAqIHByb2MgPQotCQkJCWxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkX3Byb2MsIG5leHQpOwotCQkJcHJvY19jYihwcm9jKTsKLQkJfQotCX0KLX0KLQotCi0vKioKLSAqIG9wZF9kZWxldGVfcHJvYyAtIGRlbGV0ZSBhIHByb2Nlc3MKLSAqIEBwYXJhbSBwcm9jICBwcm9jZXNzIHRvIGRlbGV0ZQotICoKLSAqIFJlbW92ZSB0aGUgcHJvY2VzcyBwcm9jIGZyb20gdGhlIHByb2Nlc3MgbGlzdCBhbmQgZnJlZQotICogdGhlIGFzc29jaWF0ZWQgc3RydWN0dXJlcy4KLSAqLwotc3RhdGljIHZvaWQgb3BkX2RlbGV0ZV9wcm9jKHN0cnVjdCBvcGRfcHJvYyAqIHByb2MpCi17Ci0JLS1ucl9wcm9jczsKLQlsaXN0X2RlbCgmcHJvYy0+bmV4dCk7Ci0Jb3BkX2tpbGxfbWFwcyhwcm9jKTsKLQlpZiAocHJvYy0+bmFtZSkKLQkJZnJlZSgoY2hhciAqKXByb2MtPm5hbWUpOwotCWZyZWUocHJvYyk7Ci19Ci0KLQotdm9pZCBvcGRfcHJvY19jbGVhbnVwKHZvaWQpCi17Ci0Jb3BkX2Zvcl9lYWNoX3Byb2Mob3BkX2RlbGV0ZV9wcm9jKTsKLX0KLQotCi0vKioKLSAqIG9wZF9hZ2VfcHJvYyAtIGFnZSBhIHN0cnVjdCBvcGRfcHJvYwotICogQHBhcmFtICBwcm9jIHByb2MgdG8gYWdlCi0gKgotICogYWdlIGRlYWQgcHJvYyBpbiBzdWNoIHdheSBpZiBhIHByb2MgZG9lc24ndCByZWNlaXZlIGFueSBzYW1wbGVzCi0gKiBiZXR3ZWVuIHR3byBhZ2VfcHJvYyB0aGUgb3BkX3Byb2Mgc3RydWN0IGlzIGRlbGV0ZWQKLSAqLwotc3RhdGljIHZvaWQgb3BkX2FnZV9wcm9jKHN0cnVjdCBvcGRfcHJvYyAqIHByb2MpCi17Ci0JLy8gZGVsYXkgZGVhdGggd2hpbHN0IGl0cyBzdGlsbCBiZWluZyBhY2Nlc3NlZAotCWlmIChwcm9jLT5kZWFkKSB7Ci0JCXByb2MtPmRlYWQgKz0gcHJvYy0+YWNjZXNzZWQ7Ci0JCXByb2MtPmFjY2Vzc2VkID0gMDsKLQkJaWYgKC0tcHJvYy0+ZGVhZCA9PSAwKQotCQkJb3BkX2RlbGV0ZV9wcm9jKHByb2MpOwotCX0KLX0KLQotCi12b2lkIG9wZF9hZ2VfcHJvY3Modm9pZCkKLXsKLQlvcGRfZm9yX2VhY2hfcHJvYyhvcGRfYWdlX3Byb2MpOwotfQotCi0KLS8qKgotICogb3BkX3JlbW92ZV9rZXJuZWxfbWFwcGluZyAtIHJlbW92ZSBhbGwga2VybmVsIG1hcHBpbmcgZm9yIGFuIG9wZF9wcm9jCi0gKiBAcGFyYW0gcHJvYyAgcHJvYyB3aGVyZSBtYXBwaW5ncyBtdXN0IGJlIHVwZGF0ZWQuCi0gKgotICogaW52YWxpZGF0ZSAoYnkgcmVtb3ZpbmcgdGhlbSkgYWxsIGtlcm5lbCBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIGRvIG5vdGhpbmcKLSAqIHdoZW4gc2VwYXJhdGVfa2VybmVsID09IDAgYmVjYXVzZSB3ZSBkb24ndCBhZGQgbWFwcGluZyBmb3Iga2VybmVsCi0gKiBzYW1wbGUgaW4gcHJvYyBzdHJ1Y3QuCi0gKi8KLXN0YXRpYyB2b2lkIG9wZF9yZW1vdmVfa2VybmVsX21hcHBpbmcoc3RydWN0IG9wZF9wcm9jICogcHJvYykKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zLCAqIHBvczI7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBwb3MyLCAmcHJvYy0+bWFwcykgewotCQlzdHJ1Y3Qgb3BkX21hcCAqIG1hcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkX21hcCwgbmV4dCk7Ci0JCWlmIChvcGRfZWlwX2lzX2tlcm5lbChtYXAtPnN0YXJ0ICsgbWFwLT5vZmZzZXQpKSB7Ci0JCQlsaXN0X2RlbChwb3MpOwotCQkJb3BkX2RlbGV0ZV9pbWFnZShtYXAtPmltYWdlKTsKLQkJCWZyZWUobWFwKTsKLQkJfQotCX0KLX0KLQotCi12b2lkIG9wZF9jbGVhcl9rZXJuZWxfbWFwcGluZyh2b2lkKQotewotCW9wZF9mb3JfZWFjaF9wcm9jKG9wZF9yZW1vdmVfa2VybmVsX21hcHBpbmcpOwotfQpkaWZmIC0tZ2l0IGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5oIGIvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTQwYTQ2Li4wMDAwMDAwCi0tLSBhL2RhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wZF9wcm9jLmgKLSAqIE1hbmFnZW1lbnQgb2YgcHJvY2Vzc2VzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUERfUFJPQ19ICi0jZGVmaW5lIE9QRF9QUk9DX0gKLQotI2luY2x1ZGUgIm9wX3R5cGVzLmgiCi0jaW5jbHVkZSAib3BfbGlzdC5oIgotCi1zdHJ1Y3Qgb3BkX21hcDsKLXN0cnVjdCBvcGRfaW1hZ2U7Ci1zdHJ1Y3Qgb3Bfbm90ZTsKLXN0cnVjdCBvcF9zYW1wbGU7Ci0KLS8qKgotICogdHJhY2sgcHJvY2VzcywgY3JlYXRlZCBlaXRoZXIgYnkgYSBmb3JrIG9yIGFuIGV4ZWMgbm90aWZpY2F0aW9uLgotICovCi1zdHJ1Y3Qgb3BkX3Byb2MgewotCS8qKiBtYXBzIGFyZSBhbHdheXMgYWRkZWQgdG8gdGhlIGVuZCBvZiBoZWFkLCBzbyBzZWFyY2ggd2lsbCBiZSBkb25lCi0JICogZnJvbSB0aGUgbmV3ZXN0IG1hcCB0byB0aGUgb2xkZXN0IHdoaWNoIG1lYW4gd2UgZG9uJ3QgY2FyZSBhYm91dAotCSAqIG11bm1hcC4gRmlyc3QgYWRkZWQgbWFwIG11c3QgYmUgdGhlIHByaW1hcnkgaW1hZ2UgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG1hcHM7Ci0JLyoqIHByb2Nlc3MgbmFtZSAqLwotCWNoYXIgY29uc3QgKiBuYW1lOwotCS8qKiB0aHJlYWQgaWQgZm9yIHRoaXMgcHJvY2VzcywgYWx3YXlzIGVxdWFsIHRvIHRnaWQgZm9yIDIuMiBrZXJuZWwgKi8KLQlwaWRfdCB0aWQ7Ci0JLyoqIHRocmVhZCBncm91cCBpZCBmb3IgdGhpcyBwcm9jZXNzICovCi0JcGlkX3QgdGdpZDsKLQkvKiogbm9uLXplcm8gaWYgdGhpcyBwcm9jZXNzIHJlY2VpdmUgYW55IHNhbXBsZXMsIHRoaXMgZmllbGQKLQkgKiBpcyB1c2VkIHdpdGggZGVhZCBmaWVsZCB0byBkZWZlciBvcGRfcHJvYyBkZWxldGlvbiAqLwotCWludCBhY2Nlc3NlZDsKLQkvKiogU2V0IHRvIG5vbi16ZXJvIHdoZW4gYW4gZXhpdCBub3RpZmljYXRpb24gb2NjdXIgZm9yIHRoaXMgcHJvY2VzcyAqLwotCWludCBkZWFkOwotCS8qKiB1c2VkIGJ5IGNvbnRhaW5lciBvZiBvcGRfcHJvYyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsKLX07Ci0KLS8qKgotICogaW5pdGlhbGl6ZSBvcGRfcHJvYyBjb250YWluZXIKLSAqLwotdm9pZCBvcGRfaW5pdF9wcm9jcyh2b2lkKTsKLQotLyoqCi0gKiBvcGRfcHV0X3NhbXBsZSAtIHByb2Nlc3MgYSBzYW1wbGUKLSAqIEBwYXJhbSBzYW1wbGUgIHNhbXBsZSB0byBwcm9jZXNzCi0gKgotICogV3JpdGUgb3V0IHRoZSBzYW1wbGUgdG8gdGhlIGFwcHJvcHJpYXRlIHNhbXBsZSBmaWxlLiBUaGlzCi0gKiByb3V0aW5lIGhhbmRsZXMga2VybmVsIGFuZCBtb2R1bGUgc2FtcGxlcyBhcyB3ZWxsIGFzIG9yZGluYXJ5IG9uZXMuCi0gKi8KLXZvaWQgb3BkX3B1dF9zYW1wbGUoc3RydWN0IG9wX3NhbXBsZSBjb25zdCAqIHNhbXBsZSk7Ci0KLS8qKgotICogb3BkX3B1dF9pbWFnZV9zYW1wbGUgLSB3cml0ZSBzYW1wbGUgdG8gZmlsZQotICogQHBhcmFtIGltYWdlICBpbWFnZSBmb3Igc2FtcGxlCi0gKiBAcGFyYW0gb2Zmc2V0ICAoZmlsZSkgb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAcGFyYW0gY291bnRlciAgY291bnRlciBudW1iZXIKLSAqCi0gKiBBZGQgdG8gdGhlIGNvdW50IHN0b3JlZCBhdCBwb3NpdGlvbiBvZmZzZXQgaW4gdGhlCi0gKiBpbWFnZSBmaWxlLiBPdmVyZmxvdyBwaW5zIHRoZSBjb3VudCBhdCB0aGUgbWF4aW11bQotICogdmFsdWUuCi0gKi8KLXZvaWQgb3BkX3B1dF9pbWFnZV9zYW1wbGUoc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdTMyIGNvdW50ZXIpOwotCi0vKioKLSAqIG9wZF9oYW5kbGVfZm9yayAtIGRlYWwgd2l0aCBmb3JrIG5vdGlmaWNhdGlvbgotICogQHBhcmFtIG5vdGUgIG5vdGUgdG8gaGFuZGxlCi0gKgotICogRGVhbCB3aXRoIGEgZm9yaygpIG5vdGlmaWNhdGlvbiBieSBjcmVhdGluZyBhIG5ldyBwcm9jZXNzCi0gKiBzdHJ1Y3R1cmUsIGFuZCBjb3B5aW5nIG1hcHBpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgb2xkIHByb2Nlc3MuCi0gKgotICogc2FtcGxlLT5waWQgY29udGFpbnMgdGhlIHByb2Nlc3MgaWQgb2YgdGhlIG9sZCBwcm9jZXNzLgotICogc2FtcGxlLT5laXAgY29udGFpbnMgdGhlIHByb2Nlc3MgaWQgb2YgdGhlIG5ldyBwcm9jZXNzLgotICovCi12b2lkIG9wZF9oYW5kbGVfZm9yayhzdHJ1Y3Qgb3Bfbm90ZSBjb25zdCAqIG5vdGUpOwotCi0vKioKLSAqIG9wZF9oYW5kbGVfZXhlYyAtIGRlYWwgd2l0aCBub3RpZmljYXRpb24gb2YgZXhlY3ZlKCkKLSAqIEBwYXJhbSB0aWQgIHRpZCBmb3IgdGhpcyBwcm9jZXNzCi0gKiBAcGFyYW0gdGdpZCAgdGdpZCBmb3IgdGhpcyBwcm9jZXNzCi0gKgotICogRHJvcCBhbGwgbWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHByb2Nlc3MuCi0gKi8KLXZvaWQgb3BkX2hhbmRsZV9leGVjKHBpZF90IHRpZCwgcGlkX3QgdGdpZCk7Ci0KLS8qKgotICogb3BkX2hhbmRsZV9leGl0IC0gZGVhbCB3aXRoIGV4aXQgbm90aWZpY2F0aW9uCi0gKiBAcGFyYW0gbm90ZSAgbm90ZSB0byBoYW5kbGUKLSAqCi0gKiBEZWFsIHdpdGggYW4gZXhpdCgpIG5vdGlmaWNhdGlvbiBieSBzZXR0aW5nIHRoZSBmbGFnICJkZWFkIgotICogb24gYSBwcm9jZXNzLiBUaGVzZSB3aWxsIGJlIGxhdGVyIGNsZWFuZWQgdXAgYnkgdGhlICVTSUdBTFJNCi0gKiBoYW5kbGVyLgotICoKLSAqIHNhbXBsZS0+cGlkIGNvbnRhaW5zIHRoZSBwcm9jZXNzIGlkIG9mIHRoZSBleGl0ZWQgcHJvY2Vzcy4KLSAqLwotdm9pZCBvcGRfaGFuZGxlX2V4aXQoc3RydWN0IG9wX25vdGUgY29uc3QgKiBub3RlKTsKLQotLyoqCi0gKiBvcGRfZ2V0X3Byb2MgLSBnZXQgcHJvY2VzcyBmcm9tIHByb2Nlc3MgbGlzdAotICogQHBhcmFtIHRpZCAgdGlkIGZvciB0aGlzIHByb2Nlc3MKLSAqIEBwYXJhbSB0Z2lkICB0Z2lkIGZvciB0aGlzIHByb2Nlc3MKLSAqCi0gKiBBIHByb2Nlc3Mgd2l0aCBwaWQgdGlkIGlzIHNlYXJjaGVkIG9uIHRoZSBwcm9jZXNzIGxpc3QsCi0gKiBtYWludGFpbmluZyBMUlUgb3JkZXIuIElmIGl0IGlzIG5vdCBmb3VuZCwgJU5VTEwgaXMgcmV0dXJuZWQsCi0gKiBvdGhlcndpc2UgdGhlIHByb2Nlc3Mgc3RydWN0dXJlIGlzIHJldHVybmVkLgotICovCi1zdHJ1Y3Qgb3BkX3Byb2MgKiBvcGRfZ2V0X3Byb2MocGlkX3QgdGlkLCBwaWRfdCB0Z2lkKTsKLQotLyoqCi0gKiBvcGRfbmV3X3Byb2MgLSBjcmVhdGUgYSBuZXcgcHJvY2VzcyBzdHJ1Y3R1cmUKLSAqIEBwYXJhbSB0aWQgIHRpZCBmb3IgdGhpcyBwcm9jZXNzCi0gKiBAcGFyYW0gdGdpZCAgdGdpZCBmb3IgdGhpcyBwcm9jZXNzCi0gKgotICogQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSBwcm9jZXNzIHN0cnVjdHVyZSBhbmQgaW5zZXJ0Ci0gKiBpdCBpbnRvIHRoZSBwcm9jcyBoYXNoIHRhYmxlLgotICovCi1zdHJ1Y3Qgb3BkX3Byb2MgKiBvcGRfbmV3X3Byb2MocGlkX3QgdGlkLCBwaWRfdCB0Z2lkKTsKLQotLyoqCi0gKiBvcGRfZ2V0X25yX3Byb2NzIC0gcmV0dXJuIG51bWJlciBvZiBwcm9jZXNzZXMgdHJhY2tlZAotICovCi1pbnQgb3BkX2dldF9ucl9wcm9jcyh2b2lkKTsKLQotLyoqCi0gKiBvcGRfYWdlX3Byb2NzIC0gYWdlIGFsbCBkZWFkIHByb2Nlc3MgcHJlcGFyaW5nIHRoZW0gZm9yIGEgZGVsZXRpb24KLSAqLwotdm9pZCBvcGRfYWdlX3Byb2NzKHZvaWQpOwotCi0vKioKLSAqIGZyZWV6ZSBhbGwgcmVzb3VyY2UgdXNlZCBieSBvcGRfcHJvY3MgbWFuYWdtZW50Ci0gKi8KLXZvaWQgb3BkX3Byb2NfY2xlYW51cCh2b2lkKTsKLQotLyoqCi0gKiBvcGRfY2xlYXJfa2VybmVsX21hcHBpbmcgLSByZW1vdmUgYWxsIGtlcm5lbCBtYXBwaW5nIGZvciBhbGwgb3BkX3Byb2MKLSAqCi0gKiBpbnZhbGlkYXRlIChieSByZW1vdmluZyB0aGVtKSBhbGwga2VybmVsIG1hcHBpbmcuIFRoaXMgZnVuY3Rpb24gZG8gbm90aGluZwotICogd2hlbiBzZXBhcmF0ZV9rZXJuZWwgPT0gMCBiZWNhdXNlIHdlIGRvbid0IGFkZCBtYXBwaW5nIGZvciBrZXJuZWwKLSAqIHNhbXBsZSBpbiBwcm9jIHN0cnVjdC4gQXMgc2lkZSBlZmZlY3QgZGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50IG9mCi0gKiBhc3NvY2lhdGVkIHdpdGggdGhlc2UgbWFwcGluZyB3aGljaCBldmVudHVhbGx5IGNsb3NlIHRoaXMgaW1hZ2UKLSAqLwotdm9pZCBvcGRfY2xlYXJfa2VybmVsX21hcHBpbmcodm9pZCk7Ci0KLSNlbmRpZiAvKiBPUERfUFJPQ19IICovCmRpZmYgLS1naXQgYS9kYWVtb24vbGlibGVnYWN5L29wZF9zYW1wbGVfZmlsZXMuYyBiL2RhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2JiNDdlLi4wMDAwMDAwCi0tLSBhL2RhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BkX3NhbXBsZV9maWxlcy5jCi0gKiBNYW5hZ2VtZW50IG9mIHNhbXBsZSBmaWxlcwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAKLSNpbmNsdWRlICJvcGRfc2FtcGxlX2ZpbGVzLmgiCi0jaW5jbHVkZSAib3BkX2ltYWdlLmgiCi0jaW5jbHVkZSAib3BkX3ByaW50Zi5oIgotI2luY2x1ZGUgIm9wZF9ldmVudHMuaCIKLSNpbmNsdWRlICJvcHJvZmlsZWQuaCIKLQotI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCi0jaW5jbHVkZSAib3BfZmlsZS5oIgotI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgotI2luY2x1ZGUgIm9wX21hbmdsZS5oIgotI2luY2x1ZGUgIm9wX2V2ZW50cy5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0vKiogQWxsIHNmaWxlcyBhcmUgb24gdGhpcyBsaXN0LiAqLwotc3RhdGljIExJU1RfSEVBRChscnVfbGlzdCk7Ci0KLS8qIHRoaXMgdmFsdWUgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgdG9vIG11Y2ggKi8KLSNkZWZpbmUgTFJVX0FNT1VOVCAxMDAwCi1zdGF0aWMgaW50IG9wZF8yNF9zZmlsZV9scnVfY2xlYXIodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOwotCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MyOwotCXN0cnVjdCBvcGRfMjRfc2ZpbGUgKiBzZmlsZTsKLQlpbnQgYW1vdW50ID0gTFJVX0FNT1VOVDsKLQotCXZlcmJwcmludGYodnNmaWxlLCAiaW1hZ2UgbHJ1IGNsZWFyXG4iKTsKLQotCWlmIChsaXN0X2VtcHR5KCZscnVfbGlzdCkpCi0JCXJldHVybiAxOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcG9zMiwgJmxydV9saXN0KSB7Ci0JCWlmICghLS1hbW91bnQpCi0JCQlicmVhazsKLQkJc2ZpbGUgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF8yNF9zZmlsZSwgbHJ1X25leHQpOwotCQlvZGJfY2xvc2UoJnNmaWxlLT5zYW1wbGVfZmlsZSk7Ci0JCWxpc3RfZGVsX2luaXQoJnNmaWxlLT5scnVfbmV4dCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotdm9pZCBvcGRfMjRfc2ZpbGVfbHJ1KHN0cnVjdCBvcGRfMjRfc2ZpbGUgKiBzZmlsZSkKLXsKLQlsaXN0X2RlbCgmc2ZpbGUtPmxydV9uZXh0KTsKLQlsaXN0X2FkZF90YWlsKCZzZmlsZS0+bHJ1X25leHQsICZscnVfbGlzdCk7Ci19Ci0KLQotc3RhdGljIGNoYXIgKiBvcGRfbWFuZ2xlX2ZpbGVuYW1lKHN0cnVjdCBvcGRfaW1hZ2UgY29uc3QgKiBpbWFnZSwgaW50IGNvdW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNwdV9ucikKLXsKLQljaGFyICogbWFuZ2xlZDsKLQlzdHJ1Y3QgbWFuZ2xlX3ZhbHVlcyB2YWx1ZXM7Ci0Jc3RydWN0IG9wZF9ldmVudCAqIGV2ZW50ID0gZmluZF9jb3VudGVyX2V2ZW50KGNvdW50ZXIpOwotCi0JdmFsdWVzLmZsYWdzID0gMDsKLQlpZiAoaW1hZ2UtPmtlcm5lbCkKLQkJdmFsdWVzLmZsYWdzIHw9IE1BTkdMRV9LRVJORUw7Ci0KLQlpZiAoc2VwYXJhdGVfdGhyZWFkKSB7Ci0JCXZhbHVlcy5mbGFncyB8PSBNQU5HTEVfVEdJRCB8IE1BTkdMRV9USUQ7Ci0JCXZhbHVlcy50aWQgPSBpbWFnZS0+dGlkOwotCQl2YWx1ZXMudGdpZCA9IGltYWdlLT50Z2lkOwotCX0KLQotCWlmIChzZXBhcmF0ZV9jcHUpIHsKLQkJdmFsdWVzLmZsYWdzIHw9IE1BTkdMRV9DUFU7Ci0JCXZhbHVlcy5jcHUgPSBjcHVfbnI7Ci0JfQotCi0JdmFsdWVzLmV2ZW50X25hbWUgPSBldmVudC0+bmFtZTsKLQl2YWx1ZXMuY291bnQgPSBldmVudC0+Y291bnQ7Ci0JdmFsdWVzLnVuaXRfbWFzayA9IGV2ZW50LT51bTsKLQotCXZhbHVlcy5pbWFnZV9uYW1lID0gaW1hZ2UtPm5hbWU7Ci0JdmFsdWVzLmRlcF9uYW1lID0gc2VwYXJhdGVfbGliICYmIGltYWdlLT5hcHBfbmFtZQotCQk/IGltYWdlLT5hcHBfbmFtZSA6IGltYWdlLT5uYW1lOwotCi0JbWFuZ2xlZCA9IG9wX21hbmdsZV9maWxlbmFtZSgmdmFsdWVzKTsKLQotCXJldHVybiBtYW5nbGVkOwotfQotCi0KLWludCBvcGRfb3Blbl8yNF9zYW1wbGVfZmlsZShzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UsIGludCBjb3VudGVyLCBpbnQgY3B1X25yKQotewotCWNoYXIgKiBtYW5nbGVkOwotCXN0cnVjdCBvcGRfMjRfc2ZpbGUgKiBzZmlsZTsKLQlpbnQgZXJyOwotCi0JbWFuZ2xlZCA9IG9wZF9tYW5nbGVfZmlsZW5hbWUoaW1hZ2UsIGNvdW50ZXIsIGNwdV9ucik7Ci0KLQl2ZXJicHJpbnRmKHZzZmlsZSwgIk9wZW5pbmcgXCIlc1wiXG4iLCBtYW5nbGVkKTsKLQotCWNyZWF0ZV9wYXRoKG1hbmdsZWQpOwotCi0Jc2ZpbGUgPSBpbWFnZS0+c2ZpbGVzW2NwdV9ucl1bY291bnRlcl07Ci0JaWYgKCFzZmlsZSkgewotCQlzZmlsZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG9wZF8yNF9zZmlsZSkpOwotCQlsaXN0X2luaXQoJnNmaWxlLT5scnVfbmV4dCk7Ci0JCW9kYl9pbml0KCZzZmlsZS0+c2FtcGxlX2ZpbGUpOwotCQlpbWFnZS0+c2ZpbGVzW2NwdV9ucl1bY291bnRlcl0gPSBzZmlsZTsKLQl9Ci0KLQlsaXN0X2RlbCgmc2ZpbGUtPmxydV9uZXh0KTsKLQlsaXN0X2FkZF90YWlsKCZzZmlsZS0+bHJ1X25leHQsICZscnVfbGlzdCk7Ci0KLXJldHJ5OgotCWVyciA9IG9kYl9vcGVuKCZzZmlsZS0+c2FtcGxlX2ZpbGUsIG1hbmdsZWQsIE9EQl9SRFdSLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG9wZF9oZWFkZXIpKTsKLQotCS8qIFRoaXMgY2FuIG5hdHVyYWxseSBoYXBwZW4gd2hlbiByYWNpbmcgYWdhaW5zdCBvcGNvbnRyb2wgLS1yZXNldC4gKi8KLQlpZiAoZXJyKSB7Ci0JCWlmIChlcnIgPT0gRU1GSUxFKSB7Ci0JCQlpZiAob3BkXzI0X3NmaWxlX2xydV9jbGVhcigpKSB7Ci0JCQkJcHJpbnRmKCJMUlUgY2xlYXJlZCBidXQgb2RiX29wZW4oKSBmYWlscyBmb3IgJXMuXG4iLCBtYW5nbGVkKTsKLQkJCQlhYm9ydCgpOwotCQkJfQotCQkJZ290byByZXRyeTsKLQkJfQotCi0JCWZwcmludGYoc3RkZXJyLCAib3Byb2ZpbGVkOiBvcGVuIG9mICVzIGZhaWxlZDogJXNcbiIsCi0JCSAgICAgICAgbWFuZ2xlZCwgc3RyZXJyb3IoZXJyKSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZpbGxfaGVhZGVyKG9kYl9nZXRfZGF0YSgmc2ZpbGUtPnNhbXBsZV9maWxlKSwgY291bnRlciwgMCwgMCwKLQkgICAgICAgICAgICBpbWFnZS0+a2VybmVsLCAwLCBpbWFnZS0+bXRpbWUpOwotCi1vdXQ6Ci0JZnJlZShtYW5nbGVkKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLXZvaWQgb3BkX3N5bmNfc2FtcGxlc19maWxlcyh2b2lkKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7Ci0Jc3RydWN0IG9wZF8yNF9zZmlsZSAqIHNmaWxlOwotCi0JbGlzdF9mb3JfZWFjaChwb3MsICZscnVfbGlzdCkgewotCQlzZmlsZSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkXzI0X3NmaWxlLCBscnVfbmV4dCk7Ci0JCW9kYl9zeW5jKCZzZmlsZS0+c2FtcGxlX2ZpbGUpOwotCX0KLX0KLQotCi12b2lkIG9wZF9jbG9zZV9pbWFnZV9zYW1wbGVzX2ZpbGVzKHN0cnVjdCBvcGRfaW1hZ2UgKiBpbWFnZSkKLXsKLQl1aW50IGksIGo7Ci0JZm9yIChpID0gMCA7IGkgPCBvcF9ucl9jb3VudGVycyA7ICsraSkgewotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgKytqKSB7Ci0JCQlpZiAoaW1hZ2UtPnNmaWxlc1tqXSAmJiBpbWFnZS0+c2ZpbGVzW2pdW2ldKSB7Ci0JCQkJb2RiX2Nsb3NlKCZpbWFnZS0+c2ZpbGVzW2pdW2ldLT5zYW1wbGVfZmlsZSk7Ci0JCQkJbGlzdF9kZWwoJmltYWdlLT5zZmlsZXNbal1baV0tPmxydV9uZXh0KTsKLQkJCQlmcmVlKGltYWdlLT5zZmlsZXNbal1baV0pOwotCQkJCWltYWdlLT5zZmlsZXNbal1baV0gPSAwOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmggYi9kYWVtb24vbGlibGVnYWN5L29wZF9zYW1wbGVfZmlsZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA1NTVhOS4uMDAwMDAwMAotLS0gYS9kYWVtb24vbGlibGVnYWN5L29wZF9zYW1wbGVfZmlsZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BkX3NhbXBsZV9maWxlcy5oCi0gKiBNYW5hZ2VtZW50IG9mIHNhbXBsZSBmaWxlcwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpZm5kZWYgT1BEX1NBTVBMRV9GSUxFU19ICi0jZGVmaW5lIE9QRF9TQU1QTEVfRklMRVNfSAotCi0jaW5jbHVkZSAib3BfbGlzdC5oIgotI2luY2x1ZGUgIm9kYi5oIgotCi1zdHJ1Y3Qgb3BkX2ltYWdlOwotCi0vKiogb25lIHNhbXBsZXMgZmlsZSB3aGVuIHByb2ZpbGluZyBvbiBhIDIuMi8yLjQga2VybmVsICovCi1zdHJ1Y3Qgb3BkXzI0X3NmaWxlIHsKLQkvKiogbHJ1IGxpc3Qgb2Ygc2FtcGxlIGZpbGUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxydV9uZXh0OwotCS8qKiB0aGUgc2FtcGxlIGZpbGUgaXRzZWxmICovCi0Jb2RiX3Qgc2FtcGxlX2ZpbGU7Ci19OwotCi0vKioKLSAqIHN5bmMgYWxsIHNhbXBsZXMgZmlsZXMKLSAqLwotdm9pZCBvcGRfc3luY19zYW1wbGVzX2ZpbGVzKHZvaWQpOwotCi0vKioKLSAqIEBwYXJhbSBpbWFnZSAgdGhlIGltYWdlIHBvaW50ZXIgdG8gd29yayBvbgotICoKLSAqIGNsb3NlIGFsbCBzYW1wbGVzIGZpbGVzIGJlbG9uZ2luZyB0byB0aGlzIGltYWdlCi0gKi8KLXZvaWQgb3BkX2Nsb3NlX2ltYWdlX3NhbXBsZXNfZmlsZXMoc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlKTsKLQotLyoqCi0gKiBvcGRfb3Blbl8yNF9zYW1wbGVfZmlsZSAtIG9wZW4gYW4gaW1hZ2Ugc2FtcGxlIGZpbGUKLSAqIEBwYXJhbSBpbWFnZSAgaW1hZ2UgdG8gb3BlbiBmaWxlIGZvcgotICogQHBhcmFtIGNvdW50ZXIgIGNvdW50ZXIgbnVtYmVyCi0gKiBAcGFyYW0gY3B1X25yICBjcHUgbnVtYmVyCi0gKgotICogT3BlbiBpbWFnZSBzYW1wbGUgZmlsZSBmb3IgdGhlIGltYWdlLCBjb3VudGVyCi0gKiBjb3VudGVyIGFuZCBzZXQgdXAgbWVtb3J5IG1hcHBpbmdzIGZvciBpdC4KLSAqIGltYWdlLT5rZXJuZWwgYW5kIGltYWdlLT5uYW1lIG11c3QgaGF2ZSBtZWFuaW5nZnVsCi0gKiB2YWx1ZXMuCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCi0gKi8KLWludCBvcGRfb3Blbl8yNF9zYW1wbGVfZmlsZShzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UsIGludCBjb3VudGVyLCBpbnQgY3B1X25yKTsKLQotLyoqCi0gKiBAcGFyYW0gc2ZpbGUgIHNhbXBsZSBmaWxlIHRvIGFjdCBvbgotICoKLSAqIHB1dCBzZmlsZSBhdCB0aGUgaGVhZCBvZiBzYW1wbGVzIGZpbGVzIGxydSBsaXN0Ci0gKi8KLXZvaWQgb3BkXzI0X3NmaWxlX2xydShzdHJ1Y3Qgb3BkXzI0X3NmaWxlICogc2ZpbGUpOwotCi0KLSNlbmRpZiAvKiBPUERfU0FNUExFX0ZJTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2RhZW1vbi9saWJsZWdhY3kvcF9tb2R1bGUuaCBiL2RhZW1vbi9saWJsZWdhY3kvcF9tb2R1bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM2NzUwOC4uMDAwMDAwMAotLS0gYS9kYWVtb24vbGlibGVnYWN5L3BfbW9kdWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBMaW51eCBtb2R1bGUgc3lzY2FsbCBpbnRlcmZhY2UuCi0gICBDb3B5cmlnaHQgMTk5NiwgMTk5NyBMaW51eCBJbnRlcm5hdGlvbmFsLgotCi0gICBDb250cmlidXRlZCBieSBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQHRhbXUuZWR1PgotCi0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXggbW9kdXRpbHMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCi0KLSNpZm5kZWYgTU9EVVRJTFNfTU9EVUxFX0gKLSNkZWZpbmUgTU9EVVRJTFNfTU9EVUxFX0ggMQotCi0vKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN0cnVjdHVyZXMgdXNlZCBieSB0aGUgMi4wIGFuZCAyLjEga2VybmVscy4KLSAgIFdlIGRvIG5vdCB1c2UgdGhlIGtlcm5lbCBoZWFkZXJzIGRpcmVjdGx5IGJlY2F1c2Ugd2UgZG8gbm90IHdpc2gKLSAgIHRvIGJlIGRlcGVuZGFudCBvbiBhIHBhcnRpY3VsYXIga2VybmVsIHZlcnNpb24gdG8gY29tcGlsZSBpbnNtb2QuICAqLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUaGUgc3RydWN0dXJlcyB1c2VkIGJ5IExpbnV4IDIuMC4gICovCi0KLS8qIFRoZSBzeW1ib2wgZm9ybWF0IHVzZWQgYnkgZ2V0X2tlcm5lbF9zeW1zKDIpLiAgKi8KLXN0cnVjdCBvbGRfa2VybmVsX3N5bQotewotICB1bnNpZ25lZCBsb25nIHZhbHVlOwotICBjaGFyIG5hbWVbNjBdOwotfTsKLQotc3RydWN0IG9sZF9tb2R1bGVfcmVmCi17Ci0gIHVuc2lnbmVkIGxvbmcgbW9kdWxlOwkJLyoga2VybmVsIGFkZHJlc3NlcyAqLwotICB1bnNpZ25lZCBsb25nIG5leHQ7Ci19OwotCi1zdHJ1Y3Qgb2xkX21vZHVsZV9zeW1ib2wKLXsKLSAgdW5zaWduZWQgbG9uZyBhZGRyOwotICB1bnNpZ25lZCBsb25nIG5hbWU7Ci19OwotCi1zdHJ1Y3Qgb2xkX3N5bWJvbF90YWJsZQotewotICBpbnQgc2l6ZTsJCQkvKiB0b3RhbCwgaW5jbHVkaW5nIHN0cmluZyB0YWJsZSEhISAqLwotICBpbnQgbl9zeW1ib2xzOwotICBpbnQgbl9yZWZzOwotICBzdHJ1Y3Qgb2xkX21vZHVsZV9zeW1ib2wgc3ltYm9sWzBdOyAvKiBhY3R1YWwgc2l6ZSBkZWZpbmVkIGJ5IG5fc3ltYm9scyAqLwotICBzdHJ1Y3Qgb2xkX21vZHVsZV9yZWYgcmVmWzBdOwkvKiBhY3R1YWwgc2l6ZSBkZWZpbmVkIGJ5IG5fcmVmcyAqLwotfTsKLQotc3RydWN0IG9sZF9tb2Rfcm91dGluZXMKLXsKLSAgdW5zaWduZWQgbG9uZyBpbml0OwotICB1bnNpZ25lZCBsb25nIGNsZWFudXA7Ci19OwotCi1zdHJ1Y3Qgb2xkX21vZHVsZQotewotICB1bnNpZ25lZCBsb25nIG5leHQ7Ci0gIHVuc2lnbmVkIGxvbmcgcmVmOwkJLyogdGhlIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IHJlZmVyIHRvIG1lICovCi0gIHVuc2lnbmVkIGxvbmcgc3ltdGFiOwotICB1bnNpZ25lZCBsb25nIG5hbWU7Ci0gIGludCBzaXplOwkJCS8qIHNpemUgb2YgbW9kdWxlIGluIHBhZ2VzICovCi0gIHVuc2lnbmVkIGxvbmcgYWRkcjsJCS8qIGFkZHJlc3Mgb2YgbW9kdWxlICovCi0gIGludCBzdGF0ZTsKLSAgdW5zaWduZWQgbG9uZyBjbGVhbnVwOwkvKiBjbGVhbnVwIHJvdXRpbmUgKi8KLX07Ci0KLS8qIFNlbnQgdG8gaW5pdF9tb2R1bGUoMikgb3InZWQgaW50byB0aGUgY29kZSBzaXplIHBhcmFtZXRlci4gICovCi0jZGVmaW5lIE9MRF9NT0RfQVVUT0NMRUFOIDB4NDAwMDAwMDAgLyogYmlnIGVub3VnaCwgYnV0IG5vIHNpZ24gcHJvYmxlbXMuLi4gKi8KLQotaW50IGdldF9rZXJuZWxfc3ltcyhzdHJ1Y3Qgb2xkX2tlcm5lbF9zeW0gKik7Ci1pbnQgb2xkX3N5c19pbml0X21vZHVsZShjaGFyIGNvbnN0ICogbmFtZSwgY2hhciAqY29kZSwgdW5zaWduZWQgY29kZXNpemUsCi0JCQlzdHJ1Y3Qgb2xkX21vZF9yb3V0aW5lcyAqLCBzdHJ1Y3Qgb2xkX3N5bWJvbF90YWJsZSAqKTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZvciBzaXplb2YoKSB3aGljaCBhcmUgcmVsYXRlZCB0byB0aGUgbW9kdWxlIHBsYXRmb3JtIGFuZCBub3QgdG8gdGhlCi0gICBlbnZpcm9ubWVudCBpc25tb2QgaXMgcnVubmluZyBpbiwgdXNlIHNpemVvZl94eCBpbnN0ZWFkIG9mIHNpemVvZih4eCkuICAqLwotCi0jZGVmaW5lIHRndF9zaXplb2ZfY2hhcgkJc2l6ZW9mKGNoYXIpCi0jZGVmaW5lIHRndF9zaXplb2Zfc2hvcnQJc2l6ZW9mKHNob3J0KQotI2RlZmluZSB0Z3Rfc2l6ZW9mX2ludAkJc2l6ZW9mKGludCkKLSNkZWZpbmUgdGd0X3NpemVvZl9sb25nCQlzaXplb2YobG9uZykKLSNkZWZpbmUgdGd0X3NpemVvZl9jaGFyX3AJc2l6ZW9mKGNoYXIgKikKLSNkZWZpbmUgdGd0X3NpemVvZl92b2lkX3AJc2l6ZW9mKHZvaWQgKikKLSNkZWZpbmUgdGd0X2xvbmcJCWxvbmcKLSNkZWZpbmUgdGd0X2xvbmdfZm10CQkibCIKLQotLyogVGhpcyBhc3N1bWVzIHRoYXQgbG9uZyBsb25nIG9uIGEgMzIgYml0IHN5c3RlbSBpcyBlcXVpdmFsZW50IHRvIGxvbmcgb24gdGhlCi0gKiBlcXVpdmFsZW50IDY0IGJpdCBzeXN0ZW0uICBBbHNvIHRoYXQgdm9pZCBhbmQgY2hhciBwb2ludGVycyBhcmUgOCBieXRlcyBvbgotICogYWxsIDY0IGJpdCBzeXN0ZW1zLiAgQWRkIHBlciBzeXN0ZW0gdHdlYWtzIGlmIGl0IGV2ZXIgYmVjb21lcyBuZWNlc3NhcnkuCi0gKi8KLSNpZiBkZWZpbmVkKENPTU1PTl8zMjY0KSAmJiBkZWZpbmVkKE9OTFlfNjQpCi0jdW5kZWYgdGd0X2xvbmcKLSN1bmRlZiB0Z3RfbG9uZ19mbXQKLSN1bmRlZiB0Z3Rfc2l6ZW9mX2xvbmcKLSN1bmRlZiB0Z3Rfc2l6ZW9mX2NoYXJfcAotI3VuZGVmIHRndF9zaXplb2Zfdm9pZF9wCi0jZGVmaW5lIHRndF9sb25nICAgICAgICAgICAgICAgIGxvbmcgbG9uZwotI2RlZmluZSB0Z3RfbG9uZ19mbXQJCSJsbCIKLSNkZWZpbmUgdGd0X3NpemVvZl9sb25nICAgICAgICAgOAotI2RlZmluZSB0Z3Rfc2l6ZW9mX2NoYXJfcCAgICAgICA4Ci0jZGVmaW5lIHRndF9zaXplb2Zfdm9pZF9wICAgICAgIDgKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogVGhlIHN0cnVjdHVyZXMgdXNlZCBpbiBMaW51eCAyLjEgb253YXJkcy4gICovCi0KLS8qIE5vdGU6IG1vZHVsZV9zeW1ib2wgZG9lcyBub3QgdXNlIHRndF9sb25nIGludGVudGlvbmFsbHkgKi8KLXN0cnVjdCBtb2R1bGVfc3ltYm9sCi17Ci0gIHVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0gIHVuc2lnbmVkIGxvbmcgbmFtZTsKLX07Ci0KLXN0cnVjdCBtb2R1bGVfcmVmCi17Ci0gIHVuc2lnbmVkIHRndF9sb25nIGRlcDsJCS8qIGtlcm5lbCBhZGRyZXNzZXMgKi8KLSAgdW5zaWduZWQgdGd0X2xvbmcgcmVmOwotICB1bnNpZ25lZCB0Z3RfbG9uZyBuZXh0X3JlZjsKLX07Ci0KLXN0cnVjdCBtb2R1bGUKLXsKLSAgdW5zaWduZWQgdGd0X2xvbmcgc2l6ZV9vZl9zdHJ1Y3Q7CS8qID09IHNpemVvZihtb2R1bGUpICovCi0gIHVuc2lnbmVkIHRndF9sb25nIG5leHQ7Ci0gIHVuc2lnbmVkIHRndF9sb25nIG5hbWU7Ci0gIHVuc2lnbmVkIHRndF9sb25nIHNpemU7Ci0KLSAgdGd0X2xvbmcgdXNlY291bnQ7Ci0gIHVuc2lnbmVkIHRndF9sb25nIGZsYWdzOwkJLyogQVVUT0NMRUFOIGV0IGFsICovCi0KLSAgdW5zaWduZWQgbnN5bXM7Ci0gIHVuc2lnbmVkIG5kZXBzOwotCi0gIHVuc2lnbmVkIHRndF9sb25nIHN5bXM7Ci0gIHVuc2lnbmVkIHRndF9sb25nIGRlcHM7Ci0gIHVuc2lnbmVkIHRndF9sb25nIHJlZnM7Ci0gIHVuc2lnbmVkIHRndF9sb25nIGluaXQ7Ci0gIHVuc2lnbmVkIHRndF9sb25nIGNsZWFudXA7Ci0gIHVuc2lnbmVkIHRndF9sb25nIGV4X3RhYmxlX3N0YXJ0OwotICB1bnNpZ25lZCB0Z3RfbG9uZyBleF90YWJsZV9lbmQ7Ci0jaWZkZWYgX19hbHBoYV9fCi0gIHVuc2lnbmVkIHRndF9sb25nIGdwOwotI2VuZGlmCi0gIC8qIEV2ZXJ5dGhpbmcgYWZ0ZXIgaGVyZSBpcyBleHRlbnNpb24uICAqLwotICB1bnNpZ25lZCB0Z3RfbG9uZyByZWFkX3N0YXJ0OwkJLyogUmVhZCBkYXRhIGZyb20gZXhpc3RpbmcgbW9kdWxlICovCi0gIHVuc2lnbmVkIHRndF9sb25nIHJlYWRfZW5kOwotICB1bnNpZ25lZCB0Z3RfbG9uZyBjYW5fdW5sb2FkOwotICB1bnNpZ25lZCB0Z3RfbG9uZyBydW5zaXplOwotICB1bnNpZ25lZCB0Z3RfbG9uZyBrYWxsc3ltc19zdGFydDsKLSAgdW5zaWduZWQgdGd0X2xvbmcga2FsbHN5bXNfZW5kOwotICB1bnNpZ25lZCB0Z3RfbG9uZyBhcmNoZGF0YV9zdGFydDsKLSAgdW5zaWduZWQgdGd0X2xvbmcgYXJjaGRhdGFfZW5kOwotICB1bnNpZ25lZCB0Z3RfbG9uZyBrZXJuZWxfZGF0YTsKLX07Ci0KLXN0cnVjdCBtb2R1bGVfaW5mbwotewotICB1bnNpZ25lZCBsb25nIGFkZHI7Ci0gIHVuc2lnbmVkIGxvbmcgc2l6ZTsKLSAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQkgICBsb25nIHVzZWNvdW50OwotfTsKLQotLyogQml0cyBvZiBtb2R1bGUuZmxhZ3MuICAqLwotI2RlZmluZSBORVdfTU9EX1JVTk5JTkcJCTEKLSNkZWZpbmUgTkVXX01PRF9ERUxFVEVECQkyCi0jZGVmaW5lIE5FV19NT0RfQVVUT0NMRUFOCTQKLSNkZWZpbmUgTkVXX01PRF9WSVNJVEVECQk4Ci0jZGVmaW5lIE5FV19NT0RfVVNFRF9PTkNFCTE2Ci0jZGVmaW5lIE5FV19NT0RfSU5JVElBTElaSU5HCTY0Ci0KLWludCBzeXNfaW5pdF9tb2R1bGUoY2hhciBjb25zdCAqIG5hbWUsIGNvbnN0IHN0cnVjdCBtb2R1bGUgKik7Ci1pbnQgcXVlcnlfbW9kdWxlKGNoYXIgY29uc3QgKiBuYW1lLCBpbnQgd2hpY2gsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsCi0JCSBzaXplX3QgKnJldCk7Ci0KLS8qIFZhbHVlcyBmb3IgcXVlcnlfbW9kdWxlJ3Mgd2hpY2guICAqLwotCi0jZGVmaW5lIFFNX01PRFVMRVMJMQotI2RlZmluZSBRTV9ERVBTCQkyCi0jZGVmaW5lIFFNX1JFRlMJCTMKLSNkZWZpbmUgUU1fU1lNQk9MUwk0Ci0jZGVmaW5lIFFNX0lORk8JCTUKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFRoZSBzeXN0ZW0gY2FsbHMgdW5jaGFuZ2VkIGJldHdlZW4gMi4wIGFuZCAyLjEuICAqLwotCi11bnNpZ25lZCBsb25nIGNyZWF0ZV9tb2R1bGUoY29uc3QgY2hhciAqLCBzaXplX3QpOwotaW50IGRlbGV0ZV9tb2R1bGUoY29uc3QgY2hhciAqKTsKLQotLyogSW4gc2FmZSBtb2RlIHRoZSBsYXN0IHBhcmFtZXRlciBpcyBmb3JjZWQgdG8gYmUgYSBtb2R1bGUgbmFtZSBhbmQgbWV0YQotICogZXhwYW5zaW9uIGlzIG5vdCBhbGxvd2VkIG9uIHRoYXQgbmFtZS4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBzYWZlbW9kZTsKLQotI2VuZGlmIC8qIG1vZHVsZS5oICovCmRpZmYgLS1naXQgYS9kYWVtb24vb3BkX2Fub24uYyBiL2RhZW1vbi9vcGRfYW5vbi5jCmluZGV4IGY0YzhiMmEuLmI1ZTQyZDggMTAwNjQ0Ci0tLSBhL2RhZW1vbi9vcGRfYW5vbi5jCisrKyBiL2RhZW1vbi9vcGRfYW5vbi5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJLyogTm90ZSB0aGF0IHRoaXMgYWN0dWFsbHkgaW5jbHVkZXMgYWxsIG1hcHBpbmdzLAogCQkgKiBzaW5jZSB3ZSB3YW50IHN0dWZmIGxpa2UgW2hlYXBdCiAJCSAqLwotCQlyZXQgPSBzc2NhbmYoYnVmLCAiJWx4LSVseCAlMjBzICUyMHMgJTIwcyAlMjBzICUyMHMiLAorCQlyZXQgPSBzc2NhbmYoYnVmLCAiJWx4LSVseCAlMTlzICUxOXMgJTE5cyAlMTlzICUxOXMiLAogCQkgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kLCB0bXAsIHRtcCwgdG1wLCB0bXAsIHRtcCk7CiAJCWlmIChyZXQgPCA2KQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kYWVtb24vb3BkX2tlcm5lbC5jIGIvZGFlbW9uL29wZF9rZXJuZWwuYwppbmRleCBhMmUzZmRkLi5kMzE0YmM5IDEwMDY0NAotLS0gYS9kYWVtb24vb3BkX2tlcm5lbC5jCisrKyBiL2RhZW1vbi9vcGRfa2VybmVsLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlyZXQgPSBzc2NhbmYobGluZSwgIiUyNTZzICV1ICUzMnMgJTQwOTZzICUzMnMgJWxseCIsCisJCXJldCA9IHNzY2FuZihsaW5lLCAiJTI1NnMgJXUgJTMxcyAlNDA5NXMgJTMxcyAlbGx4IiwKIAkJCSAgICAgbW9kdWxlX25hbWUsICZtb2R1bGVfc2l6ZSwgcmVmX2NvdW50LAogCQkJICAgICBkZXBlbmRlbmNpZXMsIGxpdmVfaW5mbywgJnN0YXJ0X2FkZHJlc3MpOwogCQlpZiAocmV0ICE9IDYpIHsKZGlmZiAtLWdpdCBhL2RhZW1vbi9vcGRfc3RhdHMuYyBiL2RhZW1vbi9vcGRfc3RhdHMuYwppbmRleCA1OWE2OTYwLi4xYTdmMGY3IDEwMDY0NAotLS0gYS9kYWVtb24vb3BkX3N0YXRzLmMKKysrIGIvZGFlbW9uL29wZF9zdGF0cy5jCkBAIC05LDEwICs5LDEyIEBACiAgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKICAqLwogCisjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAib3BkX3N0YXRzLmgiCiAjaW5jbHVkZSAib3Byb2ZpbGVkLmgiCiAKICNpbmNsdWRlICJvcF9nZXRfdGltZS5oIgorI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgogCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC01MSwyMiArNTMsMjIgQEAKIAlwcmludGYoIk5yLiBzYW1wbGVzIGxvc3QgZHVlIHRvIG5vIHBlcm1hbmVudCBtYXBwaW5nOiAlbHVcbiIsCiAJCW9wZF9zdGF0c1tPUERfTE9TVF9OT19NQVBQSU5HXSk7CiAJcHJpbnRfaWYoIk5yLiBldmVudCBsb3N0IGR1ZSB0byBidWZmZXIgb3ZlcmZsb3c6ICV1XG4iLAotCSAgICAgICAiL2Rldi9vcHJvZmlsZS9zdGF0cyIsICJldmVudF9sb3N0X292ZXJmbG93IiwgMSk7CisJICAgICAgIE9QX0RSSVZFUl9CQVNFIi9zdGF0cyIsICJldmVudF9sb3N0X292ZXJmbG93IiwgMSk7CiAJcHJpbnRfaWYoIk5yLiBzYW1wbGVzIGxvc3QgZHVlIHRvIG5vIG1hcHBpbmc6ICV1XG4iLAotCSAgICAgICAiL2Rldi9vcHJvZmlsZS9zdGF0cyIsICJzYW1wbGVfbG9zdF9ub19tYXBwaW5nIiwgMSk7CisJICAgICAgIE9QX0RSSVZFUl9CQVNFIi9zdGF0cyIsICJzYW1wbGVfbG9zdF9ub19tYXBwaW5nIiwgMSk7CiAJcHJpbnRfaWYoIk5yLiBiYWNrdHJhY2VzIHNraXBwZWQgZHVlIHRvIG5vIGZpbGUgbWFwcGluZzogJXVcbiIsCi0JICAgICAgICIvZGV2L29wcm9maWxlL3N0YXRzIiwgImJ0X2xvc3Rfbm9fbWFwcGluZyIsIDApOworCSAgICAgICBPUF9EUklWRVJfQkFTRSIvc3RhdHMiLCAiYnRfbG9zdF9ub19tYXBwaW5nIiwgMCk7CiAJcHJpbnRfaWYoIk5yLiBzYW1wbGVzIGxvc3QgZHVlIHRvIG5vIG1tOiAldVxuIiwKLQkgICAgICAgIi9kZXYvb3Byb2ZpbGUvc3RhdHMiLCAic2FtcGxlX2xvc3Rfbm9fbW0iLCAxKTsKKwkgICAgICAgT1BfRFJJVkVSX0JBU0UiL3N0YXRzIiwgInNhbXBsZV9sb3N0X25vX21tIiwgMSk7CiAKLQlpZiAoIShkaXIgPSBvcGVuZGlyKCIvZGV2L29wcm9maWxlL3N0YXRzLyIpKSkKKwlpZiAoIShkaXIgPSBvcGVuZGlyKE9QX0RSSVZFUl9CQVNFIi9zdGF0cy8iKSkpCiAJCWdvdG8gb3V0OwogCXdoaWxlICgoZGlyZW50ID0gcmVhZGRpcihkaXIpKSkgewogCQlpbnQgY3B1X25yOwogCQljaGFyIHBhdGhbMjU2XTsKIAkJaWYgKHNzY2FuZihkaXJlbnQtPmRfbmFtZSwgImNwdSVkIiwgJmNwdV9ucikgIT0gMSkKIAkJCWNvbnRpbnVlOwotCQlzbnByaW50ZihwYXRoLCAyNTYsICIvZGV2L29wcm9maWxlL3N0YXRzLyVzIiwgZGlyZW50LT5kX25hbWUpOworCQlzbnByaW50ZihwYXRoLCAyNTYsIE9QX0RSSVZFUl9CQVNFIi9zdGF0cy8lcyIsIGRpcmVudC0+ZF9uYW1lKTsKIAogCQlwcmludF9pZigiTnIuIHNhbXBsZXMgbG9zdCBjcHUgYnVmZmVyIG92ZXJmbG93OiAldVxuIiwKIAkJICAgICBwYXRoLCAic2FtcGxlX2xvc3Rfb3ZlcmZsb3ciLCAxKTsKZGlmZiAtLWdpdCBhL2RhZW1vbi9vcHJvZmlsZWQuYyBiL2RhZW1vbi9vcHJvZmlsZWQuYwppbmRleCBhN2JmMTUxLi4yODFmMTBmIDEwMDY0NAotLS0gYS9kYWVtb24vb3Byb2ZpbGVkLmMKKysrIGIvZGFlbW9uL29wcm9maWxlZC5jCkBAIC00MjQsNyArNDI0LDggQEAKIAlzd2l0Y2ggKG9wX2dldF9pbnRlcmZhY2UoKSkgewogCQljYXNlIE9QX0lOVEVSRkFDRV8yNDoKIAkJCXByaW50ZigiVXNpbmcgMi40IE9Qcm9maWxlIGtlcm5lbCBpbnRlcmZhY2UuXG4iKTsKLQkJCXJldHVybiAmb3BkXzI0X29wczsKKwkJCS8vcmV0dXJuICZvcGRfMjRfb3BzOworICAgICAgICAgICAgcmV0dXJuIDA7IC8vIGFuZHJvaWQuIHdlIHNob3VsZCBuZXZlciBuZWVkIHRoYXQuCiAJCWNhc2UgT1BfSU5URVJGQUNFXzI2OgogCQkJcHJpbnRmKCJVc2luZyAyLjYrIE9Qcm9maWxlIGtlcm5lbCBpbnRlcmZhY2UuXG4iKTsKIAkJCXJldHVybiAmb3BkXzI2X29wczsKZGlmZiAtLWdpdCBhL2RlcGNvbXAgYi9kZXBjb21wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmZmNkNTQwLi4wMDAwMDAwCi0tLSBhL2RlcGNvbXAKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCi0KLXNjcmlwdHZlcnNpb249MjAwNS0wMi0wOS4yMgotCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCi0jIDAyMTExLTEzMDcsIFVTQS4KLQotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0KLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEFsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+LgotCi1jYXNlICQxIGluCi0gICcnKQotICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCi0gICAgIGV4aXQgMTsKLSAgICAgOzsKLSAgLWggfCAtLWgqKQotICAgIGNhdCA8PFxFT0YKLVVzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCi0KLVJ1biBQUk9HUkFNUyBBUkdTIHRvIGNvbXBpbGUgYSBmaWxlLCBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcwotYXMgc2lkZS1lZmZlY3RzLgotCi1FbnZpcm9ubWVudCB2YXJpYWJsZXM6Ci0gIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KLSAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSBgUFJPR1JBTVMgQVJHUycuCi0gIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSBgUFJPR1JBTVMgQVJHUycuCi0gIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCi0gIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCi0gIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dGluZyBkZXBlbmRlbmNpZXMuCi0gIGxpYnRvb2wgICAgIFdoZXRoZXIgbGlidG9vbCBpcyB1c2VkICh5ZXMvbm8pLgotCi1SZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgotRU9GCi0gICAgZXhpdCAkPwotICAgIDs7Ci0gIC12IHwgLS12KikKLSAgICBlY2hvICJkZXBjb21wICRzY3JpcHR2ZXJzaW9uIgotICAgIGV4aXQgJD8KLSAgICA7OwotZXNhYwotCi1pZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KLSAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCi0gIGV4aXQgMQotZmkKLQotIyBEZXBlbmRlbmNpZXMgZm9yIHN1Yi9iYXIubyBvciBzdWIvYmFyLm9iaiBnbyBpbnRvIHN1Yi8uZGVwcy9iYXIuUG8uCi1kZXBmaWxlPSR7ZGVwZmlsZS1gZWNobyAiJG9iamVjdCIgfAotICBzZWQgJ3N8W15cXC9dKiR8JyR7REVQRElSLS5kZXBzfScvJnw7c3xcLlwoW14uXSpcKSR8LlBcMXw7c3xQb2JqJHxQb3wnYH0KLXRtcGRlcGZpbGU9JHt0bXBkZXBmaWxlLWBlY2hvICIkZGVwZmlsZSIgfCBzZWQgJ3MvXC5cKFteLl0qXCkkLy5UXDEvJ2B9Ci0KLXJtIC1mICIkdG1wZGVwZmlsZSIKLQotIyBTb21lIG1vZGVzIHdvcmsganVzdCBsaWtlIG90aGVyIG1vZGVzLCBidXQgdXNlIGRpZmZlcmVudCBmbGFncy4gIFdlCi0jIHBhcmFtZXRlcml6ZSBoZXJlLCBidXQgc3RpbGwgbGlzdCB0aGUgbW9kZXMgaW4gdGhlIGJpZyBjYXNlIGJlbG93LAotIyB0byBtYWtlIGRlcGVuZC5tNCBlYXNpZXIgdG8gd3JpdGUuICBOb3RlIHRoYXQgd2UgKmNhbm5vdCogdXNlIGEgY2FzZQotIyBoZXJlLCBiZWNhdXNlIHRoaXMgZmlsZSBjYW4gb25seSBjb250YWluIG9uZSBjYXNlIHN0YXRlbWVudC4KLWlmIHRlc3QgIiRkZXBtb2RlIiA9IGhwOyB0aGVuCi0gICMgSFAgY29tcGlsZXIgdXNlcyAtTSBhbmQgbm8gZXh0cmEgYXJnLgotICBnY2NmbGFnPS1NCi0gIGRlcG1vZGU9Z2NjCi1maQotCi1pZiB0ZXN0ICIkZGVwbW9kZSIgPSBkYXNoWG1zdGRvdXQ7IHRoZW4KLSAgICMgVGhpcyBpcyBqdXN0IGxpa2UgZGFzaG1zdGRvdXQgd2l0aCBhIGRpZmZlcmVudCBhcmd1bWVudC4KLSAgIGRhc2htZmxhZz0teE0KLSAgIGRlcG1vZGU9ZGFzaG1zdGRvdXQKLWZpCi0KLWNhc2UgIiRkZXBtb2RlIiBpbgotZ2NjMykKLSMjIGdjYyAzIGltcGxlbWVudHMgZGVwZW5kZW5jeSB0cmFja2luZyB0aGF0IGRvZXMgZXhhY3RseSB3aGF0Ci0jIyB3ZSB3YW50LiAgWWF5ISAgTm90ZTogZm9yIHNvbWUgcmVhc29uIGxpYnRvb2wgMS40IGRvZXNuJ3QgbGlrZQotIyMgaXQgaWYgLU1EIC1NUCBjb21lcyBhZnRlciB0aGUgLU1GIHN0dWZmLiAgSG1tLgotICAiJEAiIC1NVCAiJG9iamVjdCIgLU1EIC1NUCAtTUYgIiR0bXBkZXBmaWxlIgotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCi0gIDs7Ci0KLWdjYykKLSMjIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gZ2V0IGRlcGVuZGVuY3kgb3V0cHV0IGZyb20gZ2NjLiAgSGVyZSdzCi0jIyB3aHkgd2UgcGljayB0aGlzIHJhdGhlciBvYnNjdXJlIG1ldGhvZDoKLSMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCi0jIyAgIHVwIGluIGEgc3ViZGlyLiAgSGF2aW5nIHRvIHJlbmFtZSBieSBoYW5kIGlzIHVnbHkuCi0jIyAgIChXZSBtaWdodCBlbmQgdXAgZG9pbmcgdGhpcyBhbnl3YXkgdG8gc3VwcG9ydCBvdGhlciBjb21waWxlcnMuKQotIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKLSMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLgotIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQotIyMgICB0aGFuIHJlbmFtaW5nKS4KLSAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCi0gICAgZ2NjZmxhZz0tTUQsCi0gIGZpCi0gICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgcm0gLWYgIiRkZXBmaWxlIgotICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0jIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlIGxldHRlcnMuCi0gIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAotICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCi0jIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQotIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCi0jIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZwotIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbwotIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCi0gIHRyICcgJyAnCi0nIDwgIiR0bXBkZXBmaWxlIiB8Ci0jIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlIGA6Jy4gIE9uIHRoZSB0aGVvcnkKLSMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcwotIyMgd2VsbC4KLSMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCi0jIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLWhwKQotICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKLSAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAotICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgotICBleGl0IDEKLSAgOzsKLQotc2dpKQotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgotICBlbHNlCi0gICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgotICBmaQotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgcm0gLWYgIiRkZXBmaWxlIgotCi0gIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcwotICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0KLSAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCi0gICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKLSAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KLSAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOwotICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlIGAjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKLSAgICAjIGRlcGVuZGVuY3kgbGluZS4KLSAgICB0ciAnICcgJwotJyA8ICIkdG1wZGVwZmlsZSIgXAotICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyB8IFwKLSAgICB0ciAnCi0nICcgJyA+PiAkZGVwZmlsZQotICAgIGVjaG8gPj4gJGRlcGZpbGUKLQotICAgICMgVGhlIHNlY29uZCBwYXNzIGdlbmVyYXRlcyBhIGR1bW15IGVudHJ5IGZvciBlYWNoIGhlYWRlciBmaWxlLgotICAgIHRyICcgJyAnCi0nIDwgIiR0bXBkZXBmaWxlIiBcCi0gICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAotICAgPj4gJGRlcGZpbGUKLSAgZWxzZQotICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0Ci0gICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCi0gICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KLSAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgotICBmaQotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLWFpeCkKLSAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcwotICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQotICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzIGAkb2JqZWN0OicgYXQgdGhlCi0gICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCi0gICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgotICBzdHJpcHBlZD1gZWNobyAiJG9iamVjdCIgfCBzZWQgJ3MvXCguKlwpXC4uKiQvXDEvJ2AKLSAgdG1wZGVwZmlsZT0iJHN0cmlwcGVkLnUiCi0gIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgotICAgICIkQCIgLVdjLC1NCi0gIGVsc2UKLSAgICAiJEAiIC1NCi0gIGZpCi0gIHN0YXQ9JD8KLQotICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gOgotICBlbHNlCi0gICAgc3RyaXBwZWQ9YGVjaG8gIiRzdHJpcHBlZCIgfCBzZWQgJ3MsXi4qLywsJ2AKLSAgICB0bXBkZXBmaWxlPSIkc3RyaXBwZWQudSIKLSAgZmkKLQotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQotICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgICBleGl0ICRzdGF0Ci0gIGZpCi0KLSAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCi0gICAgb3V0bmFtZT0iJHN0cmlwcGVkLm8iCi0gICAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcuCi0gICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KLSAgICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCi0gICAgc2VkIC1lICJzLF4kb3V0bmFtZTosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICAgIHNlZCAtZSAicyxeJG91dG5hbWU6IFwoLipcKSQsXDE6LCIgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKLSAgZWxzZQotICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0Ci0gICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCi0gICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KLSAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgotICBmaQotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLWljYykKLSAgIyBJbnRlbCdzIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgYC1NRCAtTUYgZmlsZScuICBIb3dldmVyIG9uCi0gICMgICAgaWNjIC1NRCAtTUYgZm9vLmQgLWMgLW8gc3ViL2Zvby5vIHN1Yi9mb28uYwotICAjIElDQyA3LjAgd2lsbCBmaWxsIGZvby5kIHdpdGggc29tZXRoaW5nIGxpa2UKLSAgIyAgICBmb28ubzogc3ViL2Zvby5jCi0gICMgICAgZm9vLm86IHN1Yi9mb28uaAotICAjIHdoaWNoIGlzIHdyb25nLiAgV2Ugd2FudDoKLSAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uYwotICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5oCi0gICMgICAgc3ViL2Zvby5jOgotICAjICAgIHN1Yi9mb28uaDoKLSAgIyBJQ0MgNy4xIHdpbGwgb3V0cHV0Ci0gICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKLSAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgXCA6Ci0gICMgICAgZm9vLm86IHN1Yi9mb28uYyAuLi4gXAotICAjICAgICBzdWIvZm9vLmggLi4uIFwKLSAgIyAgICAgLi4uCi0KLSAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKLSAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQotICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgICBleGl0ICRzdGF0Ci0gIGZpCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcsCi0gICMgb3IgYGZvby5vOiBkZXAxLmggZGVwMi5oIFwnLCBvciBgIGRlcDMuaCBkZXA0LmggXCcuCi0gICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCi0gICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KLSAgc2VkICJzLF5bXjpdKjosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCi0gICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiB8Ci0gICAgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgOzsKLQotdHJ1NjQpCi0gICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCi0gICAjIGVmZmVjdC4gIGBjYyAtTUQgLW8gZm9vLm8gLi4uJyBwdXRzIHRoZSBkZXBlbmRlbmNpZXMgaW50byBgZm9vLm8uZCcuCi0gICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0Ci0gICAjIGRlcGVuZGVuY2llcyBpbiBgZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KLSAgICMgU3ViZGlyZWN0b3JpZXMgYXJlIHJlc3BlY3RlZC4KLSAgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCi0gICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KLSAgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKLQotICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgICAjIFdpdGggVHJ1NjQgY2MsIHNoYXJlZCBvYmplY3RzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBhCi0gICAgICAjIHN0YXRpYyBsaWJyYXJ5LiAgVGhpcyBtZWNhbmlzbSBpcyB1c2VkIGluIGxpYnRvb2wgMS40IHNlcmllcyB0bwotICAgICAgIyBoYW5kbGUgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgaW4gYSBzaW5nbGUgY29tcGlsYXRpb24uCi0gICAgICAjIFdpdGggbGlidG9vbCAxLjQsIGRlcGVuZGVuY2llcyB3ZXJlIG91dHB1dCBpbiAkZGlyLmxpYnMvJGJhc2UubG8uZC4KLSAgICAgICMKLSAgICAgICMgV2l0aCBsaWJ0b29sIDEuNSB0aGlzIGV4Y2VwdGlvbiB3YXMgcmVtb3ZlZCwgYW5kIGxpYnRvb2wgbm93Ci0gICAgICAjIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlIHR3bwotICAgICAgIyBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAotICAgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQotICAgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgotICAgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKLSAgICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCi0gICAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KLSAgICAgIHRtcGRlcGZpbGUxPSRkaXIubGlicy8kYmFzZS5sby5kICAgIyBsaWJ0b29sIDEuNAotICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41Ci0gICAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgbGlidG9vbCAxLjUKLSAgICAgIHRtcGRlcGZpbGU0PSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0Ci0gICAgICAiJEAiIC1XYywtTUQKLSAgIGVsc2UKLSAgICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQKLSAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCi0gICAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAotICAgICAgdG1wZGVwZmlsZTQ9JGRpciRiYXNlLmQKLSAgICAgICIkQCIgLU1ECi0gICBmaQotCi0gICBzdGF0PSQ/Ci0gICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgIGVsc2UKLSAgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCi0gICAgICBleGl0ICRzdGF0Ci0gICBmaQotCi0gICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgotICAgZG8KLSAgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCi0gICBkb25lCi0gICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KLSAgICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCi0gICAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKLSAgIGVsc2UKLSAgICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCi0gICBmaQotICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgOzsKLQotI25vc2lkZWVmZmVjdCkKLSAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0Ci0gICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCi0KLWRhc2htc3Rkb3V0KQotICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKLSAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KLSAgIiRAIiB8fCBleGl0ICQ/Ci0KLSAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbwotICAgICAgc2hpZnQKLSAgICBkb25lCi0gICAgc2hpZnQKLSAgZmkKLQotICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCi0gIElGUz0iICIKLSAgZm9yIGFyZwotICBkbwotICAgIGNhc2UgJGFyZyBpbgotICAgIC1vKQotICAgICAgc2hpZnQKLSAgICAgIDs7Ci0gICAgJG9iamVjdCkKLSAgICAgIHNoaWZ0Ci0gICAgICA7OwotICAgICopCi0gICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKLSAgICAgIHNoaWZ0ICMgZm5vcmQKLSAgICAgIHNoaWZ0ICMgJGFyZwotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICB0ZXN0IC16ICIkZGFzaG1mbGFnIiAmJiBkYXNobWZsYWc9LU0KLSAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGA6JwotICAjIGluIHRoZSB0YXJnZXQgbmFtZS4gIFRoaXMgaXMgdG8gY29wZSB3aXRoIERPUy1zdHlsZSBmaWxlbmFtZXM6Ci0gICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgYGM6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0IGBjJyBvdGhlcndpc2UuCi0gICIkQCIgJGRhc2htZmxhZyB8Ci0gICAgc2VkICdzOl5bICBdKlteOiBdW146XVteOl0qXDpbICAgIF0qOiciJG9iamVjdCInXDogOicgPiAiJHRtcGRlcGZpbGUiCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIHwgXAotIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KLSMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgOzsKLQotZGFzaFhtc3Rkb3V0KQotICAjIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyB0byBzYXRpc2Z5IGRlcGVuZC5tNC4gIEl0IGlzIG5ldmVyIGFjdHVhbGx5Ci0gICMgcnVuLCBhcyB0aGlzIG1vZGUgaXMgc3BlY2lhbGx5IHJlY29nbml6ZWQgaW4gdGhlIHByZWFtYmxlLgotICBleGl0IDEKLSAgOzsKLQotbWFrZWRlcGVuZCkKLSAgIiRAIiB8fCBleGl0ICQ/Ci0gICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbwotICAgICAgc2hpZnQKLSAgICBkb25lCi0gICAgc2hpZnQKLSAgZmkKLSAgIyBYIG1ha2VkZXBlbmQKLSAgc2hpZnQKLSAgY2xlYXJlZD1ubwotICBmb3IgYXJnIGluICIkQCI7IGRvCi0gICAgY2FzZSAkY2xlYXJlZCBpbgotICAgIG5vKQotICAgICAgc2V0ICIiOyBzaGlmdAotICAgICAgY2xlYXJlZD15ZXMgOzsKLSAgICBlc2FjCi0gICAgY2FzZSAiJGFyZyIgaW4KLSAgICAtRCp8LUkqKQotICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OwotICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCi0gICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgotICAgIC0qfCRvYmplY3QpCi0gICAgICA7OwotICAgICopCi0gICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7Ci0gICAgZXNhYwotICBkb25lCi0gIG9ial9zdWZmaXg9ImBlY2hvICRvYmplY3QgfCBzZWQgJ3MvXi4qXC4vLi8nYCIKLSAgdG91Y2ggIiR0bXBkZXBmaWxlIgotICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIHwgdHIgJyAnICcKLScgfCBcCi0jIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgotIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhawotICA7OwotCi1jcHApCi0gICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgotICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgotICAiJEAiIHx8IGV4aXQgJD8KLQotICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICB3aGlsZSB0ZXN0ICQxICE9ICctLW1vZGU9Y29tcGlsZSc7IGRvCi0gICAgICBzaGlmdAotICAgIGRvbmUKLSAgICBzaGlmdAotICBmaQotCi0gICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KLSAgSUZTPSIgIgotICBmb3IgYXJnCi0gIGRvCi0gICAgY2FzZSAkYXJnIGluCi0gICAgLW8pCi0gICAgICBzaGlmdAotICAgICAgOzsKLSAgICAkb2JqZWN0KQotICAgICAgc2hpZnQKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgotICAgICAgc2hpZnQgIyBmbm9yZAotICAgICAgc2hpZnQgIyAkYXJnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gICIkQCIgLUUgfAotICAgIHNlZCAtbiAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyB8Ci0gICAgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKLSAgcm0gLWYgIiRkZXBmaWxlIgotICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICBjYXQgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKLSAgc2VkIDwgIiR0bXBkZXBmaWxlIiAnL14kL2Q7cy9eIC8vO3MvIFxcJC8vO3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICA7OwotCi1tc3Zpc3VhbGNwcCkKLSAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCi0gICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8sCi0gICMgYmVjYXVzZSB3ZSBtdXN0IHVzZSAtbyB3aGVuIHJ1bm5pbmcgbGlidG9vbC4KLSAgIiRAIiB8fCBleGl0ICQ/Ci0gIElGUz0iICIKLSAgZm9yIGFyZwotICBkbwotICAgIGNhc2UgIiRhcmciIGluCi0gICAgIi1HbSJ8Ii9HbSJ8Ii1HaSJ8Ii9HaSJ8Ii1aSSJ8Ii9aSSIpCi0Jc2V0IGZub3JkICIkQCIKLQlzaGlmdAotCXNoaWZ0Ci0JOzsKLSAgICAqKQotCXNldCBmbm9yZCAiJEAiICIkYXJnIgotCXNoaWZ0Ci0Jc2hpZnQKLQk7OwotICAgIGVzYWMKLSAgZG9uZQotICAiJEAiIC1FIHwKLSAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjplY2hvICJgY3lncGF0aCAtdSBcXCJcMVxcImAiOnAnIHwgc29ydCB8IHVuaXEgPiAiJHRtcGRlcGZpbGUiCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKLSAgLiAiJHRtcGRlcGZpbGUiIHwgc2VkICdzJSAlXFwgJWcnIHwgc2VkIC1uICcvXlwoLipcKSQvIHM6OglcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCi0gIGVjaG8gIgkiID4+ICIkZGVwZmlsZSIKLSAgLiAiJHRtcGRlcGZpbGUiIHwgc2VkICdzJSAlXFwgJWcnIHwgc2VkIC1uICcvXlwoLipcKSQvIHM6OlwxXDo6cCcgPj4gIiRkZXBmaWxlIgotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLW5vbmUpCi0gIGV4ZWMgIiRAIgotICA7OwotCi0qKQotICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKLSAgZXhpdCAxCi0gIDs7Ci1lc2FjCi0KLWV4aXQgMAotCi0jIExvY2FsIFZhcmlhYmxlczoKLSMgbW9kZTogc2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOiAyCi0jIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgotIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC1lbmQ6ICIkIgotIyBFbmQ6CmRpZmYgLS1naXQgYS9kb2MvTWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNzZiYWMuLjAwMDAwMDAKLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotUk09cm0KLU1BTkRJUj0kKERFU1RESVIpQG1hbmRpckAvbWFuMQotCi1YU0xUUFJPQz14c2x0cHJvYwotWFNMVFBST0NfRkxBR1M9QFhTTFRQUk9DX0ZMQUdTQAotWEhUTUxfU1RZTEVTSEVFVD0kKHNyY2RpcikveHNsL3hodG1sLnhzbAotQ0hVTktfWEhUTUxfU1RZTEVTSEVFVD0kKHNyY2RpcikveHNsL3hodG1sLWNodW5rLnhzbAotWE1MX0NBVEFMT0dfRklMRVM9eHNsL2NhdGFsb2cueG1sCi1TVFlMRVNIRUVUUz0kKENIVU5LX1hIVE1MX1NUWUxFU0hFRVQpICQoc3JjZGlyKS94c2wveGh0bWwtY29tbW9uLnhzbAotCi1tYW5fTUFOUyA9IFwKLQlvcHJvZmlsZS4xIFwKLQlvcGNvbnRyb2wuMSBcCi0Jb3ByZXBvcnQuMSBcCi0Jb3Bhbm5vdGF0ZS4xIFwKLQlvcGdwcm9mLjEgXAotCW9waGVscC4xIFwKLQlvcGFyY2hpdmUuMQotCi1odG1sZGlyID0gJChwcmVmaXgpL3NoYXJlL2RvYy9vcHJvZmlsZQotZGlzdF9odG1sX0RBVEEgPSBvcHJvZmlsZS5odG1sIGludGVybmFscy5odG1sCi0KLWlmIGhhdmVfeHNsdHByb2MKLQotb3Byb2ZpbGUuaHRtbDogJHt0b3Bfc3JjZGlyfS9kb2Mvb3Byb2ZpbGUueG1sCi0JWE1MX0NBVEFMT0dfRklMRVM9JChYTUxfQ0FUQUxPR19GSUxFUykgJChYU0xUUFJPQykgJChYU0xUUFJPQ19GTEFHUykgLW8gJEAgLS1zdHJpbmdwYXJhbSB2ZXJzaW9uIEBWRVJTSU9OQCAkKFhIVE1MX1NUWUxFU0hFRVQpICQ8Ci0KLWludGVybmFscy5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9pbnRlcm5hbHMueG1sCi0JWE1MX0NBVEFMT0dfRklMRVM9JChYTUxfQ0FUQUxPR19GSUxFUykgJChYU0xUUFJPQykgJChYU0xUUFJPQ19GTEFHUykgLW8gJEAgLS1zdHJpbmdwYXJhbSB2ZXJzaW9uIEBWRVJTSU9OQCAkKFhIVE1MX1NUWUxFU0hFRVQpICQ8Ci0KLSMgcnVsZXMgdG8gZ2VuZXJhdGUgb3Byb2ZpbGUuc2YubmV0L2RvYyBmaWxlcwotCi1kb2MvaW5kZXguaHRtbDogJHt0b3Bfc3JjZGlyfS9kb2Mvb3Byb2ZpbGUueG1sCi0JLW1rZGlyIGRvYy8KLQkkKFhTTFRQUk9DKSAtbyBkb2MvICQoWFNMVFBST0NfRkxBR1MpIC0tc3RyaW5ncGFyYW0gdmVyc2lvbiBAVkVSU0lPTkAgJChDSFVOS19YSFRNTF9TVFlMRVNIRUVUKSAkPAotCi1kb2MvaW50ZXJuYWxzL2luZGV4Lmh0bWw6ICR7dG9wX3NyY2Rpcn0vZG9jL2ludGVybmFscy54bWwKLQktbWtkaXIgZG9jL2ludGVybmFscy8KLQkkKFhTTFRQUk9DKSAtbyBkb2MvaW50ZXJuYWxzLyAkKFhTTFRQUk9DX0ZMQUdTKSAtLXN0cmluZ3BhcmFtIHZlcnNpb24gQFZFUlNJT05AICQoQ0hVTktfWEhUTUxfU1RZTEVTSEVFVCkgJDwKLQotY2h1bms6IGRvYy9pbmRleC5odG1sIGRvYy9pbnRlcm5hbHMvaW5kZXguaHRtbAotCWNwICR7dG9wX3NyY2Rpcn0vZG9jL2J1ZmZlcnMucG5nIGRvYy9pbnRlcm5hbHMvCi0KLWVsc2UKLQotb3Byb2ZpbGUuaHRtbDoKLQl0b3VjaCAkQAotCi1pbnRlcm5hbHMuaHRtbDoKLQl0b3VjaCAkQAotCi1jaHVuazoKLQotZW5kaWYKLQotZGlzdGNsZWFuLWxvY2FsOgotCSQoUk0pIC1mIHhzbC9jYXRhbG9nLTEueG1sIHhzbC9jYXRhbG9nLnhtbAotCi1jbGVhbi1sb2NhbDoKLQkkKFJNKSAtZiAkKGdlbmVyYXRlZF9tYW5zKQotCi0jIHRoZXNlIGZpbGVzIGFyZSBub3QgY2xlYW5lZCBieSBtYWtlIHVuaW5zdGFsbCBhdXRvbWFrZSBidWcgPwotdW5pbnN0YWxsLWxvY2FsOgotCXJtIC1mIEBtYW5kaXJAL2NhdDEvb3Byb2ZpbGUuMS5negotCUBmb3IgZiBpbiAkKExJTktfTElTVCk7IGRvCQlcCi0JCXJtIC1mICQoQ0FURElSKS9jYXQxLyQkZi5nejsJXAotCWRvbmUKLQotRVhUUkFfRElTVCA9IFwKLQlvcHJvZmlsZS4xIFwKLQlvcHJvZmlsZS4xLmluIFwKLQlvcHJvZmlsZS54bWwgXAotCWludGVybmFscy54bWwgXAotCXhzbC9jYXRhbG9nLTEueG1sLmluIFwKLQl4c2wveGh0bWwueHNsIFwKLQl4c2wveGh0bWwtY29tbW9uLnhzbCBcCi0JeHNsL3hodG1sLWNodW5rLnhzbCBcCi0Jc3JjZG9jL0RveHlmaWxlLmluIFwKLQlzcmNkb2MvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5pbiBiL2RvYy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ0ZjNmZi4uMDAwMDAwMAotLS0gYS9kb2MvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1MDYgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1zdWJkaXIgPSBkb2MKLURJU1RfQ09NTU9OID0gJChkaXN0X2h0bWxfREFUQSkgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKLQkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL29wYW5ub3RhdGUuMS5pbiBcCi0JJChzcmNkaXIpL29wYXJjaGl2ZS4xLmluICQoc3JjZGlyKS9vcGNvbnRyb2wuMS5pbiBcCi0JJChzcmNkaXIpL29wZ3Byb2YuMS5pbiAkKHNyY2Rpcikvb3BoZWxwLjEuaW4gXAotCSQoc3JjZGlyKS9vcHJlcG9ydC4xLmluICQoc3JjZGlyKS9vcHJvZmlsZS4xLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPSBvcHJvZmlsZS4xIG9wY29udHJvbC4xIG9waGVscC4xIG9wcmVwb3J0LjEgXAotCW9wYW5ub3RhdGUuMSBvcGdwcm9mLjEgb3BhcmNoaXZlLjEKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLW1hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKG1hbjFkaXIpIiAiJChERVNURElSKSQoaHRtbGRpcikiCi1OUk9GRiA9IG5yb2ZmCi1NQU5TID0gJChtYW5fTUFOUykKLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWRpc3RfaHRtbERBVEFfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKQotREFUQSA9ICQoZGlzdF9odG1sX0RBVEEpCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACi1BTVRBUiA9IEBBTVRBUkAKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkZEX0xJQlMgPSBAQkZEX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFURSA9IEBEQVRFQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVYRUVYVCA9IEBFWEVFWFRACi1FWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUtJTkMgPSBAS0lOQ0AKLUtTUkMgPSBAS1NSQ0AKLUtWRVJTID0gQEtWRVJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSB4c2x0cHJvYwotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACi1YX0xJQlMgPSBAWF9MSUJTQAotWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1kYXRhZGlyID0gQGRhdGFkaXJACi1lbmFibGVfYWJpX0ZBTFNFID0gQGVuYWJsZV9hYmlfRkFMU0VACi1lbmFibGVfYWJpX1RSVUUgPSBAZW5hYmxlX2FiaV9UUlVFQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1oYXZlX3F0X0ZBTFNFID0gQGhhdmVfcXRfRkFMU0VACi1oYXZlX3F0X1RSVUUgPSBAaGF2ZV9xdF9UUlVFQAotaGF2ZV94c2x0cHJvY19GQUxTRSA9IEBoYXZlX3hzbHRwcm9jX0ZBTFNFQAotaGF2ZV94c2x0cHJvY19UUlVFID0gQGhhdmVfeHNsdHByb2NfVFJVRUAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWtlcm5lbF9zdXBwb3J0X0ZBTFNFID0gQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAota2VybmVsX3N1cHBvcnRfVFJVRSA9IEBrZXJuZWxfc3VwcG9ydF9UUlVFQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdG9wZGlyID0gQHRvcGRpckAKLVJNID0gcm0KLU1BTkRJUiA9ICQoREVTVERJUilAbWFuZGlyQC9tYW4xCi1YSFRNTF9TVFlMRVNIRUVUID0gJChzcmNkaXIpL3hzbC94aHRtbC54c2wKLUNIVU5LX1hIVE1MX1NUWUxFU0hFRVQgPSAkKHNyY2RpcikveHNsL3hodG1sLWNodW5rLnhzbAotWE1MX0NBVEFMT0dfRklMRVMgPSB4c2wvY2F0YWxvZy54bWwKLVNUWUxFU0hFRVRTID0gJChDSFVOS19YSFRNTF9TVFlMRVNIRUVUKSAkKHNyY2RpcikveHNsL3hodG1sLWNvbW1vbi54c2wKLW1hbl9NQU5TID0gXAotCW9wcm9maWxlLjEgXAotCW9wY29udHJvbC4xIFwKLQlvcHJlcG9ydC4xIFwKLQlvcGFubm90YXRlLjEgXAotCW9wZ3Byb2YuMSBcCi0Jb3BoZWxwLjEgXAotCW9wYXJjaGl2ZS4xCi0KLWh0bWxkaXIgPSAkKHByZWZpeCkvc2hhcmUvZG9jL29wcm9maWxlCi1kaXN0X2h0bWxfREFUQSA9IG9wcm9maWxlLmh0bWwgaW50ZXJuYWxzLmh0bWwKLUVYVFJBX0RJU1QgPSBcCi0Jb3Byb2ZpbGUuMSBcCi0Jb3Byb2ZpbGUuMS5pbiBcCi0Jb3Byb2ZpbGUueG1sIFwKLQlpbnRlcm5hbHMueG1sIFwKLQl4c2wvY2F0YWxvZy0xLnhtbC5pbiBcCi0JeHNsL3hodG1sLnhzbCBcCi0JeHNsL3hodG1sLWNvbW1vbi54c2wgXAotCXhzbC94aHRtbC1jaHVuay54c2wgXAotCXNyY2RvYy9Eb3h5ZmlsZS5pbiBcCi0Jc3JjZG9jL01ha2VmaWxlCi0KLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGRvYy9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZG9jL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotb3Byb2ZpbGUuMTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL29wcm9maWxlLjEuaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotb3Bjb250cm9sLjE6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9vcGNvbnRyb2wuMS5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACi1vcGhlbHAuMTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL29waGVscC4xLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLW9wcmVwb3J0LjE6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9vcHJlcG9ydC4xLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLW9wYW5ub3RhdGUuMTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL29wYW5ub3RhdGUuMS5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACi1vcGdwcm9mLjE6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9vcGdwcm9mLjEuaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotb3BhcmNoaXZlLjE6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9vcGFyY2hpdmUuMS5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACi11bmluc3RhbGwtaW5mby1hbToKLWluc3RhbGwtbWFuMTogJChtYW4xX01BTlMpICQobWFuX01BTlMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChtYW4xZGlyKSIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQobWFuMWRpcikiCi0JQGxpc3Q9JyQobWFuMV9NQU5TKSAkKGRpc3RfbWFuMV9NQU5TKSAkKG5vZGlzdF9tYW4xX01BTlMpJzsgXAotCWwyPSckKG1hbl9NQU5TKSAkKGRpc3RfbWFuX01BTlMpICQobm9kaXN0X21hbl9NQU5TKSc7IFwKLQlmb3IgaSBpbiAkJGwyOyBkbyBcCi0JICBjYXNlICIkJGkiIGluIFwKLQkgICAgKi4xKikgbGlzdD0iJCRsaXN0ICQkaSIgOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJChzcmNkaXIpLyQkaTsgdGhlbiBmaWxlPSQoc3JjZGlyKS8kJGk7IFwKLQkgIGVsc2UgZmlsZT0kJGk7IGZpOyBcCi0JICBleHQ9YGVjaG8gJCRpIHwgc2VkIC1lICdzL14uKlxcLi8vJ2A7IFwKLQkgIGNhc2UgIiQkZXh0IiBpbiBcCi0JICAgIDEqKSA7OyBcCi0JICAgICopIGV4dD0nMScgOzsgXAotCSAgZXNhYzsgXAotCSAgaW5zdD1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvXFwuWzAtOWEtel0qJCQvLydgOyBcCi0JICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAtZSAncy9eLipcLy8vJ2A7IFwKLQkgIGluc3Q9YGVjaG8gJCRpbnN0IHwgc2VkICckKHRyYW5zZm9ybSknYC4kJGV4dDsgXAotCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRmaWxlJyAnJChERVNURElSKSQobWFuMWRpcikvJCRpbnN0JyI7IFwKLQkgICQoSU5TVEFMTF9EQVRBKSAiJCRmaWxlIiAiJChERVNURElSKSQobWFuMWRpcikvJCRpbnN0IjsgXAotCWRvbmUKLXVuaW5zdGFsbC1tYW4xOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQobWFuMV9NQU5TKSAkKGRpc3RfbWFuMV9NQU5TKSAkKG5vZGlzdF9tYW4xX01BTlMpJzsgXAotCWwyPSckKG1hbl9NQU5TKSAkKGRpc3RfbWFuX01BTlMpICQobm9kaXN0X21hbl9NQU5TKSc7IFwKLQlmb3IgaSBpbiAkJGwyOyBkbyBcCi0JICBjYXNlICIkJGkiIGluIFwKLQkgICAgKi4xKikgbGlzdD0iJCRsaXN0ICQkaSIgOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGV4dD1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvXi4qXFwuLy8nYDsgXAotCSAgY2FzZSAiJCRleHQiIGluIFwKLQkgICAgMSopIDs7IFwKLQkgICAgKikgZXh0PScxJyA7OyBcCi0JICBlc2FjOyBcCi0JICBpbnN0PWBlY2hvICQkaSB8IHNlZCAtZSAncy9cXC5bMC05YS16XSokJC8vJ2A7IFwKLQkgIGluc3Q9YGVjaG8gJCRpbnN0IHwgc2VkIC1lICdzL14uKlwvLy8nYDsgXAotCSAgaW5zdD1gZWNobyAkJGluc3QgfCBzZWQgJyQodHJhbnNmb3JtKSdgLiQkZXh0OyBcCi0JICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQobWFuMWRpcikvJCRpbnN0IjsgXAotCWRvbmUKLWluc3RhbGwtZGlzdF9odG1sREFUQTogJChkaXN0X2h0bWxfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQl0ZXN0IC16ICIkKGh0bWxkaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChodG1sZGlyKSIKLQlAbGlzdD0nJChkaXN0X2h0bWxfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoZGlzdF9odG1sREFUQV9JTlNUQUxMKSAnJCRkJCRwJyAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKLQkgICQoZGlzdF9odG1sREFUQV9JTlNUQUxMKSAiJCRkJCRwIiAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIjsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWRpc3RfaHRtbERBVEE6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChkaXN0X2h0bWxfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIjsgXAotCWRvbmUKLXRhZ3M6IFRBR1MKLVRBR1M6Ci0KLWN0YWdzOiBDVEFHUwotQ1RBR1M6Ci0KLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JJChta2Rpcl9wKSAkKGRpc3RkaXIpL3NyY2RvYyAkKGRpc3RkaXIpL3hzbAotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKE1BTlMpICQoREFUQSkKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKG1hbjFkaXIpIiAiJChERVNURElSKSQoaHRtbGRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChta2Rpcl9wKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1sb2NhbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbG9jYWwKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRpc3RfaHRtbERBVEEgaW5zdGFsbC1tYW4KLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4xCi0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWRpc3RfaHRtbERBVEEgdW5pbnN0YWxsLWluZm8tYW0gXAotCXVuaW5zdGFsbC1sb2NhbCB1bmluc3RhbGwtbWFuCi0KLXVuaW5zdGFsbC1tYW46IHVuaW5zdGFsbC1tYW4xCi0KLS5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxvY2FsIFwKLQlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxvY2FsIGRpc3RkaXIgZHZpIGR2aS1hbSBcCi0JaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kaXN0X2h0bWxEQVRBIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtbWFuMSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAotCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIFwKLQl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWRpc3RfaHRtbERBVEEgdW5pbnN0YWxsLWluZm8tYW0gXAotCXVuaW5zdGFsbC1sb2NhbCB1bmluc3RhbGwtbWFuIHVuaW5zdGFsbC1tYW4xCi0KLQotQGhhdmVfeHNsdHByb2NfVFJVRUBvcHJvZmlsZS5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9vcHJvZmlsZS54bWwKLUBoYXZlX3hzbHRwcm9jX1RSVUVACVhNTF9DQVRBTE9HX0ZJTEVTPSQoWE1MX0NBVEFMT0dfRklMRVMpICQoWFNMVFBST0MpICQoWFNMVFBST0NfRkxBR1MpIC1vICRAIC0tc3RyaW5ncGFyYW0gdmVyc2lvbiBAVkVSU0lPTkAgJChYSFRNTF9TVFlMRVNIRUVUKSAkPAotCi1AaGF2ZV94c2x0cHJvY19UUlVFQGludGVybmFscy5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9pbnRlcm5hbHMueG1sCi1AaGF2ZV94c2x0cHJvY19UUlVFQAlYTUxfQ0FUQUxPR19GSUxFUz0kKFhNTF9DQVRBTE9HX0ZJTEVTKSAkKFhTTFRQUk9DKSAkKFhTTFRQUk9DX0ZMQUdTKSAtbyAkQCAtLXN0cmluZ3BhcmFtIHZlcnNpb24gQFZFUlNJT05AICQoWEhUTUxfU1RZTEVTSEVFVCkgJDwKLQotIyBydWxlcyB0byBnZW5lcmF0ZSBvcHJvZmlsZS5zZi5uZXQvZG9jIGZpbGVzCi0KLUBoYXZlX3hzbHRwcm9jX1RSVUVAZG9jL2luZGV4Lmh0bWw6ICR7dG9wX3NyY2Rpcn0vZG9jL29wcm9maWxlLnhtbAotQGhhdmVfeHNsdHByb2NfVFJVRUAJLW1rZGlyIGRvYy8KLUBoYXZlX3hzbHRwcm9jX1RSVUVACSQoWFNMVFBST0MpIC1vIGRvYy8gJChYU0xUUFJPQ19GTEFHUykgLS1zdHJpbmdwYXJhbSB2ZXJzaW9uIEBWRVJTSU9OQCAkKENIVU5LX1hIVE1MX1NUWUxFU0hFRVQpICQ8Ci0KLUBoYXZlX3hzbHRwcm9jX1RSVUVAZG9jL2ludGVybmFscy9pbmRleC5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9pbnRlcm5hbHMueG1sCi1AaGF2ZV94c2x0cHJvY19UUlVFQAktbWtkaXIgZG9jL2ludGVybmFscy8KLUBoYXZlX3hzbHRwcm9jX1RSVUVACSQoWFNMVFBST0MpIC1vIGRvYy9pbnRlcm5hbHMvICQoWFNMVFBST0NfRkxBR1MpIC0tc3RyaW5ncGFyYW0gdmVyc2lvbiBAVkVSU0lPTkAgJChDSFVOS19YSFRNTF9TVFlMRVNIRUVUKSAkPAotCi1AaGF2ZV94c2x0cHJvY19UUlVFQGNodW5rOiBkb2MvaW5kZXguaHRtbCBkb2MvaW50ZXJuYWxzL2luZGV4Lmh0bWwKLUBoYXZlX3hzbHRwcm9jX1RSVUVACWNwICR7dG9wX3NyY2Rpcn0vZG9jL2J1ZmZlcnMucG5nIGRvYy9pbnRlcm5hbHMvCi0KLUBoYXZlX3hzbHRwcm9jX0ZBTFNFQG9wcm9maWxlLmh0bWw6Ci1AaGF2ZV94c2x0cHJvY19GQUxTRUAJdG91Y2ggJEAKLQotQGhhdmVfeHNsdHByb2NfRkFMU0VAaW50ZXJuYWxzLmh0bWw6Ci1AaGF2ZV94c2x0cHJvY19GQUxTRUAJdG91Y2ggJEAKLQotQGhhdmVfeHNsdHByb2NfRkFMU0VAY2h1bms6Ci0KLWRpc3RjbGVhbi1sb2NhbDoKLQkkKFJNKSAtZiB4c2wvY2F0YWxvZy0xLnhtbCB4c2wvY2F0YWxvZy54bWwKLQotY2xlYW4tbG9jYWw6Ci0JJChSTSkgLWYgJChnZW5lcmF0ZWRfbWFucykKLQotIyB0aGVzZSBmaWxlcyBhcmUgbm90IGNsZWFuZWQgYnkgbWFrZSB1bmluc3RhbGwgYXV0b21ha2UgYnVnID8KLXVuaW5zdGFsbC1sb2NhbDoKLQlybSAtZiBAbWFuZGlyQC9jYXQxL29wcm9maWxlLjEuZ3oKLQlAZm9yIGYgaW4gJChMSU5LX0xJU1QpOyBkbwkJXAotCQlybSAtZiAkKENBVERJUikvY2F0MS8kJGYuZ3o7CVwKLQlkb25lCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2MvaW50ZXJuYWxzLmh0bWwgYi9kb2MvaW50ZXJuYWxzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMDUxNjguLjAwMDAwMDAKLS0tIGEvZG9jL2ludGVybmFscy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci0gIDxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci0gICAgPHRpdGxlPk9Qcm9maWxlIEludGVybmFsczwvdGl0bGU+Ci0gICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS42OC4xIiAvPgotICA8L2hlYWQ+Ci0gIDxib2R5PgotICAgIDxkaXYgY2xhc3M9ImJvb2siIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgPGRpdj4KLSAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgPGgxIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Im9wcm9maWxlLWludGVybmFscyI+PC9hPk9Qcm9maWxlIEludGVybmFsczwvaDE+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF1dGhvcmdyb3VwIj4KLSAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXV0aG9yIj4KLSAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImF1dGhvciI+PHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+Sm9objwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPkxldm9uPC9zcGFuPjwvaDM+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWZmaWxpYXRpb24iPgotICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRkcmVzcyI+Ci0gICAgICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJlbWFpbCI+Jmx0OzxhIGhyZWY9Im1haWx0bzpsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZyI+bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc8L2E+Jmd0OzwvY29kZT4KLSAgICAgICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgIDxwIGNsYXNzPSJjb3B5cmlnaHQiPkNvcHlyaWdodCCpIDIwMDMgSm9obiBMZXZvbjwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxociAvPgotICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2IGNsYXNzPSJ0b2MiPgotICAgICAgICA8cD4KLSAgICAgICAgICA8Yj5UYWJsZSBvZiBDb250ZW50czwvYj4KLSAgICAgICAgPC9wPgotICAgICAgICA8ZGw+Ci0gICAgICAgICAgPGR0PgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgotICAgICAgICAgICAgICA8YSBocmVmPSIjaW50cm9kdWN0aW9uIj4xLiBJbnRyb2R1Y3Rpb248L2E+Ci0gICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgPC9kdD4KLSAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI292ZXJ2aWV3Ij4xLiBPdmVydmlldzwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvbXBvbmVudHMiPjIuIENvbXBvbmVudHMgb2YgdGhlIE9Qcm9maWxlIHN5c3RlbTwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2FyY2gtc3BlY2lmaWMtY29tcG9uZW50cyI+Mi4xLiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29tcG9uZW50czwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZmlsZXN5c3RlbSI+Mi4yLiBvcHJvZmlsZWZzPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNkcml2ZXIiPjIuMy4gR2VuZXJpYyBrZXJuZWwgZHJpdmVyPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNkYWVtb24iPjIuNC4gVGhlIE9Qcm9maWxlIGRhZW1vbjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcG9zdC1wcm9maWxpbmciPjIuNS4gUG9zdC1wcm9maWxpbmcgdG9vbHM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+Ci0gICAgICAgICAgICAgIDxhIGhyZWY9IiNwZXJmb3JtYW5jZS1jb3VudGVycyI+Mi4gUGVyZm9ybWFuY2UgY291bnRlciBtYW5hZ2VtZW50PC9hPgotICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgPGRkPgotICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwZXJmb3JtYW5jZS1jb3VudGVycy11aSI+MS4gUHJvdmlkaW5nIGEgdXNlciBpbnRlcmZhY2U8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwZXJmb3JtYW5jZS1jb3VudGVycy1wcm9ncmFtbWluZyI+Mi4gUHJvZ3JhbW1pbmcgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXJzPC9hPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcGVyZm9ybWFuY2UtY291bnRlcnMtc3RhcnQiPjIuMS4gU3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSBjb3VudGVyczwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaWQyNDk1MDIxIj4yLjIuIElBNjQgYW5kIHBlcmZtb248L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+Ci0gICAgICAgICAgICAgIDxhIGhyZWY9IiNjb2xsZWN0aW5nLXNhbXBsZXMiPjMuIENvbGxlY3RpbmcgYW5kIHByb2Nlc3Npbmcgc2FtcGxlczwvYT4KLSAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICA8L2R0PgotICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcmVjZWl2aW5nLWludGVycnVwdHMiPjEuIFJlY2VpdmluZyBpbnRlcnJ1cHRzPC9hPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjY29yZS1zdHJ1Y3R1cmUiPjIuIENvcmUgZGF0YSBzdHJ1Y3R1cmVzPC9hPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjbG9nZ2luZy1zYW1wbGUiPjMuIExvZ2dpbmcgYSBzYW1wbGU8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNsb2dnaW5nLXN0YWNrIj40LiBMb2dnaW5nIHN0YWNrIHRyYWNlczwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3N5bmNocm9uaXNpbmctYnVmZmVycyI+NS4gU3luY2hyb25pc2luZyB0aGUgQ1BVIGJ1ZmZlcnMgdG8gdGhlIGV2ZW50IGJ1ZmZlcjwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2RlbnRyeS1jb29raWVzIj42LiBJZGVudGlmeWluZyBiaW5hcnkgaW1hZ2VzPC9hPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZmluZGluZy1kZW50cnkiPjcuIEZpbmRpbmcgYSBzYW1wbGUncyBiaW5hcnkgaW1hZ2UgYW5kIG9mZnNldDwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8L2RsPgotICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgPGR0PgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgotICAgICAgICAgICAgICA8YSBocmVmPSIjc2FtcGxlLWZpbGVzIj40LiBHZW5lcmF0aW5nIHNhbXBsZSBmaWxlczwvYT4KLSAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICA8L2R0PgotICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJvY2Vzc2luZy1idWZmZXIiPjEuIFByb2Nlc3NpbmcgdGhlIGJ1ZmZlcjwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hhbmRsaW5nLWtlcm5lbC1zYW1wbGVzIj4xLjEuIEhhbmRsaW5nIGtlcm5lbCBzYW1wbGVzPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlLWdlbmVyYXRpb24iPjIuIExvY2F0aW5nIGFuZCBjcmVhdGluZyBzYW1wbGUgZmlsZXM8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzYW1wbGUtZmlsZS13cml0aW5nIj4zLiBXcml0aW5nIGRhdGEgdG8gYSBzYW1wbGUgZmlsZTwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8L2RsPgotICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgPGR0PgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgotICAgICAgICAgICAgICA8YSBocmVmPSIjb3V0cHV0Ij41LiBHZW5lcmF0aW5nIHVzZWZ1bCBvdXRwdXQ8L2E+Ci0gICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgPC9kdD4KLSAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2ZpbGUtc3BlY2lmaWNhdGlvbiI+MS4gSGFuZGxpbmcgdGhlIHByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlLWNvbGxhdGluZyI+Mi4gQ29sbGF0aW5nIHRoZSBjYW5kaWRhdGUgc2FtcGxlIGZpbGVzPC9hPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjc2FtcGxlLWZpbGUtY2xhc3NpZnlpbmciPjIuMS4gQ2xhc3NpZnlpbmcgc2FtcGxlIGZpbGVzPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzYW1wbGUtZmlsZS1pbnZlcnRpbmciPjIuMi4gQ3JlYXRpbmcgaW52ZXJ0ZWQgcHJvZmlsZSBsaXN0czwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnZW5lcmF0aW5nLXByb2ZpbGUtZGF0YSI+My4gR2VuZXJhdGluZyBwcm9maWxlIGRhdGE8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNiZmQiPjMuMS4gUHJvY2Vzc2luZyB0aGUgYmluYXJ5IGltYWdlPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwcm9jZXNzaW5nLXNhbXBsZS1maWxlcyI+My4yLiBQcm9jZXNzaW5nIHRoZSBzYW1wbGUgZmlsZXM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ2VuZXJhdGluZy1vdXRwdXQiPjQuIEdlbmVyYXRpbmcgb3V0cHV0PC9hPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2xvc3NhcnkiPgotICAgICAgICAgICAgICA8YSBocmVmPSIjZ2xvc3NhcnkiPkdsb3NzYXJ5IG9mIE9Qcm9maWxlIHNvdXJjZSBjb25jZXB0cyBhbmQgdHlwZXM8L2E+Ci0gICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgPC9kdD4KLSAgICAgICAgPC9kbD4KLSAgICAgIDwvZGl2PgotICAgICAgPGRpdiBjbGFzcz0ibGlzdC1vZi1maWd1cmVzIj4KLSAgICAgICAgPHA+Ci0gICAgICAgICAgPGI+TGlzdCBvZiBGaWd1cmVzPC9iPgotICAgICAgICA8L3A+Ci0gICAgICAgIDxkbD4KLSAgICAgICAgICA8ZHQ+My4xLiA8YSBocmVmPSIjaWQyNDk1MTkzIj5UaGUgT1Byb2ZpbGUgYnVmZmVyczwvYT48L2R0PgotICAgICAgICA8L2RsPgotICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImludHJvZHVjdGlvbiI+PC9hPkNoYXB0ZXKgMS6gSW50cm9kdWN0aW9uPC9oMj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KLSAgICAgICAgICA8cD4KLSAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgotICAgICAgICAgIDwvcD4KLSAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI292ZXJ2aWV3Ij4xLiBPdmVydmlldzwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjY29tcG9uZW50cyI+Mi4gQ29tcG9uZW50cyBvZiB0aGUgT1Byb2ZpbGUgc3lzdGVtPC9hPgotICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2FyY2gtc3BlY2lmaWMtY29tcG9uZW50cyI+Mi4xLiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29tcG9uZW50czwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNmaWxlc3lzdGVtIj4yLjIuIG9wcm9maWxlZnM8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZHJpdmVyIj4yLjMuIEdlbmVyaWMga2VybmVsIGRyaXZlcjwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNkYWVtb24iPjIuNC4gVGhlIE9Qcm9maWxlIGRhZW1vbjwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwb3N0LXByb2ZpbGluZyI+Mi41LiBQb3N0LXByb2ZpbGluZyB0b29sczwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8L2RsPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHA+Ci1UaGlzIGRvY3VtZW50IGlzIGN1cnJlbnQgZm9yIE9Qcm9maWxlIHZlcnNpb24gMC45LjFjdnMuCi1UaGlzIGRvY3VtZW50IHByb3ZpZGVzIHNvbWUgZGV0YWlscyBvbiB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgT1Byb2ZpbGUgZm9yIHRoZQotaW50ZXJlc3RlZCBoYWNrZXIuIFRoaXMgZG9jdW1lbnQgYXNzdW1lcyBzdHJvbmcgQywgd29ya2luZyBDKyssIHBsdXMgc29tZSBrbm93bGVkZ2Ugb2YKLWtlcm5lbCBpbnRlcm5hbHMgYW5kIENQVSBoYXJkd2FyZS4KLTwvcD4KLSAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgotICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgotICAgICAgICAgIDxwPgotT25seSB0aGUgIm5ldyIgaW1wbGVtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIGtlcm5lbCAyLjYgYW5kIGFib3ZlIGlzIGNvdmVyZWQgaGVyZS4gMi40Ci11c2VzIGEgdmVyeSBkaWZmZXJlbnQga2VybmVsIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBhbmQgZGFlbW9uIHRvIHByb2R1Y2UgdGhlIHNhbXBsZSBmaWxlcy4KLTwvcD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvdmVydmlldyI+PC9hPjEuoE92ZXJ2aWV3PC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLU9Qcm9maWxlIGlzIGEgc3RhdGlzdGljYWwgY29udGludW91cyBwcm9maWxlci4gSW4gb3RoZXIgd29yZHMsIHByb2ZpbGVzIGFyZSBnZW5lcmF0ZWQgYnkKLXJlZ3VsYXJseSBzYW1wbGluZyB0aGUgY3VycmVudCByZWdpc3RlcnMgb24gZWFjaCBDUFUgKGZyb20gYW4gaW50ZXJydXB0IGhhbmRsZXIsIHRoZQotc2F2ZWQgUEMgdmFsdWUgYXQgdGhlIHRpbWUgb2YgaW50ZXJydXB0IGlzIHN0b3JlZCksIGFuZCBjb252ZXJ0aW5nIHRoYXQgcnVudGltZSBQQwotdmFsdWUgaW50byBzb21ldGhpbmcgbWVhbmluZ2Z1bCB0byB0aGUgcHJvZ3JhbW1lci4KLTwvcD4KLSAgICAgICAgICA8cD4KLU9Qcm9maWxlIGFjaGlldmVzIHRoaXMgYnkgdGFraW5nIHRoZSBzdHJlYW0gb2Ygc2FtcGxlZCBQQyB2YWx1ZXMsIGFsb25nIHdpdGggdGhlIGRldGFpbAotb2Ygd2hpY2ggdGFzayB3YXMgcnVubmluZyBhdCB0aGUgdGltZSBvZiB0aGUgaW50ZXJydXB0LCBhbmQgY29udmVydGluZyBpbnRvIGEgZmlsZSBvZmZzZXQKLWFnYWluc3QgYSBwYXJ0aWN1bGFyIGJpbmFyeSBmaWxlLiBCZWNhdXNlIGFwcGxpY2F0aW9ucyA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm1tYXAoKTwvY29kZT4KLXRoZSBjb2RlIHRoZXkgcnVuIChiZSBpdCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9iaW4vYmFzaDwvY29kZT4sIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2xpYi9saWJmb28uc288L2NvZGU+Ci1vciB3aGF0ZXZlciksIGl0J3MgcG9zc2libGUgdG8gZmluZCB0aGUgcmVsZXZhbnQgYmluYXJ5IGZpbGUgYW5kIG9mZnNldCBieSB3YWxraW5nCi10aGUgdGFzaydzIGxpc3Qgb2YgbWFwcGVkIG1lbW9yeSBhcmVhcy4gRWFjaCBQQyB2YWx1ZSBpcyB0aHVzIGNvbnZlcnRlZCBpbnRvIGEgdHVwbGUKLW9mIGJpbmFyeS1pbWFnZSxvZmZzZXQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgdGhlIHVzZXJzcGFjZSB0b29scyBjYW4gdXNlIGRpcmVjdGx5Ci10byByZWNvbnN0cnVjdCB3aGVyZSB0aGUgY29kZSBjYW1lIGZyb20sIGluY2x1ZGluZyB0aGUgcGFydGljdWxhciBhc3NlbWJseSBpbnN0cnVjdGlvbnMsCi1zeW1ib2wsIGFuZCBzb3VyY2UgbGluZSAodmlhIHRoZSBiaW5hcnkncyBkZWJ1ZyBpbmZvcm1hdGlvbiBpZiBwcmVzZW50KS4KLTwvcD4KLSAgICAgICAgICA8cD4KLVJlZ3VsYXJseSBzYW1wbGluZyB0aGUgUEMgdmFsdWUgbGlrZSB0aGlzIGFwcHJveGltYXRlcyB3aGF0IGFjdHVhbGx5IHdhcyBleGVjdXRlZCBhbmQKLWhvdyBvZnRlbiAtIG1vcmUgb2Z0ZW4gdGhhbiBub3QsIHRoaXMgc3RhdGlzdGljYWwgYXBwcm94aW1hdGlvbiBpcyBnb29kIGVub3VnaCB0bwotcmVmbGVjdCByZWFsaXR5LiBJbiBjb21tb24gb3BlcmF0aW9uLCB0aGUgdGltZSBiZXR3ZWVuIGVhY2ggc2FtcGxlIGludGVycnVwdCBpcyByZWd1bGF0ZWQKLWJ5IGEgZml4ZWQgbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcy4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIHJlc3VsdHMgd2lsbCByZWZsZWN0IHdoZXJlCi10aGUgQ1BVIGlzIHNwZW5kaW5nIHRoZSBtb3N0IHRpbWU7IHRoaXMgaXMgb2J2aW91c2x5IGEgdmVyeSB1c2VmdWwgaW5mb3JtYXRpb24gc291cmNlCi1mb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMuCi08L3A+Ci0gICAgICAgICAgPHA+Ci1Tb21ldGltZXMgdGhvdWdoLCBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyIG5lZWRzIGRpZmZlcmVudCBraW5kcyBvZiBpbmZvcm1hdGlvbjogZm9yIGV4YW1wbGUsCi0id2hpY2ggb2YgdGhlIHNvdXJjZSByb3V0aW5lcyBjYXVzZSB0aGUgbW9zdCBjYWNoZSBtaXNzZXMgPyIuIFRoZSByaXNlIGluIGltcG9ydGFuY2Ugb2YKLXN1Y2ggbWV0cmljcyBpbiByZWNlbnQgeWVhcnMgaGFzIGxlZCBtYW55IENQVSBtYW51ZmFjdHVyZXJzIHRvIHByb3ZpZGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UKLWNvdW50ZXJzIGNhcGFibGUgb2YgbWVhc3VyaW5nIHRoZXNlIGV2ZW50cyBvbiB0aGUgaGFyZHdhcmUgbGV2ZWwuIFR5cGljYWxseSwgdGhlc2UgY291bnRlcnMKLWluY3JlbWVudCBvbmNlIHBlciBlYWNoIGV2ZW50LCBhbmQgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IG9uIHJlYWNoaW5nIHNvbWUgcHJlLWRlZmluZWQKLW51bWJlciBvZiBldmVudHMuIE9Qcm9maWxlIGNhbiB1c2UgdGhlc2UgaW50ZXJydXB0cyB0byBnZW5lcmF0ZSBzYW1wbGVzOiB0aGVuLCB0aGUKLXByb2ZpbGUgcmVzdWx0cyBhcmUgYSBzdGF0aXN0aWNhbCBhcHByb3hpbWF0aW9uIG9mIHdoaWNoIGNvZGUgY2F1c2VkIGhvdyBtYW55IG9mIHRoZQotZ2l2ZW4gZXZlbnQuCi08L3A+Ci0gICAgICAgICAgPHA+Ci1Db25zaWRlciBhIHNpbXBsaWZpZWQgc3lzdGVtIHRoYXQgb25seSBleGVjdXRlcyB0d28gZnVuY3Rpb25zIEEgYW5kIEIuIEEKLXRha2VzIG9uZSBjeWNsZSB0byBleGVjdXRlLCB3aGVyZWFzIEIgdGFrZXMgOTkgY3ljbGVzLiBJbWFnaW5lIHdlIHJ1biBhdAotMTAwIGN5Y2xlcyBhIHNlY29uZCwgYW5kIHdlJ3ZlIHNldCB0aGUgcGVyZm9ybWFuY2UgY291bnRlciB0byBjcmVhdGUgYW4KLWludGVycnVwdCBhZnRlciBhIHNldCBudW1iZXIgb2YgImV2ZW50cyIgKGluIHRoaXMgY2FzZSBhbiBldmVudCBpcyBvbmUKLWNsb2NrIGN5Y2xlKS4gSXQgc2hvdWxkIGJlIGNsZWFyIHRoYXQgdGhlIGNoYW5jZXMgb2YgdGhlIGludGVycnVwdAotb2NjdXJyaW5nIGluIGZ1bmN0aW9uIEEgaXMgMS8xMDAsIGFuZCA5OS8xMDAgZm9yIGZ1bmN0aW9uIEIuIFRodXMsIHdlCi1zdGF0aXN0aWNhbGx5IGFwcHJveGltYXRlIHRoZSBhY3R1YWwgcmVsYXRpdmUgcGVyZm9ybWFuY2UgZmVhdHVyZXMgb2YKLXRoZSB0d28gZnVuY3Rpb25zIG92ZXIgdGltZS4gVGhpcyBzYW1lIGFuYWx5c2lzIHdvcmtzIGZvciBvdGhlciB0eXBlcyBvZgotZXZlbnRzLCBwcm92aWRpbmcgdGhhdCB0aGUgaW50ZXJydXB0IGlzIHRpZWQgdG8gdGhlIG51bWJlciBvZiBldmVudHMKLW9jY3VycmluZyAodGhhdCBpcywgYWZ0ZXIgTiBldmVudHMsIGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQpLgotPC9wPgotICAgICAgICAgIDxwPgotVGhlcmUgYXJlIHR5cGljYWxseSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIGNvdW50ZXJzLCBzbyBpdCdzIHBvc3NpYmxlIHRvIHNldCB1cCBwcm9maWxpbmcKLWZvciBzZXZlcmFsIGRpZmZlcmVudCBldmVudCB0eXBlcy4gVXNpbmcgdGhlc2UgY291bnRlcnMgZ2l2ZXMgdXMgYSBwb3dlcmZ1bCwgbG93LW92ZXJoZWFkCi13YXkgb2YgZ2FpbmluZyBwZXJmb3JtYW5jZSBtZXRyaWNzLiBJZiBPUHJvZmlsZSwgb3IgdGhlIENQVSwgZG9lcyBub3Qgc3VwcG9ydCBwZXJmb3JtYW5jZQotY291bnRlcnMsIHRoZW4gYSBzaW1wbGVyIG1ldGhvZCBpcyB1c2VkOiB0aGUga2VybmVsIHRpbWVyIGludGVycnVwdCBmZWVkcyBzYW1wbGVzCi1pbnRvIE9Qcm9maWxlIGl0c2VsZi4KLTwvcD4KLSAgICAgICAgICA8cD4KLVRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgY29uY2VybnMgaXRzZWxmIHdpdGggaG93IHdlIGdldCBmcm9tIHJlY2VpdmluZyBzYW1wbGVzIGF0Ci1pbnRlcnJ1cHQgdGltZSB0byBwcm9kdWNpbmcgdXNlci1yZWFkYWJsZSBwcm9maWxlIGluZm9ybWF0aW9uLgotPC9wPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImNvbXBvbmVudHMiPjwvYT4yLqBDb21wb25lbnRzIG9mIHRoZSBPUHJvZmlsZSBzeXN0ZW08L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJhcmNoLXNwZWNpZmljLWNvbXBvbmVudHMiPjwvYT4yLjEuoEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb21wb25lbnRzPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotSWYgT1Byb2ZpbGUgc3VwcG9ydHMgdGhlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGZvdW5kIG9uCi1hIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBjb2RlIGZvciBtYW5hZ2luZyB0aGUgZGV0YWlscyBvZiBzZXR0aW5nCi11cCBhbmQgbWFuYWdpbmcgdGhlc2UgY291bnRlcnMgY2FuIGJlIGZvdW5kIGluIHRoZSBrZXJuZWwgc291cmNlCi10cmVlIGluIHRoZSByZWxldmFudCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmFyY2gvPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXJjaDwvZW0+PC9zcGFuPi9vcHJvZmlsZS88L2NvZGU+Ci1kaXJlY3RvcnkuIFRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gd29ya3MgdmlhCi1maWxsaW5nIGluIHRoZSBvcHJvZmlsZV9vcGVyYXRpb25zIHN0cnVjdHVyZSBhdCBpbml0IHRpbWUuIFRoaXMKLXByb3ZpZGVzIGEgc2V0IG9mIG9wZXJhdGlvbnMgc3VjaCBhcyA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnNldHVwKCk8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5zdGFydCgpPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5zdG9wKCk8L2NvZGU+LCBldGMuCi10aGF0IG1hbmFnZSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgZGV0YWlscyBvZiBmaWRkbGluZyB3aXRoIHRoZQotcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnMuCi08L3A+Ci0gICAgICAgICAgICA8cD4KLVRoZSBvdGhlciBpbXBvcnRhbnQgZmFjaWxpdHkgYXZhaWxhYmxlIHRvIHRoZSBhcmNoaXRlY3R1cmUgY29kZSBpcwotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5vcHJvZmlsZV9hZGRfc2FtcGxlKCk8L2NvZGU+LiAgVGhpcyBpcyB3aGVyZSBhIHBhcnRpY3VsYXIgc2FtcGxlCi10YWtlbiBhdCBpbnRlcnJ1cHQgdGltZSBpcyBmZWQgaW50byB0aGUgZ2VuZXJpYyBPUHJvZmlsZSBkcml2ZXIgY29kZS4KLTwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iZmlsZXN5c3RlbSI+PC9hPjIuMi6gb3Byb2ZpbGVmczwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLU9Qcm9maWxlIGltcGxlbWVudHMgYSBwc2V1ZG8tZmlsZXN5c3RlbSBrbm93biBhcyAib3Byb2ZpbGVmcyIsIG1vdW50ZWQgZnJvbQotdXNlcnNwYWNlIGF0IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2Rldi9vcHJvZmlsZTwvY29kZT4uIFRoaXMgY29uc2lzdHMgb2Ygc21hbGwKLWZpbGVzIGZvciByZXBvcnRpbmcgYW5kIHJlY2VpdmluZyBjb25maWd1cmF0aW9uIGZyb20gdXNlcnNwYWNlLCBhcyB3ZWxsCi1hcyB0aGUgYWN0dWFsIGNoYXJhY3RlciBkZXZpY2UgdGhhdCB0aGUgT1Byb2ZpbGUgdXNlcnNwYWNlIHJlY2VpdmVzIHNhbXBsZXMKLWZyb20uIEF0IDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c2V0dXAoKTwvY29kZT4gdGltZSwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtYXkKLWFkZCBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMgcmVsYXRlZCB0byB0aGUgZGV0YWlscyBvZiB0aGUgcGVyZm9ybWFuY2UKLWNvdW50ZXJzLiBGb3IgZXhhbXBsZSwgb24geDg2LCBvbmUgbnVtYmVyZWQgZGlyZWN0b3J5IGZvciBlYWNoIGhhcmR3YXJlCi1wZXJmb3JtYW5jZSBjb3VudGVyIGlzIGFkZGVkLCB3aXRoIGZpbGVzIGluIGVhY2ggZm9yIHRoZSBldmVudCB0eXBlLAotcmVzZXQgdmFsdWUsIGV0Yy4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotVGhlIGZpbGVzeXN0ZW0gYWxzbyBjb250YWlucyBhIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+c3RhdHM8L2NvZGU+IGRpcmVjdG9yeSB3aXRoCi1hIG51bWJlciBvZiB1c2VmdWwgY291bnRlcnMgZm9yIHZhcmlvdXMgT1Byb2ZpbGUgZXZlbnRzLgotPC9wPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJkcml2ZXIiPjwvYT4yLjMuoEdlbmVyaWMga2VybmVsIGRyaXZlcjwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLVRoaXMgbGl2ZXMgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kcml2ZXJzL29wcm9maWxlLzwvY29kZT4sIGFuZCBmb3JtcyB0aGUgY29yZSBvZgotaG93IE9Qcm9maWxlIHdvcmtzIGluIHRoZSBrZXJuZWwuIEl0cyBqb2IgaXMgdG8gdGFrZSBzYW1wbGVzIGRlbGl2ZXJlZAotZnJvbSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgKHZpYSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wcm9maWxlX2FkZF9zYW1wbGUoKTwvY29kZT4pLAotYW5kIGJ1ZmZlciB0aGlzIGRhdGEsIGluIGEgdHJhbnNmb3JtZWQgZm9ybSBhcyBkZXNjcmliZWQgbGF0ZXIsIHVudGlsIHJlbGVhc2luZwotdGhlIGRhdGEgdG8gdGhlIHVzZXJzcGFjZSBkYWVtb24gdmlhIHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9kZXYvb3Byb2ZpbGUvYnVmZmVyPC9jb2RlPgotY2hhcmFjdGVyIGRldmljZS4KLTwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iZGFlbW9uIj48L2E+Mi40LqBUaGUgT1Byb2ZpbGUgZGFlbW9uPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotVGhlIE9Qcm9maWxlIHVzZXJzcGFjZSBkYWVtb24ncyBqb2IgaXMgdG8gdGFrZSB0aGUgcmF3IGRhdGEgcHJvdmlkZWQgYnkgdGhlCi1rZXJuZWwgYW5kIHdyaXRlIGl0IHRvIHRoZSBkaXNrLiBJdCB0YWtlcyB0aGUgc2luZ2xlIGRhdGEgc3RyZWFtIGZyb20gdGhlCi1rZXJuZWwgYW5kIGxvZ3Mgc2FtcGxlIGRhdGEgYWdhaW5zdCBhIG51bWJlciBvZiBzYW1wbGUgZmlsZXMgKGZvdW5kIGluCi08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudC88L2NvZGU+LiBGb3IgdGhlIGJlbmVmaXQKLW9mIHRoZSAic2VwYXJhdGUiIGZ1bmN0aW9uYWxpdHksIHRoZSBuYW1lcy9wYXRocyBvZiB0aGVzZSBzYW1wbGUgZmlsZXMKLWFyZSBtYW5nbGVkIHRvIHJlZmxlY3Qgd2hlcmUgdGhlIHNhbXBsZXMgd2VyZSBmcm9tOiB0aGlzIGNhbiBpbmNsdWRlCi10aHJlYWQgSURzLCB0aGUgYmluYXJ5IGZpbGUgcGF0aCwgdGhlIGV2ZW50IHR5cGUgdXNlZCwgYW5kIG1vcmUuCi08L3A+Ci0gICAgICAgICAgICA8cD4KLUFmdGVyIHRoaXMgZmluYWwgc3RlcCBmcm9tIGludGVycnVwdCB0byBkaXNrIGZpbGUsIHRoZSBkYXRhIGlzIG5vdwotcGVyc2lzdGVudCAodGhhdCBpcywgY2hhbmdlcyBpbiB0aGUgcnVubmluZyBvZiB0aGUgc3lzdGVtIGRvIG5vdCBpbnZhbGlkYXRlCi1zdG9yZWQgZGF0YSkuIFNvIHRoZSBwb3N0LXByb2ZpbGluZyB0b29scyBjYW4gcnVuIG9uIHRoaXMgZGF0YSBhdCBhbnkKLXRpbWUgKGFzc3VtaW5nIHRoZSBvcmlnaW5hbCBiaW5hcnkgZmlsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhbmQgdW5jaGFuZ2VkLAotbmF0dXJhbGx5KS4KLTwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InBvc3QtcHJvZmlsaW5nIj48L2E+Mi41LqBQb3N0LXByb2ZpbGluZyB0b29sczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci1TbyBmYXIsIHdlJ3ZlIGNvbGxlY3RlZCBkYXRhLCBidXQgd2UndmUgeWV0IHRvIHByZXNlbnQgaXQgaW4gYSB1c2VmdWwgZm9ybQotdG8gdGhlIHVzZXIuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcG9zdC1wcm9maWxpbmcgdG9vbHMuIEluIGdlbmVyYWwgZm9ybSwKLXRoZXkgY29sbGF0ZSBhIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIHNhbXBsZSBmaWxlcywgbG9hZCBhbmQgcHJvY2VzcyBlYWNoIG9uZQotY29ycmVsYXRlZCBhZ2FpbnN0IHRoZSByZWxldmFudCBiaW5hcnkgZmlsZSwgYW5kIGZpbmFsbHkgcHJvZHVjZSB1c2VyLXJlYWRhYmxlCi1pbmZvcm1hdGlvbi4KLTwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvZGl2PgotICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJwZXJmb3JtYW5jZS1jb3VudGVycyI+PC9hPkNoYXB0ZXKgMi6gUGVyZm9ybWFuY2UgY291bnRlciBtYW5hZ2VtZW50PC9oMj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KLSAgICAgICAgICA8cD4KLSAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgotICAgICAgICAgIDwvcD4KLSAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI3BlcmZvcm1hbmNlLWNvdW50ZXJzLXVpIj4xLiBQcm92aWRpbmcgYSB1c2VyIGludGVyZmFjZTwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjcGVyZm9ybWFuY2UtY291bnRlcnMtcHJvZ3JhbW1pbmciPjIuIFByb2dyYW1taW5nIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlZ2lzdGVyczwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwZXJmb3JtYW5jZS1jb3VudGVycy1zdGFydCI+Mi4xLiBTdGFydGluZyBhbmQgc3RvcHBpbmcgdGhlIGNvdW50ZXJzPC9hPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2lkMjQ5NTAyMSI+Mi4yLiBJQTY0IGFuZCBwZXJmbW9uPC9hPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgICA8L2RkPgotICAgICAgICAgIDwvZGw+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0icGVyZm9ybWFuY2UtY291bnRlcnMtdWkiPjwvYT4xLqBQcm92aWRpbmcgYSB1c2VyIGludGVyZmFjZTwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1UaGUgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnMgbmVlZCBwcm9ncmFtbWluZyBpbiBvcmRlciB0byBzZXQgdGhlCi10eXBlIG9mIGV2ZW50IHRvIGNvdW50LCBldGMuIE9Qcm9maWxlIHVzZXMgYSBzdGFuZGFyZCBtb2RlbCBhY3Jvc3MgYWxsCi1DUFVzIGZvciBkZWZpbmluZyB0aGVzZSBldmVudHMgYXMgZm9sbG93cyA6Ci08L3A+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+Ci0gICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgICAgPGNvbGdyb3VwPgotICAgICAgICAgICAgICAgIDxjb2wgLz4KLSAgICAgICAgICAgICAgICA8Y29sIC8+Ci0gICAgICAgICAgICAgIDwvY29sZ3JvdXA+Ci0gICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmV2ZW50PC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgIDx0ZD5UaGUgZXZlbnQgdHlwZSBlLmcuIERBVEFfTUVNX1JFRlM8L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj51bml0IG1hc2s8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgPHRkPlRoZSBzdWItZXZlbnRzIHRvIGNvdW50IChtb3JlIGRldGFpbGVkIHNwZWNpZmljYXRpb24pPC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+Y291bnRlcjwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8dGQ+VGhlIGhhcmR3YXJlIGNvdW50ZXIocykgdGhhdCBjYW4gY291bnQgdGhpcyBldmVudDwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmNvdW50PC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgIDx0ZD5UaGUgcmVzZXQgdmFsdWUgKGhvdyBtYW55IGV2ZW50cyBiZWZvcmUgYW4gaW50ZXJydXB0KTwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmtlcm5lbDwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8dGQ+V2hldGhlciB0aGUgY291bnRlciBzaG91bGQgaW5jcmVtZW50IHdoZW4gaW4ga2VybmVsIHNwYWNlPC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+dXNlcjwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8dGQ+V2hldGhlciB0aGUgY291bnRlciBzaG91bGQgaW5jcmVtZW50IHdoZW4gaW4gdXNlciBzcGFjZTwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1UaGUgdGVybSAidW5pdCBtYXNrIiBpcyBib3Jyb3dlZCBmcm9tIHRoZSBJbnRlbCBhcmNoaXRlY3R1cmVzLCBhbmQgY2FuCi1mdXJ0aGVyIHNwZWNpZnkgZXhhY3RseSB3aGVuIGEgY291bnRlciBpcyBpbmNyZW1lbnRlZCAoZm9yIGV4YW1wbGUsCi1jYWNoZS1yZWxhdGVkIGV2ZW50cyBjYW4gYmUgcmVzdHJpY3RlZCB0byBwYXJ0aWN1bGFyIHN0YXRlIHRyYW5zaXRpb25zCi1vZiB0aGUgY2FjaGUgbGluZXMpLgotPC9wPgotICAgICAgICAgIDxwPgotQWxsIG9mIHRoZSBhdmFpbGFibGUgaGFyZHdhcmUgZXZlbnRzIGFuZCB0aGVpciBkZXRhaWxzIGFyZSBzcGVjaWZpZWQgaW4KLXRoZSB0ZXh0dWFsIGZpbGVzIGluIHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmV2ZW50czwvY29kZT4gZGlyZWN0b3J5LiBUaGUKLXN5bnRheCBvZiB0aGVzZSBmaWxlcyBzaG91bGQgYmUgZmFpcmx5IG9idmlvdXMuIFRoZSB1c2VyIHNwZWNpZmllcyB0aGUKLW5hbWVzIGFuZCBjb25maWd1cmF0aW9uIGRldGFpbHMgb2YgdGhlIGNob3NlbiBjb3VudGVycyB2aWEKLTxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wY29udHJvbDwvc3Ryb25nPjwvc3Bhbj4uIFRoZXNlIGFyZSB0aGVuIHdyaXR0ZW4gdG8gdGhlIGtlcm5lbAotbW9kdWxlIChpbiBudW1lcmljYWwgZm9ybSkgdmlhIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2Rldi9vcHJvZmlsZS9OLzwvY29kZT4KLXdoZXJlIE4gaXMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGNvdW50ZXIgKHNvbWUgZXZlbnRzIGNhbiBvbmx5IGJlIHVzZWQKLW9uIHNwZWNpZmljIGNvdW50ZXJzOyBPUHJvZmlsZSBoaWRlcyB0aGVzZSBkZXRhaWxzIGZyb20gdGhlIHVzZXIgd2hlbgotcG9zc2libGUpLiBPbiBJQTY0LCB0aGUgcGVyZm1vbi1iYXNlZCBpbnRlcmZhY2UgYmVoYXZlcyBzb21ld2hhdAotZGlmZmVyZW50bHksIGFzIGRlc2NyaWJlZCBsYXRlci4KLTwvcD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJwZXJmb3JtYW5jZS1jb3VudGVycy1wcm9ncmFtbWluZyI+PC9hPjIuoFByb2dyYW1taW5nIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlZ2lzdGVyczwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1XZSBoYXZlIGRlc2NyaWJlZCBob3cgdGhlIHVzZXIgaW50ZXJmYWNlIGZpbGxzIGluIHRoZSBkZXNpcmVkCi1jb25maWd1cmF0aW9uIG9mIHRoZSBjb3VudGVycyBhbmQgdHJhbnNtaXRzIHRoZSBpbmZvcm1hdGlvbiB0byB0aGUKLWtlcm5lbC4gSXQgaXMgdGhlIGpvYiBvZiB0aGUgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj4tJmd0O3NldHVwKCk8L2NvZGU+IG1ldGhvZAotdG8gYWN0dWFsbHkgcHJvZ3JhbSB0aGUgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnMuIENsZWFybHksIHRoZQotZGV0YWlscyBvZiBob3cgdGhpcyBpcyBkb25lIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYzsgaXQgaXMgYWxzbwotbW9kZWwtc3BlY2lmaWMgb24gbWFueSBhcmNoaXRlY3R1cmVzLiBGb3IgZXhhbXBsZSwgaTM4NiBwcm92aWRlcyBtZXRob2RzCi1mb3IgZWFjaCBtb2RlbCB0eXBlIHRoYXQgcHJvZ3JhbXMgdGhlIGNvdW50ZXIgcmVnaXN0ZXJzIGNvcnJlY3RseQotKHNlZSB0aGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5vcF9tb2RlbF8qPC9jb2RlPiBmaWxlcyBpbgotPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5hcmNoL2kzODYvb3Byb2ZpbGU8L2NvZGU+IGZvciB0aGUgZGV0YWlscykuIFRoZSBtZXRob2QKLXJlYWRzIHRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSB2aXJ0dWFsIG9wcm9maWxlZnMgZmlsZXMgYW5kIHByb2dyYW1zCi10aGUgcmVnaXN0ZXJzIGFwcHJvcHJpYXRlbHksIHJlYWR5IGZvciBzdGFydGluZyB0aGUgYWN0dWFsIHByb2ZpbGluZwotc2Vzc2lvbi4KLTwvcD4KLSAgICAgICAgICA8cD4KLVRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZHJpdmVycyBtYWtlIHN1cmUgdG8gc2F2ZSB0aGUgb2xkIHJlZ2lzdGVyCi1zZXR0aW5ncyBiZWZvcmUgZG9pbmcgT1Byb2ZpbGUgc2V0dXAuIFRoZXkgYXJlIHJlc3RvcmVkIHdoZW4gT1Byb2ZpbGUKLXNodXRzIGRvd24uIFRoaXMgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwgb24gaTM4Niwgd2hlcmUgdGhlIE5NSSB3YXRjaGRvZwotdXNlcyB0aGUgc2FtZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlZ2lzdGVycyBhcyBPUHJvZmlsZTsgdGhleSBjYW5ub3QKLXJ1biBjb25jdXJyZW50bHksIGJ1dCBPUHJvZmlsZSBtYWtlcyBzdXJlIHRvIHJlc3RvcmUgdGhlIHNldHVwIGl0IGZvdW5kCi1iZWZvcmUgaXQgd2FzIHJ1bm5pbmcuCi08L3A+Ci0gICAgICAgICAgPHA+Ci1JbiBhZGRpdGlvbiB0byBwcm9ncmFtbWluZyB0aGUgY291bnRlciByZWdpc3RlcnMgdGhlbXNlbHZlcywgb3RoZXIgc2V0dXAKLWlzIG9mdGVuIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIG9uIGkzODYsIHRoZSBsb2NhbCBBUElDIG5lZWRzCi1wcm9ncmFtbWluZyBpbiBvcmRlciB0byBtYWtlIHRoZSBjb3VudGVyJ3Mgb3ZlcmZsb3cgaW50ZXJydXB0IGFwcGVhciBhcwotYW4gTk1JIChub24tbWFza2FibGUgaW50ZXJydXB0KS4gVGhpcyBhbGxvd3Mgc2FtcGxpbmcgKGFuZCB0aGVyZWZvcmUKLXByb2ZpbGluZykgb2YgcmVnaW9ucyB3aGVyZSAibm9ybWFsIiBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQsIGVuYWJsaW5nCi1tb3JlIHJlbGlhYmxlIHByb2ZpbGVzLgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJwZXJmb3JtYW5jZS1jb3VudGVycy1zdGFydCI+PC9hPjIuMS6gU3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSBjb3VudGVyczwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLUluaXRpYXRpbmcgYSBwcm9maWxpbmcgc2Vzc2lvbiBpcyBkb25lIHZpYSB3cml0aW5nIGFuIEFTQ0lJICcxJwotdG8gdGhlIGZpbGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vZGV2L29wcm9maWxlL2VuYWJsZTwvY29kZT4uIFRoaXMgc2V0cyB1cCB0aGUKLWNvcmUsIGFuZCBjYWxscyBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZHJpdmVyIHRvIGFjdHVhbGx5Ci1lbmFibGUgZWFjaCBjb25maWd1cmVkIGNvdW50ZXIuIEFnYWluLCB0aGUgZGV0YWlscyBvZiBob3cgdGhpcyBpcwotZG9uZSBpcyBtb2RlbC1zcGVjaWZpYyAoZm9yIGV4YW1wbGUsIHRoZSBBdGhsb24gbW9kZWxzIGNhbiBkaXNhYmxlCi1vciBlbmFibGUgb24gYSBwZXItY291bnRlciBiYXNpcywgdW5saWtlIHRoZSBQUHJvIG1vZGVscykuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImlkMjQ5NTAyMSI+PC9hPjIuMi6gSUE2NCBhbmQgcGVyZm1vbjwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLVRoZSBJQTY0IGFyY2hpdGVjdHVyZSBwcm92aWRlcyBhIGRpZmZlcmVudCBpbnRlcmZhY2UgZnJvbSB0aGUgb3RoZXIKLWFyY2hpdGVjdHVyZXMsIHVzaW5nIHRoZSBleGlzdGluZyBwZXJmbW9uIGRyaXZlci4gUmVnaXN0ZXIgcHJvZ3JhbW1pbmcKLWlzIGhhbmRsZWQgZW50aXJlbHkgaW4gdXNlci1zcGFjZSAoc2VlCi08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmRhZW1vbi9vcGRfcGVyZm1vbi5jPC9jb2RlPiBmb3IgdGhlIGRldGFpbHMpLiBBIHByb2Nlc3MKLWlzIGZvcmtlZCBmb3IgZWFjaCBDUFUsIHdoaWNoIGNyZWF0ZXMgYSBwZXJmbW9uIGNvbnRleHQgYW5kIHNldHMgdGhlCi1jb3VudGVyIHJlZ2lzdGVycyBhcHByb3ByaWF0ZWx5IHZpYSB0aGUKLTxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3lzX3BlcmZtb25jdGw8L2NvZGU+IGludGVyZmFjZS4gSW4gYWRkaXRpb24sIHRoZSBhY3R1YWwKLWluaXRpYXRpb24gYW5kIHRlcm1pbmF0aW9uIG9mIHRoZSBwcm9maWxpbmcgc2Vzc2lvbiBpcyBoYW5kbGVkIHZpYSB0aGUKLXNhbWUgaW50ZXJmYWNlIHVzaW5nIDxjb2RlIGNsYXNzPSJjb25zdGFudCI+UEZNX1NUQVJUPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb25zdGFudCI+UEZNX1NUT1A8L2NvZGU+LiBPbiBJQTY0LCB0aGVuLCB0aGVyZSBhcmUgbm8gb3Byb2ZpbGVmcwotZmlsZXMgZm9yIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycywgYXMgdGhlIGtlcm5lbCBkcml2ZXIgZG9lcyBub3QKLXByb2dyYW0gdGhlIHJlZ2lzdGVycyBpdHNlbGYuCi08L3A+Ci0gICAgICAgICAgICA8cD4KLUluc3RlYWQsIHRoZSBwZXJmbW9uIGRyaXZlciBmb3IgT1Byb2ZpbGUgc2ltcGx5IHJlZ2lzdGVycyB3aXRoIHRoZQotT1Byb2ZpbGUgY29yZSB3aXRoIGFuIE9Qcm9maWxlLXNwZWNpZmljIFVVSUQuIER1cmluZyBhIHByb2ZpbGluZwotc2Vzc2lvbiwgdGhlIHBlcmZtb24gY29yZSBjYWxscyBpbnRvIHRoZSBPUHJvZmlsZSBwZXJmbW9uIGRyaXZlciBhbmQKLXNhbXBsZXMgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgT1Byb2ZpbGUgY29yZSBpdHNlbGYgYXMgdXN1YWwgKHdpdGgKLTxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Byb2ZpbGVfYWRkX3NhbXBsZSgpPC9jb2RlPikuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImNvbGxlY3Rpbmctc2FtcGxlcyI+PC9hPkNoYXB0ZXKgMy6gQ29sbGVjdGluZyBhbmQgcHJvY2Vzc2luZyBzYW1wbGVzPC9oMj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KLSAgICAgICAgICA8cD4KLSAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgotICAgICAgICAgIDwvcD4KLSAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI3JlY2VpdmluZy1pbnRlcnJ1cHRzIj4xLiBSZWNlaXZpbmcgaW50ZXJydXB0czwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjY29yZS1zdHJ1Y3R1cmUiPjIuIENvcmUgZGF0YSBzdHJ1Y3R1cmVzPC9hPgotICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNsb2dnaW5nLXNhbXBsZSI+My4gTG9nZ2luZyBhIHNhbXBsZTwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjbG9nZ2luZy1zdGFjayI+NC4gTG9nZ2luZyBzdGFjayB0cmFjZXM8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI3N5bmNocm9uaXNpbmctYnVmZmVycyI+NS4gU3luY2hyb25pc2luZyB0aGUgQ1BVIGJ1ZmZlcnMgdG8gdGhlIGV2ZW50IGJ1ZmZlcjwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjZGVudHJ5LWNvb2tpZXMiPjYuIElkZW50aWZ5aW5nIGJpbmFyeSBpbWFnZXM8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZpbmRpbmctZGVudHJ5Ij43LiBGaW5kaW5nIGEgc2FtcGxlJ3MgYmluYXJ5IGltYWdlIGFuZCBvZmZzZXQ8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgPC9kbD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJyZWNlaXZpbmctaW50ZXJydXB0cyI+PC9hPjEuoFJlY2VpdmluZyBpbnRlcnJ1cHRzPC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLU5hdHVyYWxseSwgaG93IHRoZSBvdmVyZmxvdyBpbnRlcnJ1cHRzIGFyZSByZWNlaXZlZCBpcyBzcGVjaWZpYwotdG8gdGhlIGhhcmR3YXJlIGFyY2hpdGVjdHVyZSwgdW5sZXNzIHdlIGFyZSBpbiAidGltZXIiIG1vZGUsIHdoZXJlIHRoZQotbG9nZ2luZyByb3V0aW5lIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBzdGFuZGFyZCBrZXJuZWwgdGltZXIKLWludGVycnVwdCBoYW5kbGVyLgotPC9wPgotICAgICAgICAgIDxwPgotT24gdGhlIGkzODYgYXJjaGl0ZWN0dXJlLCB0aGUgbG9jYWwgQVBJQyBpcyBwcm9ncmFtbWVkIHN1Y2ggdGhhdCB3aGVuIGEKLWNvdW50ZXIgb3ZlcmZsb3dzICh0aGF0IGlzLCBpdCByZWNlaXZlcyBhbiBldmVudCB0aGF0IGNhdXNlcyBhbiBpbnRlZ2VyCi1vdmVyZmxvdyBvZiB0aGUgcmVnaXN0ZXIgdmFsdWUgdG8gemVybyksIGFuIE5NSSBpcyBnZW5lcmF0ZWQuIFRoaXMgY2FsbHMKLWludG8gdGhlIGdlbmVyYWwgaGFuZGxlciA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmRvX25taSgpPC9jb2RlPjsgYmVjYXVzZSBPUHJvZmlsZQotaGFzIHJlZ2lzdGVyZWQgaXRzZWxmIGFzIGNhcGFibGUgb2YgaGFuZGxpbmcgTk1JIGludGVycnVwdHMsIHRoaXMgd2lsbAotY2FsbCBpbnRvIHRoZSBPUHJvZmlsZSBkcml2ZXIgY29kZSBpbgotPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5hcmNoL2kzODYvb3Byb2ZpbGU8L2NvZGU+LiBIZXJlLCB0aGUgc2F2ZWQgUEMgdmFsdWUgKHRoZQotQ1BVIHNhdmVzIHRoZSByZWdpc3RlciBzZXQgYXQgdGhlIHRpbWUgb2YgaW50ZXJydXB0IG9uIHRoZSBzdGFjawotYXZhaWxhYmxlIGZvciBpbnNwZWN0aW9uKSBpcyBleHRyYWN0ZWQsIGFuZCB0aGUgY291bnRlcnMgYXJlIGV4YW1pbmVkIHRvCi1maW5kIG91dCB3aGljaCBvbmUgZ2VuZXJhdGVkIHRoZSBpbnRlcnJ1cHQuIEFsc28gZGV0ZXJtaW5lZCBpcyB3aGV0aGVyCi10aGUgc3lzdGVtIHdhcyBpbnNpZGUga2VybmVsIG9yIHVzZXIgc3BhY2UgYXQgdGhlIHRpbWUgb2YgdGhlIGludGVycnVwdC4KLVRoZXNlIHRocmVlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhcmUgdGhlbiBmb3J3YXJkZWQgb250byB0aGUgT1Byb2ZpbGUKLWNvcmUgdmlhIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Byb2ZpbGVfYWRkX3NhbXBsZSgpPC9jb2RlPi4gRmluYWxseSwgdGhlCi1jb3VudGVyIHZhbHVlcyBhcmUgcmVzZXQgdG8gdGhlIGNob3NlbiBjb3VudCB2YWx1ZSwgdG8gZW5zdXJlIGFub3RoZXIKLWludGVycnVwdCBoYXBwZW5zIGFmdGVyIGFub3RoZXIgTiBldmVudHMgaGF2ZSBvY2N1cnJlZC4gT3RoZXIKLWFyY2hpdGVjdHVyZXMgYmVoYXZlIGluIGEgc2ltaWxhciBtYW5uZXIuCi08L3A+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iY29yZS1zdHJ1Y3R1cmUiPjwvYT4yLqBDb3JlIGRhdGEgc3RydWN0dXJlczwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1CZWZvcmUgY29uc2lkZXJpbmcgd2hhdCBoYXBwZW5zIHdoZW4gd2UgbG9nIGEgc2FtcGxlLCB3ZSBzaGFsbCBkaWdyZXNzCi1mb3IgYSBtb21lbnQgYW5kIGxvb2sgYXQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBkYXRhIGNvbGxlY3Rpb24KLXN5c3RlbS4KLTwvcD4KLSAgICAgICAgICA8cD4KLU9Qcm9maWxlIG1haW50YWlucyBhIHNtYWxsIGJ1ZmZlciBmb3Igc3RvcmluZyB0aGUgbG9nZ2VkIHNhbXBsZXMgZm9yCi1lYWNoIENQVSBvbiB0aGUgc3lzdGVtLiBPbmx5IHRoaXMgYnVmZmVyIGlzIGFsdGVyZWQgd2hlbiB3ZSBhY3R1YWxseSBsb2cKLWEgc2FtcGxlIChyZW1lbWJlciwgd2UgbWF5IHN0aWxsIGJlIGluIGFuIE5NSSBjb250ZXh0LCBzbyBubyBsb2NraW5nIGlzCi1wb3NzaWJsZSkuIFRoZSBidWZmZXIgaXMgbWFuYWdlZCBieSBhIHR3by1oYW5kZWQgc3lzdGVtOyB0aGUgImhlYWQiCi1pdGVyYXRvciBkaWN0YXRlcyB3aGVyZSB0aGUgbmV4dCBzYW1wbGUgZGF0YSBzaG91bGQgYmUgcGxhY2VkIGluIHRoZQotYnVmZmVyLiBPZiBjb3Vyc2UsIG92ZXJmbG93IG9mIHRoZSBidWZmZXIgaXMgcG9zc2libGUsIGluIHdoaWNoIGNhc2UKLXRoZSBzYW1wbGUgaXMgZGlzY2FyZGVkLgotPC9wPgotICAgICAgICAgIDxwPgotSXQgaXMgY3JpdGljYWwgdG8gcmVtZW1iZXIgdGhhdCBhdCB0aGlzIHBvaW50LCB0aGUgUEMgdmFsdWUgaXMgYW4KLWFic29sdXRlIHZhbHVlLCBhbmQgaXMgdGhlcmVmb3JlIG9ubHkgbWVhbmluZ2Z1bCBpbiB0aGUgY29udGV4dCBvZiB3aGljaAotdGFzayBpdCB3YXMgbG9nZ2VkIGFnYWluc3QuIFRodXMsIHRoZXNlIHBlci1DUFUgYnVmZmVycyBhbHNvIG1haW50YWluCi1kZXRhaWxzIG9mIHdoaWNoIHRhc2sgZWFjaCBsb2dnZWQgc2FtcGxlIGlzIGZvciwgYXMgZGVzY3JpYmVkIGluIHRoZQotbmV4dCBzZWN0aW9uLiBJbiBhZGRpdGlvbiwgd2Ugc3RvcmUgd2hldGhlciB0aGUgc2FtcGxlIHdhcyBpbiBrZXJuZWwKLXNwYWNlIG9yIHVzZXIgc3BhY2UgKG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyBhbmQgY29uZmlndXJhdGlvbnMsIHRoZSBhZGRyZXNzCi1zcGFjZSBpcyBub3Qgc3ViLWRpdmlkZWQgbmVhdGx5IGF0IGEgc3BlY2lmaWMgUEMgdmFsdWUsIHNvIHdlIG11c3Qgc3RvcmUKLXRoaXMgaW5mb3JtYXRpb24pLgotPC9wPgotICAgICAgICAgIDxwPgotQXMgd2VsbCBhcyB0aGVzZSBzbWFsbCBwZXItQ1BVIGJ1ZmZlcnMsIHdlIGhhdmUgYSBjb25zaWRlcmFibHkgbGFyZ2VyCi1zaW5nbGUgYnVmZmVyLiBUaGlzIGhvbGRzIHRoZSBkYXRhIHRoYXQgaXMgZXZlbnR1YWxseSBjb3BpZWQgb3V0IGludG8KLXRoZSBPUHJvZmlsZSBkYWVtb24uIE9uIGNlcnRhaW4gc3lzdGVtIGV2ZW50cywgdGhlIHBlci1DUFUgYnVmZmVycyBhcmUKLXByb2Nlc3NlZCBhbmQgZW50ZXJlZCAoaW4gbXV0YXRlZCBmb3JtKSBpbnRvIHRoZSBtYWluIGJ1ZmZlciwga25vd24gaW4KLXRoZSBzb3VyY2UgYXMgdGhlICJldmVudCBidWZmZXIiLiBUaGUgInRhaWwiIGl0ZXJhdG9yIGluZGljYXRlcyB0aGUKLXBvaW50IGZyb20gd2hpY2ggdGhlIENQVSBtYXkgYmUgcmVhZCwgdXAgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSAiaGVhZCIKLWl0ZXJhdG9yLiBUaGlzIHByb3ZpZGVzIGFuIGVudGlyZWx5IGxvY2stZnJlZSBtZXRob2QgZm9yIGV4dHJhY3RpbmcgZGF0YQotZnJvbSB0aGUgQ1BVIGJ1ZmZlcnMuIFRoaXMgcHJvY2VzcyBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIGxhdGVyIGluIHRoaXMgY2hhcHRlci4KLTwvcD4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWd1cmUiPgotICAgICAgICAgICAgPGEgaWQ9ImlkMjQ5NTE5MyI+PC9hPgotICAgICAgICAgICAgPHAgY2xhc3M9InRpdGxlIj4KLSAgICAgICAgICAgICAgPGI+RmlndXJloDMuMS6gVGhlIE9Qcm9maWxlIGJ1ZmZlcnM8L2I+Ci0gICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVmZmVycy5wbmciIGFsdD0iVGhlIE9Qcm9maWxlIGJ1ZmZlcnMiIC8+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJsb2dnaW5nLXNhbXBsZSI+PC9hPjMuoExvZ2dpbmcgYSBzYW1wbGU8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotQXMgbWVudGlvbmVkLCB0aGUgc2FtcGxlIGlzIGxvZ2dlZCBpbnRvIHRoZSBidWZmZXIgc3BlY2lmaWMgdG8gdGhlCi1jdXJyZW50IENQVS4gVGhlIENQVSBidWZmZXIgaXMgYSBzaW1wbGUgYXJyYXkgb2YgcGFpcnMgb2YgdW5zaWduZWQgbG9uZwotdmFsdWVzOyBmb3IgYSBzYW1wbGUsIHRoZXkgaG9sZCB0aGUgUEMgdmFsdWUgYW5kIHRoZSBjb3VudGVyIGZvciB0aGUKLXNhbXBsZS4gKFRoZSBjb3VudGVyIHZhbHVlIGlzIGxhdGVyIHVzZWQgdG8gdHJhbnNsYXRlIGJhY2sgaW50byB0aGUgcmVsZXZhbnQKLWV2ZW50IHR5cGUgdGhlIGNvdW50ZXIgd2FzIHByb2dyYW1tZWQgdG8pLgotPC9wPgotICAgICAgICAgIDxwPgotSW4gYWRkaXRpb24gdG8gbG9nZ2luZyB0aGUgc2FtcGxlIGl0c2VsZiwgd2UgYWxzbyBsb2cgdGFzayBzd2l0Y2hlcy4KLVRoaXMgaXMgc2ltcGx5IGRvbmUgYnkgc3RvcmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCB0YXNrIHRvIGxvZyBhCi1zYW1wbGUgb24gdGhhdCBDUFUgaW4gYSBkYXRhIHN0cnVjdHVyZSwgYW5kIHdyaXRpbmcgYSB0YXNrIHN3aXRjaCBlbnRyeQotaW50byB0aGUgYnVmZmVyIGlmIHRoZSBuZXcgdmFsdWUgb2YgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5jdXJyZW50KCk8L2NvZGU+IGhhcwotY2hhbmdlZC4gTm90ZSB0aGF0IGxhdGVyIHdlIHdpbGwgZGlyZWN0bHkgZGUtcmVmZXJlbmNlIHRoaXMgcG9pbnRlcjsKLXRoaXMgaW1wb3NlcyBjZXJ0YWluIHJlc3RyaWN0aW9ucyBvbiB3aGVuIGFuZCBob3cgdGhlIENQVSBidWZmZXJzIG5lZWQKLXRvIGJlIHByb2Nlc3NlZC4KLTwvcD4KLSAgICAgICAgICA8cD4KLUZpbmFsbHksIGFzIG1lbnRpb25lZCwgd2UgbG9nIHdoZXRoZXIgd2UgaGF2ZSBjaGFuZ2VkIGJldHdlZW4ga2VybmVsIGFuZAotdXNlcnNwYWNlIHVzaW5nIGEgc2ltaWxhciBtZXRob2QuIEJvdGggb2YgdGhlc2UgdmFyaWFibGVzCi0oPGNvZGUgY2xhc3M9InZhcm5hbWUiPmxhc3RfdGFzazwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5sYXN0X2lzX2tlcm5lbDwvY29kZT4pIGFyZQotcmVzZXQgd2hlbiB0aGUgQ1BVIGJ1ZmZlciBpcyByZWFkLgotPC9wPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImxvZ2dpbmctc3RhY2siPjwvYT40LqBMb2dnaW5nIHN0YWNrIHRyYWNlczwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1PUHJvZmlsZSBjYW4gYWxzbyBwcm92aWRlIHN0YXRpc3RpY2FsIHNhbXBsZXMgb2YgY2FsbCBjaGFpbnMgKG9uIHg4NikuIFRvCi1kbyB0aGlzLCBhdCBzYW1wbGUgdGltZSwgdGhlIGZyYW1lIHBvaW50ZXIgY2hhaW4gaXMgdHJhdmVyc2VkLCByZWNvcmRpbmcKLXRoZSByZXR1cm4gYWRkcmVzcyBmb3IgZWFjaCBzdGFjayBmcmFtZS4gVGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgY29kZQotd2FzIGNvbXBpbGVkIHdpdGggZnJhbWUgcG9pbnRlcnMsIGJ1dCB3ZSdyZSBjYXJlZnVsIHRvIGFib3J0IHRoZQotdHJhdmVyc2FsIGlmIHRoZSBmcmFtZSBwb2ludGVyIGFwcGVhcnMgYmFkLiBXZSBzdG9yZSB0aGUgc2V0IG9mIHJldHVybgotYWRkcmVzc2VzIHN0cmFpZ2h0IGludG8gdGhlIENQVSBidWZmZXIuIE5vdGUgdGhhdCwgc2luY2UgdGhpcyB0cmF2ZXJzYWwKLWlzIGtleWVkIG9mZiB0aGUgc3RhbmRhcmQgc2FtcGxlIGludGVycnVwdCwgdGhlIG51bWJlciBvZiB0aW1lcyBhCi1mdW5jdGlvbiBhcHBlYXJzIGluIGEgc3RhY2sgdHJhY2UgaXMgbm90IGFuIGluZGljYXRvciBvZiBob3cgbWFueSB0aW1lcwotdGhlIGNhbGwgc2l0ZSB3YXMgZXhlY3V0ZWQ6IHJhdGhlciwgaXQncyByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YKLXNhbXBsZXMgd2UgdG9vayB3aGVyZSB0aGF0IGNhbGwgc2l0ZSB3YXMgaW52b2x2ZWQuIFRodXMsIHRoZSByZXN1bHRzIGZvcgotc3RhY2sgdHJhY2VzIGFyZSBub3QgbmVjZXNzYXJpbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBjYWxsIGNvdW50czoKLXR5cGljYWwgcHJvZ3JhbXMgd2lsbCBoYXZlIG1hbnkgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tYWluKCk8L2NvZGU+IHNhbXBsZXMuCi08L3A+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ic3luY2hyb25pc2luZy1idWZmZXJzIj48L2E+NS6gU3luY2hyb25pc2luZyB0aGUgQ1BVIGJ1ZmZlcnMgdG8gdGhlIGV2ZW50IGJ1ZmZlcjwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1BdCBzb21lIHBvaW50LCB3ZSBoYXZlIHRvIHByb2Nlc3MgdGhlIGRhdGEgaW4gZWFjaCBDUFUgYnVmZmVyIGFuZCBlbnRlcgotaXQgaW50byB0aGUgbWFpbiAoZXZlbnQpIGJ1ZmZlci4gVGhlIGZpbGUKLTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+YnVmZmVyX3N5bmMuYzwvY29kZT4gY29udGFpbnMgdGhlIHJlbGV2YW50IGNvZGUuIFdlCi1wZXJpb2RpY2FsbHkgKGN1cnJlbnRseSBldmVyeSA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkhaPC9jb2RlPi80IGppZmZpZXMpIHN0YXJ0Ci10aGUgc3luY2hyb25pc2F0aW9uIHByb2Nlc3MuIEluIGFkZGl0aW9uLCB3ZSBwcm9jZXNzIHRoZSBidWZmZXJzIG9uCi1jZXJ0YWluIGV2ZW50cywgc3VjaCBhcyBhbiBhcHBsaWNhdGlvbiBjYWxsaW5nCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm11bm1hcCgpPC9jb2RlPi4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvcgotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5leGl0KCk8L2NvZGU+IC0gYmVjYXVzZSB0aGUgQ1BVIGJ1ZmZlcnMgY29udGFpbiBwb2ludGVycwotdG8gdGhlIHRhc2sgc3RydWN0dXJlLCBpZiB3ZSBkb24ndCBwcm9jZXNzIGFsbCB0aGUgYnVmZmVycyBiZWZvcmUgdGhlCi10YXNrIGlzIGFjdHVhbGx5IGRlc3Ryb3llZCBhbmQgdGhlIHRhc2sgc3RydWN0dXJlIGZyZWVkLCB0aGVuIHdlIGNvdWxkCi1lbmQgdXAgdHJ5aW5nIHRvIGRlcmVmZXJlbmNlIGEgYm9ndXMgcG9pbnRlciBpbiBvbmUgb2YgdGhlIENQVSBidWZmZXJzLgotPC9wPgotICAgICAgICAgIDxwPgotV2UgYWxzbyBhZGQgYSBub3RpZmljYXRpb24gd2hlbiBhIGtlcm5lbCBtb2R1bGUgaXMgbG9hZGVkOyB0aGlzIGlzIHNvCi10aGF0IHVzZXItc3BhY2UgY2FuIHJlLXJlYWQgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vcHJvYy9tb2R1bGVzPC9jb2RlPiB0bwotZGV0ZXJtaW5lIHRoZSBsb2FkIGFkZHJlc3NlcyBvZiBrZXJuZWwgbW9kdWxlIHRleHQgc2VjdGlvbnMuIFdpdGhvdXQKLXRoaXMgbm90aWZpY2F0aW9uLCBzYW1wbGVzIGZvciBhIG5ld2x5LWxvYWRlZCBtb2R1bGUgY291bGQgZ2V0IGxvc3Qgb3IKLWJlIGF0dHJpYnV0ZWQgdG8gdGhlIHdyb25nIG1vZHVsZS4KLTwvcD4KLSAgICAgICAgICA8cD4KLVRoZSBzeW5jaHJvbmlzYXRpb24gaXRzZWxmIHdvcmtzIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOiBmaXJzdCwgbXV0dWFsCi1leGNsdXNpb24gb24gdGhlIGV2ZW50IGJ1ZmZlciBpcyB0YWtlbi4gUmVtZW1iZXIsIHdlIGRvIG5vdCBuZWVkIHRvIGRvCi10aGF0IGZvciBlYWNoIENQVSBidWZmZXIsIGFzIHdlIG9ubHkgcmVhZCBmcm9tIHRoZSB0YWlsIGl0ZXJhdG9yICh3aGlsc3QKLWludGVycnVwdHMgbWlnaHQgYmUgYXJyaXZpbmcgYXQgdGhlIHNhbWUgYnVmZmVyLCBidXQgdGhleSB3aWxsIHdyaXRlIHRvCi10aGUgcG9zaXRpb24gb2YgdGhlIGhlYWQgaXRlcmF0b3IsIGxlYXZpbmcgcHJldmlvdXNseSB3cml0dGVuIGVudHJpZXMKLWludGFjdCkuIFRoZW4sIHdlIHByb2Nlc3MgZWFjaCBDUFUgYnVmZmVyIGluIHR1cm4uIEEgQ1BVIHN3aXRjaAotbm90aWZpY2F0aW9uIGlzIGFkZGVkIHRvIHRoZSBidWZmZXIgZmlyc3QgKGZvcgotPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXBhcmF0ZT1jcHU8L2NvZGU+IHN1cHBvcnQpLiBUaGVuIHRoZSBwcm9jZXNzaW5nIG9mIHRoZQotYWN0dWFsIGRhdGEgc3RhcnRzLgotPC9wPgotICAgICAgICAgIDxwPgotQXMgbWVudGlvbmVkLCB0aGUgQ1BVIGJ1ZmZlciBjb25zaXN0cyBvZiB0YXNrIHN3aXRjaCBlbnRyaWVzIGFuZCB0aGUKLWFjdHVhbCBzYW1wbGVzLiBXaGVuIHRoZSByb3V0aW5lIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3luY19idWZmZXIoKTwvY29kZT4gc2VlcwotYSB0YXNrIHN3aXRjaCwgdGhlIHByb2Nlc3MgSUQgYW5kIHByb2Nlc3MgZ3JvdXAgSUQgYXJlIHJlY29yZGVkIGludG8gdGhlCi1ldmVudCBidWZmZXIsIGFsb25nIHdpdGggYSBkY29va2llIChzZWUgYmVsb3cpIGlkZW50aWZ5aW5nIHRoZQotYXBwbGljYXRpb24gYmluYXJ5IChlLmcuIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2Jpbi9iYXNoPC9jb2RlPikuIFRoZQotPGNvZGUgY2xhc3M9InZhcm5hbWUiPm1tYXBfc2VtPC9jb2RlPiBmb3IgdGhlIHRhc2sgaXMgdGhlbiB0YWtlbiwgdG8gYWxsb3cgc2FmZQotaXRlcmF0aW9uIGFjcm9zcyB0aGUgdGFza3MnIGxpc3Qgb2YgbWFwcGVkIGFyZWFzLiBFYWNoIHNhbXBsZSBpcyB0aGVuCi1wcm9jZXNzZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCi08L3A+Ci0gICAgICAgICAgPHA+Ci1BZnRlciBhIGJ1ZmZlciBoYXMgYmVlbiByZWFkLCB0aGUgdGFpbCBpdGVyYXRvciBpcyB1cGRhdGVkIHRvIHJlZmxlY3QKLWhvdyBtdWNoIG9mIHRoZSBidWZmZXIgd2FzIHByb2Nlc3NlZC4gTm90ZSB0aGF0IHdoZW4gd2UgZGV0ZXJtaW5lZCBob3cKLW11Y2ggZGF0YSB0aGVyZSB3YXMgdG8gcmVhZCBpbiB0aGUgQ1BVIGJ1ZmZlciwgd2UgYWxzbyBjYWxsZWQKLTxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Y3B1X2J1ZmZlcl9yZXNldCgpPC9jb2RlPiB0byByZXNldAotPGNvZGUgY2xhc3M9InZhcm5hbWUiPmxhc3RfdGFzazwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5sYXN0X2lzX2tlcm5lbDwvY29kZT4sIGFzCi13ZSd2ZSBhbHJlYWR5IG1lbnRpb25lZC4gRHVyaW5nIHRoZSBwcm9jZXNzaW5nLCBtb3JlIHNhbXBsZXMgbWF5IGhhdmUKLWJlZW4gYXJyaXZpbmcgaW4gdGhlIENQVSBidWZmZXI7IHRoaXMgaXMgT0sgYmVjYXVzZSB3ZSBhcmUgY2FyZWZ1bCB0bwotb25seSB1cGRhdGUgdGhlIHRhaWwgaXRlcmF0b3IgdG8gaG93IG11Y2ggd2UgYWN0dWFsbHkgcmVhZCAtIG9uIHRoZSBuZXh0Ci1idWZmZXIgc3luY2hyb25pc2F0aW9uLCB3ZSB3aWxsIHN0YXJ0IGFnYWluIGZyb20gdGhhdCBwb2ludC4KLTwvcD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJkZW50cnktY29va2llcyI+PC9hPjYuoElkZW50aWZ5aW5nIGJpbmFyeSBpbWFnZXM8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotSW4gb3JkZXIgdG8gcHJvZHVjZSB1c2VmdWwgcHJvZmlsZXMsIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBhc3NvY2lhdGUgYQotcGFydGljdWxhciBQQyB2YWx1ZSBzYW1wbGUgd2l0aCBhbiBhY3R1YWwgRUxGIGJpbmFyeSBvbiB0aGUgZGlzay4gVGhpcwotbGVhdmVzIHVzIHdpdGggdGhlIHByb2JsZW0gb2YgaG93IHRvIGV4cG9ydCB0aGlzIGluZm9ybWF0aW9uIHRvCi11c2VyLXNwYWNlLiBXZSBjcmVhdGUgdW5pcXVlIElEcyB0aGF0IGlkZW50aWZ5IGEgcGFydGljdWxhciBkaXJlY3RvcnkKLWVudHJ5IChkZW50cnkpLCBhbmQgd3JpdGUgdGhvc2UgSURzIGludG8gdGhlIGV2ZW50IGJ1ZmZlci4gTGF0ZXIgb24sCi10aGUgdXNlci1zcGFjZSBkYWVtb24gY2FuIGNhbGwgdGhlIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+bG9va3VwX2Rjb29raWU8L2NvZGU+Ci1zeXN0ZW0gY2FsbCwgd2hpY2ggbG9va3MgdXAgdGhlIElEIGFuZCBmaWxscyBpbiB0aGUgZnVsbCBwYXRoIG9mCi10aGUgYmluYXJ5IGltYWdlIGluIHRoZSBidWZmZXIgdXNlci1zcGFjZSBwYXNzZXMgaW4uIFRoZXNlIElEcyBhcmUKLW1haW50YWluZWQgYnkgdGhlIGNvZGUgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5mcy9kY29va2llcy5jPC9jb2RlPjsgdGhlCi1jYWNoZSBsYXN0cyBmb3IgYXMgbG9uZyBhcyB0aGUgZGFlbW9uIGhhcyB0aGUgZXZlbnQgYnVmZmVyIG9wZW4uCi08L3A+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iZmluZGluZy1kZW50cnkiPjwvYT43LqBGaW5kaW5nIGEgc2FtcGxlJ3MgYmluYXJ5IGltYWdlIGFuZCBvZmZzZXQ8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotV2UgaGF2ZW4ndCB5ZXQgZGVzY3JpYmVkIGhvdyB3ZSBwcm9jZXNzIHRoZSBhYnNvbHV0ZSBQQyB2YWx1ZSBpbnRvCi1zb21ldGhpbmcgdXNhYmxlIGJ5IHRoZSB1c2VyLXNwYWNlIGRhZW1vbi4gV2hlbiB3ZSBmaW5kIGEgc2FtcGxlIGVudGVyZWQKLWludG8gdGhlIENQVSBidWZmZXIsIHdlIHRyYXZlcnNlIHRoZSBsaXN0IG9mIG1hcHBpbmdzIGZvciB0aGUgdGFzawotKHJlbWVtYmVyLCB3ZSB3aWxsIGhhdmUgc2VlbiBhIHRhc2sgc3dpdGNoIGVhcmxpZXIsIHNvIHdlIGtub3cgd2hpY2gKLXRhc2sncyBsaXN0cyB0byBsb29rIGF0KS4gV2hlbiBhIG1hcHBpbmcgaXMgZm91bmQgdGhhdCBjb250YWlucyB0aGUgUEMKLXZhbHVlLCB3ZSBsb29rIHVwIHRoZSBtYXBwZWQgZmlsZSdzIGRlbnRyeSBpbiB0aGUgZGNvb2tpZSBjYWNoZS4gVGhpcwotZ2l2ZXMgdGhlIGRjb29raWUgSUQgdGhhdCB3aWxsIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBtYXBwZWQgZmlsZS4gVGhlbgotd2UgYWx0ZXIgdGhlIGFic29sdXRlIHZhbHVlIHN1Y2ggdGhhdCBpdCBpcyBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YKLXRoZSBmaWxlIGJlaW5nIG1hcHBlZCAodGhlIG1hcHBpbmcgbmVlZCBub3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZQotYWN0dWFsIGZpbGUsIHNvIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIG9mZnNldCB2YWx1ZSBvZiB0aGUgbWFwcGluZykuIFdlCi1zdG9yZSB0aGlzIGRjb29raWUgSUQgaW50byB0aGUgZXZlbnQgYnVmZmVyOyB0aGlzIGlkZW50aWZpZXMgd2hpY2gKLWJpbmFyeSB0aGUgc2FtcGxlcyBmb2xsb3dpbmcgaXQgYXJlIGFnYWluc3QuCi1JbiB0aGlzIG1hbm5lciwgd2UgaGF2ZSBjb252ZXJ0ZWQgYSBQQyB2YWx1ZSwgd2hpY2ggaGFzIHRyYW5zaXRvcnkKLW1lYW5pbmcgb25seSwgaW50byBhIHN0YXRpYyBvZmZzZXQgdmFsdWUgZm9yIGxhdGVyIHByb2Nlc3NpbmcgYnkgdGhlCi1kYWVtb24uCi08L3A+Ci0gICAgICAgICAgPHA+Ci1XZSBhbHNvIGF0dGVtcHQgdG8gYXZvaWQgdGhlIHJlbGF0aXZlbHkgZXhwZW5zaXZlIGxvb2t1cCBvZiB0aGUgZGVudHJ5Ci1jb29raWUgdmFsdWUgYnkgc3RvcmluZyB0aGUgY29va2llIHZhbHVlIGRpcmVjdGx5IGludG8gdGhlIGRlbnRyeQotaXRzZWxmOyB0aGVuIHdlIGNhbiBzaW1wbHkgZGVyaXZlIHRoZSBjb29raWUgdmFsdWUgaW1tZWRpYXRlbHkgd2hlbiB3ZQotZmluZCB0aGUgY29ycmVjdCBtYXBwaW5nLgotPC9wPgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvZGl2PgotICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJzYW1wbGUtZmlsZXMiPjwvYT5DaGFwdGVyoDQuoEdlbmVyYXRpbmcgc2FtcGxlIGZpbGVzPC9oMj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KLSAgICAgICAgICA8cD4KLSAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgotICAgICAgICAgIDwvcD4KLSAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2Nlc3NpbmctYnVmZmVyIj4xLiBQcm9jZXNzaW5nIHRoZSBidWZmZXI8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaGFuZGxpbmcta2VybmVsLXNhbXBsZXMiPjEuMS4gSGFuZGxpbmcga2VybmVsIHNhbXBsZXM8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlLWdlbmVyYXRpb24iPjIuIExvY2F0aW5nIGFuZCBjcmVhdGluZyBzYW1wbGUgZmlsZXM8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlLXdyaXRpbmciPjMuIFdyaXRpbmcgZGF0YSB0byBhIHNhbXBsZSBmaWxlPC9hPgotICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L2R0PgotICAgICAgICAgIDwvZGw+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0icHJvY2Vzc2luZy1idWZmZXIiPjwvYT4xLqBQcm9jZXNzaW5nIHRoZSBidWZmZXI8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotTm93IHdlIGNhbiBtb3ZlIG9udG8gdXNlci1zcGFjZSBpbiBvdXIgZGVzY3JpcHRpb24gb2YgaG93IHJhdyBpbnRlcnJ1cHQKLXNhbXBsZXMgYXJlIHByb2Nlc3NlZCBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbi4gQXMgd2UgZGVzY3JpYmVkIGluCi1wcmV2aW91cyBzZWN0aW9ucywgdGhlIGtlcm5lbCBPUHJvZmlsZSBkcml2ZXIgY3JlYXRlcyBhIGxhcmdlIGJ1ZmZlciBvZgotc2FtcGxlIGRhdGEgY29uc2lzdGluZyBvZiBvZmZzZXQgdmFsdWVzLCBpbnRlcnNwZXJzZWQgd2l0aAotbm90aWZpY2F0aW9uIG9mIGNoYW5nZXMgaW4gY29udGV4dC4gVGhlc2UgY29udGV4dCBjaGFuZ2VzIGluZGljYXRlIGhvdwotZm9sbG93aW5nIHNhbXBsZXMgc2hvdWxkIGJlIGF0dHJpYnV0ZWQsIGFuZCBpbmNsdWRlIHRhc2sgc3dpdGNoZXMsIENQVQotY2hhbmdlcywgYW5kIHdoaWNoIGRjb29raWUgdGhlIHNhbXBsZSB2YWx1ZSBpcyBhZ2FpbnN0LiBCeSBwcm9jZXNzaW5nCi10aGlzIGJ1ZmZlciBlbnRyeS1ieS1lbnRyeSwgd2UgY2FuIGRldGVybWluZSB3aGVyZSB0aGUgc2FtcGxlcyBzaG91bGQKLWJlIGFjY3JlZGl0ZWQgdG8uIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3aGVuIHVzaW5nIHRoZSAKLTxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU8L2NvZGU+LgotPC9wPgotICAgICAgICAgIDxwPgotVGhlIGZpbGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX3RyYW5zLmM8L2NvZGU+IGNvbnRhaW5zIHRoZSBiYXNpYyByb3V0aW5lCi1mb3IgdGhlIGJ1ZmZlciBwcm9jZXNzaW5nLiBUaGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN0cnVjdCB0cmFuc2llbnQ8L2NvZGU+Ci1zdHJ1Y3R1cmUgaXMgdXNlZCB0byBob2xkIGNoYW5nZXMgaW4gY29udGV4dC4gSXRzIG1lbWJlcnMgYXJlIG1vZGlmaWVkCi1hcyB3ZSBwcm9jZXNzIGVhY2ggZW50cnk7IGl0IGlzIHBhc3NlZCBpbnRvIHRoZSByb3V0aW5lcyBpbgotPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX3NmaWxlLmM8L2NvZGU+IGZvciBhY3R1YWxseSBsb2dnaW5nIHRoZSBzYW1wbGUKLXRvIGEgcGFydGljdWxhciBzYW1wbGUgZmlsZSAod2hpY2ggd2lsbCBiZSBoZWxkIGluCi08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudDwvY29kZT4pLgotPC9wPgotICAgICAgICAgIDxwPgotVGhlIGJ1ZmZlciBmb3JtYXQgaXMgZGVzaWduZWQgZm9yIGNvbmNpc2VuZXNzLCBhcyBoaWdoIHNhbXBsaW5nIHJhdGVzCi1jYW4gZWFzaWx5IGdlbmVyYXRlIGEgbG90IG9mIGRhdGEuIFRodXMsIGNvbnRleHQgY2hhbmdlcyBhcmUgcHJlZml4ZWQKLWJ5IGFuIGVzY2FwZSBjb2RlLCBpZGVudGlmaWVkIGJ5IDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+aXNfZXNjYXBlX2NvZGUoKTwvY29kZT4uCi1JZiBhbiBlc2NhcGUgY29kZSBpcyBmb3VuZCwgdGhlIG5leHQgZW50cnkgaW4gdGhlIGJ1ZmZlciBpZGVudGlmaWVzCi13aGF0IHR5cGUgb2YgY29udGV4dCBjaGFuZ2UgaXMgYmVpbmcgcmVhZC4gVGhlc2UgYXJlIGhhbmRlZCBvZmYgdG8KLXZhcmlvdXMgaGFuZGxlcnMgKHNlZSB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmhhbmRsZXJzPC9jb2RlPiBhcnJheSksIHdoaWNoCi1tb2RpZnkgdGhlIHRyYW5zaWVudCBzdHJ1Y3R1cmUgYXMgYXBwcm9wcmlhdGUuIElmIGl0J3Mgbm90IGFuIGVzY2FwZQotY29kZSwgdGhlbiBpdCBtdXN0IGJlIGEgUEMgb2Zmc2V0IHZhbHVlLCBhbmQgdGhlIHZlcnkgbmV4dCBlbnRyeSB3aWxsCi1iZSB0aGUgbnVtZXJpYyBoYXJkd2FyZSBjb3VudGVyLiBUaGVzZSB2YWx1ZXMgYXJlIHJlYWQgYW5kIHJlY29yZGVkCi1pbiB0aGUgdHJhbnNpZW50IHN0cnVjdHVyZTsgd2UgdGhlbiBkbyBhIGxvb2t1cCB0byBmaW5kIHRoZSBjb3JyZWN0Ci1zYW1wbGUgZmlsZSwgYW5kIGxvZyB0aGUgc2FtcGxlLCBhcyBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KLTwvcD4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iaGFuZGxpbmcta2VybmVsLXNhbXBsZXMiPjwvYT4xLjEuoEhhbmRsaW5nIGtlcm5lbCBzYW1wbGVzPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotU2FtcGxlcyBmcm9tIGtlcm5lbCBjb2RlIHJlcXVpcmUgYSBsaXR0bGUgc3BlY2lhbCBoYW5kbGluZy4gQmVjYXVzZQotdGhlIGJpbmFyeSB0ZXh0IHdoaWNoIHRoZSBzYW1wbGUgaXMgYWdhaW5zdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvCi1hbnkgZmlsZSB0aGF0IHRoZSBrZXJuZWwgZGlyZWN0bHkga25vd3MgYWJvdXQsIHRoZSBPUHJvZmlsZSBkcml2ZXIKLXN0b3JlcyB0aGUgYWJzb2x1dGUgUEMgdmFsdWUgaW4gdGhlIGJ1ZmZlciwgaW5zdGVhZCBvZiB0aGUgZmlsZSBvZmZzZXQuCi1PZiBjb3Vyc2UsIHdlIG5lZWQgYW4gb2Zmc2V0IGFnYWluc3Qgc29tZSBwYXJ0aWN1bGFyIGJpbmFyeS4gVG8gaGFuZGxlCi10aGlzLCB3ZSBrZWVwIGEgbGlzdCBvZiBsb2FkZWQgbW9kdWxlcyBieSBwYXJzaW5nCi08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9wcm9jL21vZHVsZXM8L2NvZGU+IGFzIG5lZWRlZC4gV2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQsCi1hIG5vdGlmaWNhdGlvbiBpcyBwbGFjZWQgaW4gdGhlIE9Qcm9maWxlIGJ1ZmZlciwgYW5kIHRoaXMgdHJpZ2dlcnMgYQotcmUtcmVhZC4gV2Ugc3RvcmUgdGhlIG1vZHVsZSBuYW1lLCBhbmQgdGhlIGxvYWRpbmcgYWRkcmVzcyBhbmQgc2l6ZS4KLVRoaXMgaXMgYWxzbyBkb25lIGZvciB0aGUgbWFpbiBrZXJuZWwgaW1hZ2UsIGFzIHNwZWNpZmllZCBieSB0aGUgdXNlci4KLVRoZSBhYnNvbHV0ZSBQQyB2YWx1ZSBpcyBtYXRjaGVkIGFnYWluc3QgZWFjaCBhZGRyZXNzIHJhbmdlLCBhbmQKLW1vZGlmaWVkIGludG8gYW4gb2Zmc2V0IHdoZW4gdGhlIG1hdGNoaW5nIG1vZHVsZSBpcyBmb3VuZC4gU2VlIAotPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX2tlcm5lbC5jPC9jb2RlPiBmb3IgdGhlIGRldGFpbHMuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ic2FtcGxlLWZpbGUtZ2VuZXJhdGlvbiI+PC9hPjIuoExvY2F0aW5nIGFuZCBjcmVhdGluZyBzYW1wbGUgZmlsZXM8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotV2UgaGF2ZSBhIHNhbXBsZSB2YWx1ZSBhbmQgaXRzIHNhdGVsbGl0ZSBkYXRhIHN0b3JlZCBpbiBhCi08Y29kZSBjbGFzcz0idmFybmFtZSI+c3RydWN0IHRyYW5zaWVudDwvY29kZT4sIGFuZCB3ZSBtdXN0IGxvY2F0ZSBhbgotYWN0dWFsIHNhbXBsZSBmaWxlIHRvIHN0b3JlIHRoZSBzYW1wbGUgaW4sIHVzaW5nIHRoZSBjb250ZXh0Ci1pbmZvcm1hdGlvbiBpbiB0aGUgdHJhbnNpZW50IHN0cnVjdHVyZSBhcyBhIGtleS4gVGhlIHRyYW5zaWVudCBkYXRhIHRvCi1zYW1wbGUgZmlsZSBsb29rdXAgaXMgaGFuZGxlZCBpbgotPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX3NmaWxlLmM8L2NvZGU+LiBBIGhhc2ggaXMgdGFrZW4gb2YgdGhlCi10cmFuc2llbnQgdmFsdWVzIHRoYXQgYXJlIHJlbGV2YW50IChkZXBlbmRpbmcgdXBvbiB0aGUgc2V0dGluZyBvZgotPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXBhcmF0ZTwvY29kZT4sIHNvbWUgdmFsdWVzIG1pZ2h0IGJlIGlycmVsZXZhbnQpLCBhbmQgdGhlCi1oYXNoIHZhbHVlIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBvcGVuIHNhbXBsZSBmaWxlcy4KLU9mIGNvdXJzZSwgdGhlIHNhbXBsZSBmaWxlIG1pZ2h0IG5vdCBiZSBmb3VuZCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkCi10byBjcmVhdGUgYW5kIG9wZW4gaXQuCi08L3A+Ci0gICAgICAgICAgPHA+Ci1PUHJvZmlsZSB1c2VzIGEgcmF0aGVyIGNvbXBsZXggc2NoZW1lIGZvciBuYW1pbmcgc2FtcGxlIGZpbGVzLCBpbiBvcmRlcgotdG8gbWFrZSBzZWxlY3RpbmcgcmVsZXZhbnQgc2FtcGxlIGZpbGVzIGVhc2llciBmb3IgdGhlIHBvc3QtcHJvZmlsaW5nCi11dGlsaXRpZXMuIFRoZSBleGFjdCBkZXRhaWxzIG9mIHRoZSBzY2hlbWUgYXJlIGdpdmVuIGluCi08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9wcm9maWxlLXRlc3RzL3BwX2ludGVyZmFjZTwvY29kZT4sIGJ1dCBmb3Igbm93IGl0IHdpbGwKLXN1ZmZpY2UgdG8gcmVtZW1iZXIgdGhhdCB0aGUgZmlsZW5hbWUgd2lsbCBpbmNsdWRlIG9ubHkgcmVsZXZhbnQKLWluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBzZXR0aW5ncywgdGFrZW4gZnJvbSB0aGUgdHJhbnNpZW50IGRhdGEuIEEKLWZ1bGx5LXNwZWNpZmllZCBmaWxlbmFtZSBsb29rcyBzb21ldGhpbmcgbGlrZSA6Ci08L3A+Ci0gICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4KLS92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudC97cm9vdH0vdXNyL2Jpbi94bW1zL3tkZXB9L3tyb290fS9saWIvdGxzL2xpYmMtMi4zLjIuc28vQ1BVX0NMS19VTkhBTFRFRC4xMDAwMDAuMC4yODA4Mi4yODA4OS4wCi08L2NvZGU+Ci0gICAgICAgICAgPHA+Ci1JdCBzaG91bGQgYmUgY2xlYXIgdGhhdCB0aGlzIGlkZW50aWZpZXMgc3VjaCBpbmZvcm1hdGlvbiBhcyB0aGUKLWFwcGxpY2F0aW9uIGJpbmFyeSwgdGhlIGRlcGVuZGVudCAobGlicmFyeSkgYmluYXJ5LCB0aGUgaGFyZHdhcmUgZXZlbnQsCi1hbmQgdGhlIHByb2Nlc3MgYW5kIHRocmVhZCBJRC4gVHlwaWNhbGx5LCBub3QgYWxsIHRoaXMgaW5mb3JtYXRpb24gaXMKLW5lZWRlZCwgaW4gd2hpY2ggY2FzZXMgc29tZSB2YWx1ZXMgbWF5IGJlIHJlcGxhY2VkIHdpdGggdGhlIHRva2VuCi08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmFsbDwvY29kZT4uCi08L3A+Ci0gICAgICAgICAgPHA+Ci1UaGUgY29kZSB0aGF0IGdlbmVyYXRlcyB0aGlzIGZpbGVuYW1lIGFuZCBvcGVucyB0aGUgZmlsZSBpcyBmb3VuZCBpbgotPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX21hbmdsaW5nLmM8L2NvZGU+LiBZb3UgbWF5IGhhdmUgcmVhbGlzZWQgdGhhdAotYXQgdGhpcyBwb2ludCwgd2UgZG8gbm90IGhhdmUgdGhlIGJpbmFyeSBpbWFnZSBmaWxlIG5hbWVzLCBvbmx5IHRoZQotZGNvb2tpZSB2YWx1ZXMuIEluIG9yZGVyIHRvIGRldGVybWluZSBhIGZpbGUgbmFtZSwgYSBkY29va2llIHZhbHVlIGlzCi1sb29rZWQgdXAgaW4gdGhlIGRjb29raWUgY2FjaGUuIFRoaXMgaXMgdG8gYmUgZm91bmQgaW4KLTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+ZGFlbW9uL29wZF9jb29raWUuYzwvY29kZT4uIFNpbmNlIGRjb29raWVzIGFyZSBib3RoCi1wZXJzaXN0ZW50IGFuZCB1bmlxdWUgZHVyaW5nIGEgc2FtcGxpbmcgc2Vzc2lvbiwgd2UgY2FuIGNhY2hlIHRoZQotdmFsdWVzLiBJZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kIGluIHRoZSBjYWNoZSwgdGhlbiB3ZSBhc2sgdGhlIGtlcm5lbAotdG8gZG8gdGhlIGxvb2t1cCBmcm9tIHZhbHVlIHRvIGZpbGUgbmFtZSBmb3IgdXMgYnkgY2FsbGluZwotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5sb29rdXBfZGNvb2tpZSgpPC9jb2RlPi4gVGhpcyBsb29rcyB1cCB0aGUgdmFsdWUgaW4gYQota2VybmVsLXNpZGUgY2FjaGUgKHNlZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmZzL2Rjb29raWVzLmM8L2NvZGU+KSBhbmQgcmV0dXJucwotdGhlIGZ1bGx5LXF1YWxpZmllZCBmaWxlIG5hbWUgdG8gdXNlcnNwYWNlLgotPC9wPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9InNhbXBsZS1maWxlLXdyaXRpbmciPjwvYT4zLqBXcml0aW5nIGRhdGEgdG8gYSBzYW1wbGUgZmlsZTwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1FYWNoIHNwZWNpZmljIHNhbXBsZSBmaWxlIGlzIGEgaGFzaGVkIGNvbGxlY3Rpb24sIHdoZXJlIHRoZSBrZXkgaXMKLXRoZSBQQyBvZmZzZXQgZnJvbSB0aGUgdHJhbnNpZW50IGRhdGEsIGFuZCB0aGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZgotc2FtcGxlcyByZWNvcmRlZCBhZ2FpbnN0IHRoYXQgb2Zmc2V0LiBUaGUgZmlsZXMgYXJlCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm1tYXAoKTwvY29kZT5lZCBpbnRvIHRoZSBkYWVtb24ncyBtZW1vcnkgc3BhY2UuIFRoZSBjb2RlCi10byBhY3R1YWxseSBsb2cgdGhlIHdyaXRlIGFnYWluc3QgdGhlIHNhbXBsZSBmaWxlIGNhbiBiZSBmb3VuZCBpbgotPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5saWJkYi88L2NvZGU+LgotPC9wPgotICAgICAgICAgIDxwPgotRm9yIHJlY29yZGluZyBzdGFjayB0cmFjZXMsIHdlIGhhdmUgYSBtb3JlIGNvbXBsaWNhdGVkIHNhbXBsZSBmaWxlbmFtZQotbWFuZ2xpbmcgc2NoZW1lIHRoYXQgYWxsb3dzIHVzIHRvIGlkZW50aWZ5IGNyb3NzLWJpbmFyeSBjYWxscy4gV2UgdXNlCi10aGUgc2FtZSBzYW1wbGUgZmlsZSBmb3JtYXQsIHdoZXJlIHRoZSBrZXkgaXMgYSA2NC1iaXQgdmFsdWUgY29tcG9zZWQKLWZyb20gdGhlIGZyb20sdG8gcGFpciBvZiBvZmZzZXRzLgotPC9wPgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvZGl2PgotICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJvdXRwdXQiPjwvYT5DaGFwdGVyoDUuoEdlbmVyYXRpbmcgdXNlZnVsIG91dHB1dDwvaDI+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InRvYyI+Ci0gICAgICAgICAgPHA+Ci0gICAgICAgICAgICA8Yj5UYWJsZSBvZiBDb250ZW50czwvYj4KLSAgICAgICAgICA8L3A+Ci0gICAgICAgICAgPGRsPgotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwcm9maWxlLXNwZWNpZmljYXRpb24iPjEuIEhhbmRsaW5nIHRoZSBwcm9maWxlIHNwZWNpZmljYXRpb248L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlLWNvbGxhdGluZyI+Mi4gQ29sbGF0aW5nIHRoZSBjYW5kaWRhdGUgc2FtcGxlIGZpbGVzPC9hPgotICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlLWNsYXNzaWZ5aW5nIj4yLjEuIENsYXNzaWZ5aW5nIHNhbXBsZSBmaWxlczwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzYW1wbGUtZmlsZS1pbnZlcnRpbmciPjIuMi4gQ3JlYXRpbmcgaW52ZXJ0ZWQgcHJvZmlsZSBsaXN0czwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ2VuZXJhdGluZy1wcm9maWxlLWRhdGEiPjMuIEdlbmVyYXRpbmcgcHJvZmlsZSBkYXRhPC9hPgotICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2JmZCI+My4xLiBQcm9jZXNzaW5nIHRoZSBiaW5hcnkgaW1hZ2U8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJvY2Vzc2luZy1zYW1wbGUtZmlsZXMiPjMuMi4gUHJvY2Vzc2luZyB0aGUgc2FtcGxlIGZpbGVzPC9hPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnZW5lcmF0aW5nLW91dHB1dCI+NC4gR2VuZXJhdGluZyBvdXRwdXQ8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgPC9kbD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxwPgotQWxsIG9mIHRoZSB0b29scyB1c2VkIHRvIGdlbmVyYXRlIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBoYXZlIHRvIHRha2UKLXJvdWdobHkgdGhlIHNhbWUgc3RlcHMgdG8gY29sbGVjdCB0aGUgZGF0YSBmb3IgcHJvY2Vzc2luZy4gRmlyc3QsIHRoZQotcHJvZmlsZSBzcGVjaWZpY2F0aW9uIGdpdmVuIGJ5IHRoZSB1c2VyIGhhcyB0byBiZSBwYXJzZWQuIE5leHQsIGEgbGlzdAotb2Ygc2FtcGxlIGZpbGVzIG1hdGNoaW5nIHRoZSBzcGVjaWZpY2F0aW9uIGhhcyB0byBvYnRhaW5lZC4gVXNpbmcgdGhpcwotbGlzdCwgd2UgbmVlZCB0byBsb2NhdGUgdGhlIGJpbmFyeSBmaWxlIGZvciBlYWNoIHNhbXBsZSBmaWxlLCBhbmQgdGhlbgotdXNlIHRoZW0gdG8gZXh0cmFjdCBtZWFuaW5nZnVsIGRhdGEsIGJlZm9yZSBhIGZpbmFsIGNvbGxhdGlvbiBhbmQKLXByZXNlbnRhdGlvbiB0byB0aGUgdXNlci4KLTwvcD4KLSAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9InByb2ZpbGUtc3BlY2lmaWNhdGlvbiI+PC9hPjEuoEhhbmRsaW5nIHRoZSBwcm9maWxlIHNwZWNpZmljYXRpb248L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotVGhlIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBwcmVzZW50ZWQgYnkgdGhlIHVzZXIgaXMgcGFyc2VkIGluCi10aGUgZnVuY3Rpb24gPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wcm9maWxlX3NwZWM6OmNyZWF0ZSgpPC9jb2RlPi4gVGhpcwotY3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzcGVjaWZpY2F0aW9uLiBUaGVuIHdlCi11c2UgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wcm9maWxlX3NwZWM6OmdlbmVyYXRlX2ZpbGVfbGlzdCgpPC9jb2RlPgotdG8gc2VhcmNoIGZvciBhbGwgc2FtcGxlIGZpbGVzIGFuZCBtYXRjaCB0aGVtIGFnYWluc3QgdGhlCi08Y29kZSBjbGFzcz0idmFybmFtZSI+cHJvZmlsZV9zcGVjPC9jb2RlPi4KLTwvcD4KLSAgICAgICAgICA8cD4KLVRvIGVuYWJsZSB0aGlzIG1hdGNoaW5nIHByb2Nlc3MgdG8gd29yaywgdGhlIGF0dHJpYnV0ZXMgb2YKLWVhY2ggc2FtcGxlIGZpbGUgaXMgZW5jb2RlZCBpbiBpdHMgZmlsZW5hbWUuIFRoaXMgaXMgYSBsb3ctdGVjaAotYXBwcm9hY2ggdG8gbWF0Y2hpbmcgc3BlY2lmaWNhdGlvbnMgYWdhaW5zdCBjYW5kaWRhdGUgc2FtcGxlCi1maWxlcywgYnV0IGl0IHdvcmtzIHJlYXNvbmFibHkgd2VsbC4gQSB0eXBpY2FsIHNhbXBsZSBmaWxlCi1taWdodCBsb29rIGxpa2UgdGhlc2U6Ci08L3A+Ci0gICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+Ci0vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQve3Jvb3R9L2Jpbi9scy97ZGVwfS97cm9vdH0vYmluL2xzL3tjZ30ve3Jvb3R9L2Jpbi9scy9DUFVfQ0xLX1VOSEFMVEVELjEwMDAwMC4wLmFsbC5hbGwuYWxsCi0vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQve3Jvb3R9L2Jpbi9scy97ZGVwfS97cm9vdH0vYmluL2xzL0NQVV9DTEtfVU5IQUxURUQuMTAwMDAwLjAuYWxsLmFsbC5hbGwKLS92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudC97cm9vdH0vYmluL2xzL3tkZXB9L3tyb290fS9iaW4vbHMvQ1BVX0NMS19VTkhBTFRFRC4xMDAwMDAuMC43NDIzLjc0MjQuMAotL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50L3trZXJufS9yMTI4L3tkZXB9L3trZXJufS9yMTI4L0NQVV9DTEtfVU5IQUxURUQuMTAwMDAwLjAuYWxsLmFsbC5hbGwKLTwvcHJlPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDxwPgotVGhpcyBsb29rcyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXgsIGJ1dCBpdCdzIGFjdHVhbGx5IGZhaXJseSBzaW1wbGUuIEZpcnN0Ci13ZSBoYXZlIHRoZSBzZXNzaW9uIG9mIHRoZSBzYW1wbGUsIGhlcmUKLTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50PC9jb2RlPi4gVGhpcyBjb3VsZAotZXF1YWxseSB3ZWxsIGJlIGluc2lkZSBhbiBhcmNoaXZlIGZyb20gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPi4KLU5leHQgd2UgaGF2ZSBvbmUgb2YgdGhlIHRva2VucyA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPntyb290fTwvY29kZT4gb3IKLTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+e2tlcm59PC9jb2RlPi4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj57cm9vdH08L2NvZGU+IGluZGljYXRlcwotdGhhdCB0aGUgYmluYXJ5IGlzIGZvdW5kIG9uIGEgZmlsZSBzeXN0ZW0sIGFuZCB3ZSB3aWxsIGVuY29kZSBpdHMgcGF0aAotaW4gdGhlIG5leHQgc2VjdGlvbiAoZS5nLiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9iaW4vbHM8L2NvZGU+KS4KLTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+e2tlcm59PC9jb2RlPiBpbmRpY2F0ZXMgYSBrZXJuZWwgbW9kdWxlIC0gb24gMi42IGtlcm5lbHMKLXRoZSBwYXRoIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgZnJvbSB0aGUga2VybmVsLCBzbyB3ZSBoYXZlIHRvCi1zcGVjaWFsLWNhc2Uga2VybmVsIG1vZHVsZXMgbGlrZSB0aGlzOyB3ZSBlbmNvZGUgbWVyZWx5IHRoZSBuYW1lIG9mIHRoZQotbW9kdWxlIGFzIGxvYWRlZC4KLTwvcD4KLSAgICAgICAgICA8cD4KLU5leHQgdGhlcmUgaXMgYSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPntkZXB9PC9jb2RlPiB0b2tlbiwgaW5kaWNhdGluZyBhbm90aGVyCi10b2tlbi9wYXRoIHdoaWNoIGlkZW50aWZpZXMgdGhlIGRlcGVuZGVudCBiaW5hcnkgaW1hZ2UuIFRoaXMgaXMgdXNlZCBldmVuIGZvcgotdGhlICJwcmltYXJ5IiBiaW5hcnkgKGkuZS4gdGhlIG9uZSB0aGF0IHdhcwotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5leGVjdmUoKTwvY29kZT5kKSwgYXMgaXQgc2ltcGxpZmllcyBwcm9jZXNzaW5nLiBGaW5hbGx5LAotaWYgdGhpcyBzYW1wbGUgZmlsZSBpcyBhIG5vcm1hbCBmbGF0IHByb2ZpbGUsIHRoZSBhY3R1YWwgZmlsZSBpcyBuZXh0IGluCi10aGUgcGF0aC4gSWYgaXQncyBhIGNhbGwtZ3JhcGggc2FtcGxlIGZpbGUsIHdlIG5lZWQgb25lIGZ1cnRoZXIKLXNwZWNpZmljYXRpb24sIHRvIGFsbG93IHVzIHRvIGlkZW50aWZ5IGNyb3NzLWJpbmFyeSBhcmNzIGluIHRoZSBjYWxsCi1ncmFwaC4KLTwvcD4KLSAgICAgICAgICA8cD4KLVRoZSBhY3R1YWwgc2FtcGxlIGZpbGUgbmFtZSBpcyBkb3Qtc2VwYXJhdGVkLCB3aGVyZSB0aGUgZmllbGRzIGFyZSwgaW4KLW9yZGVyOiBldmVudCBuYW1lLCBldmVudCBjb3VudCwgdW5pdCBtYXNrLCB0YXNrIGdyb3VwIElELCB0YXNrIElELCBhbmQKLUNQVSBudW1iZXIuCi08L3A+Ci0gICAgICAgICAgPHA+Ci1UaGlzIHNhbXBsZSBmaWxlIGNhbiBiZSByZWxpYWJseSBwYXJzZWQgKHdpdGgKLTxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+cGFyc2VfZmlsZW5hbWUoKTwvY29kZT4pIGludG8gYQotPGNvZGUgY2xhc3M9InZhcm5hbWUiPmZpbGVuYW1lX3NwZWM8L2NvZGU+LiBGaW5hbGx5LCB3ZSBjYW4gY2hlY2sgd2hldGhlciB0bwotaW5jbHVkZSB0aGUgc2FtcGxlIGZpbGUgaW4gdGhlIGZpbmFsIHJlc3VsdHMgYnkgY29tcGFyaW5nIHRoaXMKLTxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5maWxlbmFtZV9zcGVjPC9jb2RlPiBhZ2FpbnN0IHRoZQotPGNvZGUgY2xhc3M9InZhcm5hbWUiPnByb2ZpbGVfc3BlYzwvY29kZT4gdGhlIHVzZXIgc3BlY2lmaWVkIChmb3IgdGhlIGludGVyZXN0ZWQsCi1zZWUgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj52YWxpZF9jYW5kaWRhdGUoKTwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnByb2ZpbGVfc3BlYzo6bWF0Y2g8L2NvZGU+KS4gVGhlbiBjb21lcyB0aGUgcmVhbGx5Ci1jb21wbGljYXRlZCBiaXQuLi4KLTwvcD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJzYW1wbGUtZmlsZS1jb2xsYXRpbmciPjwvYT4yLqBDb2xsYXRpbmcgdGhlIGNhbmRpZGF0ZSBzYW1wbGUgZmlsZXM8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgZHVwbGljYXRlLWZyZWUgbGlzdCBvZiBzYW1wbGUgZmlsZXMgd2UgbmVlZAotdG8gcHJvY2Vzcy4gQnV0IGZpcnN0IHdlIG5lZWQgdG8gZG8gc29tZSBmdXJ0aGVyIGFycmFuZ2VtZW50OiB3ZQotbmVlZCB0byBjbGFzc2lmeSBlYWNoIHNhbXBsZSBmaWxlLCBhbmQgd2UgbWF5IGFsc28gbmVlZCB0byAiaW52ZXJ0IgotdGhlIHByb2ZpbGVzLgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJzYW1wbGUtZmlsZS1jbGFzc2lmeWluZyI+PC9hPjIuMS6gQ2xhc3NpZnlpbmcgc2FtcGxlIGZpbGVzPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotSXQncyBwb3NzaWJsZSBmb3IgdXRpbGl0aWVzIGxpa2UgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+IHRvIHNob3cgCi1kYXRhIGluIGNvbHVtbmFyIGZvcm1hdDogZm9yIGV4YW1wbGUsIHdlIG1pZ2h0IHdhbnQgdG8gc2hvdyB0aGUgcmVzdWx0cwotb2YgdHdvIHRocmVhZHMgd2l0aGluIGEgcHJvY2VzcyBzaWRlLWJ5LXNpZGUuIFRvIGRvIHRoaXMsIHdlIG5lZWQKLXRvIGNsYXNzaWZ5IGVhY2ggc2FtcGxlIGZpbGUgaW50byBjbGFzc2VzIC0gdGhlIGNsYXNzZXMgY29ycmVzcG9uZAotd2l0aCBlYWNoIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiBjb2x1bW4uIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMKLXRoaXMgaXMgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5hcnJhbmdlX3Byb2ZpbGVzKCk8L2NvZGU+LiBFYWNoIHNhbXBsZSBmaWxlCi1pcyBhZGRlZCB0byBhIHBhcnRpY3VsYXIgY2xhc3MuIElmIHRoZSBzYW1wbGUgZmlsZSBpcyB0aGUgZmlyc3QgaW4KLWl0cyBjbGFzcywgYSB0ZW1wbGF0ZSBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgc2FtcGxlIGZpbGUuIEVhY2ggdGVtcGxhdGUKLWRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgY2xhc3MgKHRodXMsIGluIG91ciBleGFtcGxlIGFib3ZlLCBlYWNoIHRlbXBsYXRlCi13aWxsIGhhdmUgYSBkaWZmZXJlbnQgdGhyZWFkIElELCBhbmQgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIGVhY2gKLWNsYXNzKS4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotRWFjaCBjbGFzcyBoYXMgYSBsaXN0IG9mICJwcm9maWxlIHNldHMiIG1hdGNoaW5nIHRoYXQgY2xhc3MncyB0ZW1wbGF0ZS4KLUEgcHJvZmlsZSBzZXQgaXMgZWl0aGVyIGEgcHJvZmlsZSBvZiB0aGUgcHJpbWFyeSBiaW5hcnkgaW1hZ2UsIG9yIGFueSBvZgotaXRzIGRlcGVuZGVudCBpbWFnZXMuIEFmdGVyIGFsbCBzYW1wbGUgZmlsZXMgaGF2ZSBiZWVuIGxpc3RlZCBpbiBvbmUgb2YKLXRoZSBwcm9maWxlIHNldHMgYmVsb25naW5nIHRvIHRoZSBjbGFzc2VzLCB3ZSBoYXZlIHRvIG5hbWUgZWFjaCBjbGFzcyBhbmQKLXBlcmZvcm0gZXJyb3ItY2hlY2tpbmcuIFRoaXMgaXMgZG9uZSBieQotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5pZGVudGlmeV9jbGFzc2VzKCk8L2NvZGU+OyBlYWNoIGNsYXNzIGlzIGNoZWNrZWQgdG8gZW5zdXJlCi10aGF0IGl0cyAiYXhpcyIgaXMgdGhlIHNhbWUgYXMgYWxsIHRoZSBvdGhlcnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UKLTxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiBjYW4ndCBwcm9kdWNlIHJlc3VsdHMgaW4gM0QgZm9ybWF0OiB3ZSBjYW4KLW9ubHkgZGlmZmVyIGluIG9uZSBhc3BlY3QsIHN1Y2ggYXMgdGhyZWFkIElEIG9yIGV2ZW50IG5hbWUuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InNhbXBsZS1maWxlLWludmVydGluZyI+PC9hPjIuMi6gQ3JlYXRpbmcgaW52ZXJ0ZWQgcHJvZmlsZSBsaXN0czwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLVJlbWVtYmVyIHRoYXQgaWYgd2UncmUgdXNpbmcgY2VydGFpbiBwcm9maWxlIHNlcGFyYXRpb24gb3B0aW9ucywgc3VjaCBhcwotIi0tc2VwYXJhdGU9bGliIiwgYSBzaW5nbGUgYmluYXJ5IGNvdWxkIGJlIGEgZGVwZW5kZW50IGltYWdlIHRvIG1hbnkKLWRpZmZlcmVudCBiaW5hcmllcy4gRm9yIGV4YW1wbGUsIHRoZSBDIGxpYnJhcnkgaW1hZ2Ugd291bGQgYmUgYQotZGVwZW5kZW50IGltYWdlIGZvciBtb3N0IHByb2dyYW1zIHRoYXQgaGF2ZSBiZWVuIHByb2ZpbGVkLiBBcyBpdAotaGFwcGVucywgdGhpcyBjYW4gY2F1c2Ugc2V2ZXJlIHBlcmZvcm1hbmNlIHByb2JsZW1zOiB3aXRob3V0IHNvbWUKLXJlLWFycmFuZ2VtZW50LCB0aGVzZSBkZXBlbmRlbnQgYmluYXJ5IGltYWdlcyB3b3VsZCBiZSBvcGVuZWQgZWFjaAotdGltZSB3ZSBuZWVkIHRvIHByb2Nlc3Mgc2FtcGxlIGZpbGVzIGZvciBlYWNoIHByb2dyYW0uCi08L3A+Ci0gICAgICAgICAgICA8cD4KLVRoZSBzb2x1dGlvbiBpcyB0byAiaW52ZXJ0IiB0aGUgcHJvZmlsZXMgdmlhCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmludmVydF9wcm9maWxlcygpPC9jb2RlPi4gV2UgY3JlYXRlIGEgbmV3IGRhdGEgc3RydWN0dXJlCi13aGVyZSB0aGUgZGVwZW5kZW50IGJpbmFyeSBpcyBmaXJzdCwgYW5kIHRoZSBwcmltYXJ5IGJpbmFyeSBpbWFnZXMgdXNpbmcKLXRoYXQgZGVwZW5kZW50IGJpbmFyeSBhcmUgbGlzdGVkIGFzIHN1Yi1pbWFnZXMuIFRoaXMgaGVscHMgb3VyCi1wZXJmb3JtYW5jZSBwcm9ibGVtLCBhcyBub3cgd2Ugb25seSBuZWVkIHRvIG9wZW4gZWFjaCBkZXBlbmRlbnQgaW1hZ2UKLW9uY2UsIHdoZW4gd2UgcHJvY2VzcyB0aGUgbGlzdCBvZiBpbnZlcnRlZCBwcm9maWxlcy4KLTwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJnZW5lcmF0aW5nLXByb2ZpbGUtZGF0YSI+PC9hPjMuoEdlbmVyYXRpbmcgcHJvZmlsZSBkYXRhPC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLVRoaW5ncyBkb24ndCBnZXQgYW55IHNpbXBsZXIgYXQgdGhpcyBwb2ludCwgdW5mb3J0dW5hdGVseS4gQXQgdGhpcyBwb2ludAotd2UndmUgY29sbGVjdGVkIGFuZCBjbGFzc2lmaWVkIHRoZSBzYW1wbGUgZmlsZXMgaW50byB0aGUgc2V0IG9mIGludmVydGVkCi1wcm9maWxlcywgYXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLiBOb3cgd2UgbmVlZCB0byBwcm9jZXNzCi1lYWNoIGludmVydGVkIHByb2ZpbGUgYW5kIG1ha2Ugc29tZXRoaW5nIG9mIHRoZSBkYXRhLiBUaGUgZW50cnkgcG9pbnQKLWZvciB0aGlzIGlzIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+cG9wdWxhdGVfZm9yX2ltYWdlKCk8L2NvZGU+LgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJiZmQiPjwvYT4zLjEuoFByb2Nlc3NpbmcgdGhlIGJpbmFyeSBpbWFnZTwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLVRoZSBmaXJzdCB0aGluZyB3ZSBkbyB3aXRoIGFuIGludmVydGVkIHByb2ZpbGUgaXMgYXR0ZW1wdCB0byBvcGVuIHRoZQotYmluYXJ5IGltYWdlIChyZW1lbWJlciBlYWNoIGludmVydGVkIHByb2ZpbGUgc2V0IGlzIG9ubHkgZm9yIG9uZSBiaW5hcnkKLWltYWdlLCBidXQgbWF5IGhhdmUgbWFueSBzYW1wbGUgZmlsZXMgdG8gcHJvY2VzcykuIFRoZQotPGNvZGUgY2xhc3M9InZhcm5hbWUiPm9wX2JmZDwvY29kZT4gY2xhc3MgcHJvdmlkZXMgYW4gYWJzdHJhY3RlZCBpbnRlcmZhY2UgdG8KLXRoaXM7IGludGVybmFsbHkgaXQgdXNlcyA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmxpYmJmZDwvY29kZT4uIFRoZSBtYWluIHB1cnBvc2UKLW9mIHRoaXMgY2xhc3MgaXMgdG8gcHJvY2VzcyB0aGUgc3ltYm9scyBmb3IgdGhlIGJpbmFyeSBpbWFnZTsgdGhpcyBpcwotYWxzbyB3aGVyZSBzeW1ib2wgZmlsdGVyaW5nIGhhcHBlbnMuIFRoaXMgaXMgYWN0dWFsbHkgcXVpdGUgdHJpY2t5LCBidXQKLXNob3VsZCBiZSBjbGVhciBmcm9tIHRoZSBzb3VyY2UuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InByb2Nlc3Npbmctc2FtcGxlLWZpbGVzIj48L2E+My4yLqBQcm9jZXNzaW5nIHRoZSBzYW1wbGUgZmlsZXM8L2gzPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPHA+Ci1UaGUgY2xhc3MgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnByb2ZpbGVfY29udGFpbmVyPC9jb2RlPiBpcyBhIGhvbGQtYWxsIHRoYXQKLWNvbnRhaW5zIGFsbCB0aGUgcHJvY2Vzc2VkIHJlc3VsdHMuIEl0IGlzIGEgY29udGFpbmVyIG9mCi08Y29kZSBjbGFzcz0idmFybmFtZSI+cHJvZmlsZV90PC9jb2RlPiBvYmplY3RzLiBUaGUKLTxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+YWRkX3NhbXBsZV9maWxlcygpPC9jb2RlPiBtZXRob2QgdXNlcwotPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5saWJkYjwvY29kZT4gdG8gb3BlbiB0aGUgZ2l2ZW4gc2FtcGxlIGZpbGUgYW5kIGFkZCB0aGUKLWtleS92YWx1ZSB0eXBlcyB0byB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnByb2ZpbGVfdDwvY29kZT4uIE9uY2UgdGhpcyBoYXMgYmVlbgotZG9uZSwgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wcm9maWxlX2NvbnRhaW5lcjo6YWRkKCk8L2NvZGU+IGlzIHBhc3NlZCB0aGUKLTxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5wcm9maWxlX3Q8L2NvZGU+IHBsdXMgdGhlIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5vcF9iZmQ8L2NvZGU+IGZvcgotcHJvY2Vzc2luZy4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wcm9maWxlX2NvbnRhaW5lcjo6YWRkKCk8L2NvZGU+IHdhbGtzIHRocm91Z2ggdGhlIHN5bWJvbHMKLWNvbGxlY3RlZCBpbiB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPm9wX2JmZDwvY29kZT4uCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wX2JmZDo6Z2V0X3N5bWJvbF9yYW5nZSgpPC9jb2RlPiBnaXZlcyB1cyB0aGUgc3RhcnQgYW5kCi1lbmQgb2YgdGhlIHN5bWJvbCBhcyBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGJpbmFyeSBpbWFnZSwKLXRoZW4gd2UgaW50ZXJyb2dhdGUgdGhlIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5wcm9maWxlX3Q8L2NvZGU+IGZvciB0aGUgcmVsZXZhbnQgc2FtcGxlcwotZm9yIHRoYXQgb2Zmc2V0IHJhbmdlLiBXZSBjcmVhdGUgYSA8Y29kZSBjbGFzcz0idmFybmFtZSI+c3ltYm9sX2VudHJ5PC9jb2RlPgotb2JqZWN0IGZvciB0aGlzIHN5bWJvbCBhbmQgZmlsbCBpdCBpbi4gSWYgbmVlZGVkLCBoZXJlIHdlIGFsc28gY29sbGVjdAotZGVidWcgaW5mb3JtYXRpb24gZnJvbSB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPm9wX2JmZDwvY29kZT4sIGFuZCBwb3NzaWJseQotcmVjb3JkIHRoZSBkZXRhaWxlZCBzYW1wbGUgaW5mb3JtYXRpb24gKGFzIHVzZWQgYnkgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQKLS1kPC9zdHJvbmc+PC9zcGFuPiBhbmQgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj4pLgotRmluYWxseSB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN5bWJvbF9lbnRyeTwvY29kZT4gaXMgYWRkZWQgdG8KLWEgcHJpdmF0ZSBjb250YWluZXIgb2YgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnByb2ZpbGVfY29udGFpbmVyPC9jb2RlPiAtIHRoaXMKLTxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5zeW1ib2xfY29udGFpbmVyPC9jb2RlPiBob2xkcyBhbGwgc3VjaCBwcm9jZXNzZWQgc3ltYm9scy4KLTwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJnZW5lcmF0aW5nLW91dHB1dCI+PC9hPjQuoEdlbmVyYXRpbmcgb3V0cHV0PC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLUFmdGVyIHRoZSBwcm9jZXNzaW5nIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgd2UndmUgbm93IGdvdAotZnVsbCBkZXRhaWxzIG9mIHdoYXQgd2UgbmVlZCB0byBvdXRwdXQgc3RvcmVkIGluIHRoZQotPGNvZGUgY2xhc3M9InZhcm5hbWUiPnByb2ZpbGVfY29udGFpbmVyPC9jb2RlPiBvbiBhIHN5bWJvbC1ieS1zeW1ib2wgYmFzaXMuIFRvCi1wcm9kdWNlIG91dHB1dCwgd2UgbmVlZCB0byByZXBsYXkgdGhhdCBkYXRhIGFuZCBmb3JtYXQgaXQgc3VpdGFibHkuCi08L3A+Ci0gICAgICAgICAgPHA+Ci08c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4gZmlyc3QgYXNrcyB0aGUKLTxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5wcm9maWxlX2NvbnRhaW5lcjwvY29kZT4gZm9yIGEKLTxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5zeW1ib2xfY29sbGVjdGlvbjwvY29kZT4gKHRoaXMgaXMgYWxzbyB3aGVyZSB0aHJlc2hvbGRpbmcKLWhhcHBlbnMpLgotVGhpcyBpcyBzb3J0ZWQsIHRoZW4gYQotPGNvZGUgY2xhc3M9InZhcm5hbWUiPm9wcmVwb3J0X2Zvcm1hdHRlcjwvY29kZT4gaXMgaW5pdGlhbGlzZWQuCi1UaGlzIG9iamVjdCBpbml0aWFsaXNlcyBhIHNldCBvZiBmaWVsZCBmb3JtYXR0ZXJzIGFzIHJlcXVlc3RlZC4gVGhlbgotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5vcHJlcG9ydF9mb3JtYXR0ZXI6Om91dHB1dCgpPC9jb2RlPiBpcyBjYWxsZWQuIFRoaXMKLWl0ZXJhdGVzIHRocm91Z2ggdGhlIChzb3J0ZWQpIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5zeW1ib2xfY29sbGVjdGlvbjwvY29kZT47Ci1mb3IgZWFjaCBlbnRyeSwgdGhlIHNlbGVjdGVkIGZpZWxkcyAoYXMgc2V0IGJ5IHRoZQotPGNvZGUgY2xhc3M9InZhcm5hbWUiPmZvcm1hdF9mbGFnczwvY29kZT4gb3B0aW9ucykgYXJlIG91dHB1dCBieSBjYWxsaW5nIHRoZQotZmllbGQgZm9ybWF0dGVycywgd2l0aCB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN5bWJvbF9lbnRyeTwvY29kZT4gcGFzc2VkIGluLgotPC9wPgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvZGl2PgotICAgICAgPGRpdiBjbGFzcz0iZ2xvc3NhcnkiPgotICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIj48YSBpZD0iZ2xvc3NhcnkiPjwvYT5HbG9zc2FyeSBvZiBPUHJvZmlsZSBzb3VyY2UgY29uY2VwdHMgYW5kIHR5cGVzPC9oMj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRsPgotICAgICAgICAgIDxkdD5hcHBsaWNhdGlvbiBpbWFnZTwvZHQ+Ci0gICAgICAgICAgPGRkPgotICAgICAgICAgICAgPHA+Ci1UaGUgcHJpbWFyeSBiaW5hcnkgaW1hZ2UgdXNlZCBieSBhbiBhcHBsaWNhdGlvbi4gVGhpcyBpcyBkZXJpdmVkCi1mcm9tIHRoZSBrZXJuZWwgYW5kIGNvcnJlc3BvbmRzIHRvIHRoZSBiaW5hcnkgc3RhcnRlZCB1cG9uIHJ1bm5pbmcKLWFuIGFwcGxpY2F0aW9uOiBmb3IgZXhhbXBsZSwgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vYmluL2Jhc2g8L2NvZGU+LgotPC9wPgotICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgPGR0PmJpbmFyeSBpbWFnZTwvZHQ+Ci0gICAgICAgICAgPGRkPgotICAgICAgICAgICAgPHA+Ci1BbiBFTEYgZmlsZSBjb250YWluaW5nIGV4ZWN1dGFibGUgY29kZTogdGhpcyBpbmNsdWRlcyBrZXJuZWwgbW9kdWxlcywKLXRoZSBrZXJuZWwgaXRzZWxmIChhLmsuYS4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj52bWxpbnV4PC9jb2RlPiksIHNoYXJlZCBsaWJyYXJpZXMsCi1hbmQgYXBwbGljYXRpb24gYmluYXJpZXMuCi08L3A+Ci0gICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8ZHQ+ZGNvb2tpZTwvZHQ+Ci0gICAgICAgICAgPGRkPgotICAgICAgICAgICAgPHA+Ci1TaG9ydCBmb3IgImRlbnRyeSBjb29raWUiLiBBIHVuaXF1ZSBJRCB0aGF0IGNhbiBiZSBsb29rZWQgdXAgdG8gcHJvdmlkZQotdGhlIGZ1bGwgcGF0aCBuYW1lIG9mIGEgYmluYXJ5IGltYWdlLgotPC9wPgotICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgPGR0PmRlcGVuZGVudCBpbWFnZTwvZHQ+Ci0gICAgICAgICAgPGRkPgotICAgICAgICAgICAgPHA+Ci1BIGJpbmFyeSBpbWFnZSB0aGF0IGlzIGRlcGVuZGVudCB1cG9uIGFuIGFwcGxpY2F0aW9uLCB1c2VkIHdpdGgKLXBlci1hcHBsaWNhdGlvbiBzZXBhcmF0aW9uLiBNb3N0IGNvbW1vbmx5LCBzaGFyZWQgbGlicmFyaWVzLiBGb3IgZXhhbXBsZSwKLWlmIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2Jpbi9iYXNoPC9jb2RlPiBpcyBydW5uaW5nIGFuZCB3ZSB0YWtlCi1zb21lIHNhbXBsZXMgaW5zaWRlIHRoZSBDIGxpYnJhcnkgaXRzZWxmIGR1ZSB0byA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5iYXNoPC9zdHJvbmc+PC9zcGFuPgotY2FsbGluZyBsaWJyYXJ5IGNvZGUsIHRoZW4gdGhlIGltYWdlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2xpYi9saWJjLnNvPC9jb2RlPgotd291bGQgYmUgZGVwZW5kZW50IHVwb24gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vYmluL2Jhc2g8L2NvZGU+LgotPC9wPgotICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgPGR0Pm1lcmdpbmc8L2R0PgotICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgIDxwPgotVGhpcyByZWZlcnMgdG8gdGhlIGFiaWxpdHkgdG8gbWVyZ2Ugc2V2ZXJhbCBkaXN0aW5jdCBzYW1wbGUgZmlsZXMKLWludG8gb25lIHNldCBvZiBkYXRhIGF0IHJ1bnRpbWUsIGluIHRoZSBwb3N0LXByb2ZpbGluZyB0b29scy4gRm9yIGV4YW1wbGUsCi1wZXItdGhyZWFkIHNhbXBsZSBmaWxlcyBjYW4gYmUgbWVyZ2VkIGludG8gb25lIHNldCBvZiBkYXRhLCBiZWNhdXNlCi10aGV5IGFyZSBjb21wYXRpYmxlIChpLmUuIHRoZSBhZ2dyZWdhdGlvbiBvZiB0aGUgZGF0YSBpcyBtZWFuaW5nZnVsKSwKLWJ1dCBpdCdzIG5vdCBwb3NzaWJsZSB0byBtZXJnZSBzYW1wbGUgZmlsZXMgZm9yIHR3byBkaWZmZXJlbnQgZXZlbnRzLAotYmVjYXVzZSB0aGVyZSB3b3VsZCBiZSBubyB1c2VmdWwgbWVhbmluZyB0byB0aGUgcmVzdWx0cy4KLTwvcD4KLSAgICAgICAgICA8L2RkPgotICAgICAgICAgIDxkdD5wcm9maWxlIGNsYXNzPC9kdD4KLSAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICA8cD4KLUEgY29sbGVjdGlvbiBvZiBwcm9maWxlIGRhdGEgdGhhdCBoYXMgYmVlbiBjb2xsZWN0ZWQgdW5kZXIgdGhlIHNhbWUKLWNsYXNzIHRlbXBsYXRlLiBGb3IgZXhhbXBsZSwgaWYgd2UncmUgdXNpbmcgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+Ci10byBzaG93IHJlc3VsdHMgYWZ0ZXIgcHJvZmlsaW5nIHdpdGggdHdvIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGVuYWJsZWQKLXByb2ZpbGluZyA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkRBVEFfTUVNX1JFRlM8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkNQVV9DTEtfVU5IQUxURUQ8L2NvZGU+LAotdGhlcmUgd291bGQgYmUgdHdvIHByb2ZpbGUgY2xhc3Nlcywgb25lIGZvciBlYWNoIGV2ZW50LiBPciBpZiB3ZSdyZSBvbgotYW4gU01QIHN5c3RlbSBhbmQgZG9pbmcgcGVyLWNwdSBwcm9maWxpbmcsIGFuZCB3ZSByZXF1ZXN0Ci08c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4gdG8gc2hvdyByZXN1bHRzIGZvciBlYWNoIENQVSBzaWRlLWJ5LXNpZGUsCi10aGVyZSB3b3VsZCBiZSBhIHByb2ZpbGUgY2xhc3MgZm9yIGVhY2ggQ1BVLgotPC9wPgotICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgPGR0PnByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvZHQ+Ci0gICAgICAgICAgPGRkPgotICAgICAgICAgICAgPHA+Ci1UaGUgcGFyYW1ldGVycyB0aGUgdXNlciBwYXNzZXMgdG8gdGhlIHBvc3QtcHJvZmlsaW5nIHRvb2xzIHRoYXQgbGltaXQKLXdoYXQgc2FtcGxlIGZpbGVzIGFyZSB1c2VkLiBUaGlzIHNwZWNpZmljYXRpb24gaXMgbWF0Y2hlZCBhZ2FpbnN0Ci10aGUgYXZhaWxhYmxlIHNhbXBsZSBmaWxlcyB0byBnZW5lcmF0ZSBhIHNlbGVjdGlvbiBvZiBwcm9maWxlIGRhdGEuCi08L3A+Ci0gICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8ZHQ+cHJvZmlsZSB0ZW1wbGF0ZTwvZHQ+Ci0gICAgICAgICAgPGRkPgotICAgICAgICAgICAgPHA+Ci1UaGUgcGFyYW1ldGVycyB0aGF0IGRlZmluZSB3aGF0IGdvZXMgaW4gYSBwYXJ0aWN1bGFyIHByb2ZpbGUgY2xhc3MuCi1UaGlzIGluY2x1ZGVzIGEgc3ltYm9saWMgbmFtZSAoZS5nLiAiY3B1OjEiKSBhbmQgdGhlIGNvZGUtdXNhYmxlCi1lcXVpdmFsZW50LgotPC9wPgotICAgICAgICAgIDwvZGQ+Ci0gICAgICAgIDwvZGw+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLSAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jL2ludGVybmFscy54bWwgYi9kb2MvaW50ZXJuYWxzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJlODlmNC4uMDAwMDAwMAotLS0gYS9kb2MvaW50ZXJuYWxzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDk3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4KLQotPGJvb2sgaWQ9Im9wcm9maWxlLWludGVybmFscyI+Ci08Ym9va2luZm8+Ci0JPHRpdGxlPk9Qcm9maWxlIEludGVybmFsczwvdGl0bGU+Ci0gCi0JPGF1dGhvcmdyb3VwPgotCQk8YXV0aG9yPgotCQkJPGZpcnN0bmFtZT5Kb2huPC9maXJzdG5hbWU+Ci0JCQk8c3VybmFtZT5MZXZvbjwvc3VybmFtZT4KLQkJCTxhZmZpbGlhdGlvbj4KLQkJCQk8YWRkcmVzcz48ZW1haWw+bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc8L2VtYWlsPjwvYWRkcmVzcz4KLQkJCTwvYWZmaWxpYXRpb24+Ci0JCTwvYXV0aG9yPgotCTwvYXV0aG9yZ3JvdXA+Ci0KLQk8Y29weXJpZ2h0PgotCQk8eWVhcj4yMDAzPC95ZWFyPgotCQk8aG9sZGVyPkpvaG4gTGV2b248L2hvbGRlcj4KLQk8L2NvcHlyaWdodD4KLTwvYm9va2luZm8+Ci0KLTx0b2M+PC90b2M+Ci0KLTxjaGFwdGVyIGlkPSJpbnRyb2R1Y3Rpb24iPgotPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+Ci0KLTxwYXJhPgotVGhpcyBkb2N1bWVudCBpcyBjdXJyZW50IGZvciBPUHJvZmlsZSB2ZXJzaW9uIDxvcHJvZmlsZXZlcnNpb24gLz4uCi1UaGlzIGRvY3VtZW50IHByb3ZpZGVzIHNvbWUgZGV0YWlscyBvbiB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgT1Byb2ZpbGUgZm9yIHRoZQotaW50ZXJlc3RlZCBoYWNrZXIuIFRoaXMgZG9jdW1lbnQgYXNzdW1lcyBzdHJvbmcgQywgd29ya2luZyBDKyssIHBsdXMgc29tZSBrbm93bGVkZ2Ugb2YKLWtlcm5lbCBpbnRlcm5hbHMgYW5kIENQVSBoYXJkd2FyZS4KLTwvcGFyYT4KLTxub3RlPgotPHBhcmE+Ci1Pbmx5IHRoZSAibmV3IiBpbXBsZW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGgga2VybmVsIDIuNiBhbmQgYWJvdmUgaXMgY292ZXJlZCBoZXJlLiAyLjQKLXVzZXMgYSB2ZXJ5IGRpZmZlcmVudCBrZXJuZWwgbW9kdWxlIGltcGxlbWVudGF0aW9uIGFuZCBkYWVtb24gdG8gcHJvZHVjZSB0aGUgc2FtcGxlIGZpbGVzLgotPC9wYXJhPgotPC9ub3RlPgotCi08c2VjdDEgaWQ9Im92ZXJ2aWV3Ij4KLTx0aXRsZT5PdmVydmlldzwvdGl0bGU+Ci08cGFyYT4KLU9Qcm9maWxlIGlzIGEgc3RhdGlzdGljYWwgY29udGludW91cyBwcm9maWxlci4gSW4gb3RoZXIgd29yZHMsIHByb2ZpbGVzIGFyZSBnZW5lcmF0ZWQgYnkKLXJlZ3VsYXJseSBzYW1wbGluZyB0aGUgY3VycmVudCByZWdpc3RlcnMgb24gZWFjaCBDUFUgKGZyb20gYW4gaW50ZXJydXB0IGhhbmRsZXIsIHRoZQotc2F2ZWQgUEMgdmFsdWUgYXQgdGhlIHRpbWUgb2YgaW50ZXJydXB0IGlzIHN0b3JlZCksIGFuZCBjb252ZXJ0aW5nIHRoYXQgcnVudGltZSBQQwotdmFsdWUgaW50byBzb21ldGhpbmcgbWVhbmluZ2Z1bCB0byB0aGUgcHJvZ3JhbW1lci4KLTwvcGFyYT4KLTxwYXJhPgotT1Byb2ZpbGUgYWNoaWV2ZXMgdGhpcyBieSB0YWtpbmcgdGhlIHN0cmVhbSBvZiBzYW1wbGVkIFBDIHZhbHVlcywgYWxvbmcgd2l0aCB0aGUgZGV0YWlsCi1vZiB3aGljaCB0YXNrIHdhcyBydW5uaW5nIGF0IHRoZSB0aW1lIG9mIHRoZSBpbnRlcnJ1cHQsIGFuZCBjb252ZXJ0aW5nIGludG8gYSBmaWxlIG9mZnNldAotYWdhaW5zdCBhIHBhcnRpY3VsYXIgYmluYXJ5IGZpbGUuIEJlY2F1c2UgYXBwbGljYXRpb25zIDxmdW5jdGlvbj5tbWFwKCk8L2Z1bmN0aW9uPgotdGhlIGNvZGUgdGhleSBydW4gKGJlIGl0IDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi9saWIvbGliZm9vLnNvPC9maWxlbmFtZT4KLW9yIHdoYXRldmVyKSwgaXQncyBwb3NzaWJsZSB0byBmaW5kIHRoZSByZWxldmFudCBiaW5hcnkgZmlsZSBhbmQgb2Zmc2V0IGJ5IHdhbGtpbmcKLXRoZSB0YXNrJ3MgbGlzdCBvZiBtYXBwZWQgbWVtb3J5IGFyZWFzLiBFYWNoIFBDIHZhbHVlIGlzIHRodXMgY29udmVydGVkIGludG8gYSB0dXBsZQotb2YgYmluYXJ5LWltYWdlLG9mZnNldC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCB0aGUgdXNlcnNwYWNlIHRvb2xzIGNhbiB1c2UgZGlyZWN0bHkKLXRvIHJlY29uc3RydWN0IHdoZXJlIHRoZSBjb2RlIGNhbWUgZnJvbSwgaW5jbHVkaW5nIHRoZSBwYXJ0aWN1bGFyIGFzc2VtYmx5IGluc3RydWN0aW9ucywKLXN5bWJvbCwgYW5kIHNvdXJjZSBsaW5lICh2aWEgdGhlIGJpbmFyeSdzIGRlYnVnIGluZm9ybWF0aW9uIGlmIHByZXNlbnQpLgotPC9wYXJhPgotPHBhcmE+Ci1SZWd1bGFybHkgc2FtcGxpbmcgdGhlIFBDIHZhbHVlIGxpa2UgdGhpcyBhcHByb3hpbWF0ZXMgd2hhdCBhY3R1YWxseSB3YXMgZXhlY3V0ZWQgYW5kCi1ob3cgb2Z0ZW4gLSBtb3JlIG9mdGVuIHRoYW4gbm90LCB0aGlzIHN0YXRpc3RpY2FsIGFwcHJveGltYXRpb24gaXMgZ29vZCBlbm91Z2ggdG8KLXJlZmxlY3QgcmVhbGl0eS4gSW4gY29tbW9uIG9wZXJhdGlvbiwgdGhlIHRpbWUgYmV0d2VlbiBlYWNoIHNhbXBsZSBpbnRlcnJ1cHQgaXMgcmVndWxhdGVkCi1ieSBhIGZpeGVkIG51bWJlciBvZiBjbG9jayBjeWNsZXMuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSByZXN1bHRzIHdpbGwgcmVmbGVjdCB3aGVyZQotdGhlIENQVSBpcyBzcGVuZGluZyB0aGUgbW9zdCB0aW1lOyB0aGlzIGlzIG9idmlvdXNseSBhIHZlcnkgdXNlZnVsIGluZm9ybWF0aW9uIHNvdXJjZQotZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLgotPC9wYXJhPgotPHBhcmE+Ci1Tb21ldGltZXMgdGhvdWdoLCBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyIG5lZWRzIGRpZmZlcmVudCBraW5kcyBvZiBpbmZvcm1hdGlvbjogZm9yIGV4YW1wbGUsCi0id2hpY2ggb2YgdGhlIHNvdXJjZSByb3V0aW5lcyBjYXVzZSB0aGUgbW9zdCBjYWNoZSBtaXNzZXMgPyIuIFRoZSByaXNlIGluIGltcG9ydGFuY2Ugb2YKLXN1Y2ggbWV0cmljcyBpbiByZWNlbnQgeWVhcnMgaGFzIGxlZCBtYW55IENQVSBtYW51ZmFjdHVyZXJzIHRvIHByb3ZpZGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UKLWNvdW50ZXJzIGNhcGFibGUgb2YgbWVhc3VyaW5nIHRoZXNlIGV2ZW50cyBvbiB0aGUgaGFyZHdhcmUgbGV2ZWwuIFR5cGljYWxseSwgdGhlc2UgY291bnRlcnMKLWluY3JlbWVudCBvbmNlIHBlciBlYWNoIGV2ZW50LCBhbmQgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IG9uIHJlYWNoaW5nIHNvbWUgcHJlLWRlZmluZWQKLW51bWJlciBvZiBldmVudHMuIE9Qcm9maWxlIGNhbiB1c2UgdGhlc2UgaW50ZXJydXB0cyB0byBnZW5lcmF0ZSBzYW1wbGVzOiB0aGVuLCB0aGUKLXByb2ZpbGUgcmVzdWx0cyBhcmUgYSBzdGF0aXN0aWNhbCBhcHByb3hpbWF0aW9uIG9mIHdoaWNoIGNvZGUgY2F1c2VkIGhvdyBtYW55IG9mIHRoZQotZ2l2ZW4gZXZlbnQuCi08L3BhcmE+Ci08cGFyYT4KLUNvbnNpZGVyIGEgc2ltcGxpZmllZCBzeXN0ZW0gdGhhdCBvbmx5IGV4ZWN1dGVzIHR3byBmdW5jdGlvbnMgQSBhbmQgQi4gQQotdGFrZXMgb25lIGN5Y2xlIHRvIGV4ZWN1dGUsIHdoZXJlYXMgQiB0YWtlcyA5OSBjeWNsZXMuIEltYWdpbmUgd2UgcnVuIGF0Ci0xMDAgY3ljbGVzIGEgc2Vjb25kLCBhbmQgd2UndmUgc2V0IHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHRvIGNyZWF0ZSBhbgotaW50ZXJydXB0IGFmdGVyIGEgc2V0IG51bWJlciBvZiAiZXZlbnRzIiAoaW4gdGhpcyBjYXNlIGFuIGV2ZW50IGlzIG9uZQotY2xvY2sgY3ljbGUpLiBJdCBzaG91bGQgYmUgY2xlYXIgdGhhdCB0aGUgY2hhbmNlcyBvZiB0aGUgaW50ZXJydXB0Ci1vY2N1cnJpbmcgaW4gZnVuY3Rpb24gQSBpcyAxLzEwMCwgYW5kIDk5LzEwMCBmb3IgZnVuY3Rpb24gQi4gVGh1cywgd2UKLXN0YXRpc3RpY2FsbHkgYXBwcm94aW1hdGUgdGhlIGFjdHVhbCByZWxhdGl2ZSBwZXJmb3JtYW5jZSBmZWF0dXJlcyBvZgotdGhlIHR3byBmdW5jdGlvbnMgb3ZlciB0aW1lLiBUaGlzIHNhbWUgYW5hbHlzaXMgd29ya3MgZm9yIG90aGVyIHR5cGVzIG9mCi1ldmVudHMsIHByb3ZpZGluZyB0aGF0IHRoZSBpbnRlcnJ1cHQgaXMgdGllZCB0byB0aGUgbnVtYmVyIG9mIGV2ZW50cwotb2NjdXJyaW5nICh0aGF0IGlzLCBhZnRlciBOIGV2ZW50cywgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCkuCi08L3BhcmE+Ci08cGFyYT4KLVRoZXJlIGFyZSB0eXBpY2FsbHkgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBjb3VudGVycywgc28gaXQncyBwb3NzaWJsZSB0byBzZXQgdXAgcHJvZmlsaW5nCi1mb3Igc2V2ZXJhbCBkaWZmZXJlbnQgZXZlbnQgdHlwZXMuIFVzaW5nIHRoZXNlIGNvdW50ZXJzIGdpdmVzIHVzIGEgcG93ZXJmdWwsIGxvdy1vdmVyaGVhZAotd2F5IG9mIGdhaW5pbmcgcGVyZm9ybWFuY2UgbWV0cmljcy4gSWYgT1Byb2ZpbGUsIG9yIHRoZSBDUFUsIGRvZXMgbm90IHN1cHBvcnQgcGVyZm9ybWFuY2UKLWNvdW50ZXJzLCB0aGVuIGEgc2ltcGxlciBtZXRob2QgaXMgdXNlZDogdGhlIGtlcm5lbCB0aW1lciBpbnRlcnJ1cHQgZmVlZHMgc2FtcGxlcwotaW50byBPUHJvZmlsZSBpdHNlbGYuCi08L3BhcmE+Ci08cGFyYT4KLVRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgY29uY2VybnMgaXRzZWxmIHdpdGggaG93IHdlIGdldCBmcm9tIHJlY2VpdmluZyBzYW1wbGVzIGF0Ci1pbnRlcnJ1cHQgdGltZSB0byBwcm9kdWNpbmcgdXNlci1yZWFkYWJsZSBwcm9maWxlIGluZm9ybWF0aW9uLgotPC9wYXJhPgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJjb21wb25lbnRzIj4KLTx0aXRsZT5Db21wb25lbnRzIG9mIHRoZSBPUHJvZmlsZSBzeXN0ZW08L3RpdGxlPgotCi08c2VjdDIgaWQ9ImFyY2gtc3BlY2lmaWMtY29tcG9uZW50cyI+Ci08dGl0bGU+QXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbXBvbmVudHM8L3RpdGxlPgotPHBhcmE+Ci1JZiBPUHJvZmlsZSBzdXBwb3J0cyB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMgZm91bmQgb24KLWEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUsIGNvZGUgZm9yIG1hbmFnaW5nIHRoZSBkZXRhaWxzIG9mIHNldHRpbmcKLXVwIGFuZCBtYW5hZ2luZyB0aGVzZSBjb3VudGVycyBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbCBzb3VyY2UKLXRyZWUgaW4gdGhlIHJlbGV2YW50IDxmaWxlbmFtZT5hcmNoLzxlbXBoYXNpcz5hcmNoPC9lbXBoYXNpcz4vb3Byb2ZpbGUvPC9maWxlbmFtZT4KLWRpcmVjdG9yeS4gVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3b3JrcyB2aWEKLWZpbGxpbmcgaW4gdGhlIG9wcm9maWxlX29wZXJhdGlvbnMgc3RydWN0dXJlIGF0IGluaXQgdGltZS4gVGhpcwotcHJvdmlkZXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBzdWNoIGFzIDxmdW5jdGlvbj5zZXR1cCgpPC9mdW5jdGlvbj4sCi08ZnVuY3Rpb24+c3RhcnQoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+c3RvcCgpPC9mdW5jdGlvbj4sIGV0Yy4KLXRoYXQgbWFuYWdlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXRhaWxzIG9mIGZpZGRsaW5nIHdpdGggdGhlCi1wZXJmb3JtYW5jZSBjb3VudGVyIHJlZ2lzdGVycy4KLTwvcGFyYT4KLTxwYXJhPgotVGhlIG90aGVyIGltcG9ydGFudCBmYWNpbGl0eSBhdmFpbGFibGUgdG8gdGhlIGFyY2hpdGVjdHVyZSBjb2RlIGlzCi08ZnVuY3Rpb24+b3Byb2ZpbGVfYWRkX3NhbXBsZSgpPC9mdW5jdGlvbj4uICBUaGlzIGlzIHdoZXJlIGEgcGFydGljdWxhciBzYW1wbGUKLXRha2VuIGF0IGludGVycnVwdCB0aW1lIGlzIGZlZCBpbnRvIHRoZSBnZW5lcmljIE9Qcm9maWxlIGRyaXZlciBjb2RlLgotPC9wYXJhPgotPC9zZWN0Mj4KLQotPHNlY3QyIGlkPSJmaWxlc3lzdGVtIj4KLTx0aXRsZT5vcHJvZmlsZWZzPC90aXRsZT4KLTxwYXJhPgotT1Byb2ZpbGUgaW1wbGVtZW50cyBhIHBzZXVkby1maWxlc3lzdGVtIGtub3duIGFzICJvcHJvZmlsZWZzIiwgbW91bnRlZCBmcm9tCi11c2Vyc3BhY2UgYXQgPGZpbGVuYW1lPi9kZXYvb3Byb2ZpbGU8L2ZpbGVuYW1lPi4gVGhpcyBjb25zaXN0cyBvZiBzbWFsbAotZmlsZXMgZm9yIHJlcG9ydGluZyBhbmQgcmVjZWl2aW5nIGNvbmZpZ3VyYXRpb24gZnJvbSB1c2Vyc3BhY2UsIGFzIHdlbGwKLWFzIHRoZSBhY3R1YWwgY2hhcmFjdGVyIGRldmljZSB0aGF0IHRoZSBPUHJvZmlsZSB1c2Vyc3BhY2UgcmVjZWl2ZXMgc2FtcGxlcwotZnJvbS4gQXQgPGZ1bmN0aW9uPnNldHVwKCk8L2Z1bmN0aW9uPiB0aW1lLCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1heQotYWRkIGZ1cnRoZXIgY29uZmlndXJhdGlvbiBmaWxlcyByZWxhdGVkIHRvIHRoZSBkZXRhaWxzIG9mIHRoZSBwZXJmb3JtYW5jZQotY291bnRlcnMuIEZvciBleGFtcGxlLCBvbiB4ODYsIG9uZSBudW1iZXJlZCBkaXJlY3RvcnkgZm9yIGVhY2ggaGFyZHdhcmUKLXBlcmZvcm1hbmNlIGNvdW50ZXIgaXMgYWRkZWQsIHdpdGggZmlsZXMgaW4gZWFjaCBmb3IgdGhlIGV2ZW50IHR5cGUsCi1yZXNldCB2YWx1ZSwgZXRjLgotPC9wYXJhPgotPHBhcmE+Ci1UaGUgZmlsZXN5c3RlbSBhbHNvIGNvbnRhaW5zIGEgPGZpbGVuYW1lPnN0YXRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGgKLWEgbnVtYmVyIG9mIHVzZWZ1bCBjb3VudGVycyBmb3IgdmFyaW91cyBPUHJvZmlsZSBldmVudHMuCi08L3BhcmE+Ci08L3NlY3QyPgotCi08c2VjdDIgaWQ9ImRyaXZlciI+Ci08dGl0bGU+R2VuZXJpYyBrZXJuZWwgZHJpdmVyPC90aXRsZT4KLTxwYXJhPgotVGhpcyBsaXZlcyBpbiA8ZmlsZW5hbWU+ZHJpdmVycy9vcHJvZmlsZS88L2ZpbGVuYW1lPiwgYW5kIGZvcm1zIHRoZSBjb3JlIG9mCi1ob3cgT1Byb2ZpbGUgd29ya3MgaW4gdGhlIGtlcm5lbC4gSXRzIGpvYiBpcyB0byB0YWtlIHNhbXBsZXMgZGVsaXZlcmVkCi1mcm9tIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSAodmlhIDxmdW5jdGlvbj5vcHJvZmlsZV9hZGRfc2FtcGxlKCk8L2Z1bmN0aW9uPiksCi1hbmQgYnVmZmVyIHRoaXMgZGF0YSwgaW4gYSB0cmFuc2Zvcm1lZCBmb3JtIGFzIGRlc2NyaWJlZCBsYXRlciwgdW50aWwgcmVsZWFzaW5nCi10aGUgZGF0YSB0byB0aGUgdXNlcnNwYWNlIGRhZW1vbiB2aWEgdGhlIDxmaWxlbmFtZT4vZGV2L29wcm9maWxlL2J1ZmZlcjwvZmlsZW5hbWU+Ci1jaGFyYWN0ZXIgZGV2aWNlLgotPC9wYXJhPgotPC9zZWN0Mj4KLQotPHNlY3QyIGlkPSJkYWVtb24iPgotPHRpdGxlPlRoZSBPUHJvZmlsZSBkYWVtb248L3RpdGxlPgotPHBhcmE+Ci1UaGUgT1Byb2ZpbGUgdXNlcnNwYWNlIGRhZW1vbidzIGpvYiBpcyB0byB0YWtlIHRoZSByYXcgZGF0YSBwcm92aWRlZCBieSB0aGUKLWtlcm5lbCBhbmQgd3JpdGUgaXQgdG8gdGhlIGRpc2suIEl0IHRha2VzIHRoZSBzaW5nbGUgZGF0YSBzdHJlYW0gZnJvbSB0aGUKLWtlcm5lbCBhbmQgbG9ncyBzYW1wbGUgZGF0YSBhZ2FpbnN0IGEgbnVtYmVyIG9mIHNhbXBsZSBmaWxlcyAoZm91bmQgaW4KLTxmaWxlbmFtZT4vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQvPC9maWxlbmFtZT4uIEZvciB0aGUgYmVuZWZpdAotb2YgdGhlICJzZXBhcmF0ZSIgZnVuY3Rpb25hbGl0eSwgdGhlIG5hbWVzL3BhdGhzIG9mIHRoZXNlIHNhbXBsZSBmaWxlcwotYXJlIG1hbmdsZWQgdG8gcmVmbGVjdCB3aGVyZSB0aGUgc2FtcGxlcyB3ZXJlIGZyb206IHRoaXMgY2FuIGluY2x1ZGUKLXRocmVhZCBJRHMsIHRoZSBiaW5hcnkgZmlsZSBwYXRoLCB0aGUgZXZlbnQgdHlwZSB1c2VkLCBhbmQgbW9yZS4KLTwvcGFyYT4KLTxwYXJhPgotQWZ0ZXIgdGhpcyBmaW5hbCBzdGVwIGZyb20gaW50ZXJydXB0IHRvIGRpc2sgZmlsZSwgdGhlIGRhdGEgaXMgbm93Ci1wZXJzaXN0ZW50ICh0aGF0IGlzLCBjaGFuZ2VzIGluIHRoZSBydW5uaW5nIG9mIHRoZSBzeXN0ZW0gZG8gbm90IGludmFsaWRhdGUKLXN0b3JlZCBkYXRhKS4gU28gdGhlIHBvc3QtcHJvZmlsaW5nIHRvb2xzIGNhbiBydW4gb24gdGhpcyBkYXRhIGF0IGFueQotdGltZSAoYXNzdW1pbmcgdGhlIG9yaWdpbmFsIGJpbmFyeSBmaWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGFuZCB1bmNoYW5nZWQsCi1uYXR1cmFsbHkpLgotPC9wYXJhPgotPC9zZWN0Mj4KLQotPHNlY3QyIGlkPSJwb3N0LXByb2ZpbGluZyI+Ci08dGl0bGU+UG9zdC1wcm9maWxpbmcgdG9vbHM8L3RpdGxlPgotU28gZmFyLCB3ZSd2ZSBjb2xsZWN0ZWQgZGF0YSwgYnV0IHdlJ3ZlIHlldCB0byBwcmVzZW50IGl0IGluIGEgdXNlZnVsIGZvcm0KLXRvIHRoZSB1c2VyLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHBvc3QtcHJvZmlsaW5nIHRvb2xzLiBJbiBnZW5lcmFsIGZvcm0sCi10aGV5IGNvbGxhdGUgYSBzdWJzZXQgb2YgdGhlIGF2YWlsYWJsZSBzYW1wbGUgZmlsZXMsIGxvYWQgYW5kIHByb2Nlc3MgZWFjaCBvbmUKLWNvcnJlbGF0ZWQgYWdhaW5zdCB0aGUgcmVsZXZhbnQgYmluYXJ5IGZpbGUsIGFuZCBmaW5hbGx5IHByb2R1Y2UgdXNlci1yZWFkYWJsZQotaW5mb3JtYXRpb24uCi08L3NlY3QyPgotCi08L3NlY3QxPgotCi08L2NoYXB0ZXI+Ci0KLTxjaGFwdGVyIGlkPSJwZXJmb3JtYW5jZS1jb3VudGVycyI+Ci08dGl0bGU+UGVyZm9ybWFuY2UgY291bnRlciBtYW5hZ2VtZW50PC90aXRsZT4KLQotPHNlY3QxIGlkID0icGVyZm9ybWFuY2UtY291bnRlcnMtdWkiPgotPHRpdGxlPlByb3ZpZGluZyBhIHVzZXIgaW50ZXJmYWNlPC90aXRsZT4KLQotPHBhcmE+Ci1UaGUgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnMgbmVlZCBwcm9ncmFtbWluZyBpbiBvcmRlciB0byBzZXQgdGhlCi10eXBlIG9mIGV2ZW50IHRvIGNvdW50LCBldGMuIE9Qcm9maWxlIHVzZXMgYSBzdGFuZGFyZCBtb2RlbCBhY3Jvc3MgYWxsCi1DUFVzIGZvciBkZWZpbmluZyB0aGVzZSBldmVudHMgYXMgZm9sbG93cyA6Ci08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZSBmcmFtZT0iYWxsIj4KLTx0Z3JvdXAgY29scz0nMic+IAotPHRib2R5PgotPHJvdz48ZW50cnk+PG9wdGlvbj5ldmVudDwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PlRoZSBldmVudCB0eXBlIGUuZy4gREFUQV9NRU1fUkVGUzwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT48b3B0aW9uPnVuaXQgbWFzazwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PlRoZSBzdWItZXZlbnRzIHRvIGNvdW50IChtb3JlIGRldGFpbGVkIHNwZWNpZmljYXRpb24pPC9lbnRyeT48L3Jvdz4KLTxyb3c+PGVudHJ5PjxvcHRpb24+Y291bnRlcjwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PlRoZSBoYXJkd2FyZSBjb3VudGVyKHMpIHRoYXQgY2FuIGNvdW50IHRoaXMgZXZlbnQ8L2VudHJ5Pjwvcm93PgotPHJvdz48ZW50cnk+PG9wdGlvbj5jb3VudDwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PlRoZSByZXNldCB2YWx1ZSAoaG93IG1hbnkgZXZlbnRzIGJlZm9yZSBhbiBpbnRlcnJ1cHQpPC9lbnRyeT48L3Jvdz4KLTxyb3c+PGVudHJ5PjxvcHRpb24+a2VybmVsPC9vcHRpb24+PC9lbnRyeT48ZW50cnk+V2hldGhlciB0aGUgY291bnRlciBzaG91bGQgaW5jcmVtZW50IHdoZW4gaW4ga2VybmVsIHNwYWNlPC9lbnRyeT48L3Jvdz4KLTxyb3c+PGVudHJ5PjxvcHRpb24+dXNlcjwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PldoZXRoZXIgdGhlIGNvdW50ZXIgc2hvdWxkIGluY3JlbWVudCB3aGVuIGluIHVzZXIgc3BhY2U8L2VudHJ5Pjwvcm93PgotPC90Ym9keT4KLTwvdGdyb3VwPgotPC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+Ci1UaGUgdGVybSAidW5pdCBtYXNrIiBpcyBib3Jyb3dlZCBmcm9tIHRoZSBJbnRlbCBhcmNoaXRlY3R1cmVzLCBhbmQgY2FuCi1mdXJ0aGVyIHNwZWNpZnkgZXhhY3RseSB3aGVuIGEgY291bnRlciBpcyBpbmNyZW1lbnRlZCAoZm9yIGV4YW1wbGUsCi1jYWNoZS1yZWxhdGVkIGV2ZW50cyBjYW4gYmUgcmVzdHJpY3RlZCB0byBwYXJ0aWN1bGFyIHN0YXRlIHRyYW5zaXRpb25zCi1vZiB0aGUgY2FjaGUgbGluZXMpLgotPC9wYXJhPgotPHBhcmE+Ci1BbGwgb2YgdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSBldmVudHMgYW5kIHRoZWlyIGRldGFpbHMgYXJlIHNwZWNpZmllZCBpbgotdGhlIHRleHR1YWwgZmlsZXMgaW4gdGhlIDxmaWxlbmFtZT5ldmVudHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuIFRoZQotc3ludGF4IG9mIHRoZXNlIGZpbGVzIHNob3VsZCBiZSBmYWlybHkgb2J2aW91cy4gVGhlIHVzZXIgc3BlY2lmaWVzIHRoZQotbmFtZXMgYW5kIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBvZiB0aGUgY2hvc2VuIGNvdW50ZXJzIHZpYQotPGNvbW1hbmQ+b3Bjb250cm9sPC9jb21tYW5kPi4gVGhlc2UgYXJlIHRoZW4gd3JpdHRlbiB0byB0aGUga2VybmVsCi1tb2R1bGUgKGluIG51bWVyaWNhbCBmb3JtKSB2aWEgPGZpbGVuYW1lPi9kZXYvb3Byb2ZpbGUvTi88L2ZpbGVuYW1lPgotd2hlcmUgTiBpcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgY291bnRlciAoc29tZSBldmVudHMgY2FuIG9ubHkgYmUgdXNlZAotb24gc3BlY2lmaWMgY291bnRlcnM7IE9Qcm9maWxlIGhpZGVzIHRoZXNlIGRldGFpbHMgZnJvbSB0aGUgdXNlciB3aGVuCi1wb3NzaWJsZSkuIE9uIElBNjQsIHRoZSBwZXJmbW9uLWJhc2VkIGludGVyZmFjZSBiZWhhdmVzIHNvbWV3aGF0Ci1kaWZmZXJlbnRseSwgYXMgZGVzY3JpYmVkIGxhdGVyLgotPC9wYXJhPgotCi08L3NlY3QxPgotCi08c2VjdDEgaWQ9InBlcmZvcm1hbmNlLWNvdW50ZXJzLXByb2dyYW1taW5nIj4KLTx0aXRsZT5Qcm9ncmFtbWluZyB0aGUgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnM8L3RpdGxlPgotCi08cGFyYT4KLVdlIGhhdmUgZGVzY3JpYmVkIGhvdyB0aGUgdXNlciBpbnRlcmZhY2UgZmlsbHMgaW4gdGhlIGRlc2lyZWQKLWNvbmZpZ3VyYXRpb24gb2YgdGhlIGNvdW50ZXJzIGFuZCB0cmFuc21pdHMgdGhlIGluZm9ybWF0aW9uIHRvIHRoZQota2VybmVsLiBJdCBpcyB0aGUgam9iIG9mIHRoZSA8ZnVuY3Rpb24+LSZndDtzZXR1cCgpPC9mdW5jdGlvbj4gbWV0aG9kCi10byBhY3R1YWxseSBwcm9ncmFtIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlZ2lzdGVycy4gQ2xlYXJseSwgdGhlCi1kZXRhaWxzIG9mIGhvdyB0aGlzIGlzIGRvbmUgaXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljOyBpdCBpcyBhbHNvCi1tb2RlbC1zcGVjaWZpYyBvbiBtYW55IGFyY2hpdGVjdHVyZXMuIEZvciBleGFtcGxlLCBpMzg2IHByb3ZpZGVzIG1ldGhvZHMKLWZvciBlYWNoIG1vZGVsIHR5cGUgdGhhdCBwcm9ncmFtcyB0aGUgY291bnRlciByZWdpc3RlcnMgY29ycmVjdGx5Ci0oc2VlIHRoZSA8ZmlsZW5hbWU+b3BfbW9kZWxfKjwvZmlsZW5hbWU+IGZpbGVzIGluCi08ZmlsZW5hbWU+YXJjaC9pMzg2L29wcm9maWxlPC9maWxlbmFtZT4gZm9yIHRoZSBkZXRhaWxzKS4gVGhlIG1ldGhvZAotcmVhZHMgdGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIHZpcnR1YWwgb3Byb2ZpbGVmcyBmaWxlcyBhbmQgcHJvZ3JhbXMKLXRoZSByZWdpc3RlcnMgYXBwcm9wcmlhdGVseSwgcmVhZHkgZm9yIHN0YXJ0aW5nIHRoZSBhY3R1YWwgcHJvZmlsaW5nCi1zZXNzaW9uLgotPC9wYXJhPgotPHBhcmE+Ci1UaGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRyaXZlcnMgbWFrZSBzdXJlIHRvIHNhdmUgdGhlIG9sZCByZWdpc3Rlcgotc2V0dGluZ3MgYmVmb3JlIGRvaW5nIE9Qcm9maWxlIHNldHVwLiBUaGV5IGFyZSByZXN0b3JlZCB3aGVuIE9Qcm9maWxlCi1zaHV0cyBkb3duLiBUaGlzIGlzIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIG9uIGkzODYsIHdoZXJlIHRoZSBOTUkgd2F0Y2hkb2cKLXVzZXMgdGhlIHNhbWUgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnMgYXMgT1Byb2ZpbGU7IHRoZXkgY2Fubm90Ci1ydW4gY29uY3VycmVudGx5LCBidXQgT1Byb2ZpbGUgbWFrZXMgc3VyZSB0byByZXN0b3JlIHRoZSBzZXR1cCBpdCBmb3VuZAotYmVmb3JlIGl0IHdhcyBydW5uaW5nLgotPC9wYXJhPgotPHBhcmE+Ci1JbiBhZGRpdGlvbiB0byBwcm9ncmFtbWluZyB0aGUgY291bnRlciByZWdpc3RlcnMgdGhlbXNlbHZlcywgb3RoZXIgc2V0dXAKLWlzIG9mdGVuIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIG9uIGkzODYsIHRoZSBsb2NhbCBBUElDIG5lZWRzCi1wcm9ncmFtbWluZyBpbiBvcmRlciB0byBtYWtlIHRoZSBjb3VudGVyJ3Mgb3ZlcmZsb3cgaW50ZXJydXB0IGFwcGVhciBhcwotYW4gTk1JIChub24tbWFza2FibGUgaW50ZXJydXB0KS4gVGhpcyBhbGxvd3Mgc2FtcGxpbmcgKGFuZCB0aGVyZWZvcmUKLXByb2ZpbGluZykgb2YgcmVnaW9ucyB3aGVyZSAibm9ybWFsIiBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQsIGVuYWJsaW5nCi1tb3JlIHJlbGlhYmxlIHByb2ZpbGVzLgotPC9wYXJhPgotCi08c2VjdDIgaWQ9InBlcmZvcm1hbmNlLWNvdW50ZXJzLXN0YXJ0Ij4KLTx0aXRsZT5TdGFydGluZyBhbmQgc3RvcHBpbmcgdGhlIGNvdW50ZXJzPC90aXRsZT4KLTxwYXJhPgotSW5pdGlhdGluZyBhIHByb2ZpbGluZyBzZXNzaW9uIGlzIGRvbmUgdmlhIHdyaXRpbmcgYW4gQVNDSUkgJzEnCi10byB0aGUgZmlsZSA8ZmlsZW5hbWU+L2Rldi9vcHJvZmlsZS9lbmFibGU8L2ZpbGVuYW1lPi4gVGhpcyBzZXRzIHVwIHRoZQotY29yZSwgYW5kIGNhbGxzIGludG8gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkcml2ZXIgdG8gYWN0dWFsbHkKLWVuYWJsZSBlYWNoIGNvbmZpZ3VyZWQgY291bnRlci4gQWdhaW4sIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIGlzCi1kb25lIGlzIG1vZGVsLXNwZWNpZmljIChmb3IgZXhhbXBsZSwgdGhlIEF0aGxvbiBtb2RlbHMgY2FuIGRpc2FibGUKLW9yIGVuYWJsZSBvbiBhIHBlci1jb3VudGVyIGJhc2lzLCB1bmxpa2UgdGhlIFBQcm8gbW9kZWxzKS4KLTwvcGFyYT4KLTwvc2VjdDI+Ci0KLTxzZWN0Mj4KLTx0aXRsZT5JQTY0IGFuZCBwZXJmbW9uPC90aXRsZT4KLTxwYXJhPgotVGhlIElBNjQgYXJjaGl0ZWN0dXJlIHByb3ZpZGVzIGEgZGlmZmVyZW50IGludGVyZmFjZSBmcm9tIHRoZSBvdGhlcgotYXJjaGl0ZWN0dXJlcywgdXNpbmcgdGhlIGV4aXN0aW5nIHBlcmZtb24gZHJpdmVyLiBSZWdpc3RlciBwcm9ncmFtbWluZwotaXMgaGFuZGxlZCBlbnRpcmVseSBpbiB1c2VyLXNwYWNlIChzZWUKLTxmaWxlbmFtZT5kYWVtb24vb3BkX3BlcmZtb24uYzwvZmlsZW5hbWU+IGZvciB0aGUgZGV0YWlscykuIEEgcHJvY2VzcwotaXMgZm9ya2VkIGZvciBlYWNoIENQVSwgd2hpY2ggY3JlYXRlcyBhIHBlcmZtb24gY29udGV4dCBhbmQgc2V0cyB0aGUKLWNvdW50ZXIgcmVnaXN0ZXJzIGFwcHJvcHJpYXRlbHkgdmlhIHRoZQotPGZ1bmN0aW9uPnN5c19wZXJmbW9uY3RsPC9mdW5jdGlvbj4gaW50ZXJmYWNlLiBJbiBhZGRpdGlvbiwgdGhlIGFjdHVhbAotaW5pdGlhdGlvbiBhbmQgdGVybWluYXRpb24gb2YgdGhlIHByb2ZpbGluZyBzZXNzaW9uIGlzIGhhbmRsZWQgdmlhIHRoZQotc2FtZSBpbnRlcmZhY2UgdXNpbmcgPGNvbnN0YW50PlBGTV9TVEFSVDwvY29uc3RhbnQ+IGFuZAotPGNvbnN0YW50PlBGTV9TVE9QPC9jb25zdGFudD4uIE9uIElBNjQsIHRoZW4sIHRoZXJlIGFyZSBubyBvcHJvZmlsZWZzCi1maWxlcyBmb3IgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBhcyB0aGUga2VybmVsIGRyaXZlciBkb2VzIG5vdAotcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIGl0c2VsZi4KLTwvcGFyYT4KLTxwYXJhPgotSW5zdGVhZCwgdGhlIHBlcmZtb24gZHJpdmVyIGZvciBPUHJvZmlsZSBzaW1wbHkgcmVnaXN0ZXJzIHdpdGggdGhlCi1PUHJvZmlsZSBjb3JlIHdpdGggYW4gT1Byb2ZpbGUtc3BlY2lmaWMgVVVJRC4gRHVyaW5nIGEgcHJvZmlsaW5nCi1zZXNzaW9uLCB0aGUgcGVyZm1vbiBjb3JlIGNhbGxzIGludG8gdGhlIE9Qcm9maWxlIHBlcmZtb24gZHJpdmVyIGFuZAotc2FtcGxlcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBPUHJvZmlsZSBjb3JlIGl0c2VsZiBhcyB1c3VhbCAod2l0aAotPGZ1bmN0aW9uPm9wcm9maWxlX2FkZF9zYW1wbGUoKTwvZnVuY3Rpb24+KS4KLTwvcGFyYT4KLTwvc2VjdDI+Ci0KLTwvc2VjdDE+Ci0KLTwvY2hhcHRlcj4KLQotPGNoYXB0ZXIgaWQ9ImNvbGxlY3Rpbmctc2FtcGxlcyI+Ci08dGl0bGU+Q29sbGVjdGluZyBhbmQgcHJvY2Vzc2luZyBzYW1wbGVzPC90aXRsZT4KLQotPHNlY3QxIGlkPSJyZWNlaXZpbmctaW50ZXJydXB0cyI+Ci08dGl0bGU+UmVjZWl2aW5nIGludGVycnVwdHM8L3RpdGxlPgotPHBhcmE+Ci1OYXR1cmFsbHksIGhvdyB0aGUgb3ZlcmZsb3cgaW50ZXJydXB0cyBhcmUgcmVjZWl2ZWQgaXMgc3BlY2lmaWMKLXRvIHRoZSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIHVubGVzcyB3ZSBhcmUgaW4gInRpbWVyIiBtb2RlLCB3aGVyZSB0aGUKLWxvZ2dpbmcgcm91dGluZSBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgc3RhbmRhcmQga2VybmVsIHRpbWVyCi1pbnRlcnJ1cHQgaGFuZGxlci4KLTwvcGFyYT4KLTxwYXJhPgotT24gdGhlIGkzODYgYXJjaGl0ZWN0dXJlLCB0aGUgbG9jYWwgQVBJQyBpcyBwcm9ncmFtbWVkIHN1Y2ggdGhhdCB3aGVuIGEKLWNvdW50ZXIgb3ZlcmZsb3dzICh0aGF0IGlzLCBpdCByZWNlaXZlcyBhbiBldmVudCB0aGF0IGNhdXNlcyBhbiBpbnRlZ2VyCi1vdmVyZmxvdyBvZiB0aGUgcmVnaXN0ZXIgdmFsdWUgdG8gemVybyksIGFuIE5NSSBpcyBnZW5lcmF0ZWQuIFRoaXMgY2FsbHMKLWludG8gdGhlIGdlbmVyYWwgaGFuZGxlciA8ZnVuY3Rpb24+ZG9fbm1pKCk8L2Z1bmN0aW9uPjsgYmVjYXVzZSBPUHJvZmlsZQotaGFzIHJlZ2lzdGVyZWQgaXRzZWxmIGFzIGNhcGFibGUgb2YgaGFuZGxpbmcgTk1JIGludGVycnVwdHMsIHRoaXMgd2lsbAotY2FsbCBpbnRvIHRoZSBPUHJvZmlsZSBkcml2ZXIgY29kZSBpbgotPGZpbGVuYW1lPmFyY2gvaTM4Ni9vcHJvZmlsZTwvZmlsZW5hbWU+LiBIZXJlLCB0aGUgc2F2ZWQgUEMgdmFsdWUgKHRoZQotQ1BVIHNhdmVzIHRoZSByZWdpc3RlciBzZXQgYXQgdGhlIHRpbWUgb2YgaW50ZXJydXB0IG9uIHRoZSBzdGFjawotYXZhaWxhYmxlIGZvciBpbnNwZWN0aW9uKSBpcyBleHRyYWN0ZWQsIGFuZCB0aGUgY291bnRlcnMgYXJlIGV4YW1pbmVkIHRvCi1maW5kIG91dCB3aGljaCBvbmUgZ2VuZXJhdGVkIHRoZSBpbnRlcnJ1cHQuIEFsc28gZGV0ZXJtaW5lZCBpcyB3aGV0aGVyCi10aGUgc3lzdGVtIHdhcyBpbnNpZGUga2VybmVsIG9yIHVzZXIgc3BhY2UgYXQgdGhlIHRpbWUgb2YgdGhlIGludGVycnVwdC4KLVRoZXNlIHRocmVlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhcmUgdGhlbiBmb3J3YXJkZWQgb250byB0aGUgT1Byb2ZpbGUKLWNvcmUgdmlhIDxmdW5jdGlvbj5vcHJvZmlsZV9hZGRfc2FtcGxlKCk8L2Z1bmN0aW9uPi4gRmluYWxseSwgdGhlCi1jb3VudGVyIHZhbHVlcyBhcmUgcmVzZXQgdG8gdGhlIGNob3NlbiBjb3VudCB2YWx1ZSwgdG8gZW5zdXJlIGFub3RoZXIKLWludGVycnVwdCBoYXBwZW5zIGFmdGVyIGFub3RoZXIgTiBldmVudHMgaGF2ZSBvY2N1cnJlZC4gT3RoZXIKLWFyY2hpdGVjdHVyZXMgYmVoYXZlIGluIGEgc2ltaWxhciBtYW5uZXIuCi08L3BhcmE+Ci08L3NlY3QxPgotIAotPHNlY3QxIGlkPSJjb3JlLXN0cnVjdHVyZSI+Ci08dGl0bGU+Q29yZSBkYXRhIHN0cnVjdHVyZXM8L3RpdGxlPgotPHBhcmE+Ci1CZWZvcmUgY29uc2lkZXJpbmcgd2hhdCBoYXBwZW5zIHdoZW4gd2UgbG9nIGEgc2FtcGxlLCB3ZSBzaGFsbCBkaWdyZXNzCi1mb3IgYSBtb21lbnQgYW5kIGxvb2sgYXQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBkYXRhIGNvbGxlY3Rpb24KLXN5c3RlbS4KLTwvcGFyYT4KLTxwYXJhPgotT1Byb2ZpbGUgbWFpbnRhaW5zIGEgc21hbGwgYnVmZmVyIGZvciBzdG9yaW5nIHRoZSBsb2dnZWQgc2FtcGxlcyBmb3IKLWVhY2ggQ1BVIG9uIHRoZSBzeXN0ZW0uIE9ubHkgdGhpcyBidWZmZXIgaXMgYWx0ZXJlZCB3aGVuIHdlIGFjdHVhbGx5IGxvZwotYSBzYW1wbGUgKHJlbWVtYmVyLCB3ZSBtYXkgc3RpbGwgYmUgaW4gYW4gTk1JIGNvbnRleHQsIHNvIG5vIGxvY2tpbmcgaXMKLXBvc3NpYmxlKS4gVGhlIGJ1ZmZlciBpcyBtYW5hZ2VkIGJ5IGEgdHdvLWhhbmRlZCBzeXN0ZW07IHRoZSAiaGVhZCIKLWl0ZXJhdG9yIGRpY3RhdGVzIHdoZXJlIHRoZSBuZXh0IHNhbXBsZSBkYXRhIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlCi1idWZmZXIuIE9mIGNvdXJzZSwgb3ZlcmZsb3cgb2YgdGhlIGJ1ZmZlciBpcyBwb3NzaWJsZSwgaW4gd2hpY2ggY2FzZQotdGhlIHNhbXBsZSBpcyBkaXNjYXJkZWQuCi08L3BhcmE+Ci08cGFyYT4KLUl0IGlzIGNyaXRpY2FsIHRvIHJlbWVtYmVyIHRoYXQgYXQgdGhpcyBwb2ludCwgdGhlIFBDIHZhbHVlIGlzIGFuCi1hYnNvbHV0ZSB2YWx1ZSwgYW5kIGlzIHRoZXJlZm9yZSBvbmx5IG1lYW5pbmdmdWwgaW4gdGhlIGNvbnRleHQgb2Ygd2hpY2gKLXRhc2sgaXQgd2FzIGxvZ2dlZCBhZ2FpbnN0LiBUaHVzLCB0aGVzZSBwZXItQ1BVIGJ1ZmZlcnMgYWxzbyBtYWludGFpbgotZGV0YWlscyBvZiB3aGljaCB0YXNrIGVhY2ggbG9nZ2VkIHNhbXBsZSBpcyBmb3IsIGFzIGRlc2NyaWJlZCBpbiB0aGUKLW5leHQgc2VjdGlvbi4gSW4gYWRkaXRpb24sIHdlIHN0b3JlIHdoZXRoZXIgdGhlIHNhbXBsZSB3YXMgaW4ga2VybmVsCi1zcGFjZSBvciB1c2VyIHNwYWNlIChvbiBzb21lIGFyY2hpdGVjdHVyZXMgYW5kIGNvbmZpZ3VyYXRpb25zLCB0aGUgYWRkcmVzcwotc3BhY2UgaXMgbm90IHN1Yi1kaXZpZGVkIG5lYXRseSBhdCBhIHNwZWNpZmljIFBDIHZhbHVlLCBzbyB3ZSBtdXN0IHN0b3JlCi10aGlzIGluZm9ybWF0aW9uKS4KLTwvcGFyYT4KLTxwYXJhPgotQXMgd2VsbCBhcyB0aGVzZSBzbWFsbCBwZXItQ1BVIGJ1ZmZlcnMsIHdlIGhhdmUgYSBjb25zaWRlcmFibHkgbGFyZ2VyCi1zaW5nbGUgYnVmZmVyLiBUaGlzIGhvbGRzIHRoZSBkYXRhIHRoYXQgaXMgZXZlbnR1YWxseSBjb3BpZWQgb3V0IGludG8KLXRoZSBPUHJvZmlsZSBkYWVtb24uIE9uIGNlcnRhaW4gc3lzdGVtIGV2ZW50cywgdGhlIHBlci1DUFUgYnVmZmVycyBhcmUKLXByb2Nlc3NlZCBhbmQgZW50ZXJlZCAoaW4gbXV0YXRlZCBmb3JtKSBpbnRvIHRoZSBtYWluIGJ1ZmZlciwga25vd24gaW4KLXRoZSBzb3VyY2UgYXMgdGhlICJldmVudCBidWZmZXIiLiBUaGUgInRhaWwiIGl0ZXJhdG9yIGluZGljYXRlcyB0aGUKLXBvaW50IGZyb20gd2hpY2ggdGhlIENQVSBtYXkgYmUgcmVhZCwgdXAgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSAiaGVhZCIKLWl0ZXJhdG9yLiBUaGlzIHByb3ZpZGVzIGFuIGVudGlyZWx5IGxvY2stZnJlZSBtZXRob2QgZm9yIGV4dHJhY3RpbmcgZGF0YQotZnJvbSB0aGUgQ1BVIGJ1ZmZlcnMuIFRoaXMgcHJvY2VzcyBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIGxhdGVyIGluIHRoaXMgY2hhcHRlci4KLTwvcGFyYT4KLTxmaWd1cmU+PHRpdGxlPlRoZSBPUHJvZmlsZSBidWZmZXJzPC90aXRsZT4KLTxncmFwaGljIGZpbGVyZWY9ImJ1ZmZlcnMucG5nIiAvPgotPC9maWd1cmU+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9ImxvZ2dpbmctc2FtcGxlIj4KLTx0aXRsZT5Mb2dnaW5nIGEgc2FtcGxlPC90aXRsZT4KLTxwYXJhPgotQXMgbWVudGlvbmVkLCB0aGUgc2FtcGxlIGlzIGxvZ2dlZCBpbnRvIHRoZSBidWZmZXIgc3BlY2lmaWMgdG8gdGhlCi1jdXJyZW50IENQVS4gVGhlIENQVSBidWZmZXIgaXMgYSBzaW1wbGUgYXJyYXkgb2YgcGFpcnMgb2YgdW5zaWduZWQgbG9uZwotdmFsdWVzOyBmb3IgYSBzYW1wbGUsIHRoZXkgaG9sZCB0aGUgUEMgdmFsdWUgYW5kIHRoZSBjb3VudGVyIGZvciB0aGUKLXNhbXBsZS4gKFRoZSBjb3VudGVyIHZhbHVlIGlzIGxhdGVyIHVzZWQgdG8gdHJhbnNsYXRlIGJhY2sgaW50byB0aGUgcmVsZXZhbnQKLWV2ZW50IHR5cGUgdGhlIGNvdW50ZXIgd2FzIHByb2dyYW1tZWQgdG8pLgotPC9wYXJhPgotPHBhcmE+Ci1JbiBhZGRpdGlvbiB0byBsb2dnaW5nIHRoZSBzYW1wbGUgaXRzZWxmLCB3ZSBhbHNvIGxvZyB0YXNrIHN3aXRjaGVzLgotVGhpcyBpcyBzaW1wbHkgZG9uZSBieSBzdG9yaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBsYXN0IHRhc2sgdG8gbG9nIGEKLXNhbXBsZSBvbiB0aGF0IENQVSBpbiBhIGRhdGEgc3RydWN0dXJlLCBhbmQgd3JpdGluZyBhIHRhc2sgc3dpdGNoIGVudHJ5Ci1pbnRvIHRoZSBidWZmZXIgaWYgdGhlIG5ldyB2YWx1ZSBvZiA8ZnVuY3Rpb24+Y3VycmVudCgpPC9mdW5jdGlvbj4gaGFzCi1jaGFuZ2VkLiBOb3RlIHRoYXQgbGF0ZXIgd2Ugd2lsbCBkaXJlY3RseSBkZS1yZWZlcmVuY2UgdGhpcyBwb2ludGVyOwotdGhpcyBpbXBvc2VzIGNlcnRhaW4gcmVzdHJpY3Rpb25zIG9uIHdoZW4gYW5kIGhvdyB0aGUgQ1BVIGJ1ZmZlcnMgbmVlZAotdG8gYmUgcHJvY2Vzc2VkLgotPC9wYXJhPgotPHBhcmE+Ci1GaW5hbGx5LCBhcyBtZW50aW9uZWQsIHdlIGxvZyB3aGV0aGVyIHdlIGhhdmUgY2hhbmdlZCBiZXR3ZWVuIGtlcm5lbCBhbmQKLXVzZXJzcGFjZSB1c2luZyBhIHNpbWlsYXIgbWV0aG9kLiBCb3RoIG9mIHRoZXNlIHZhcmlhYmxlcwotKDx2YXJuYW1lPmxhc3RfdGFzazwvdmFybmFtZT4gYW5kIDx2YXJuYW1lPmxhc3RfaXNfa2VybmVsPC92YXJuYW1lPikgYXJlCi1yZXNldCB3aGVuIHRoZSBDUFUgYnVmZmVyIGlzIHJlYWQuCi08L3BhcmE+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9ImxvZ2dpbmctc3RhY2siPgotPHRpdGxlPkxvZ2dpbmcgc3RhY2sgdHJhY2VzPC90aXRsZT4KLTxwYXJhPgotT1Byb2ZpbGUgY2FuIGFsc28gcHJvdmlkZSBzdGF0aXN0aWNhbCBzYW1wbGVzIG9mIGNhbGwgY2hhaW5zIChvbiB4ODYpLiBUbwotZG8gdGhpcywgYXQgc2FtcGxlIHRpbWUsIHRoZSBmcmFtZSBwb2ludGVyIGNoYWluIGlzIHRyYXZlcnNlZCwgcmVjb3JkaW5nCi10aGUgcmV0dXJuIGFkZHJlc3MgZm9yIGVhY2ggc3RhY2sgZnJhbWUuIFRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgdGhlIGNvZGUKLXdhcyBjb21waWxlZCB3aXRoIGZyYW1lIHBvaW50ZXJzLCBidXQgd2UncmUgY2FyZWZ1bCB0byBhYm9ydCB0aGUKLXRyYXZlcnNhbCBpZiB0aGUgZnJhbWUgcG9pbnRlciBhcHBlYXJzIGJhZC4gV2Ugc3RvcmUgdGhlIHNldCBvZiByZXR1cm4KLWFkZHJlc3NlcyBzdHJhaWdodCBpbnRvIHRoZSBDUFUgYnVmZmVyLiBOb3RlIHRoYXQsIHNpbmNlIHRoaXMgdHJhdmVyc2FsCi1pcyBrZXllZCBvZmYgdGhlIHN0YW5kYXJkIHNhbXBsZSBpbnRlcnJ1cHQsIHRoZSBudW1iZXIgb2YgdGltZXMgYQotZnVuY3Rpb24gYXBwZWFycyBpbiBhIHN0YWNrIHRyYWNlIGlzIG5vdCBhbiBpbmRpY2F0b3Igb2YgaG93IG1hbnkgdGltZXMKLXRoZSBjYWxsIHNpdGUgd2FzIGV4ZWN1dGVkOiByYXRoZXIsIGl0J3MgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9mCi1zYW1wbGVzIHdlIHRvb2sgd2hlcmUgdGhhdCBjYWxsIHNpdGUgd2FzIGludm9sdmVkLiBUaHVzLCB0aGUgcmVzdWx0cyBmb3IKLXN0YWNrIHRyYWNlcyBhcmUgbm90IG5lY2Vzc2FyaWx5IHByb3BvcnRpb25hbCB0byB0aGUgY2FsbCBjb3VudHM6Ci10eXBpY2FsIHByb2dyYW1zIHdpbGwgaGF2ZSBtYW55IDxmdW5jdGlvbj5tYWluKCk8L2Z1bmN0aW9uPiBzYW1wbGVzLgotPC9wYXJhPgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJzeW5jaHJvbmlzaW5nLWJ1ZmZlcnMiPgotPHRpdGxlPlN5bmNocm9uaXNpbmcgdGhlIENQVSBidWZmZXJzIHRvIHRoZSBldmVudCBidWZmZXI8L3RpdGxlPgotPCEtLSBGSVhNRTogdXBkYXRlIHdoZW4gcGVyY3B1IHBhdGNoIGdvZXMgaW4gLS0+Ci08cGFyYT4KLUF0IHNvbWUgcG9pbnQsIHdlIGhhdmUgdG8gcHJvY2VzcyB0aGUgZGF0YSBpbiBlYWNoIENQVSBidWZmZXIgYW5kIGVudGVyCi1pdCBpbnRvIHRoZSBtYWluIChldmVudCkgYnVmZmVyLiBUaGUgZmlsZQotPGZpbGVuYW1lPmJ1ZmZlcl9zeW5jLmM8L2ZpbGVuYW1lPiBjb250YWlucyB0aGUgcmVsZXZhbnQgY29kZS4gV2UKLXBlcmlvZGljYWxseSAoY3VycmVudGx5IGV2ZXJ5IDxjb25zdGFudD5IWjwvY29uc3RhbnQ+LzQgamlmZmllcykgc3RhcnQKLXRoZSBzeW5jaHJvbmlzYXRpb24gcHJvY2Vzcy4gSW4gYWRkaXRpb24sIHdlIHByb2Nlc3MgdGhlIGJ1ZmZlcnMgb24KLWNlcnRhaW4gZXZlbnRzLCBzdWNoIGFzIGFuIGFwcGxpY2F0aW9uIGNhbGxpbmcKLTxmdW5jdGlvbj5tdW5tYXAoKTwvZnVuY3Rpb24+LiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yCi08ZnVuY3Rpb24+ZXhpdCgpPC9mdW5jdGlvbj4gLSBiZWNhdXNlIHRoZSBDUFUgYnVmZmVycyBjb250YWluIHBvaW50ZXJzCi10byB0aGUgdGFzayBzdHJ1Y3R1cmUsIGlmIHdlIGRvbid0IHByb2Nlc3MgYWxsIHRoZSBidWZmZXJzIGJlZm9yZSB0aGUKLXRhc2sgaXMgYWN0dWFsbHkgZGVzdHJveWVkIGFuZCB0aGUgdGFzayBzdHJ1Y3R1cmUgZnJlZWQsIHRoZW4gd2UgY291bGQKLWVuZCB1cCB0cnlpbmcgdG8gZGVyZWZlcmVuY2UgYSBib2d1cyBwb2ludGVyIGluIG9uZSBvZiB0aGUgQ1BVIGJ1ZmZlcnMuCi08L3BhcmE+Ci08cGFyYT4KLVdlIGFsc28gYWRkIGEgbm90aWZpY2F0aW9uIHdoZW4gYSBrZXJuZWwgbW9kdWxlIGlzIGxvYWRlZDsgdGhpcyBpcyBzbwotdGhhdCB1c2VyLXNwYWNlIGNhbiByZS1yZWFkIDxmaWxlbmFtZT4vcHJvYy9tb2R1bGVzPC9maWxlbmFtZT4gdG8KLWRldGVybWluZSB0aGUgbG9hZCBhZGRyZXNzZXMgb2Yga2VybmVsIG1vZHVsZSB0ZXh0IHNlY3Rpb25zLiBXaXRob3V0Ci10aGlzIG5vdGlmaWNhdGlvbiwgc2FtcGxlcyBmb3IgYSBuZXdseS1sb2FkZWQgbW9kdWxlIGNvdWxkIGdldCBsb3N0IG9yCi1iZSBhdHRyaWJ1dGVkIHRvIHRoZSB3cm9uZyBtb2R1bGUuCi08L3BhcmE+Ci08cGFyYT4KLVRoZSBzeW5jaHJvbmlzYXRpb24gaXRzZWxmIHdvcmtzIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOiBmaXJzdCwgbXV0dWFsCi1leGNsdXNpb24gb24gdGhlIGV2ZW50IGJ1ZmZlciBpcyB0YWtlbi4gUmVtZW1iZXIsIHdlIGRvIG5vdCBuZWVkIHRvIGRvCi10aGF0IGZvciBlYWNoIENQVSBidWZmZXIsIGFzIHdlIG9ubHkgcmVhZCBmcm9tIHRoZSB0YWlsIGl0ZXJhdG9yICh3aGlsc3QKLWludGVycnVwdHMgbWlnaHQgYmUgYXJyaXZpbmcgYXQgdGhlIHNhbWUgYnVmZmVyLCBidXQgdGhleSB3aWxsIHdyaXRlIHRvCi10aGUgcG9zaXRpb24gb2YgdGhlIGhlYWQgaXRlcmF0b3IsIGxlYXZpbmcgcHJldmlvdXNseSB3cml0dGVuIGVudHJpZXMKLWludGFjdCkuIFRoZW4sIHdlIHByb2Nlc3MgZWFjaCBDUFUgYnVmZmVyIGluIHR1cm4uIEEgQ1BVIHN3aXRjaAotbm90aWZpY2F0aW9uIGlzIGFkZGVkIHRvIHRoZSBidWZmZXIgZmlyc3QgKGZvcgotPG9wdGlvbj4tLXNlcGFyYXRlPWNwdTwvb3B0aW9uPiBzdXBwb3J0KS4gVGhlbiB0aGUgcHJvY2Vzc2luZyBvZiB0aGUKLWFjdHVhbCBkYXRhIHN0YXJ0cy4KLTwvcGFyYT4KLTxwYXJhPgotQXMgbWVudGlvbmVkLCB0aGUgQ1BVIGJ1ZmZlciBjb25zaXN0cyBvZiB0YXNrIHN3aXRjaCBlbnRyaWVzIGFuZCB0aGUKLWFjdHVhbCBzYW1wbGVzLiBXaGVuIHRoZSByb3V0aW5lIDxmdW5jdGlvbj5zeW5jX2J1ZmZlcigpPC9mdW5jdGlvbj4gc2VlcwotYSB0YXNrIHN3aXRjaCwgdGhlIHByb2Nlc3MgSUQgYW5kIHByb2Nlc3MgZ3JvdXAgSUQgYXJlIHJlY29yZGVkIGludG8gdGhlCi1ldmVudCBidWZmZXIsIGFsb25nIHdpdGggYSBkY29va2llIChzZWUgYmVsb3cpIGlkZW50aWZ5aW5nIHRoZQotYXBwbGljYXRpb24gYmluYXJ5IChlLmcuIDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPikuIFRoZQotPHZhcm5hbWU+bW1hcF9zZW08L3Zhcm5hbWU+IGZvciB0aGUgdGFzayBpcyB0aGVuIHRha2VuLCB0byBhbGxvdyBzYWZlCi1pdGVyYXRpb24gYWNyb3NzIHRoZSB0YXNrcycgbGlzdCBvZiBtYXBwZWQgYXJlYXMuIEVhY2ggc2FtcGxlIGlzIHRoZW4KLXByb2Nlc3NlZCBhcyBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KLTwvcGFyYT4KLTxwYXJhPgotQWZ0ZXIgYSBidWZmZXIgaGFzIGJlZW4gcmVhZCwgdGhlIHRhaWwgaXRlcmF0b3IgaXMgdXBkYXRlZCB0byByZWZsZWN0Ci1ob3cgbXVjaCBvZiB0aGUgYnVmZmVyIHdhcyBwcm9jZXNzZWQuIE5vdGUgdGhhdCB3aGVuIHdlIGRldGVybWluZWQgaG93Ci1tdWNoIGRhdGEgdGhlcmUgd2FzIHRvIHJlYWQgaW4gdGhlIENQVSBidWZmZXIsIHdlIGFsc28gY2FsbGVkCi08ZnVuY3Rpb24+Y3B1X2J1ZmZlcl9yZXNldCgpPC9mdW5jdGlvbj4gdG8gcmVzZXQKLTx2YXJuYW1lPmxhc3RfdGFzazwvdmFybmFtZT4gYW5kIDx2YXJuYW1lPmxhc3RfaXNfa2VybmVsPC92YXJuYW1lPiwgYXMKLXdlJ3ZlIGFscmVhZHkgbWVudGlvbmVkLiBEdXJpbmcgdGhlIHByb2Nlc3NpbmcsIG1vcmUgc2FtcGxlcyBtYXkgaGF2ZQotYmVlbiBhcnJpdmluZyBpbiB0aGUgQ1BVIGJ1ZmZlcjsgdGhpcyBpcyBPSyBiZWNhdXNlIHdlIGFyZSBjYXJlZnVsIHRvCi1vbmx5IHVwZGF0ZSB0aGUgdGFpbCBpdGVyYXRvciB0byBob3cgbXVjaCB3ZSBhY3R1YWxseSByZWFkIC0gb24gdGhlIG5leHQKLWJ1ZmZlciBzeW5jaHJvbmlzYXRpb24sIHdlIHdpbGwgc3RhcnQgYWdhaW4gZnJvbSB0aGF0IHBvaW50LgotPC9wYXJhPgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJkZW50cnktY29va2llcyI+Ci08dGl0bGU+SWRlbnRpZnlpbmcgYmluYXJ5IGltYWdlczwvdGl0bGU+Ci08cGFyYT4KLUluIG9yZGVyIHRvIHByb2R1Y2UgdXNlZnVsIHByb2ZpbGVzLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gYXNzb2NpYXRlIGEKLXBhcnRpY3VsYXIgUEMgdmFsdWUgc2FtcGxlIHdpdGggYW4gYWN0dWFsIEVMRiBiaW5hcnkgb24gdGhlIGRpc2suIFRoaXMKLWxlYXZlcyB1cyB3aXRoIHRoZSBwcm9ibGVtIG9mIGhvdyB0byBleHBvcnQgdGhpcyBpbmZvcm1hdGlvbiB0bwotdXNlci1zcGFjZS4gV2UgY3JlYXRlIHVuaXF1ZSBJRHMgdGhhdCBpZGVudGlmeSBhIHBhcnRpY3VsYXIgZGlyZWN0b3J5Ci1lbnRyeSAoZGVudHJ5KSwgYW5kIHdyaXRlIHRob3NlIElEcyBpbnRvIHRoZSBldmVudCBidWZmZXIuIExhdGVyIG9uLAotdGhlIHVzZXItc3BhY2UgZGFlbW9uIGNhbiBjYWxsIHRoZSA8ZnVuY3Rpb24+bG9va3VwX2Rjb29raWU8L2Z1bmN0aW9uPgotc3lzdGVtIGNhbGwsIHdoaWNoIGxvb2tzIHVwIHRoZSBJRCBhbmQgZmlsbHMgaW4gdGhlIGZ1bGwgcGF0aCBvZgotdGhlIGJpbmFyeSBpbWFnZSBpbiB0aGUgYnVmZmVyIHVzZXItc3BhY2UgcGFzc2VzIGluLiBUaGVzZSBJRHMgYXJlCi1tYWludGFpbmVkIGJ5IHRoZSBjb2RlIGluIDxmaWxlbmFtZT5mcy9kY29va2llcy5jPC9maWxlbmFtZT47IHRoZQotY2FjaGUgbGFzdHMgZm9yIGFzIGxvbmcgYXMgdGhlIGRhZW1vbiBoYXMgdGhlIGV2ZW50IGJ1ZmZlciBvcGVuLgotPC9wYXJhPgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJmaW5kaW5nLWRlbnRyeSI+Ci08dGl0bGU+RmluZGluZyBhIHNhbXBsZSdzIGJpbmFyeSBpbWFnZSBhbmQgb2Zmc2V0PC90aXRsZT4KLTxwYXJhPgotV2UgaGF2ZW4ndCB5ZXQgZGVzY3JpYmVkIGhvdyB3ZSBwcm9jZXNzIHRoZSBhYnNvbHV0ZSBQQyB2YWx1ZSBpbnRvCi1zb21ldGhpbmcgdXNhYmxlIGJ5IHRoZSB1c2VyLXNwYWNlIGRhZW1vbi4gV2hlbiB3ZSBmaW5kIGEgc2FtcGxlIGVudGVyZWQKLWludG8gdGhlIENQVSBidWZmZXIsIHdlIHRyYXZlcnNlIHRoZSBsaXN0IG9mIG1hcHBpbmdzIGZvciB0aGUgdGFzawotKHJlbWVtYmVyLCB3ZSB3aWxsIGhhdmUgc2VlbiBhIHRhc2sgc3dpdGNoIGVhcmxpZXIsIHNvIHdlIGtub3cgd2hpY2gKLXRhc2sncyBsaXN0cyB0byBsb29rIGF0KS4gV2hlbiBhIG1hcHBpbmcgaXMgZm91bmQgdGhhdCBjb250YWlucyB0aGUgUEMKLXZhbHVlLCB3ZSBsb29rIHVwIHRoZSBtYXBwZWQgZmlsZSdzIGRlbnRyeSBpbiB0aGUgZGNvb2tpZSBjYWNoZS4gVGhpcwotZ2l2ZXMgdGhlIGRjb29raWUgSUQgdGhhdCB3aWxsIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBtYXBwZWQgZmlsZS4gVGhlbgotd2UgYWx0ZXIgdGhlIGFic29sdXRlIHZhbHVlIHN1Y2ggdGhhdCBpdCBpcyBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YKLXRoZSBmaWxlIGJlaW5nIG1hcHBlZCAodGhlIG1hcHBpbmcgbmVlZCBub3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZQotYWN0dWFsIGZpbGUsIHNvIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIG9mZnNldCB2YWx1ZSBvZiB0aGUgbWFwcGluZykuIFdlCi1zdG9yZSB0aGlzIGRjb29raWUgSUQgaW50byB0aGUgZXZlbnQgYnVmZmVyOyB0aGlzIGlkZW50aWZpZXMgd2hpY2gKLWJpbmFyeSB0aGUgc2FtcGxlcyBmb2xsb3dpbmcgaXQgYXJlIGFnYWluc3QuCi1JbiB0aGlzIG1hbm5lciwgd2UgaGF2ZSBjb252ZXJ0ZWQgYSBQQyB2YWx1ZSwgd2hpY2ggaGFzIHRyYW5zaXRvcnkKLW1lYW5pbmcgb25seSwgaW50byBhIHN0YXRpYyBvZmZzZXQgdmFsdWUgZm9yIGxhdGVyIHByb2Nlc3NpbmcgYnkgdGhlCi1kYWVtb24uCi08L3BhcmE+Ci08cGFyYT4KLVdlIGFsc28gYXR0ZW1wdCB0byBhdm9pZCB0aGUgcmVsYXRpdmVseSBleHBlbnNpdmUgbG9va3VwIG9mIHRoZSBkZW50cnkKLWNvb2tpZSB2YWx1ZSBieSBzdG9yaW5nIHRoZSBjb29raWUgdmFsdWUgZGlyZWN0bHkgaW50byB0aGUgZGVudHJ5Ci1pdHNlbGY7IHRoZW4gd2UgY2FuIHNpbXBseSBkZXJpdmUgdGhlIGNvb2tpZSB2YWx1ZSBpbW1lZGlhdGVseSB3aGVuIHdlCi1maW5kIHRoZSBjb3JyZWN0IG1hcHBpbmcuCi08L3BhcmE+Ci08L3NlY3QxPgotCi08L2NoYXB0ZXI+Ci0KLTxjaGFwdGVyIGlkPSJzYW1wbGUtZmlsZXMiPgotPHRpdGxlPkdlbmVyYXRpbmcgc2FtcGxlIGZpbGVzPC90aXRsZT4KLQotPHNlY3QxIGlkPSJwcm9jZXNzaW5nLWJ1ZmZlciI+Ci08dGl0bGU+UHJvY2Vzc2luZyB0aGUgYnVmZmVyPC90aXRsZT4KLQotPHBhcmE+Ci1Ob3cgd2UgY2FuIG1vdmUgb250byB1c2VyLXNwYWNlIGluIG91ciBkZXNjcmlwdGlvbiBvZiBob3cgcmF3IGludGVycnVwdAotc2FtcGxlcyBhcmUgcHJvY2Vzc2VkIGludG8gdXNlZnVsIGluZm9ybWF0aW9uLiBBcyB3ZSBkZXNjcmliZWQgaW4KLXByZXZpb3VzIHNlY3Rpb25zLCB0aGUga2VybmVsIE9Qcm9maWxlIGRyaXZlciBjcmVhdGVzIGEgbGFyZ2UgYnVmZmVyIG9mCi1zYW1wbGUgZGF0YSBjb25zaXN0aW5nIG9mIG9mZnNldCB2YWx1ZXMsIGludGVyc3BlcnNlZCB3aXRoCi1ub3RpZmljYXRpb24gb2YgY2hhbmdlcyBpbiBjb250ZXh0LiBUaGVzZSBjb250ZXh0IGNoYW5nZXMgaW5kaWNhdGUgaG93Ci1mb2xsb3dpbmcgc2FtcGxlcyBzaG91bGQgYmUgYXR0cmlidXRlZCwgYW5kIGluY2x1ZGUgdGFzayBzd2l0Y2hlcywgQ1BVCi1jaGFuZ2VzLCBhbmQgd2hpY2ggZGNvb2tpZSB0aGUgc2FtcGxlIHZhbHVlIGlzIGFnYWluc3QuIEJ5IHByb2Nlc3NpbmcKLXRoaXMgYnVmZmVyIGVudHJ5LWJ5LWVudHJ5LCB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXJlIHRoZSBzYW1wbGVzIHNob3VsZAotYmUgYWNjcmVkaXRlZCB0by4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4gdXNpbmcgdGhlIAotPG9wdGlvbj4tLXNlcGFyYXRlPC9vcHRpb24+LgotPC9wYXJhPgotPHBhcmE+Ci1UaGUgZmlsZSA8ZmlsZW5hbWU+ZGFlbW9uL29wZF90cmFucy5jPC9maWxlbmFtZT4gY29udGFpbnMgdGhlIGJhc2ljIHJvdXRpbmUKLWZvciB0aGUgYnVmZmVyIHByb2Nlc3NpbmcuIFRoZSA8dmFybmFtZT5zdHJ1Y3QgdHJhbnNpZW50PC92YXJuYW1lPgotc3RydWN0dXJlIGlzIHVzZWQgdG8gaG9sZCBjaGFuZ2VzIGluIGNvbnRleHQuIEl0cyBtZW1iZXJzIGFyZSBtb2RpZmllZAotYXMgd2UgcHJvY2VzcyBlYWNoIGVudHJ5OyBpdCBpcyBwYXNzZWQgaW50byB0aGUgcm91dGluZXMgaW4KLTxmaWxlbmFtZT5kYWVtb24vb3BkX3NmaWxlLmM8L2ZpbGVuYW1lPiBmb3IgYWN0dWFsbHkgbG9nZ2luZyB0aGUgc2FtcGxlCi10byBhIHBhcnRpY3VsYXIgc2FtcGxlIGZpbGUgKHdoaWNoIHdpbGwgYmUgaGVsZCBpbgotPGZpbGVuYW1lPi92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudDwvZmlsZW5hbWU+KS4KLTwvcGFyYT4KLTxwYXJhPgotVGhlIGJ1ZmZlciBmb3JtYXQgaXMgZGVzaWduZWQgZm9yIGNvbmNpc2VuZXNzLCBhcyBoaWdoIHNhbXBsaW5nIHJhdGVzCi1jYW4gZWFzaWx5IGdlbmVyYXRlIGEgbG90IG9mIGRhdGEuIFRodXMsIGNvbnRleHQgY2hhbmdlcyBhcmUgcHJlZml4ZWQKLWJ5IGFuIGVzY2FwZSBjb2RlLCBpZGVudGlmaWVkIGJ5IDxmdW5jdGlvbj5pc19lc2NhcGVfY29kZSgpPC9mdW5jdGlvbj4uCi1JZiBhbiBlc2NhcGUgY29kZSBpcyBmb3VuZCwgdGhlIG5leHQgZW50cnkgaW4gdGhlIGJ1ZmZlciBpZGVudGlmaWVzCi13aGF0IHR5cGUgb2YgY29udGV4dCBjaGFuZ2UgaXMgYmVpbmcgcmVhZC4gVGhlc2UgYXJlIGhhbmRlZCBvZmYgdG8KLXZhcmlvdXMgaGFuZGxlcnMgKHNlZSB0aGUgPHZhcm5hbWU+aGFuZGxlcnM8L3Zhcm5hbWU+IGFycmF5KSwgd2hpY2gKLW1vZGlmeSB0aGUgdHJhbnNpZW50IHN0cnVjdHVyZSBhcyBhcHByb3ByaWF0ZS4gSWYgaXQncyBub3QgYW4gZXNjYXBlCi1jb2RlLCB0aGVuIGl0IG11c3QgYmUgYSBQQyBvZmZzZXQgdmFsdWUsIGFuZCB0aGUgdmVyeSBuZXh0IGVudHJ5IHdpbGwKLWJlIHRoZSBudW1lcmljIGhhcmR3YXJlIGNvdW50ZXIuIFRoZXNlIHZhbHVlcyBhcmUgcmVhZCBhbmQgcmVjb3JkZWQKLWluIHRoZSB0cmFuc2llbnQgc3RydWN0dXJlOyB3ZSB0aGVuIGRvIGEgbG9va3VwIHRvIGZpbmQgdGhlIGNvcnJlY3QKLXNhbXBsZSBmaWxlLCBhbmQgbG9nIHRoZSBzYW1wbGUsIGFzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgotPC9wYXJhPgotCi08c2VjdDIgaWQ9ImhhbmRsaW5nLWtlcm5lbC1zYW1wbGVzIj4KLTx0aXRsZT5IYW5kbGluZyBrZXJuZWwgc2FtcGxlczwvdGl0bGU+Ci0KLTxwYXJhPgotU2FtcGxlcyBmcm9tIGtlcm5lbCBjb2RlIHJlcXVpcmUgYSBsaXR0bGUgc3BlY2lhbCBoYW5kbGluZy4gQmVjYXVzZQotdGhlIGJpbmFyeSB0ZXh0IHdoaWNoIHRoZSBzYW1wbGUgaXMgYWdhaW5zdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvCi1hbnkgZmlsZSB0aGF0IHRoZSBrZXJuZWwgZGlyZWN0bHkga25vd3MgYWJvdXQsIHRoZSBPUHJvZmlsZSBkcml2ZXIKLXN0b3JlcyB0aGUgYWJzb2x1dGUgUEMgdmFsdWUgaW4gdGhlIGJ1ZmZlciwgaW5zdGVhZCBvZiB0aGUgZmlsZSBvZmZzZXQuCi1PZiBjb3Vyc2UsIHdlIG5lZWQgYW4gb2Zmc2V0IGFnYWluc3Qgc29tZSBwYXJ0aWN1bGFyIGJpbmFyeS4gVG8gaGFuZGxlCi10aGlzLCB3ZSBrZWVwIGEgbGlzdCBvZiBsb2FkZWQgbW9kdWxlcyBieSBwYXJzaW5nCi08ZmlsZW5hbWU+L3Byb2MvbW9kdWxlczwvZmlsZW5hbWU+IGFzIG5lZWRlZC4gV2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQsCi1hIG5vdGlmaWNhdGlvbiBpcyBwbGFjZWQgaW4gdGhlIE9Qcm9maWxlIGJ1ZmZlciwgYW5kIHRoaXMgdHJpZ2dlcnMgYQotcmUtcmVhZC4gV2Ugc3RvcmUgdGhlIG1vZHVsZSBuYW1lLCBhbmQgdGhlIGxvYWRpbmcgYWRkcmVzcyBhbmQgc2l6ZS4KLVRoaXMgaXMgYWxzbyBkb25lIGZvciB0aGUgbWFpbiBrZXJuZWwgaW1hZ2UsIGFzIHNwZWNpZmllZCBieSB0aGUgdXNlci4KLVRoZSBhYnNvbHV0ZSBQQyB2YWx1ZSBpcyBtYXRjaGVkIGFnYWluc3QgZWFjaCBhZGRyZXNzIHJhbmdlLCBhbmQKLW1vZGlmaWVkIGludG8gYW4gb2Zmc2V0IHdoZW4gdGhlIG1hdGNoaW5nIG1vZHVsZSBpcyBmb3VuZC4gU2VlIAotPGZpbGVuYW1lPmRhZW1vbi9vcGRfa2VybmVsLmM8L2ZpbGVuYW1lPiBmb3IgdGhlIGRldGFpbHMuCi08L3BhcmE+Ci0KLTwvc2VjdDI+Ci0KLQotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJzYW1wbGUtZmlsZS1nZW5lcmF0aW9uIj4KLTx0aXRsZT5Mb2NhdGluZyBhbmQgY3JlYXRpbmcgc2FtcGxlIGZpbGVzPC90aXRsZT4KLQotPHBhcmE+Ci1XZSBoYXZlIGEgc2FtcGxlIHZhbHVlIGFuZCBpdHMgc2F0ZWxsaXRlIGRhdGEgc3RvcmVkIGluIGEKLTx2YXJuYW1lPnN0cnVjdCB0cmFuc2llbnQ8L3Zhcm5hbWU+LCBhbmQgd2UgbXVzdCBsb2NhdGUgYW4KLWFjdHVhbCBzYW1wbGUgZmlsZSB0byBzdG9yZSB0aGUgc2FtcGxlIGluLCB1c2luZyB0aGUgY29udGV4dAotaW5mb3JtYXRpb24gaW4gdGhlIHRyYW5zaWVudCBzdHJ1Y3R1cmUgYXMgYSBrZXkuIFRoZSB0cmFuc2llbnQgZGF0YSB0bwotc2FtcGxlIGZpbGUgbG9va3VwIGlzIGhhbmRsZWQgaW4KLTxmaWxlbmFtZT5kYWVtb24vb3BkX3NmaWxlLmM8L2ZpbGVuYW1lPi4gQSBoYXNoIGlzIHRha2VuIG9mIHRoZQotdHJhbnNpZW50IHZhbHVlcyB0aGF0IGFyZSByZWxldmFudCAoZGVwZW5kaW5nIHVwb24gdGhlIHNldHRpbmcgb2YKLTxvcHRpb24+LS1zZXBhcmF0ZTwvb3B0aW9uPiwgc29tZSB2YWx1ZXMgbWlnaHQgYmUgaXJyZWxldmFudCksIGFuZCB0aGUKLWhhc2ggdmFsdWUgaXMgdXNlZCB0byBsb29rdXAgdGhlIGxpc3Qgb2YgY3VycmVudGx5IG9wZW4gc2FtcGxlIGZpbGVzLgotT2YgY291cnNlLCB0aGUgc2FtcGxlIGZpbGUgbWlnaHQgbm90IGJlIGZvdW5kLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQKLXRvIGNyZWF0ZSBhbmQgb3BlbiBpdC4KLTwvcGFyYT4KLTxwYXJhPgotT1Byb2ZpbGUgdXNlcyBhIHJhdGhlciBjb21wbGV4IHNjaGVtZSBmb3IgbmFtaW5nIHNhbXBsZSBmaWxlcywgaW4gb3JkZXIKLXRvIG1ha2Ugc2VsZWN0aW5nIHJlbGV2YW50IHNhbXBsZSBmaWxlcyBlYXNpZXIgZm9yIHRoZSBwb3N0LXByb2ZpbGluZwotdXRpbGl0aWVzLiBUaGUgZXhhY3QgZGV0YWlscyBvZiB0aGUgc2NoZW1lIGFyZSBnaXZlbiBpbgotPGZpbGVuYW1lPm9wcm9maWxlLXRlc3RzL3BwX2ludGVyZmFjZTwvZmlsZW5hbWU+LCBidXQgZm9yIG5vdyBpdCB3aWxsCi1zdWZmaWNlIHRvIHJlbWVtYmVyIHRoYXQgdGhlIGZpbGVuYW1lIHdpbGwgaW5jbHVkZSBvbmx5IHJlbGV2YW50Ci1pbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgc2V0dGluZ3MsIHRha2VuIGZyb20gdGhlIHRyYW5zaWVudCBkYXRhLiBBCi1mdWxseS1zcGVjaWZpZWQgZmlsZW5hbWUgbG9va3Mgc29tZXRoaW5nIGxpa2UgOgotPC9wYXJhPgotPGNvbXB1dGVyb3V0cHV0PgotL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50L3tyb290fS91c3IvYmluL3htbXMve2RlcH0ve3Jvb3R9L2xpYi90bHMvbGliYy0yLjMuMi5zby9DUFVfQ0xLX1VOSEFMVEVELjEwMDAwMC4wLjI4MDgyLjI4MDg5LjAKLTwvY29tcHV0ZXJvdXRwdXQ+Ci08cGFyYT4KLUl0IHNob3VsZCBiZSBjbGVhciB0aGF0IHRoaXMgaWRlbnRpZmllcyBzdWNoIGluZm9ybWF0aW9uIGFzIHRoZQotYXBwbGljYXRpb24gYmluYXJ5LCB0aGUgZGVwZW5kZW50IChsaWJyYXJ5KSBiaW5hcnksIHRoZSBoYXJkd2FyZSBldmVudCwKLWFuZCB0aGUgcHJvY2VzcyBhbmQgdGhyZWFkIElELiBUeXBpY2FsbHksIG5vdCBhbGwgdGhpcyBpbmZvcm1hdGlvbiBpcwotbmVlZGVkLCBpbiB3aGljaCBjYXNlcyBzb21lIHZhbHVlcyBtYXkgYmUgcmVwbGFjZWQgd2l0aCB0aGUgdG9rZW4KLTxmaWxlbmFtZT5hbGw8L2ZpbGVuYW1lPi4KLTwvcGFyYT4KLTxwYXJhPgotVGhlIGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhpcyBmaWxlbmFtZSBhbmQgb3BlbnMgdGhlIGZpbGUgaXMgZm91bmQgaW4KLTxmaWxlbmFtZT5kYWVtb24vb3BkX21hbmdsaW5nLmM8L2ZpbGVuYW1lPi4gWW91IG1heSBoYXZlIHJlYWxpc2VkIHRoYXQKLWF0IHRoaXMgcG9pbnQsIHdlIGRvIG5vdCBoYXZlIHRoZSBiaW5hcnkgaW1hZ2UgZmlsZSBuYW1lcywgb25seSB0aGUKLWRjb29raWUgdmFsdWVzLiBJbiBvcmRlciB0byBkZXRlcm1pbmUgYSBmaWxlIG5hbWUsIGEgZGNvb2tpZSB2YWx1ZSBpcwotbG9va2VkIHVwIGluIHRoZSBkY29va2llIGNhY2hlLiBUaGlzIGlzIHRvIGJlIGZvdW5kIGluCi08ZmlsZW5hbWU+ZGFlbW9uL29wZF9jb29raWUuYzwvZmlsZW5hbWU+LiBTaW5jZSBkY29va2llcyBhcmUgYm90aAotcGVyc2lzdGVudCBhbmQgdW5pcXVlIGR1cmluZyBhIHNhbXBsaW5nIHNlc3Npb24sIHdlIGNhbiBjYWNoZSB0aGUKLXZhbHVlcy4gSWYgdGhlIHZhbHVlIGlzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGUsIHRoZW4gd2UgYXNrIHRoZSBrZXJuZWwKLXRvIGRvIHRoZSBsb29rdXAgZnJvbSB2YWx1ZSB0byBmaWxlIG5hbWUgZm9yIHVzIGJ5IGNhbGxpbmcKLTxmdW5jdGlvbj5sb29rdXBfZGNvb2tpZSgpPC9mdW5jdGlvbj4uIFRoaXMgbG9va3MgdXAgdGhlIHZhbHVlIGluIGEKLWtlcm5lbC1zaWRlIGNhY2hlIChzZWUgPGZpbGVuYW1lPmZzL2Rjb29raWVzLmM8L2ZpbGVuYW1lPikgYW5kIHJldHVybnMKLXRoZSBmdWxseS1xdWFsaWZpZWQgZmlsZSBuYW1lIHRvIHVzZXJzcGFjZS4KLTwvcGFyYT4KLQotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJzYW1wbGUtZmlsZS13cml0aW5nIj4KLTx0aXRsZT5Xcml0aW5nIGRhdGEgdG8gYSBzYW1wbGUgZmlsZTwvdGl0bGU+Ci0KLTxwYXJhPgotRWFjaCBzcGVjaWZpYyBzYW1wbGUgZmlsZSBpcyBhIGhhc2hlZCBjb2xsZWN0aW9uLCB3aGVyZSB0aGUga2V5IGlzCi10aGUgUEMgb2Zmc2V0IGZyb20gdGhlIHRyYW5zaWVudCBkYXRhLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YKLXNhbXBsZXMgcmVjb3JkZWQgYWdhaW5zdCB0aGF0IG9mZnNldC4gVGhlIGZpbGVzIGFyZQotPGZ1bmN0aW9uPm1tYXAoKTwvZnVuY3Rpb24+ZWQgaW50byB0aGUgZGFlbW9uJ3MgbWVtb3J5IHNwYWNlLiBUaGUgY29kZQotdG8gYWN0dWFsbHkgbG9nIHRoZSB3cml0ZSBhZ2FpbnN0IHRoZSBzYW1wbGUgZmlsZSBjYW4gYmUgZm91bmQgaW4KLTxmaWxlbmFtZT5saWJkYi88L2ZpbGVuYW1lPi4KLTwvcGFyYT4KLTxwYXJhPgotRm9yIHJlY29yZGluZyBzdGFjayB0cmFjZXMsIHdlIGhhdmUgYSBtb3JlIGNvbXBsaWNhdGVkIHNhbXBsZSBmaWxlbmFtZQotbWFuZ2xpbmcgc2NoZW1lIHRoYXQgYWxsb3dzIHVzIHRvIGlkZW50aWZ5IGNyb3NzLWJpbmFyeSBjYWxscy4gV2UgdXNlCi10aGUgc2FtZSBzYW1wbGUgZmlsZSBmb3JtYXQsIHdoZXJlIHRoZSBrZXkgaXMgYSA2NC1iaXQgdmFsdWUgY29tcG9zZWQKLWZyb20gdGhlIGZyb20sdG8gcGFpciBvZiBvZmZzZXRzLgotPC9wYXJhPgotCi08L3NlY3QxPgotCi08L2NoYXB0ZXI+Ci0KLTxjaGFwdGVyIGlkPSJvdXRwdXQiPgotPHRpdGxlPkdlbmVyYXRpbmcgdXNlZnVsIG91dHB1dDwvdGl0bGU+Ci0KLTxwYXJhPgotQWxsIG9mIHRoZSB0b29scyB1c2VkIHRvIGdlbmVyYXRlIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBoYXZlIHRvIHRha2UKLXJvdWdobHkgdGhlIHNhbWUgc3RlcHMgdG8gY29sbGVjdCB0aGUgZGF0YSBmb3IgcHJvY2Vzc2luZy4gRmlyc3QsIHRoZQotcHJvZmlsZSBzcGVjaWZpY2F0aW9uIGdpdmVuIGJ5IHRoZSB1c2VyIGhhcyB0byBiZSBwYXJzZWQuIE5leHQsIGEgbGlzdAotb2Ygc2FtcGxlIGZpbGVzIG1hdGNoaW5nIHRoZSBzcGVjaWZpY2F0aW9uIGhhcyB0byBvYnRhaW5lZC4gVXNpbmcgdGhpcwotbGlzdCwgd2UgbmVlZCB0byBsb2NhdGUgdGhlIGJpbmFyeSBmaWxlIGZvciBlYWNoIHNhbXBsZSBmaWxlLCBhbmQgdGhlbgotdXNlIHRoZW0gdG8gZXh0cmFjdCBtZWFuaW5nZnVsIGRhdGEsIGJlZm9yZSBhIGZpbmFsIGNvbGxhdGlvbiBhbmQKLXByZXNlbnRhdGlvbiB0byB0aGUgdXNlci4KLTwvcGFyYT4KLQotPHNlY3QxIGlkPSJwcm9maWxlLXNwZWNpZmljYXRpb24iPgotPHRpdGxlPkhhbmRsaW5nIHRoZSBwcm9maWxlIHNwZWNpZmljYXRpb248L3RpdGxlPgotCi08cGFyYT4KLVRoZSBwcm9maWxlIHNwZWNpZmljYXRpb24gcHJlc2VudGVkIGJ5IHRoZSB1c2VyIGlzIHBhcnNlZCBpbgotdGhlIGZ1bmN0aW9uIDxmdW5jdGlvbj5wcm9maWxlX3NwZWM6OmNyZWF0ZSgpPC9mdW5jdGlvbj4uIFRoaXMKLWNyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc3BlY2lmaWNhdGlvbi4gVGhlbiB3ZQotdXNlIDxmdW5jdGlvbj5wcm9maWxlX3NwZWM6OmdlbmVyYXRlX2ZpbGVfbGlzdCgpPC9mdW5jdGlvbj4KLXRvIHNlYXJjaCBmb3IgYWxsIHNhbXBsZSBmaWxlcyBhbmQgbWF0Y2ggdGhlbSBhZ2FpbnN0IHRoZQotPHZhcm5hbWU+cHJvZmlsZV9zcGVjPC92YXJuYW1lPi4KLTwvcGFyYT4KLQotPHBhcmE+Ci1UbyBlbmFibGUgdGhpcyBtYXRjaGluZyBwcm9jZXNzIHRvIHdvcmssIHRoZSBhdHRyaWJ1dGVzIG9mCi1lYWNoIHNhbXBsZSBmaWxlIGlzIGVuY29kZWQgaW4gaXRzIGZpbGVuYW1lLiBUaGlzIGlzIGEgbG93LXRlY2gKLWFwcHJvYWNoIHRvIG1hdGNoaW5nIHNwZWNpZmljYXRpb25zIGFnYWluc3QgY2FuZGlkYXRlIHNhbXBsZQotZmlsZXMsIGJ1dCBpdCB3b3JrcyByZWFzb25hYmx5IHdlbGwuIEEgdHlwaWNhbCBzYW1wbGUgZmlsZQotbWlnaHQgbG9vayBsaWtlIHRoZXNlOgotPC9wYXJhPgotPHNjcmVlbj4KLS92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudC97cm9vdH0vYmluL2xzL3tkZXB9L3tyb290fS9iaW4vbHMve2NnfS97cm9vdH0vYmluL2xzL0NQVV9DTEtfVU5IQUxURUQuMTAwMDAwLjAuYWxsLmFsbC5hbGwKLS92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudC97cm9vdH0vYmluL2xzL3tkZXB9L3tyb290fS9iaW4vbHMvQ1BVX0NMS19VTkhBTFRFRC4xMDAwMDAuMC5hbGwuYWxsLmFsbAotL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50L3tyb290fS9iaW4vbHMve2RlcH0ve3Jvb3R9L2Jpbi9scy9DUFVfQ0xLX1VOSEFMVEVELjEwMDAwMC4wLjc0MjMuNzQyNC4wCi0vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQve2tlcm59L3IxMjgve2RlcH0ve2tlcm59L3IxMjgvQ1BVX0NMS19VTkhBTFRFRC4xMDAwMDAuMC5hbGwuYWxsLmFsbAotPC9zY3JlZW4+Ci08cGFyYT4KLVRoaXMgbG9va3MgdW5uZWNlc3NhcmlseSBjb21wbGV4LCBidXQgaXQncyBhY3R1YWxseSBmYWlybHkgc2ltcGxlLiBGaXJzdAotd2UgaGF2ZSB0aGUgc2Vzc2lvbiBvZiB0aGUgc2FtcGxlLCBoZXJlCi08ZmlsZW5hbWU+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50PC9maWxlbmFtZT4uIFRoaXMgY291bGQKLWVxdWFsbHkgd2VsbCBiZSBpbnNpZGUgYW4gYXJjaGl2ZSBmcm9tIDxjb21tYW5kPm9wYXJjaGl2ZTwvY29tbWFuZD4uCi1OZXh0IHdlIGhhdmUgb25lIG9mIHRoZSB0b2tlbnMgPGZpbGVuYW1lPntyb290fTwvZmlsZW5hbWU+IG9yCi08ZmlsZW5hbWU+e2tlcm59PC9maWxlbmFtZT4uIDxmaWxlbmFtZT57cm9vdH08L2ZpbGVuYW1lPiBpbmRpY2F0ZXMKLXRoYXQgdGhlIGJpbmFyeSBpcyBmb3VuZCBvbiBhIGZpbGUgc3lzdGVtLCBhbmQgd2Ugd2lsbCBlbmNvZGUgaXRzIHBhdGgKLWluIHRoZSBuZXh0IHNlY3Rpb24gKGUuZy4gPGZpbGVuYW1lPi9iaW4vbHM8L2ZpbGVuYW1lPikuCi08ZmlsZW5hbWU+e2tlcm59PC9maWxlbmFtZT4gaW5kaWNhdGVzIGEga2VybmVsIG1vZHVsZSAtIG9uIDIuNiBrZXJuZWxzCi10aGUgcGF0aCBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIGZyb20gdGhlIGtlcm5lbCwgc28gd2UgaGF2ZSB0bwotc3BlY2lhbC1jYXNlIGtlcm5lbCBtb2R1bGVzIGxpa2UgdGhpczsgd2UgZW5jb2RlIG1lcmVseSB0aGUgbmFtZSBvZiB0aGUKLW1vZHVsZSBhcyBsb2FkZWQuCi08L3BhcmE+Ci08cGFyYT4KLU5leHQgdGhlcmUgaXMgYSA8ZmlsZW5hbWU+e2RlcH08L2ZpbGVuYW1lPiB0b2tlbiwgaW5kaWNhdGluZyBhbm90aGVyCi10b2tlbi9wYXRoIHdoaWNoIGlkZW50aWZpZXMgdGhlIGRlcGVuZGVudCBiaW5hcnkgaW1hZ2UuIFRoaXMgaXMgdXNlZCBldmVuIGZvcgotdGhlICJwcmltYXJ5IiBiaW5hcnkgKGkuZS4gdGhlIG9uZSB0aGF0IHdhcwotPGZ1bmN0aW9uPmV4ZWN2ZSgpPC9mdW5jdGlvbj5kKSwgYXMgaXQgc2ltcGxpZmllcyBwcm9jZXNzaW5nLiBGaW5hbGx5LAotaWYgdGhpcyBzYW1wbGUgZmlsZSBpcyBhIG5vcm1hbCBmbGF0IHByb2ZpbGUsIHRoZSBhY3R1YWwgZmlsZSBpcyBuZXh0IGluCi10aGUgcGF0aC4gSWYgaXQncyBhIGNhbGwtZ3JhcGggc2FtcGxlIGZpbGUsIHdlIG5lZWQgb25lIGZ1cnRoZXIKLXNwZWNpZmljYXRpb24sIHRvIGFsbG93IHVzIHRvIGlkZW50aWZ5IGNyb3NzLWJpbmFyeSBhcmNzIGluIHRoZSBjYWxsCi1ncmFwaC4KLTwvcGFyYT4KLTxwYXJhPgotVGhlIGFjdHVhbCBzYW1wbGUgZmlsZSBuYW1lIGlzIGRvdC1zZXBhcmF0ZWQsIHdoZXJlIHRoZSBmaWVsZHMgYXJlLCBpbgotb3JkZXI6IGV2ZW50IG5hbWUsIGV2ZW50IGNvdW50LCB1bml0IG1hc2ssIHRhc2sgZ3JvdXAgSUQsIHRhc2sgSUQsIGFuZAotQ1BVIG51bWJlci4KLTwvcGFyYT4KLTxwYXJhPgotVGhpcyBzYW1wbGUgZmlsZSBjYW4gYmUgcmVsaWFibHkgcGFyc2VkICh3aXRoCi08ZnVuY3Rpb24+cGFyc2VfZmlsZW5hbWUoKTwvZnVuY3Rpb24+KSBpbnRvIGEKLTx2YXJuYW1lPmZpbGVuYW1lX3NwZWM8L3Zhcm5hbWU+LiBGaW5hbGx5LCB3ZSBjYW4gY2hlY2sgd2hldGhlciB0bwotaW5jbHVkZSB0aGUgc2FtcGxlIGZpbGUgaW4gdGhlIGZpbmFsIHJlc3VsdHMgYnkgY29tcGFyaW5nIHRoaXMKLTx2YXJuYW1lPmZpbGVuYW1lX3NwZWM8L3Zhcm5hbWU+IGFnYWluc3QgdGhlCi08dmFybmFtZT5wcm9maWxlX3NwZWM8L3Zhcm5hbWU+IHRoZSB1c2VyIHNwZWNpZmllZCAoZm9yIHRoZSBpbnRlcmVzdGVkLAotc2VlIDxmdW5jdGlvbj52YWxpZF9jYW5kaWRhdGUoKTwvZnVuY3Rpb24+IGFuZAotPGZ1bmN0aW9uPnByb2ZpbGVfc3BlYzo6bWF0Y2g8L2Z1bmN0aW9uPikuIFRoZW4gY29tZXMgdGhlIHJlYWxseQotY29tcGxpY2F0ZWQgYml0Li4uCi08L3BhcmE+Ci0KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0ic2FtcGxlLWZpbGUtY29sbGF0aW5nIj4KLTx0aXRsZT5Db2xsYXRpbmcgdGhlIGNhbmRpZGF0ZSBzYW1wbGUgZmlsZXM8L3RpdGxlPgotCi08cGFyYT4KLUF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIGR1cGxpY2F0ZS1mcmVlIGxpc3Qgb2Ygc2FtcGxlIGZpbGVzIHdlIG5lZWQKLXRvIHByb2Nlc3MuIEJ1dCBmaXJzdCB3ZSBuZWVkIHRvIGRvIHNvbWUgZnVydGhlciBhcnJhbmdlbWVudDogd2UKLW5lZWQgdG8gY2xhc3NpZnkgZWFjaCBzYW1wbGUgZmlsZSwgYW5kIHdlIG1heSBhbHNvIG5lZWQgdG8gImludmVydCIKLXRoZSBwcm9maWxlcy4KLTwvcGFyYT4KLQotPHNlY3QyIGlkPSJzYW1wbGUtZmlsZS1jbGFzc2lmeWluZyI+Ci08dGl0bGU+Q2xhc3NpZnlpbmcgc2FtcGxlIGZpbGVzPC90aXRsZT4KLQotPHBhcmE+Ci1JdCdzIHBvc3NpYmxlIGZvciB1dGlsaXRpZXMgbGlrZSA8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4gdG8gc2hvdyAKLWRhdGEgaW4gY29sdW1uYXIgZm9ybWF0OiBmb3IgZXhhbXBsZSwgd2UgbWlnaHQgd2FudCB0byBzaG93IHRoZSByZXN1bHRzCi1vZiB0d28gdGhyZWFkcyB3aXRoaW4gYSBwcm9jZXNzIHNpZGUtYnktc2lkZS4gVG8gZG8gdGhpcywgd2UgbmVlZAotdG8gY2xhc3NpZnkgZWFjaCBzYW1wbGUgZmlsZSBpbnRvIGNsYXNzZXMgLSB0aGUgY2xhc3NlcyBjb3JyZXNwb25kCi13aXRoIGVhY2ggPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+IGNvbHVtbi4gVGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcwotdGhpcyBpcyA8ZnVuY3Rpb24+YXJyYW5nZV9wcm9maWxlcygpPC9mdW5jdGlvbj4uIEVhY2ggc2FtcGxlIGZpbGUKLWlzIGFkZGVkIHRvIGEgcGFydGljdWxhciBjbGFzcy4gSWYgdGhlIHNhbXBsZSBmaWxlIGlzIHRoZSBmaXJzdCBpbgotaXRzIGNsYXNzLCBhIHRlbXBsYXRlIGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBzYW1wbGUgZmlsZS4gRWFjaCB0ZW1wbGF0ZQotZGVzY3JpYmVzIGEgcGFydGljdWxhciBjbGFzcyAodGh1cywgaW4gb3VyIGV4YW1wbGUgYWJvdmUsIGVhY2ggdGVtcGxhdGUKLXdpbGwgaGF2ZSBhIGRpZmZlcmVudCB0aHJlYWQgSUQsIGFuZCB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgZWFjaAotY2xhc3MpLgotPC9wYXJhPgotCi08cGFyYT4KLUVhY2ggY2xhc3MgaGFzIGEgbGlzdCBvZiAicHJvZmlsZSBzZXRzIiBtYXRjaGluZyB0aGF0IGNsYXNzJ3MgdGVtcGxhdGUuCi1BIHByb2ZpbGUgc2V0IGlzIGVpdGhlciBhIHByb2ZpbGUgb2YgdGhlIHByaW1hcnkgYmluYXJ5IGltYWdlLCBvciBhbnkgb2YKLWl0cyBkZXBlbmRlbnQgaW1hZ2VzLiBBZnRlciBhbGwgc2FtcGxlIGZpbGVzIGhhdmUgYmVlbiBsaXN0ZWQgaW4gb25lIG9mCi10aGUgcHJvZmlsZSBzZXRzIGJlbG9uZ2luZyB0byB0aGUgY2xhc3Nlcywgd2UgaGF2ZSB0byBuYW1lIGVhY2ggY2xhc3MgYW5kCi1wZXJmb3JtIGVycm9yLWNoZWNraW5nLiBUaGlzIGlzIGRvbmUgYnkKLTxmdW5jdGlvbj5pZGVudGlmeV9jbGFzc2VzKCk8L2Z1bmN0aW9uPjsgZWFjaCBjbGFzcyBpcyBjaGVja2VkIHRvIGVuc3VyZQotdGhhdCBpdHMgImF4aXMiIGlzIHRoZSBzYW1lIGFzIGFsbCB0aGUgb3RoZXJzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlCi08Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4gY2FuJ3QgcHJvZHVjZSByZXN1bHRzIGluIDNEIGZvcm1hdDogd2UgY2FuCi1vbmx5IGRpZmZlciBpbiBvbmUgYXNwZWN0LCBzdWNoIGFzIHRocmVhZCBJRCBvciBldmVudCBuYW1lLgotPC9wYXJhPgotCi08L3NlY3QyPgotCi08c2VjdDIgaWQ9InNhbXBsZS1maWxlLWludmVydGluZyI+Ci08dGl0bGU+Q3JlYXRpbmcgaW52ZXJ0ZWQgcHJvZmlsZSBsaXN0czwvdGl0bGU+Ci0KLTxwYXJhPgotUmVtZW1iZXIgdGhhdCBpZiB3ZSdyZSB1c2luZyBjZXJ0YWluIHByb2ZpbGUgc2VwYXJhdGlvbiBvcHRpb25zLCBzdWNoIGFzCi0iLS1zZXBhcmF0ZT1saWIiLCBhIHNpbmdsZSBiaW5hcnkgY291bGQgYmUgYSBkZXBlbmRlbnQgaW1hZ2UgdG8gbWFueQotZGlmZmVyZW50IGJpbmFyaWVzLiBGb3IgZXhhbXBsZSwgdGhlIEMgbGlicmFyeSBpbWFnZSB3b3VsZCBiZSBhCi1kZXBlbmRlbnQgaW1hZ2UgZm9yIG1vc3QgcHJvZ3JhbXMgdGhhdCBoYXZlIGJlZW4gcHJvZmlsZWQuIEFzIGl0Ci1oYXBwZW5zLCB0aGlzIGNhbiBjYXVzZSBzZXZlcmUgcGVyZm9ybWFuY2UgcHJvYmxlbXM6IHdpdGhvdXQgc29tZQotcmUtYXJyYW5nZW1lbnQsIHRoZXNlIGRlcGVuZGVudCBiaW5hcnkgaW1hZ2VzIHdvdWxkIGJlIG9wZW5lZCBlYWNoCi10aW1lIHdlIG5lZWQgdG8gcHJvY2VzcyBzYW1wbGUgZmlsZXMgZm9yIGVhY2ggcHJvZ3JhbS4KLTwvcGFyYT4KLQotPHBhcmE+Ci1UaGUgc29sdXRpb24gaXMgdG8gImludmVydCIgdGhlIHByb2ZpbGVzIHZpYQotPGZ1bmN0aW9uPmludmVydF9wcm9maWxlcygpPC9mdW5jdGlvbj4uIFdlIGNyZWF0ZSBhIG5ldyBkYXRhIHN0cnVjdHVyZQotd2hlcmUgdGhlIGRlcGVuZGVudCBiaW5hcnkgaXMgZmlyc3QsIGFuZCB0aGUgcHJpbWFyeSBiaW5hcnkgaW1hZ2VzIHVzaW5nCi10aGF0IGRlcGVuZGVudCBiaW5hcnkgYXJlIGxpc3RlZCBhcyBzdWItaW1hZ2VzLiBUaGlzIGhlbHBzIG91cgotcGVyZm9ybWFuY2UgcHJvYmxlbSwgYXMgbm93IHdlIG9ubHkgbmVlZCB0byBvcGVuIGVhY2ggZGVwZW5kZW50IGltYWdlCi1vbmNlLCB3aGVuIHdlIHByb2Nlc3MgdGhlIGxpc3Qgb2YgaW52ZXJ0ZWQgcHJvZmlsZXMuCi08L3BhcmE+Ci0KLTwvc2VjdDI+Ci0KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0iZ2VuZXJhdGluZy1wcm9maWxlLWRhdGEiPgotPHRpdGxlPkdlbmVyYXRpbmcgcHJvZmlsZSBkYXRhPC90aXRsZT4KLQotPHBhcmE+Ci1UaGluZ3MgZG9uJ3QgZ2V0IGFueSBzaW1wbGVyIGF0IHRoaXMgcG9pbnQsIHVuZm9ydHVuYXRlbHkuIEF0IHRoaXMgcG9pbnQKLXdlJ3ZlIGNvbGxlY3RlZCBhbmQgY2xhc3NpZmllZCB0aGUgc2FtcGxlIGZpbGVzIGludG8gdGhlIHNldCBvZiBpbnZlcnRlZAotcHJvZmlsZXMsIGFzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4gTm93IHdlIG5lZWQgdG8gcHJvY2VzcwotZWFjaCBpbnZlcnRlZCBwcm9maWxlIGFuZCBtYWtlIHNvbWV0aGluZyBvZiB0aGUgZGF0YS4gVGhlIGVudHJ5IHBvaW50Ci1mb3IgdGhpcyBpcyA8ZnVuY3Rpb24+cG9wdWxhdGVfZm9yX2ltYWdlKCk8L2Z1bmN0aW9uPi4KLTwvcGFyYT4KLQotPHNlY3QyIGlkPSJiZmQiPgotPHRpdGxlPlByb2Nlc3NpbmcgdGhlIGJpbmFyeSBpbWFnZTwvdGl0bGU+Ci08cGFyYT4KLVRoZSBmaXJzdCB0aGluZyB3ZSBkbyB3aXRoIGFuIGludmVydGVkIHByb2ZpbGUgaXMgYXR0ZW1wdCB0byBvcGVuIHRoZQotYmluYXJ5IGltYWdlIChyZW1lbWJlciBlYWNoIGludmVydGVkIHByb2ZpbGUgc2V0IGlzIG9ubHkgZm9yIG9uZSBiaW5hcnkKLWltYWdlLCBidXQgbWF5IGhhdmUgbWFueSBzYW1wbGUgZmlsZXMgdG8gcHJvY2VzcykuIFRoZQotPHZhcm5hbWU+b3BfYmZkPC92YXJuYW1lPiBjbGFzcyBwcm92aWRlcyBhbiBhYnN0cmFjdGVkIGludGVyZmFjZSB0bwotdGhpczsgaW50ZXJuYWxseSBpdCB1c2VzIDxmaWxlbmFtZT5saWJiZmQ8L2ZpbGVuYW1lPi4gVGhlIG1haW4gcHVycG9zZQotb2YgdGhpcyBjbGFzcyBpcyB0byBwcm9jZXNzIHRoZSBzeW1ib2xzIGZvciB0aGUgYmluYXJ5IGltYWdlOyB0aGlzIGlzCi1hbHNvIHdoZXJlIHN5bWJvbCBmaWx0ZXJpbmcgaGFwcGVucy4gVGhpcyBpcyBhY3R1YWxseSBxdWl0ZSB0cmlja3ksIGJ1dAotc2hvdWxkIGJlIGNsZWFyIGZyb20gdGhlIHNvdXJjZS4KLTwvcGFyYT4KLTwvc2VjdDI+Ci0KLTxzZWN0MiBpZD0icHJvY2Vzc2luZy1zYW1wbGUtZmlsZXMiPgotPHRpdGxlPlByb2Nlc3NpbmcgdGhlIHNhbXBsZSBmaWxlczwvdGl0bGU+Ci08cGFyYT4KLVRoZSBjbGFzcyA8dmFybmFtZT5wcm9maWxlX2NvbnRhaW5lcjwvdmFybmFtZT4gaXMgYSBob2xkLWFsbCB0aGF0Ci1jb250YWlucyBhbGwgdGhlIHByb2Nlc3NlZCByZXN1bHRzLiBJdCBpcyBhIGNvbnRhaW5lciBvZgotPHZhcm5hbWU+cHJvZmlsZV90PC92YXJuYW1lPiBvYmplY3RzLiBUaGUKLTxmdW5jdGlvbj5hZGRfc2FtcGxlX2ZpbGVzKCk8L2Z1bmN0aW9uPiBtZXRob2QgdXNlcwotPGZpbGVuYW1lPmxpYmRiPC9maWxlbmFtZT4gdG8gb3BlbiB0aGUgZ2l2ZW4gc2FtcGxlIGZpbGUgYW5kIGFkZCB0aGUKLWtleS92YWx1ZSB0eXBlcyB0byB0aGUgPHZhcm5hbWU+cHJvZmlsZV90PC92YXJuYW1lPi4gT25jZSB0aGlzIGhhcyBiZWVuCi1kb25lLCA8ZnVuY3Rpb24+cHJvZmlsZV9jb250YWluZXI6OmFkZCgpPC9mdW5jdGlvbj4gaXMgcGFzc2VkIHRoZQotPHZhcm5hbWU+cHJvZmlsZV90PC92YXJuYW1lPiBwbHVzIHRoZSA8dmFybmFtZT5vcF9iZmQ8L3Zhcm5hbWU+IGZvcgotcHJvY2Vzc2luZy4KLTwvcGFyYT4KLTxwYXJhPgotPGZ1bmN0aW9uPnByb2ZpbGVfY29udGFpbmVyOjphZGQoKTwvZnVuY3Rpb24+IHdhbGtzIHRocm91Z2ggdGhlIHN5bWJvbHMKLWNvbGxlY3RlZCBpbiB0aGUgPHZhcm5hbWU+b3BfYmZkPC92YXJuYW1lPi4KLTxmdW5jdGlvbj5vcF9iZmQ6OmdldF9zeW1ib2xfcmFuZ2UoKTwvZnVuY3Rpb24+IGdpdmVzIHVzIHRoZSBzdGFydCBhbmQKLWVuZCBvZiB0aGUgc3ltYm9sIGFzIGFuIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgYmluYXJ5IGltYWdlLAotdGhlbiB3ZSBpbnRlcnJvZ2F0ZSB0aGUgPHZhcm5hbWU+cHJvZmlsZV90PC92YXJuYW1lPiBmb3IgdGhlIHJlbGV2YW50IHNhbXBsZXMKLWZvciB0aGF0IG9mZnNldCByYW5nZS4gV2UgY3JlYXRlIGEgPHZhcm5hbWU+c3ltYm9sX2VudHJ5PC92YXJuYW1lPgotb2JqZWN0IGZvciB0aGlzIHN5bWJvbCBhbmQgZmlsbCBpdCBpbi4gSWYgbmVlZGVkLCBoZXJlIHdlIGFsc28gY29sbGVjdAotZGVidWcgaW5mb3JtYXRpb24gZnJvbSB0aGUgPHZhcm5hbWU+b3BfYmZkPC92YXJuYW1lPiwgYW5kIHBvc3NpYmx5Ci1yZWNvcmQgdGhlIGRldGFpbGVkIHNhbXBsZSBpbmZvcm1hdGlvbiAoYXMgdXNlZCBieSA8Y29tbWFuZD5vcHJlcG9ydAotLWQ8L2NvbW1hbmQ+IGFuZCA8Y29tbWFuZD5vcGFubm90YXRlPC9jb21tYW5kPikuCi1GaW5hbGx5IHRoZSA8dmFybmFtZT5zeW1ib2xfZW50cnk8L3Zhcm5hbWU+IGlzIGFkZGVkIHRvCi1hIHByaXZhdGUgY29udGFpbmVyIG9mIDx2YXJuYW1lPnByb2ZpbGVfY29udGFpbmVyPC92YXJuYW1lPiAtIHRoaXMKLTx2YXJuYW1lPnN5bWJvbF9jb250YWluZXI8L3Zhcm5hbWU+IGhvbGRzIGFsbCBzdWNoIHByb2Nlc3NlZCBzeW1ib2xzLgotPC9wYXJhPgotPC9zZWN0Mj4KLQotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJnZW5lcmF0aW5nLW91dHB1dCI+Ci08dGl0bGU+R2VuZXJhdGluZyBvdXRwdXQ8L3RpdGxlPgotCi08cGFyYT4KLUFmdGVyIHRoZSBwcm9jZXNzaW5nIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgd2UndmUgbm93IGdvdAotZnVsbCBkZXRhaWxzIG9mIHdoYXQgd2UgbmVlZCB0byBvdXRwdXQgc3RvcmVkIGluIHRoZQotPHZhcm5hbWU+cHJvZmlsZV9jb250YWluZXI8L3Zhcm5hbWU+IG9uIGEgc3ltYm9sLWJ5LXN5bWJvbCBiYXNpcy4gVG8KLXByb2R1Y2Ugb3V0cHV0LCB3ZSBuZWVkIHRvIHJlcGxheSB0aGF0IGRhdGEgYW5kIGZvcm1hdCBpdCBzdWl0YWJseS4KLTwvcGFyYT4KLTxwYXJhPgotPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+IGZpcnN0IGFza3MgdGhlCi08dmFybmFtZT5wcm9maWxlX2NvbnRhaW5lcjwvdmFybmFtZT4gZm9yIGEKLTx2YXJuYW1lPnN5bWJvbF9jb2xsZWN0aW9uPC92YXJuYW1lPiAodGhpcyBpcyBhbHNvIHdoZXJlIHRocmVzaG9sZGluZwotaGFwcGVucykuCi1UaGlzIGlzIHNvcnRlZCwgdGhlbiBhCi08dmFybmFtZT5vcHJlcG9ydF9mb3JtYXR0ZXI8L3Zhcm5hbWU+IGlzIGluaXRpYWxpc2VkLgotVGhpcyBvYmplY3QgaW5pdGlhbGlzZXMgYSBzZXQgb2YgZmllbGQgZm9ybWF0dGVycyBhcyByZXF1ZXN0ZWQuIFRoZW4KLTxmdW5jdGlvbj5vcHJlcG9ydF9mb3JtYXR0ZXI6Om91dHB1dCgpPC9mdW5jdGlvbj4gaXMgY2FsbGVkLiBUaGlzCi1pdGVyYXRlcyB0aHJvdWdoIHRoZSAoc29ydGVkKSA8dmFybmFtZT5zeW1ib2xfY29sbGVjdGlvbjwvdmFybmFtZT47Ci1mb3IgZWFjaCBlbnRyeSwgdGhlIHNlbGVjdGVkIGZpZWxkcyAoYXMgc2V0IGJ5IHRoZQotPHZhcm5hbWU+Zm9ybWF0X2ZsYWdzPC92YXJuYW1lPiBvcHRpb25zKSBhcmUgb3V0cHV0IGJ5IGNhbGxpbmcgdGhlCi1maWVsZCBmb3JtYXR0ZXJzLCB3aXRoIHRoZSA8dmFybmFtZT5zeW1ib2xfZW50cnk8L3Zhcm5hbWU+IHBhc3NlZCBpbi4KLTwvcGFyYT4KLQotPC9zZWN0MT4KLQotPC9jaGFwdGVyPgotCi08Z2xvc3NhcnkgaWQ9Imdsb3NzYXJ5Ij4KLTx0aXRsZT5HbG9zc2FyeSBvZiBPUHJvZmlsZSBzb3VyY2UgY29uY2VwdHMgYW5kIHR5cGVzPC90aXRsZT4KLQotPGdsb3NzZW50cnk+PGdsb3NzdGVybT5hcHBsaWNhdGlvbiBpbWFnZTwvZ2xvc3N0ZXJtPgotPGdsb3NzZGVmPjxwYXJhPgotVGhlIHByaW1hcnkgYmluYXJ5IGltYWdlIHVzZWQgYnkgYW4gYXBwbGljYXRpb24uIFRoaXMgaXMgZGVyaXZlZAotZnJvbSB0aGUga2VybmVsIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgYmluYXJ5IHN0YXJ0ZWQgdXBvbiBydW5uaW5nCi1hbiBhcHBsaWNhdGlvbjogZm9yIGV4YW1wbGUsIDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPi4KLTwvcGFyYT48L2dsb3NzZGVmPjwvZ2xvc3NlbnRyeT4KLQotPGdsb3NzZW50cnk+PGdsb3NzdGVybT5iaW5hcnkgaW1hZ2U8L2dsb3NzdGVybT4KLTxnbG9zc2RlZj48cGFyYT4KLUFuIEVMRiBmaWxlIGNvbnRhaW5pbmcgZXhlY3V0YWJsZSBjb2RlOiB0aGlzIGluY2x1ZGVzIGtlcm5lbCBtb2R1bGVzLAotdGhlIGtlcm5lbCBpdHNlbGYgKGEuay5hLiA8ZmlsZW5hbWU+dm1saW51eDwvZmlsZW5hbWU+KSwgc2hhcmVkIGxpYnJhcmllcywKLWFuZCBhcHBsaWNhdGlvbiBiaW5hcmllcy4KLTwvcGFyYT48L2dsb3NzZGVmPjwvZ2xvc3NlbnRyeT4KLQotPGdsb3NzZW50cnk+PGdsb3NzdGVybT5kY29va2llPC9nbG9zc3Rlcm0+Ci08Z2xvc3NkZWY+PHBhcmE+Ci1TaG9ydCBmb3IgImRlbnRyeSBjb29raWUiLiBBIHVuaXF1ZSBJRCB0aGF0IGNhbiBiZSBsb29rZWQgdXAgdG8gcHJvdmlkZQotdGhlIGZ1bGwgcGF0aCBuYW1lIG9mIGEgYmluYXJ5IGltYWdlLgotPC9wYXJhPjwvZ2xvc3NkZWY+PC9nbG9zc2VudHJ5PgotCi08Z2xvc3NlbnRyeT48Z2xvc3N0ZXJtPmRlcGVuZGVudCBpbWFnZTwvZ2xvc3N0ZXJtPgotPGdsb3NzZGVmPjxwYXJhPgotQSBiaW5hcnkgaW1hZ2UgdGhhdCBpcyBkZXBlbmRlbnQgdXBvbiBhbiBhcHBsaWNhdGlvbiwgdXNlZCB3aXRoCi1wZXItYXBwbGljYXRpb24gc2VwYXJhdGlvbi4gTW9zdCBjb21tb25seSwgc2hhcmVkIGxpYnJhcmllcy4gRm9yIGV4YW1wbGUsCi1pZiA8ZmlsZW5hbWU+L2Jpbi9iYXNoPC9maWxlbmFtZT4gaXMgcnVubmluZyBhbmQgd2UgdGFrZQotc29tZSBzYW1wbGVzIGluc2lkZSB0aGUgQyBsaWJyYXJ5IGl0c2VsZiBkdWUgdG8gPGNvbW1hbmQ+YmFzaDwvY29tbWFuZD4KLWNhbGxpbmcgbGlicmFyeSBjb2RlLCB0aGVuIHRoZSBpbWFnZSA8ZmlsZW5hbWU+L2xpYi9saWJjLnNvPC9maWxlbmFtZT4KLXdvdWxkIGJlIGRlcGVuZGVudCB1cG9uIDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPi4KLTwvcGFyYT48L2dsb3NzZGVmPjwvZ2xvc3NlbnRyeT4KLQotPGdsb3NzZW50cnk+PGdsb3NzdGVybT5tZXJnaW5nPC9nbG9zc3Rlcm0+Ci08Z2xvc3NkZWY+PHBhcmE+Ci1UaGlzIHJlZmVycyB0byB0aGUgYWJpbGl0eSB0byBtZXJnZSBzZXZlcmFsIGRpc3RpbmN0IHNhbXBsZSBmaWxlcwotaW50byBvbmUgc2V0IG9mIGRhdGEgYXQgcnVudGltZSwgaW4gdGhlIHBvc3QtcHJvZmlsaW5nIHRvb2xzLiBGb3IgZXhhbXBsZSwKLXBlci10aHJlYWQgc2FtcGxlIGZpbGVzIGNhbiBiZSBtZXJnZWQgaW50byBvbmUgc2V0IG9mIGRhdGEsIGJlY2F1c2UKLXRoZXkgYXJlIGNvbXBhdGlibGUgKGkuZS4gdGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSBkYXRhIGlzIG1lYW5pbmdmdWwpLAotYnV0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIG1lcmdlIHNhbXBsZSBmaWxlcyBmb3IgdHdvIGRpZmZlcmVudCBldmVudHMsCi1iZWNhdXNlIHRoZXJlIHdvdWxkIGJlIG5vIHVzZWZ1bCBtZWFuaW5nIHRvIHRoZSByZXN1bHRzLgotPC9wYXJhPjwvZ2xvc3NkZWY+PC9nbG9zc2VudHJ5PgotCi08Z2xvc3NlbnRyeT48Z2xvc3N0ZXJtPnByb2ZpbGUgY2xhc3M8L2dsb3NzdGVybT4KLTxnbG9zc2RlZj48cGFyYT4KLUEgY29sbGVjdGlvbiBvZiBwcm9maWxlIGRhdGEgdGhhdCBoYXMgYmVlbiBjb2xsZWN0ZWQgdW5kZXIgdGhlIHNhbWUKLWNsYXNzIHRlbXBsYXRlLiBGb3IgZXhhbXBsZSwgaWYgd2UncmUgdXNpbmcgPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+Ci10byBzaG93IHJlc3VsdHMgYWZ0ZXIgcHJvZmlsaW5nIHdpdGggdHdvIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGVuYWJsZWQKLXByb2ZpbGluZyA8Y29uc3RhbnQ+REFUQV9NRU1fUkVGUzwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+Q1BVX0NMS19VTkhBTFRFRDwvY29uc3RhbnQ+LAotdGhlcmUgd291bGQgYmUgdHdvIHByb2ZpbGUgY2xhc3Nlcywgb25lIGZvciBlYWNoIGV2ZW50LiBPciBpZiB3ZSdyZSBvbgotYW4gU01QIHN5c3RlbSBhbmQgZG9pbmcgcGVyLWNwdSBwcm9maWxpbmcsIGFuZCB3ZSByZXF1ZXN0Ci08Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4gdG8gc2hvdyByZXN1bHRzIGZvciBlYWNoIENQVSBzaWRlLWJ5LXNpZGUsCi10aGVyZSB3b3VsZCBiZSBhIHByb2ZpbGUgY2xhc3MgZm9yIGVhY2ggQ1BVLgotPC9wYXJhPjwvZ2xvc3NkZWY+PC9nbG9zc2VudHJ5PgotCi08Z2xvc3NlbnRyeT48Z2xvc3N0ZXJtPnByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvZ2xvc3N0ZXJtPgotPGdsb3NzZGVmPjxwYXJhPgotVGhlIHBhcmFtZXRlcnMgdGhlIHVzZXIgcGFzc2VzIHRvIHRoZSBwb3N0LXByb2ZpbGluZyB0b29scyB0aGF0IGxpbWl0Ci13aGF0IHNhbXBsZSBmaWxlcyBhcmUgdXNlZC4gVGhpcyBzcGVjaWZpY2F0aW9uIGlzIG1hdGNoZWQgYWdhaW5zdAotdGhlIGF2YWlsYWJsZSBzYW1wbGUgZmlsZXMgdG8gZ2VuZXJhdGUgYSBzZWxlY3Rpb24gb2YgcHJvZmlsZSBkYXRhLgotPC9wYXJhPjwvZ2xvc3NkZWY+PC9nbG9zc2VudHJ5PgotCi08Z2xvc3NlbnRyeT48Z2xvc3N0ZXJtPnByb2ZpbGUgdGVtcGxhdGU8L2dsb3NzdGVybT4KLTxnbG9zc2RlZj48cGFyYT4KLVRoZSBwYXJhbWV0ZXJzIHRoYXQgZGVmaW5lIHdoYXQgZ29lcyBpbiBhIHBhcnRpY3VsYXIgcHJvZmlsZSBjbGFzcy4KLVRoaXMgaW5jbHVkZXMgYSBzeW1ib2xpYyBuYW1lIChlLmcuICJjcHU6MSIpIGFuZCB0aGUgY29kZS11c2FibGUKLWVxdWl2YWxlbnQuCi08L3BhcmE+PC9nbG9zc2RlZj48L2dsb3NzZW50cnk+Ci0KLTwvZ2xvc3Nhcnk+Ci0KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL2RvYy9vcGFubm90YXRlLjEuaW4gYi9kb2Mvb3Bhbm5vdGF0ZS4xLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTVkNWQwLi4wMDAwMDAwCi0tLSBhL2RvYy9vcGFubm90YXRlLjEuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLlRIIE9QQU5OT1RBVEUgMSAiQERBVEVAIiAib3Byb2ZpbGUgQFZFUlNJT05AIgotLlVDIDQKLS5TSCBOQU1FCi1vcGFubm90YXRlIFwtIHByb2R1Y2Ugc291cmNlIG9yIGFzc2VtYmx5IGFubm90YXRlZCB3aXRoIHByb2ZpbGUgZGF0YQotLlNIIFNZTk9QU0lTCi0uYnIKLS5CIG9wYW5ub3RhdGUKLVsKLS5JIG9wdGlvbnMKLV0KLVtwcm9maWxlIHNwZWNpZmljYXRpb25dCi0uU0ggREVTQ1JJUFRJT04KLQotLkIgb3Bhbm5vdGF0ZQotb3V0cHV0cyBhbm5vdGF0ZWQgc291cmNlIGFuZC9vciBhc3NlbWJseSBmcm9tIHByb2ZpbGUgZGF0YSBvZiBhbiBPUHJvZmlsZQotc2Vzc2lvbi4KLQotLlNIIE9QVElPTlMKLS5UUAotLkJJICItLWFzc2VtYmx5IC8gLWEiCi1PdXRwdXQgYW5ub3RhdGVkIGFzc2VtYmx5LiBJZiB0aGlzIGlzIGNvbWJpbmVkIHdpdGggLS1zb3VyY2UsIHRoZW4gbWl4ZWQKLXNvdXJjZSAvIGFzc2VtYmx5IGFubm90YXRpb25zIGFyZSBvdXRwdXQuCi0uYnIKLS5UUAotLkJJICItLWRlbWFuZ2xlIC8gLUQgbm9uZXxzbWFydHxub3JtYWwiCi1ub25lOiBubyBkZW1hbmdsaW5nLiBub3JtYWw6IHVzZSBkZWZhdWx0IGRlbWFuZ2xlciAoZGVmYXVsdCkgc21hcnQ6IHVzZQotcGF0dGVybi1tYXRjaGluZyB0byBtYWtlIEMrKyBzeW1ib2wgZGVtYW5nbGluZyBtb3JlIHJlYWRhYmxlLgotLmJyCi0uVFAKLS5CSSAiLS1leGNsdWRlLWRlcGVuZGVudCAvIC14IgotRG8gbm90IGluY2x1ZGUgYXBwbGljYXRpb24tc3BlY2lmaWMgaW1hZ2VzIGZvciBsaWJyYXJpZXMsIGtlcm5lbCBtb2R1bGVzCi1hbmQgdGhlIGtlcm5lbC4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcHJvZmlsZSBzZXNzaW9uCi11c2VkIC0tc2VwYXJhdGUuCi0uYnIKLS5UUAotLkJJICItLWV4Y2x1ZGUtZmlsZSBbZmlsZXNdIgotRXhjbHVkZSBhbGwgZmlsZXMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGdsb2IgcGF0dGVybnMuCi0uYnIKLS5UUAotLkJJICItLWV4Y2x1ZGUtc3ltYm9scyAvIC1lIFtzeW1ib2xzXSIKLUV4Y2x1ZGUgYWxsIHRoZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KLS5icgotLlRQCi0uQkkgIi0taGVscCAvIC0/IC8gLS11c2FnZSIKLVNob3cgaGVscCBtZXNzYWdlLgotLmJyCi0uVFAKLS5CSSAiLS1pbWFnZS1wYXRoIC8gLXAgW3BhdGhzXSIKLUNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgcGF0aHMgdG8gc2VhcmNoIGZvciBiaW5hcmllcy4KLVRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgbW9kdWxlcyBpbiBrZXJuZWxzIDIuNiBhbmQgdXB3YXJkcy4KLS5icgotLlRQCi0uQkkgIi0taW5jbHVkZS1maWxlIFtmaWxlc10iCi1Pbmx5IGluY2x1ZGUgZmlsZXMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGdsb2IgcGF0dGVybnMuCi0uYnIKLS5UUAotLkJJICItLWluY2x1ZGUtc3ltYm9scyAvIC1pIFtzeW1ib2xzXSIKLU9ubHkgaW5jbHVkZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KLS5icgotLlRQCi0uQkkgIi0tb2JqZHVtcC1wYXJhbXMgW3BhcmFtc10iCi1QYXNzIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFzIGV4dHJhIHZhbHVlcyB3aGVuIGNhbGxpbmcgb2JqZHVtcC4KLS5icgotLlRQCi0uQkkgIi0tb3V0cHV0LWRpciAvIC1vIFtkaXJdIgotT3V0cHV0IGRpcmVjdG9yeS4gVGhpcyBtYWtlcyBvcGFubm90YXRlIG91dHB1dCBvbmUgYW5ub3RhdGVkIGZpbGUgZm9yIGVhY2gKLXNvdXJjZSBmaWxlLiBUaGlzIG9wdGlvbiBjYW4ndCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggLS1hc3NlbWJseS4KLS5icgotLlRQCi0uQkkgIi0tc2VhcmNoLWRpcnMgLyAtZCBbcGF0aHNdIgotQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGF0aHMgdG8gc2VhcmNoIGZvciBzb3VyY2UgZmlsZXMuIFlvdSBtYXkgbmVlZCB0byB1c2UKLXRoaXMgb3B0aW9uIHdoZW4gdGhlIGRlYnVnIGluZm9ybWF0aW9uIGZvciBhbiBpbWFnZSBjb250YWlucyByZWxhdGl2ZSBwYXRocy4KLS5icgotLlRQCi0uQkkgIi0tYmFzZS1kaXJzIC8gLWIgW3BhdGhzXSIKLUNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhdGhzIHRvIHN0cmlwIGZyb20gZGVidWcgc291cmNlIGZpbGVzLCBwcmlvciB0bwotbG9va2luZyBmb3IgdGhlbSBpbiAtLXNlYXJjaC1kaXJzLgotLmJyCi0uVFAKLS5CSSAiLS1zb3VyY2UgLyAtcyIKLU91dHB1dCBhbm5vdGF0ZWQgc291cmNlLiBUaGlzIHJlcXVpcmVzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBiZSBhdmFpbGFibGUKLWZvciB0aGUgYmluYXJpZXMuCi0uYnIKLS5UUAotLkJJICItLXRocmVzaG9sZCAvIC10IFtwZXJjZW50YWdlXSIKLU9ubHkgb3V0cHV0IGRhdGEgZm9yIHN5bWJvbHMgdGhhdCBoYXZlIG1vcmUgdGhhbiB0aGUgZ2l2ZW4gcGVyY2VudGFnZQotb2YgdG90YWwgc2FtcGxlcy4KLS5icgotLlRQCi0uQkkgIi0tdmVyYm9zZSAvIC1WIFtvcHRpb25zXSIKLUdpdmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgotLmJyCi0uVFAKLS5CSSAiLS12ZXJzaW9uIC8gLXYiCi1TaG93IHZlcnNpb24uCi0KLS5TSCBFTlZJUk9OTUVOVAotTm8gc3BlY2lhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHJlY29nbmlzZWQgYnkgb3Bhbm5vdGF0ZS4KLQotLlNIIEZJTEVTCi0uVFAKLS5JIC92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvCi1UaGUgbG9jYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBzYW1wbGUgZmlsZXMuCi0KLS5TSCBWRVJTSU9OCi0uVFAKLVRoaXMgbWFuIHBhZ2UgaXMgY3VycmVudCBmb3IgQFBBQ0tBR0VALUBWRVJTSU9OQC4KLQotLlNIIFNFRSBBTFNPCi0uQlIgQE9QX0RPQ0RJUkAsCi0uQlIgb3Byb2ZpbGUoMSkKZGlmZiAtLWdpdCBhL2RvYy9vcGFyY2hpdmUuMS5pbiBiL2RvYy9vcGFyY2hpdmUuMS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5MzAxYy4uMDAwMDAwMAotLS0gYS9kb2Mvb3BhcmNoaXZlLjEuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0uVEggT1BBUkNISVZFIDEgIkBEQVRFQCIgIm9wcm9maWxlIEBWRVJTSU9OQCIKLS5VQyA0Ci0uU0ggTkFNRQotb3BhcmNoaXZlIFwtIHByb2R1Y2UgYXJjaGl2ZSBvZiBvcHJvZmlsZSBkYXRhIGZvciBvZmZsaW5lIGFuYWx5c2lzCi0uU0ggU1lOT1BTSVMKLS5icgotLkIgb3BhcmNoaXZlCi1bCi0uSSBvcHRpb25zCi1dCi1bcHJvZmlsZSBzcGVjaWZpY2F0aW9uXQotLkIgLW8KLVtkaXJlY3RvcnldCi0uU0ggREVTQ1JJUFRJT04KLQotLkIgb3BhcmNoaXZlCi1nZW5lcmF0ZXMgYSBkaXJlY3RvcnkgcG9wdWxhdGVkIHdpdGggZXhlY3V0YWJsZSwgZGVidWcsIGFuZCBvcHJvZmlsZSBzYW1wbGUKLWZpbGVzLiBUaGlzIGRpcmVjdG9yeSBjYW4gYmUgbW92ZSB0byBhbm90aGVyIG1hY2hpbmUgdmlhIHRhciBhbmQgYW5hbHl6ZWQKLXdpdGhvdXQgZnVydGhlciB1c2Ugb2YgdGhlIGRhdGEgY29sbGVjdGlvbiBtYWNoaW5lLgotCi0uU0ggT1BUSU9OUwotLlRQCi0uQkkgIi0taGVscCAvIC0/IC8gLS11c2FnZSIKLVNob3cgaGVscCBtZXNzYWdlLgotLmJyCi0uVFAKLS5CSSAiLS12ZXJzaW9uIC8gLXYiCi1TaG93IHZlcnNpb24uCi0uYnIKLS5UUAotLkJJICItLXZlcmJvc2UgLyAtViBbb3B0aW9uc10iCi1HaXZlIHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dC4KLS5icgotLlRQCi0uQkkgIi0taW1hZ2UtcGF0aCAvIC1wIFtwYXRoc10iCi1Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCi1UaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCi0uYnIKLS5UUAotLkJJICItLW91dHB1dC1kaXJlY3RvcnkgLyAtbyBbZGlyZWN0b3J5XSIKLU91dHB1dCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBUaGVyZSBpcyBubyBkZWZhdWx0LiBUaGlzIG11c3QgYmUgc3BlY2lmaWVkLgotLmJyCi0uVFAKLS5CSSAiLS1leGNsdWRlLWRlcGVuZGVudCAvIC14IgotRG8gbm90IGluY2x1ZGUgYXBwbGljYXRpb24tc3BlY2lmaWMgaW1hZ2VzIGZvciBsaWJyYXJpZXMsIGtlcm5lbCBtb2R1bGVzCi1hbmQgdGhlIGtlcm5lbC4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcHJvZmlsZSBzZXNzaW9uCi11c2VkIC0tc2VwYXJhdGUuCi0KLS5TSCBFTlZJUk9OTUVOVAotTm8gc3BlY2lhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHJlY29nbmlzZWQgYnkgb3BhcmNoaXZlLgotCi0uU0ggRklMRVMKLS5UUAotLkkgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy8KLVRoZSBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHNhbXBsZSBmaWxlcy4KLQotLlNIIFZFUlNJT04KLS5UUAotVGhpcyBtYW4gcGFnZSBpcyBjdXJyZW50IGZvciBAUEFDS0FHRUAtQFZFUlNJT05ALgotCi0uU0ggU0VFIEFMU08KLS5CUiBAT1BfRE9DRElSQCwKLS5CUiBvcHJvZmlsZSgxKQpkaWZmIC0tZ2l0IGEvZG9jL29wY29udHJvbC4xLmluIGIvZG9jL29wY29udHJvbC4xLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGNjNzQ1Li4wMDAwMDAwCi0tLSBhL2RvYy9vcGNvbnRyb2wuMS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0uVEggT1BDT05UUk9MIDEgIkBEQVRFQCIgIm9wcm9maWxlIEBWRVJTSU9OQCIKLS5VQyA0Ci0uU0ggTkFNRQotb3Bjb250cm9sIFwtIGNvbnRyb2wgT1Byb2ZpbGUgcHJvZmlsaW5nCi0uU0ggU1lOT1BTSVMKLS5icgotLkIgb3Bjb250cm9sCi1bCi0uSSBvcHRpb25zCi1dCi0uU0ggREVTQ1JJUFRJT04KLS5CIG9wY29udHJvbAotY2FuIGJlIHVzZWQgdG8gc3RhcnQgcHJvZmlsaW5nLCBlbmQgYSBwcm9maWxpbmcgc2Vzc2lvbiwKLWR1bXAgcHJvZmlsZSBkYXRhLCBhbmQgc2V0IHVwIHRoZSBwcm9maWxpbmcgcGFyYW1ldGVycy4KLQotLlNIIE9QVElPTlMKLS5UUAotLkJJICItLWhlbHAiCi1TaG93IGhlbHAgbWVzc2FnZS4KLS5icgotLlRQCi0uQkkgIi0tdmVyc2lvbiIKLVNob3cgdmVyc2lvbi4KLS5icgotLlRQCi0uQkkgIi0tbGlzdC1ldmVudHMiCi1TaG93cyB0aGUgbW9uaXRvcmFibGUgZXZlbnRzLgotLmJyCi0uVFAKLS5CSSAiLS1pbml0IgotTG9hZCB0aGUgT1Byb2ZpbGUgbW9kdWxlIGlmIHJlcXVpcmVkIGFuZCBtYWtlIHRoZSBPUHJvZmlsZSBkcml2ZXIKLWludGVyZmFjZSBhdmFpbGFibGUuCi0uYnIKLS5UUAotLkJJICItLXNldHVwIgotRm9sbG93ZWQgYnkgbGlzdCBvcHRpb25zIGZvciBwcm9maWxpbmcgc2V0dXAuIFN0b3JlIHNldHVwIAotaW4gfnJvb3QvLm9wcm9maWxlL2RhZW1vbnJjLiBPcHRpb25hbC4KLS5icgotLlRQCi0uQkkgIi0tc3RhdHVzIgotU2hvdyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotLmJyCi0uVFAKLS5CSSAiLS1zdGFydC1kYWVtb24iCi1TdGFydCB0aGUgb3Byb2ZpbGUgZGFlbW9uIHdpdGhvdXQgc3RhcnRpbmcgcHJvZmlsaW5nLiBOb3QgYXZhaWxhYmxlCi1pbiAyLjIvMi40IGtlcm5lbHMuCi0uYnIKLS5UUAotLkJJICItLXN0YXJ0IgotU3RhcnQgZGF0YSBjb2xsZWN0aW9uIHdpdGggZWl0aGVyIGFyZ3VtZW50cyBwcm92aWRlZCBieSAtLXNldHVwCi1vZiBpbmZvcm1hdGlvbiBzYXZlZCBpbiB+cm9vdC8ub3Byb2ZpbGUvZGFlbW9ucmMuCi0uYnIKLS5UUAotLkJJICItLWR1bXAiCi1Gb3JjZSBhIGZsdXNoIG9mIHRoZSBjb2xsZWN0ZWQgcHJvZmlsaW5nIGRhdGEgdG8gdGhlIGRhZW1vbi4KLS5icgotLlRQCi0uQkkgIi0tc3RvcCIKLVN0b3AgZGF0YSBjb2xsZWN0aW9uLiBOb3QgYXZhaWxhYmxlIGluIDIuMi8yLjQga2VybmVscy4KLS5icgotLlRQCi0uQkkgIi0tc2h1dGRvd24iCi1TdG9wIGRhdGEgY29sbGVjdGlvbiBhbmQga2lsbCB0aGUgZGFlbW9uLgotLmJyCi0uVFAKLS5CSSAiLS1yZXNldCIKLUNsZWFyIG91dCBkYXRhIGZyb20gY3VycmVudCBzZXNzaW9uLCBidXQgbGVhdmVzIHNhdmVkIHNlc3Npb25zLgotLmJyCi0uVFAKLS5CSSAiLS1zYXZlPSJzZXNzaW9ubmFtZQotU2F2ZSBkYXRhIGZyb20gY3VycmVudCBzZXNzaW9uIHRvIHNlc3Npb25uYW1lLgotLmJyCi0uVFAKLS5CSSAiLS1kZWluaXQiCi1TaHV0IGRvd24gZGFlbW9uLiBVbmxvYWQgdGhlIG9wcm9maWxlIG1vZHVsZSBhbmQgb3Byb2ZpbGVmcy4KLS5icgotLlRQCi0uQkkgIi0tYnVmZmVyLXNpemU9Im51bQotU2V0IGtlcm5lbCBidWZmZXIgdG8gbnVtIHNhbXBsZXMuCi0uYnIKLS5UUAotLkJJICItLWNwdS1idWZmZXItc2l6ZT0ibnVtCi1TZXQga2VybmVsIHBlciBjcHUgYnVmZmVyIHRvIG51bSBzYW1wbGVzICgyLjYgb25seSkuIElmIHlvdSBwcm9maWxlIGF0IGhpZ2gKLXJhdGUgaXQgY2FuIGhlbHAgdG8gaW5jcmVhc2UgdGhpcyBpZiB0aGUgbG9nIGZpbGUgc2hvdyBleGNlc3NpdmUgY291bnQgb2YKLXNhbXBsZSBsb3N0IGNwdSBidWZmZXIgb3ZlcmZsb3cuCi0uYnIKLS5UUAotLkJJICItLWV2ZW50PSJbZXZlbnR8ImRlZmF1bHQiXQotQWRkIGFuIGV2ZW50IHRvIG1lYXN1cmUgZm9yIHRoZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycywKLW9yICJkZWZhdWx0IiBmb3IgdGhlIGRlZmF1bHQgZXZlbnQuIFRoZSBldmVudCBpcyBvZiB0aGUgZm9ybQotIkNQVV9DTEtfVU5IQUxURUQ6MzAwMDA6MDoxOjEiIHdoZXJlIHRoZSBudW1lcmljIHZhbHVlcyBhcmUKLWNvdW50LCB1bml0IG1hc2ssIGtlcm5lbC1zcGFjZSBjb3VudGluZywgdXNlci1zcGFjZSBjb3VudGluZywKLXJlc3BlY3RpdmVseS4KLS5icgotLlRQCi0uQkkgIi0tc2VwYXJhdGU9Iltub25lLGxpYixrZXJuZWwsdGhyZWFkLGNwdSxhbGxdCi1TZXBhcmF0ZSBzYW1wbGVzIGJhc2VkIG9uIHRoZSBnaXZlbiBzZXBhcmF0b3IuICdsaWInIHNlcGFyYXRlcwotZHluYW1pY2FsbHkgbGlua2VkIGxpYnJhcnkgc2FtcGxlcyBwZXIgYXBwbGljYXRpb24uICdrZXJuZWwnIHNlcGFyYXRlcwota2VybmVsIGFuZCBrZXJuZWwgbW9kdWxlIHNhbXBsZXMgcGVyIGFwcGxpY2F0aW9uOyAna2VybmVsJwotaW1wbGllcyAnbGlicmFyeScuICd0aHJlYWQnIGdpdmVzIHNlcGFyYXRpb24gZm9yIGVhY2ggdGhyZWFkIGFuZAotdGFzay4gICdjcHUnIHNlcGFyYXRlcyBmb3IgZWFjaCBDUFUuICdhbGwnIGltcGxpZXMgYWxsIG9mIHRoZSBhYm92ZQotb3B0aW9ucyBhbmQgJ25vbmUnIHR1cm5zIG9mZiBzZXBhcmF0aW9uLgotLmJyCi0uVFAKLS5CSSAiLS1jYWxsZ3JhcGg9I2RlcHRoIgotRW5hYmxlIGNhbGxncmFwaCBzYW1wbGUgY29sbGVjdGlvbiB3aXRoIGEgbWF4aW11bSBkZXB0aC4gVXNlIDAgdG8gZGlzYWJsZQotY2FsbGdyYXBoIHByb2ZpbGluZy4gVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG9ubHkgdXNhYmxlIG9uIHg4NiwgdXNpbmcgYQotMi42KyBrZXJuZWwgd2l0aCBjYWxsZ3JhcGggc3VwcG9ydCBlbmFibGVkLgotLmJyCi0uVFAKLS5CSSAiLS1pbWFnZT0iW25hbWUsbmFtZS4uLnwiYWxsIl0KLU9ubHkgcHJvZmlsZSB0aGUgZ2l2ZW4gYWJzb2x1dGUgcGF0aHMgdG8gYmluYXJpZXMsIG9yICJhbGwiIHRvIHByb2ZpbGUKLWV2ZXJ5dGhpbmcgKHRoZSBkZWZhdWx0KS4KLS5icgotLlRQCi0uQkkgIi0tdm1saW51eD0iZmlsZQotdm1saW51eCBrZXJuZWwgaW1hZ2UuCi0uYnIKLS5UUAotLkJJICItLW5vLXZtbGludXgiCi1Vc2UgdGhpcyB3aGVuIHlvdSBkb24ndCBoYXZlIGEga2VybmVsIHZtbGludXggZmlsZSwgYW5kIHlvdSBkb24ndCB3YW50IHRvCi1wcm9maWxlIHRoZSBrZXJuZWwuCi0uYnIKLS5UUAotLkJJICItLXZlcmJvc2UiCi1CZSB2ZXJib3NlIGluIHRoZSBkYWVtb24gbG9nLiBUaGlzIGhhcyBhIGhpZ2ggb3ZlcmhlYWQuCi0uYnIKLS5UUAotLkJJICItLWtlcm5lbC1yYW5nZT0ic3RhcnQsZW5kCi1TZXQga2VybmVsIHJhbmdlIHZtYSBhZGRyZXNzIGluIGhleGFkZWNpbWFsLgotCi0uU0ggRU5WSVJPTk1FTlQKLU5vIHNwZWNpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSByZWNvZ25pc2VkIGJ5IG9wcmVwb3J0LgotCi0uU0ggRklMRVMKLS5UUAotLkkgL3Jvb3QvLm9wcm9maWxlL2RhZW1vbnJjCi1Db25maWd1cmF0aW9uIGZpbGUgZm9yIG9wY29udHJvbAotLlRQCi0uSSAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLwotVGhlIGxvY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgc2FtcGxlIGZpbGVzLgotCi0uU0ggVkVSU0lPTgotLlRQCi1UaGlzIG1hbiBwYWdlIGlzIGN1cnJlbnQgZm9yIEBQQUNLQUdFQC1AVkVSU0lPTkAuCi0KLS5TSCBTRUUgQUxTTwotLkJSIEBPUF9ET0NESVJALAotLkJSIG9wcm9maWxlKDEpCmRpZmYgLS1naXQgYS9kb2Mvb3BncHJvZi4xLmluIGIvZG9jL29wZ3Byb2YuMS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkwOWQ1NC4uMDAwMDAwMAotLS0gYS9kb2Mvb3BncHJvZi4xLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLlRIIE9QR1BST0YgMSAiQERBVEVAIiAib3Byb2ZpbGUgQFZFUlNJT05AIgotLlVDIDQKLS5TSCBOQU1FCi1vcGdwcm9mIFwtIHByb2R1Y2UgZ3Byb2YtZm9ybWF0IHByb2ZpbGUgZGF0YQotLlNIIFNZTk9QU0lTCi0uYnIKLS5CIG9wZ3Byb2YKLVsKLS5JIG9wdGlvbnMKLV0KLVtwcm9maWxlIHNwZWNpZmljYXRpb25dCi0uU0ggREVTQ1JJUFRJT04KLQotLkIgb3BncHJvZgotb3V0cHV0cyBncHJvZi1mb3JtYXQgcHJvZmlsZSBkYXRhIGZvciBhIGdpdmVuIGJpbmFyeSBpbWFnZSwKLWZyb20gYW4gT1Byb2ZpbGUgc2Vzc2lvbi4KLQotLlNIIE9QVElPTlMKLS5UUAotLkJJICItLWhlbHAgLyAtPyAvIC0tdXNhZ2UiCi1TaG93IGhlbHAgbWVzc2FnZS4KLS5icgotLlRQCi0uQkkgIi0tdmVyc2lvbiAvIC12IgotU2hvdyB2ZXJzaW9uLgotLmJyCi0uVFAKLS5CSSAiLS12ZXJib3NlIC8gLVYgW29wdGlvbnNdIgotR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCi0uYnIKLS5UUAotLkJJICItLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdIgotQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBwYXRocyB0byBzZWFyY2ggZm9yIGJpbmFyaWVzLgotVGhpcyBpcyBuZWVkZWQgdG8gZmluZCBtb2R1bGVzIGluIGtlcm5lbHMgMi42IGFuZCB1cHdhcmRzLgotLmJyCi0uVFAKLS5CSSAiLS10aHJlc2hvbGQgLyAtdCBbcGVyY2VudGFnZV0iCi1Pbmx5IG91dHB1dCBkYXRhIGZvciBzeW1ib2xzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gdGhlIGdpdmVuIHBlcmNlbnRhZ2UKLW9mIHRvdGFsIHNhbXBsZXMuCi0uYnIKLS5UUAotLkJJICItLW91dHB1dC1maWxlbmFtZSAvIC1vIFtmaWxlXSIKLU91dHB1dCB0byB0aGUgZ2l2ZW4gZmlsZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0LCBnbW9uLm91dAotCi0uU0ggRU5WSVJPTk1FTlQKLU5vIHNwZWNpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSByZWNvZ25pc2VkIGJ5IG9wZ3Byb2YuCi0KLS5TSCBGSUxFUwotLlRQCi0uSSAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLwotVGhlIGxvY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgc2FtcGxlIGZpbGVzLgotCi0uU0ggVkVSU0lPTgotLlRQCi1UaGlzIG1hbiBwYWdlIGlzIGN1cnJlbnQgZm9yIEBQQUNLQUdFQC1AVkVSU0lPTkAuCi0KLS5TSCBTRUUgQUxTTwotLkJSIEBPUF9ET0NESVJALAotLkJSIG9wcm9maWxlKDEpCmRpZmYgLS1naXQgYS9kb2Mvb3BoZWxwLjEuaW4gYi9kb2Mvb3BoZWxwLjEuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZDY4MzIuLjAwMDAwMDAKLS0tIGEvZG9jL29waGVscC4xLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLlRIIE9QSEVMUCAxICJAREFURUAiICJvcHJvZmlsZSBAVkVSU0lPTkAiCi0uVUMgNAotLlNIIE5BTUUKLW9waGVscCBcLSBsaXN0IE9Qcm9maWxlIGV2ZW50cwotLlNIIFNZTk9QU0lTCi0uYnIKLS5CIG9waGVscAotWwotLkkgb3B0aW9ucwotXQotW2V2ZW50IG5hbWVdCi0uU0ggREVTQ1JJUFRJT04KLQotQnkgZGVmYXVsdCwKLS5CIG9waGVscAotbGlzdHMgdGhlIGF2YWlsYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVyIG9wdGlvbnMuIElmIHlvdQotZ2l2ZSBpdCBhIHN5bWJvbGljIGV2ZW50IG5hbWUsIGl0IHdpbGwgcmV0dXJuIHRoZSBoYXJkd2FyZQotdmFsdWUgKGUuZy4gIm9waGVscCBEQVRBX01FTV9SRUZTIikuCi0KLS5TSCBPUFRJT05TCi0uVFAKLS5CSSAiLS1jcHUtdHlwZSAvIC1jIgotU2hvdyB0aGUgZXZlbnRzIGZvciB0aGUgZ2l2ZW4gbnVtZXJpY2FsIENQVSB0eXBlLgotLmJyCi0uVFAKLS5CSSAiLS1nZXQtY3B1LXR5cGUgLyAtciIKLVNob3cgdGhlIHN5bWJvbGljIENQVSBuYW1lLgotLmJyCi0uVFAKLS5CSSAiLS1oZWxwIC8gLT8gLyAtLXVzYWdlIgotU2hvdyBoZWxwIG1lc3NhZ2UuCi0uYnIKLS5UUAotLkJJICItLXZlcnNpb24gLyAtdiIKLVNob3cgdmVyc2lvbi4KLQotLlNIIEVOVklST05NRU5UCi1ObyBzcGVjaWFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcmVjb2duaXNlZCBieSBvcGhlbHAuCi0KLS5TSCBGSUxFUwotLlRQCi0uSSAkcHJlZml4L3NoYXJlL29wcm9maWxlLwotRXZlbnQgZGVzY3JpcHRpb24gZmlsZXMgdXNlZCBieSBPUHJvZmlsZS4KLS5UUAotLkkgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy8KLVRoZSBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHNhbXBsZSBmaWxlcy4KLQotLlNIIFZFUlNJT04KLS5UUAotVGhpcyBtYW4gcGFnZSBpcyBjdXJyZW50IGZvciBAUEFDS0FHRUAtQFZFUlNJT05ALgotCi0uU0ggU0VFIEFMU08KLS5CUiBAT1BfRE9DRElSQCwKLS5CUiBvcHJvZmlsZSgxKQpkaWZmIC0tZ2l0IGEvZG9jL29wcmVwb3J0LjEuaW4gYi9kb2Mvb3ByZXBvcnQuMS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM1ZDI2Yy4uMDAwMDAwMAotLS0gYS9kb2Mvb3ByZXBvcnQuMS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0uVEggT1BSRVBPUlQgMSAiQERBVEVAIiAib3Byb2ZpbGUgQFZFUlNJT05AIgotLlVDIDQKLS5TSCBOQU1FCi1vcHJlcG9ydCBcLSBwcm9kdWNlIHN5bWJvbCBvciBiaW5hcnkgaW1hZ2Ugc3VtbWFyaWVzCi0uU0ggU1lOT1BTSVMKLS5icgotLkIgb3ByZXBvcnQKLVsKLS5JIG9wdGlvbnMKLV0KLVtwcm9maWxlIHNwZWNpZmljYXRpb25dCi0uU0ggREVTQ1JJUFRJT04KLQotLkIgb3ByZXBvcnQKLW91dHB1dHMgYmluYXJ5IGltYWdlIHN1bW1hcmllcywgb3IgcGVyLXN5bWJvbCBkYXRhLCBmcm9tIE9Qcm9maWxlIHByb2ZpbGluZwotc2Vzc2lvbnMuCi0KLS5TSCBPUFRJT05TCi0uVFAKLS5CSSAiLS1hY2N1bXVsYXRlZCAvIC1hIgotQWNjdW11bGF0ZSBzYW1wbGUgYW5kIHBlcmNlbnRhZ2UgY291bnRzIGluIHRoZSBzeW1ib2wgbGlzdC4KLS5icgotLlRQCi0uQkkgIi0tZGVidWctaW5mbyAvIC1nIgotU2hvdyBzb3VyY2UgZmlsZSBhbmQgbGluZSBmb3IgZWFjaCBzeW1ib2wuCi0uYnIKLS5UUAotLkJJICItLWRlbWFuZ2xlIC8gLUQgbm9uZXxzbWFydHxub3JtYWwiCi1ub25lOiBubyBkZW1hbmdsaW5nLiBub3JtYWw6IHVzZSBkZWZhdWx0IGRlbWFuZ2xlciAoZGVmYXVsdCkgc21hcnQ6IHVzZQotcGF0dGVybi1tYXRjaGluZyB0byBtYWtlIEMrKyBzeW1ib2wgZGVtYW5nbGluZyBtb3JlIHJlYWRhYmxlLgotLmJyCi0uVFAKLS5CSSAiLS1jYWxsZ3JhcGggLyAtYyIKLVNob3cgY2FsbCBncmFwaCBpbmZvcm1hdGlvbiBpZiBhdmFpbGFibGUuCi0uYnIKLS5UUAotLkJJICItLWRldGFpbHMgLyAtZCIKLVNob3cgcGVyLWluc3RydWN0aW9uIGRldGFpbHMgZm9yIGFsbCBzZWxlY3RlZCBzeW1ib2xzLgotLmJyCi0uVFAKLS5CSSAiLS1leGNsdWRlLWRlcGVuZGVudCAvIC14IgotRG8gbm90IGluY2x1ZGUgYXBwbGljYXRpb24tc3BlY2lmaWMgaW1hZ2VzIGZvciBsaWJyYXJpZXMsIGtlcm5lbCBtb2R1bGVzCi1hbmQgdGhlIGtlcm5lbC4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcHJvZmlsZSBzZXNzaW9uCi11c2VkIC0tc2VwYXJhdGUuCi0uYnIKLS5UUAotLkJJICItLWV4Y2x1ZGUtc3ltYm9scyAvIC1lIFtzeW1ib2xzXSIKLUV4Y2x1ZGUgYWxsIHRoZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KLS5icgotLlRQCi0uQkkgIi0tZ2xvYmFsLXBlcmNlbnQgLyAtJSIKLU1ha2UgYWxsIHBlcmNlbnRhZ2VzIHJlbGF0aXZlIHRvIHRoZSB3aG9sZSBwcm9maWxlLgotLmJyCi0uVFAKLS5CSSAiLS1oZWxwIC8gLT8gLyAtLXVzYWdlIgotU2hvdyBoZWxwIG1lc3NhZ2UuCi0uYnIKLS5UUAotLkJJICItLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdIgotQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBwYXRocyB0byBzZWFyY2ggZm9yIGJpbmFyaWVzLgotVGhpcyBpcyBuZWVkZWQgdG8gZmluZCBtb2R1bGVzIGluIGtlcm5lbHMgMi42IGFuZCB1cHdhcmRzLgotLmJyCi0uVFAKLS5CSSAiLS1pbmNsdWRlLXN5bWJvbHMgLyAtaSBbc3ltYm9sc10iCi1Pbmx5IGluY2x1ZGUgc3ltYm9scyBpbiB0aGUgZ2l2ZW4gY29tbWEtc2VwYXJhdGVkIGxpc3QuCi0uYnIKLS5UUAotLkJJICItLWxvbmctZmlsZW5hbWVzIC8gLWwiCi1PdXRwdXQgZnVsbCBwYXRocyBpbnN0ZWFkIG9mIGJhc2VuYW1lcy4KLS5icgotLlRQCi0uQkkgIi0tbWVyZ2UgLyAtbSBbbGliLGNwdSx0aWQsdGdpZCx1bml0bWFzayxhbGxdIgotTWVyZ2UgYW55IHByb2ZpbGVzIHNlcGFyYXRlZCBpbiBhIC0tc2VwYXJhdGUgc2Vzc2lvbi4KLS5icgotLlRQCi0uQkkgIi0tbm8taGVhZGVyIgotRG9uJ3Qgb3V0cHV0IGEgaGVhZGVyIGRldGFpbGluZyBwcm9maWxpbmcgcGFyYW1ldGVycy4KLS5icgotLlRQCi0uQkkgIi0tb3V0cHV0LWZpbGUgLyAtbyBbZmlsZV0iCi1PdXRwdXQgdG8gdGhlIGdpdmVuIGZpbGUgaW5zdGVhZCBvZiBzdGRvdXQuCi0uYnIKLS5UUAotLkJJICItLXJldmVyc2Utc29ydCAvIC1yIgotUmV2ZXJzZSB0aGUgc29ydCBmcm9tIHRoZSBkZWZhdWx0LgotLmJyCi0uVFAKLS5CSSAiLS1zaG93LWFkZHJlc3MgLyAtdyIKLVNob3cgZWFjaCBzeW1ib2wncyBWTUEgYWRkcmVzcy4KLS5icgotLlRQCi0uQkkgIi0tc29ydCAvIC1zIFt2bWEsc2FtcGxlLHN5bWJvbCxkZWJ1ZyxpbWFnZV0iCi1Tb3J0IHRoZSBsaXN0IG9mIHN5bWJvbHMgYnksIHJlc3BlY3RpdmVseSwgc3ltYm9sIGFkZHJlc3MsCi1udW1iZXIgb2Ygc2FtcGxlcywgc3ltYm9sIG5hbWUsIGRlYnVnIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlciwKLWJpbmFyeSBpbWFnZSBmaWxlbmFtZS4KLS5icgotLlRQCi0uQkkgIi0tc3ltYm9scyAvIC1sIgotTGlzdCBwZXItc3ltYm9sIGluZm9ybWF0aW9uIGluc3RlYWQgb2YgYSBiaW5hcnkgaW1hZ2Ugc3VtbWFyeS4KLS5icgotLlRQCi0uQkkgIi0tdGhyZXNob2xkIC8gLXQgW3BlcmNlbnRhZ2VdIgotT25seSBvdXRwdXQgZGF0YSBmb3Igc3ltYm9scyB0aGF0IGhhdmUgbW9yZSB0aGFuIHRoZSBnaXZlbiBwZXJjZW50YWdlCi1vZiB0b3RhbCBzYW1wbGVzLgotLmJyCi0uVFAKLS5CSSAiLS12ZXJib3NlIC8gLVYgW29wdGlvbnNdIgotR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCi0uYnIKLS5UUAotLkJJICItLXZlcnNpb24gLyAtdiIKLVNob3cgdmVyc2lvbi4KLQotLlNIIEVOVklST05NRU5UCi1ObyBzcGVjaWFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcmVjb2duaXNlZCBieSBvcHJlcG9ydC4KLQotLlNIIEZJTEVTCi0uVFAKLS5JIC92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvCi1UaGUgbG9jYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBzYW1wbGUgZmlsZXMuCi0KLS5TSCBWRVJTSU9OCi0uVFAKLVRoaXMgbWFuIHBhZ2UgaXMgY3VycmVudCBmb3IgQFBBQ0tBR0VALUBWRVJTSU9OQC4KLQotLlNIIFNFRSBBTFNPCi0uQlIgQE9QX0RPQ0RJUkAsCi0uQlIgb3Byb2ZpbGUoMSkKZGlmZiAtLWdpdCBhL2RvYy9vcHJvZmlsZS4xIGIvZG9jL29wcm9maWxlLjEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZDczNjMuLjAwMDAwMDAKLS0tIGEvZG9jL29wcm9maWxlLjEKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLlRIIE9QUk9GSUxFIDEgIk1vbiAxOCBKdWx5IDIwMDUiICJvcHJvZmlsZSAwLjkuMSIKLS5VQyA0Ci0uU0ggTkFNRQotb3Byb2ZpbGUgXC0gYSBzeXN0ZW0td2lkZSBwcm9maWxlcgotLlNIIFNZTk9QU0lTCi0uYnIKLS5CIG9wY29udHJvbAotWwotLkkgb3B0aW9ucwotXQotLmJyCi0uQiBvcHJlcG9ydAotWwotLkkgb3B0aW9ucwotXQotWyBwcm9maWxlIHNwZWNpZmljYXRpb24gXQotLmJyCi0uQiBvcGFubm90YXRlCi1bCi0uSSBvcHRpb25zCi1dCi1bIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBdCi0uYnIKLS5CIG9wYXJjaGl2ZQotWwotLkkgb3B0aW9ucwotXQotWyBwcm9maWxlIHNwZWNpZmljYXRpb24gXQotLmJyCi0uQiBvcGdwcm9mCi1bCi0uSSBvcHRpb25zCi1dCi1bIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBdCi0uYnIKLS5TSCBERVNDUklQVElPTgotT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGZvciBzeXN0ZW1zIHJ1bm5pbmcgTGludXgKLTIuMiwgMi40LCBhbmQgMi42LiBQcm9maWxpbmcgcnVucyB0cmFuc3BhcmVudGx5IGluIHRoZSBiYWNrZ3JvdW5kIGFuZCBwcm9maWxlCi1kYXRhIGNhbiBiZSBjb2xsZWN0ZWQgYXQgYW55IHRpbWUuIE9Qcm9maWxlIG1ha2VzIHVzZSBvZiB0aGUgaGFyZHdhcmUKLXBlcmZvcm1hbmNlIGNvdW50ZXJzIHByb3ZpZGVkIG9uIEludGVsLCBBTUQsIGFuZCBvdGhlciBwcm9jZXNzb3JzLAotYW5kIHVzZXMgYSB0aW1lci1pbnRlcnJ1cHQgYmFzZWQgbWVjaGFuaXNtIG9uIENQVXMgd2l0aG91dCBjb3VudGVycy4KLU9Qcm9maWxlIGNhbiBwcm9maWxlIHRoZSB3aG9sZSBzeXN0ZW0gaW4gaGlnaCBkZXRhaWwuCi0uYnIKLUZvciBhIGdlbnRsZSBndWlkZSB0byB1c2luZyBPUHJvZmlsZSwgcGxlYXNlIHJlYWQgdGhlIEhUTUwgZG9jdW1lbnRhdGlvbgotbGlzdGVkIGluIFNFRSBBTFNPLgotLmJyCi0uU0ggT1BDT05UUk9MCi0uQiBvcGNvbnRyb2wKLWlzIHVzZWQgZm9yIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyB0aGUgT1Byb2ZpbGUgZGFlbW9uLCBhbmQgcHJvdmlkaW5nIHNldC11cAotcGFyYW1ldGVycy4KLS5TSCBPUFJFUE9SVAotLkIgb3ByZXBvcnQKLWdpdmVzIGltYWdlIGFuZCBzeW1ib2wtYmFzZWQgcHJvZmlsZSBzdW1tYXJpZXMgZm9yIHRoZSB3aG9sZSBzeXN0ZW0gb3IKLWEgc3Vic2V0IG9mIGJpbmFyeSBpbWFnZXMuCi0uU0ggT1BBTk5PVEFURQotLkIgb3Bhbm5vdGF0ZQotY2FuIHByb2R1Y2UgYW5ub3RhdGVkIHNvdXJjZSBvciBtaXhlZCBzb3VyY2UgYW5kIGFzc2VtYmx5IG91dHB1dC4KLS5TSCBPUEFSQ0hJVkUKLS5CIG9wYXJjaGl2ZQotcHJvZHVjZXMgb3Byb2ZpbGUgYXJjaGl2ZSBmb3Igb2ZmbGluZSBhbmFseXNpcwotLlNIIE9QR1BST0YKLS5CIG9wZ3Byb2YKLWNhbiBwcm9kdWNlIGEgZ3Byb2YtZm9ybWF0IHByb2ZpbGUgZm9yIGEgc2luZ2xlIGJpbmFyeS4KLQotLlNIIFBST0ZJTEUgU1BFQ0lGSUNBVElPTlMKLUFsbCBvZiB0aGUgcG9zdC1wcm9maWxpbmcgdG9vbHMgY2FuIHRha2UgcHJvZmlsZSBzcGVjaWZpY2F0aW9ucywKLXdoaWNoIGlzIHNvbWUgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLiBFbmNsb3NpbmcKLXBhcnQgb2YgYSBwcm9maWxlIHNwZWNpZmljYXRpb24gaW4gY3VybHkgYnJhY2VzIHsgfSBjYW4gYmUgdXNlZAotZm9yIGRpZmZlcmVudGlhbCBwcm9maWxlcyB3aXRoCi0uQiBvcHJlcG9ydAotLgotCi0uVFAKLS5CSSAic2Vzc2lvbjoic2Vzc2lvbmxpc3QKLUEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2Vzc2lvbiBuYW1lcyB0byByZXNvbHZlIGluLiBBYnNlbmNlIG9mIHRoaXMKLXRhZywgdW5saWtlIGFsbCBvdGhlcnMsIG1lYW5zICJ0aGUgY3VycmVudCBzZXNzaW9uIiwgZXF1aXZhbGVudCB0bwotc3BlY2lmeWluZyAic2Vzc2lvbjpjdXJyZW50Ii4KLS5icgotLlRQCi0uQkkgInNlc3Npb24tZXhjbHVkZToic2Vzc2lvbmxpc3QKLUEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2Vzc2lvbnMgdG8gZXhjbHVkZS4KLS5icgotLlRQCi0uQkkgImltYWdlOiJpbWFnZWxpc3QKLUEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgbmFtZXMgdG8gcmVzb2x2ZS4gRWFjaCBlbnRyeSBtYXkgYmUgcmVsYXRpdmUKLXBhdGgsIGdsb2Itc3R5bGUgbmFtZSwgb3IgZnVsbCBwYXRoLCBlLmcuCi1vcHJlcG9ydCAnaW1hZ2U6L3Vzci9iaW4vb3Byb2ZpbGVkLCpvcCosLi9vcHJvZnBwJwotLmJyCi0uVFAKLS5CSSAiaW1hZ2UtZXhjbHVkZToiaW1hZ2VsaXN0Ci1TYW1lIGFzIGltYWdlOiwgYnV0IHRoZSBtYXRjaGluZyBpbWFnZXMgYXJlIGV4Y2x1ZGVkLgotLmJyCi0uVFAKLS5CSSAibGliLWltYWdlOiJpbWFnZWxpc3QKLVNhbWUgYXMgaW1hZ2U6LCBidXQgb25seSBmb3IgaW1hZ2VzIHRoYXQgYXJlIGZvcgotYSBwYXJ0aWN1bGFyIHByaW1hcnkgYmluYXJ5IGltYWdlIChuYW1lbHksIGFuIGFwcGxpY2F0aW9uKS4gVGhpcyBvbmx5Ci1tYWtlcyBzZW5zZSB0byB1c2UgaWYgeW91J3JlIHVzaW5nIC0tc2VwYXJhdGUuCi1UaGlzIGluY2x1ZGVzIGtlcm5lbCBtb2R1bGVzIGFuZCB0aGUga2VybmVsIHdoZW4gdXNpbmcKLS0tc2VwYXJhdGU9a2VybmVsLgotLmJyCi0uVFAKLS5CSSAibGliLWltYWdlLWV4Y2x1ZGU6ImltYWdlbGlzdAotU2FtZSBhcyA8b3B0aW9uPmxpYi1pbWFnZTo8L29wdGlvbj4sIGJ1dCB0aGUgbWF0Y2hpbmcgaW1hZ2VzCi1hcmUgZXhjbHVkZWQuCi0uYnIKLS5UUAotLkJJICJldmVudDoiZXZlbnRuYW1lCi1UaGUgc3ltYm9saWMgZXZlbnQgbmFtZSB0byBtYXRjaCBvbiwgZS5nLiBldmVudDpEQVRBX01FTV9SRUZTLgotLmJyCi0uVFAKLS5CSSAiY291bnQ6ImV2ZW50Y291bnQKLVRoZSBldmVudCBjb3VudCB0byBtYXRjaCBvbiwgZS5nLiBldmVudDpEQVRBX01FTV9SRUZTIGNvdW50OjMwMDAwLgotLmJyCi0uVFAKLS5CSSAidW5pdC1tYXNrOiJtYXNrdmFsdWUKLVRoZSB1bml0IG1hc2sgdmFsdWUgb2YgdGhlIGV2ZW50IHRvIG1hdGNoIG9uLCBlLmcuIHVuaXQtbWFzazoxLgotLmJyCi0uVFAKLS5CSSAiY3B1OiJjcHVsaXN0Ci1Pbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gbnVtYmVyZWQgQ1BVIChzdGFydGluZyBmcm9tIHplcm8pLgotVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHVzaW5nIENQVSBwcm9maWxlIHNlcGFyYXRpb24uCi0uYnIKLS5UUAotLkJJICJ0Z2lkOiJwaWRsaXN0Ci1Pbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gdGFzayBncm91cHMuIFVubGVzcyBzb21lIHByb2dyYW0gaXMKLXVzaW5nIHRocmVhZHMsIHRoZSB0YXNrIGdyb3VwIElEIG9mIGEgcHJvY2VzcyBpcyB0aGUgc2FtZSBhcyBpdHMgcHJvY2VzcwotSUQuIFRoaXMgb3B0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBQT1NJWCBub3Rpb24gb2YgYSB0aHJlYWQgZ3JvdXAuIFRoaXMKLWlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgcGVyLXByb2Nlc3MgcHJvZmlsZSBzZXBhcmF0aW9uLgotLmJyCi0uVFAKLS5CSSAidGlkOiJ0aWRsaXN0Ci1Pbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gdGhyZWFkcy4gV2hlbiB1c2luZyByZWNlbnQgdGhyZWFkCi1saWJyYXJpZXMsIGFsbCB0aHJlYWRzIGluIGEgcHJvY2VzcyBzaGFyZSB0aGUgc2FtZSB0YXNrIGdyb3VwIElELCBidXQKLWhhdmUgZGlmZmVyZW50IHRocmVhZCBJRHMuIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIGluIGNvbWJpbmF0aW9uIHdpdGgKLXRnaWQ6IHRvIHJlc3RyaWN0IHRoZSByZXN1bHRzIHRvIHBhcnRpY3VsYXIgdGhyZWFkcyB3aXRoaW4gYSBwcm9jZXNzLgotVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHVzaW5nIHBlci1wcm9jZXNzIHByb2ZpbGUgc2VwYXJhdGlvbi4KLQotLlNIIEVOVklST05NRU5UCi1ObyBzcGVjaWFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcmVjb2duaXNlZCBieSBvcHJvZmlsZS4KLQotLlNIIEZJTEVTCi0uVFAKLS5JICRIT01FLy5vcHJvZmlsZS8KLUNvbmZpZ3VyYXRpb24gZmlsZXMKLS5UUAotLkkgL3Jvb3QvLm9wcm9maWxlL2RhZW1vbnJjCi1Db25maWd1cmF0aW9uIGZpbGUgZm9yIG9wY29udHJvbAotLlRQCi0uSSAkcHJlZml4L3NoYXJlL29wcm9maWxlLwotRXZlbnQgZGVzY3JpcHRpb24gZmlsZXMgdXNlZCBieSBPUHJvZmlsZS4KLS5UUAotLkkgL3Zhci9saWIvb3Byb2ZpbGUvb3Byb2ZpbGVkLmxvZwotVGhlIHVzZXItc3BhY2UgZGFlbW9uIGxvZ2ZpbGUuCi0uVFAKLS5JIC92YXIvbGliL29wcm9maWxlL29wZGV2LCAvdmFyL2xpYi9vcHJvZmlsZS9vcGhhc2htYXBkZXYsIC92YXIvbGliL29wcm9maWxlL29wbm90ZWRldgotVGhlIGRldmljZSBmaWxlcyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBMaW51eCAyLjQga2VybmVsIG1vZHVsZS4gCi0uVFAKLS5JIC9kZXYvb3Byb2ZpbGUKLVRoZSBkZXZpY2UgZmlsZXN5c3RlbSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBMaW51eCAyLjYga2VybmVsIG1vZHVsZS4gCi0uVFAKLS5JIC92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvCi1UaGUgbG9jYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBzYW1wbGUgZmlsZXMuCi0KLS5TSCBWRVJTSU9OCi0uVFAKLVRoaXMgbWFuIHBhZ2UgaXMgY3VycmVudCBmb3Igb3Byb2ZpbGUtMC45LjEuCi0KLS5TSCBTRUUgQUxTTwotLkJSIC91c3IvbG9jYWwvb3Byb2ZpbGUvc2hhcmUvZG9jL29wcm9maWxlLywKLS5CUiBvcGNvbnRyb2woMSksCi0uQlIgb3ByZXBvcnQoMSksCi0uQlIgb3Bhbm5vdGF0ZSgxKSwKLS5CUiBvcGFyY2hpdmUoMSksCi0uQlIgb3BncHJvZigxKSwKLS5CUiBncHJvZigxKSwKLS5CUiByZWFkcHJvZmlsZSgxKSwKLS5CUiBDUFUgdmVuZG9yIGFyY2hpdGVjdHVyZSBtYW51YWxzCi0KLS5TSCBDT1BZUklHSFQKLW9wcm9maWxlIGlzIENvcHlyaWdodCAoQykgMTk5OC0yMDA0IFVuaXZlcnNpdHkgb2YgTWFuY2hlc3RlciwgVUssIEpvaG4gTGV2b24sCi1hbmQgb3RoZXJzLgotT1Byb2ZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsCi1vciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotLlNIIEFVVEhPUlMKLUpvaG4gTGV2b24gPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPiBpcyB0aGUgcHJpbWFyeSBhdXRob3IuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbgotZm9yIG90aGVyIGNvbnRyaWJ1dG9ycy4KZGlmZiAtLWdpdCBhL2RvYy9vcHJvZmlsZS4xLmluIGIvZG9jL29wcm9maWxlLjEuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZTk0YTkuLjAwMDAwMDAKLS0tIGEvZG9jL29wcm9maWxlLjEuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLlRIIE9QUk9GSUxFIDEgIkBEQVRFQCIgIm9wcm9maWxlIEBWRVJTSU9OQCIKLS5VQyA0Ci0uU0ggTkFNRQotb3Byb2ZpbGUgXC0gYSBzeXN0ZW0td2lkZSBwcm9maWxlcgotLlNIIFNZTk9QU0lTCi0uYnIKLS5CIG9wY29udHJvbAotWwotLkkgb3B0aW9ucwotXQotLmJyCi0uQiBvcHJlcG9ydAotWwotLkkgb3B0aW9ucwotXQotWyBwcm9maWxlIHNwZWNpZmljYXRpb24gXQotLmJyCi0uQiBvcGFubm90YXRlCi1bCi0uSSBvcHRpb25zCi1dCi1bIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBdCi0uYnIKLS5CIG9wYXJjaGl2ZQotWwotLkkgb3B0aW9ucwotXQotWyBwcm9maWxlIHNwZWNpZmljYXRpb24gXQotLmJyCi0uQiBvcGdwcm9mCi1bCi0uSSBvcHRpb25zCi1dCi1bIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBdCi0uYnIKLS5TSCBERVNDUklQVElPTgotT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGZvciBzeXN0ZW1zIHJ1bm5pbmcgTGludXgKLTIuMiwgMi40LCBhbmQgMi42LiBQcm9maWxpbmcgcnVucyB0cmFuc3BhcmVudGx5IGluIHRoZSBiYWNrZ3JvdW5kIGFuZCBwcm9maWxlCi1kYXRhIGNhbiBiZSBjb2xsZWN0ZWQgYXQgYW55IHRpbWUuIE9Qcm9maWxlIG1ha2VzIHVzZSBvZiB0aGUgaGFyZHdhcmUKLXBlcmZvcm1hbmNlIGNvdW50ZXJzIHByb3ZpZGVkIG9uIEludGVsLCBBTUQsIGFuZCBvdGhlciBwcm9jZXNzb3JzLAotYW5kIHVzZXMgYSB0aW1lci1pbnRlcnJ1cHQgYmFzZWQgbWVjaGFuaXNtIG9uIENQVXMgd2l0aG91dCBjb3VudGVycy4KLU9Qcm9maWxlIGNhbiBwcm9maWxlIHRoZSB3aG9sZSBzeXN0ZW0gaW4gaGlnaCBkZXRhaWwuCi0uYnIKLUZvciBhIGdlbnRsZSBndWlkZSB0byB1c2luZyBPUHJvZmlsZSwgcGxlYXNlIHJlYWQgdGhlIEhUTUwgZG9jdW1lbnRhdGlvbgotbGlzdGVkIGluIFNFRSBBTFNPLgotLmJyCi0uU0ggT1BDT05UUk9MCi0uQiBvcGNvbnRyb2wKLWlzIHVzZWQgZm9yIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyB0aGUgT1Byb2ZpbGUgZGFlbW9uLCBhbmQgcHJvdmlkaW5nIHNldC11cAotcGFyYW1ldGVycy4KLS5TSCBPUFJFUE9SVAotLkIgb3ByZXBvcnQKLWdpdmVzIGltYWdlIGFuZCBzeW1ib2wtYmFzZWQgcHJvZmlsZSBzdW1tYXJpZXMgZm9yIHRoZSB3aG9sZSBzeXN0ZW0gb3IKLWEgc3Vic2V0IG9mIGJpbmFyeSBpbWFnZXMuCi0uU0ggT1BBTk5PVEFURQotLkIgb3Bhbm5vdGF0ZQotY2FuIHByb2R1Y2UgYW5ub3RhdGVkIHNvdXJjZSBvciBtaXhlZCBzb3VyY2UgYW5kIGFzc2VtYmx5IG91dHB1dC4KLS5TSCBPUEFSQ0hJVkUKLS5CIG9wYXJjaGl2ZQotcHJvZHVjZXMgb3Byb2ZpbGUgYXJjaGl2ZSBmb3Igb2ZmbGluZSBhbmFseXNpcwotLlNIIE9QR1BST0YKLS5CIG9wZ3Byb2YKLWNhbiBwcm9kdWNlIGEgZ3Byb2YtZm9ybWF0IHByb2ZpbGUgZm9yIGEgc2luZ2xlIGJpbmFyeS4KLQotLlNIIFBST0ZJTEUgU1BFQ0lGSUNBVElPTlMKLUFsbCBvZiB0aGUgcG9zdC1wcm9maWxpbmcgdG9vbHMgY2FuIHRha2UgcHJvZmlsZSBzcGVjaWZpY2F0aW9ucywKLXdoaWNoIGlzIHNvbWUgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLiBFbmNsb3NpbmcKLXBhcnQgb2YgYSBwcm9maWxlIHNwZWNpZmljYXRpb24gaW4gY3VybHkgYnJhY2VzIHsgfSBjYW4gYmUgdXNlZAotZm9yIGRpZmZlcmVudGlhbCBwcm9maWxlcyB3aXRoCi0uQiBvcHJlcG9ydAotLgotCi0uVFAKLS5CSSAic2Vzc2lvbjoic2Vzc2lvbmxpc3QKLUEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2Vzc2lvbiBuYW1lcyB0byByZXNvbHZlIGluLiBBYnNlbmNlIG9mIHRoaXMKLXRhZywgdW5saWtlIGFsbCBvdGhlcnMsIG1lYW5zICJ0aGUgY3VycmVudCBzZXNzaW9uIiwgZXF1aXZhbGVudCB0bwotc3BlY2lmeWluZyAic2Vzc2lvbjpjdXJyZW50Ii4KLS5icgotLlRQCi0uQkkgInNlc3Npb24tZXhjbHVkZToic2Vzc2lvbmxpc3QKLUEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2Vzc2lvbnMgdG8gZXhjbHVkZS4KLS5icgotLlRQCi0uQkkgImltYWdlOiJpbWFnZWxpc3QKLUEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgbmFtZXMgdG8gcmVzb2x2ZS4gRWFjaCBlbnRyeSBtYXkgYmUgcmVsYXRpdmUKLXBhdGgsIGdsb2Itc3R5bGUgbmFtZSwgb3IgZnVsbCBwYXRoLCBlLmcuCi1vcHJlcG9ydCAnaW1hZ2U6L3Vzci9iaW4vb3Byb2ZpbGVkLCpvcCosLi9vcHJvZnBwJwotLmJyCi0uVFAKLS5CSSAiaW1hZ2UtZXhjbHVkZToiaW1hZ2VsaXN0Ci1TYW1lIGFzIGltYWdlOiwgYnV0IHRoZSBtYXRjaGluZyBpbWFnZXMgYXJlIGV4Y2x1ZGVkLgotLmJyCi0uVFAKLS5CSSAibGliLWltYWdlOiJpbWFnZWxpc3QKLVNhbWUgYXMgaW1hZ2U6LCBidXQgb25seSBmb3IgaW1hZ2VzIHRoYXQgYXJlIGZvcgotYSBwYXJ0aWN1bGFyIHByaW1hcnkgYmluYXJ5IGltYWdlIChuYW1lbHksIGFuIGFwcGxpY2F0aW9uKS4gVGhpcyBvbmx5Ci1tYWtlcyBzZW5zZSB0byB1c2UgaWYgeW91J3JlIHVzaW5nIC0tc2VwYXJhdGUuCi1UaGlzIGluY2x1ZGVzIGtlcm5lbCBtb2R1bGVzIGFuZCB0aGUga2VybmVsIHdoZW4gdXNpbmcKLS0tc2VwYXJhdGU9a2VybmVsLgotLmJyCi0uVFAKLS5CSSAibGliLWltYWdlLWV4Y2x1ZGU6ImltYWdlbGlzdAotU2FtZSBhcyA8b3B0aW9uPmxpYi1pbWFnZTo8L29wdGlvbj4sIGJ1dCB0aGUgbWF0Y2hpbmcgaW1hZ2VzCi1hcmUgZXhjbHVkZWQuCi0uYnIKLS5UUAotLkJJICJldmVudDoiZXZlbnRuYW1lCi1UaGUgc3ltYm9saWMgZXZlbnQgbmFtZSB0byBtYXRjaCBvbiwgZS5nLiBldmVudDpEQVRBX01FTV9SRUZTLgotLmJyCi0uVFAKLS5CSSAiY291bnQ6ImV2ZW50Y291bnQKLVRoZSBldmVudCBjb3VudCB0byBtYXRjaCBvbiwgZS5nLiBldmVudDpEQVRBX01FTV9SRUZTIGNvdW50OjMwMDAwLgotLmJyCi0uVFAKLS5CSSAidW5pdC1tYXNrOiJtYXNrdmFsdWUKLVRoZSB1bml0IG1hc2sgdmFsdWUgb2YgdGhlIGV2ZW50IHRvIG1hdGNoIG9uLCBlLmcuIHVuaXQtbWFzazoxLgotLmJyCi0uVFAKLS5CSSAiY3B1OiJjcHVsaXN0Ci1Pbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gbnVtYmVyZWQgQ1BVIChzdGFydGluZyBmcm9tIHplcm8pLgotVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHVzaW5nIENQVSBwcm9maWxlIHNlcGFyYXRpb24uCi0uYnIKLS5UUAotLkJJICJ0Z2lkOiJwaWRsaXN0Ci1Pbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gdGFzayBncm91cHMuIFVubGVzcyBzb21lIHByb2dyYW0gaXMKLXVzaW5nIHRocmVhZHMsIHRoZSB0YXNrIGdyb3VwIElEIG9mIGEgcHJvY2VzcyBpcyB0aGUgc2FtZSBhcyBpdHMgcHJvY2VzcwotSUQuIFRoaXMgb3B0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBQT1NJWCBub3Rpb24gb2YgYSB0aHJlYWQgZ3JvdXAuIFRoaXMKLWlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgcGVyLXByb2Nlc3MgcHJvZmlsZSBzZXBhcmF0aW9uLgotLmJyCi0uVFAKLS5CSSAidGlkOiJ0aWRsaXN0Ci1Pbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gdGhyZWFkcy4gV2hlbiB1c2luZyByZWNlbnQgdGhyZWFkCi1saWJyYXJpZXMsIGFsbCB0aHJlYWRzIGluIGEgcHJvY2VzcyBzaGFyZSB0aGUgc2FtZSB0YXNrIGdyb3VwIElELCBidXQKLWhhdmUgZGlmZmVyZW50IHRocmVhZCBJRHMuIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIGluIGNvbWJpbmF0aW9uIHdpdGgKLXRnaWQ6IHRvIHJlc3RyaWN0IHRoZSByZXN1bHRzIHRvIHBhcnRpY3VsYXIgdGhyZWFkcyB3aXRoaW4gYSBwcm9jZXNzLgotVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHVzaW5nIHBlci1wcm9jZXNzIHByb2ZpbGUgc2VwYXJhdGlvbi4KLQotLlNIIEVOVklST05NRU5UCi1ObyBzcGVjaWFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcmVjb2duaXNlZCBieSBvcHJvZmlsZS4KLQotLlNIIEZJTEVTCi0uVFAKLS5JICRIT01FLy5vcHJvZmlsZS8KLUNvbmZpZ3VyYXRpb24gZmlsZXMKLS5UUAotLkkgL3Jvb3QvLm9wcm9maWxlL2RhZW1vbnJjCi1Db25maWd1cmF0aW9uIGZpbGUgZm9yIG9wY29udHJvbAotLlRQCi0uSSAkcHJlZml4L3NoYXJlL29wcm9maWxlLwotRXZlbnQgZGVzY3JpcHRpb24gZmlsZXMgdXNlZCBieSBPUHJvZmlsZS4KLS5UUAotLkkgL3Zhci9saWIvb3Byb2ZpbGUvb3Byb2ZpbGVkLmxvZwotVGhlIHVzZXItc3BhY2UgZGFlbW9uIGxvZ2ZpbGUuCi0uVFAKLS5JIC92YXIvbGliL29wcm9maWxlL29wZGV2LCAvdmFyL2xpYi9vcHJvZmlsZS9vcGhhc2htYXBkZXYsIC92YXIvbGliL29wcm9maWxlL29wbm90ZWRldgotVGhlIGRldmljZSBmaWxlcyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBMaW51eCAyLjQga2VybmVsIG1vZHVsZS4gCi0uVFAKLS5JIC9kZXYvb3Byb2ZpbGUKLVRoZSBkZXZpY2UgZmlsZXN5c3RlbSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBMaW51eCAyLjYga2VybmVsIG1vZHVsZS4gCi0uVFAKLS5JIC92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvCi1UaGUgbG9jYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBzYW1wbGUgZmlsZXMuCi0KLS5TSCBWRVJTSU9OCi0uVFAKLVRoaXMgbWFuIHBhZ2UgaXMgY3VycmVudCBmb3IgQFBBQ0tBR0VALUBWRVJTSU9OQC4KLQotLlNIIFNFRSBBTFNPCi0uQlIgQE9QX0RPQ0RJUkAsCi0uQlIgb3Bjb250cm9sKDEpLAotLkJSIG9wcmVwb3J0KDEpLAotLkJSIG9wYW5ub3RhdGUoMSksCi0uQlIgb3BhcmNoaXZlKDEpLAotLkJSIG9wZ3Byb2YoMSksCi0uQlIgZ3Byb2YoMSksCi0uQlIgcmVhZHByb2ZpbGUoMSksCi0uQlIgQ1BVIHZlbmRvciBhcmNoaXRlY3R1cmUgbWFudWFscwotCi0uU0ggQ09QWVJJR0hUCi1vcHJvZmlsZSBpcyBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNCBVbml2ZXJzaXR5IG9mIE1hbmNoZXN0ZXIsIFVLLCBKb2huIExldm9uLAotYW5kIG90aGVycy4KLU9Qcm9maWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLAotb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS5TSCBBVVRIT1JTCi1Kb2huIExldm9uIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4gaXMgdGhlIHByaW1hcnkgYXV0aG9yLiBTZWUgdGhlIGRvY3VtZW50YXRpb24KLWZvciBvdGhlciBjb250cmlidXRvcnMuCmRpZmYgLS1naXQgYS9kb2Mvb3Byb2ZpbGUuaHRtbCBiL2RvYy9vcHJvZmlsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2NmZDdlLi4wMDAwMDAwCi0tLSBhL2RvYy9vcHJvZmlsZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDM5MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci0gIDxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci0gICAgPHRpdGxlPk9Qcm9maWxlIG1hbnVhbDwvdGl0bGU+Ci0gICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS42OC4xIiAvPgotICA8L2hlYWQ+Ci0gIDxib2R5PgotICAgIDxkaXYgY2xhc3M9ImJvb2siIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgPGRpdj4KLSAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgPGgxIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Im9wcm9maWxlLWd1aWRlIj48L2E+T1Byb2ZpbGUgbWFudWFsPC9oMT4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXV0aG9yZ3JvdXAiPgotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdXRob3IiPgotICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iYXV0aG9yIj48c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5Kb2huPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+TGV2b248L3NwYW4+PC9oMz4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZmZpbGlhdGlvbiI+Ci0gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZGRyZXNzIj4KLSAgICAgICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImVtYWlsIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmxldm9uQG1vdmVtZW50YXJpYW4ub3JnIj5sZXZvbkBtb3ZlbWVudGFyaWFuLm9yZzwvYT4mZ3Q7PC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgPHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0IKkgMjAwMC0yMDA0IFZpY3RvcmlhIFVuaXZlcnNpdHkgb2YgTWFuY2hlc3RlciwgSm9obiBMZXZvbiBhbmQgb3RoZXJzPC9wPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGhyIC8+Ci0gICAgICA8L2Rpdj4KLSAgICAgIDxkaXYgY2xhc3M9InRvYyI+Ci0gICAgICAgIDxwPgotICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgotICAgICAgICA8L3A+Ci0gICAgICAgIDxkbD4KLSAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+Ci0gICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnRyb2R1Y3Rpb24iPjEuIEludHJvZHVjdGlvbjwvYT4KLSAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICA8L2R0PgotICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjYXBwbGljYXRpb25zIj4xLiBBcHBsaWNhdGlvbnMgb2YgT1Byb2ZpbGU8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNyZXF1aXJlbWVudHMiPjIuIFN5c3RlbSByZXF1aXJlbWVudHM8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNyZXNvdXJjZXMiPjMuIEludGVybmV0IHJlc291cmNlczwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2luc3RhbGwiPjQuIEluc3RhbGxhdGlvbjwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3VuaW5zdGFsbCI+NS4gVW5pbnN0YWxsaW5nIE9Qcm9maWxlPC9hPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+Ci0gICAgICAgICAgICAgIDxhIGhyZWY9IiNvdmVydmlldyI+Mi4gT3ZlcnZpZXc8L2E+Ci0gICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgPC9kdD4KLSAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dldHRpbmctc3RhcnRlZCI+MS4gR2V0dGluZyBzdGFydGVkPC9hPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjdG9vbHMtb3ZlcnZpZXciPjIuIFRvb2xzIHN1bW1hcnk8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICA8L2RkPgotICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGFwdGVyIj4KLSAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvbnRyb2xsaW5nIj4zLiBDb250cm9sbGluZyB0aGUgcHJvZmlsZXI8L2E+Ci0gICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgPC9kdD4KLSAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvbnRyb2xsaW5nLWRhZW1vbiI+MS4gVXNpbmcgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPjwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wY29udHJvbGV4YW1wbGVzIj4xLjEuIEV4YW1wbGVzPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNldmVudHNwZWMiPjEuMi4gU3BlY2lmeWluZyBwZXJmb3JtYW5jZSBjb3VudGVyIGV2ZW50czwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcHJvZmlsZS1ndWkiPjIuIFVzaW5nIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcm9mX3N0YXJ0PC9zdHJvbmc+PC9zcGFuPjwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2RldGFpbGVkLXBhcmFtZXRlcnMiPjMuIENvbmZpZ3VyYXRpb24gZGV0YWlsczwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hhcmR3YXJlLWNvdW50ZXJzIj4zLjEuIEhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNydGMiPjMuMi4gT1Byb2ZpbGUgaW4gUlRDIG1vZGU8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3RpbWVyIj4zLjMuIE9Qcm9maWxlIGluIHRpbWVyIGludGVycnVwdCBtb2RlPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwNCI+My40LiBQZW50aXVtIDQgc3VwcG9ydDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaWE2NCI+My41LiBJbnRlbCBJdGFuaXVtIDIgc3VwcG9ydDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHBjNjQiPjMuNi4gUG93ZXJQQzY0IHN1cHBvcnQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI21pc3VzZSI+My43LiBEYW5nZXJvdXMgY291bnRlciBzZXR0aW5nczwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICA8L2RkPgotICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGFwdGVyIj4KLSAgICAgICAgICAgICAgPGEgaHJlZj0iI3Jlc3VsdHMiPjQuIE9idGFpbmluZyByZXN1bHRzPC9hPgotICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgPGRkPgotICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwcm9maWxlLXNwZWMiPjEuIFByb2ZpbGUgc3BlY2lmaWNhdGlvbnM8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwcm9maWxlLXNwZWMtZXhhbXBsZXMiPjEuMS4gRXhhbXBsZXM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2ZpbGUtc3BlYy1kZXRhaWxzIj4xLjIuIFByb2ZpbGUgc3BlY2lmaWNhdGlvbiBwYXJhbWV0ZXJzPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpZDI2ODI5MzYiPjEuMy4gTG9jYXRpbmcgYW5kIG1hbmFnaW5nIGJpbmFyeSBpbWFnZXM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI25vLXJlc3VsdHMiPjEuNC4gV2hhdCB0byBkbyB3aGVuIHlvdSBkb24ndCBnZXQgYW55IHJlc3VsdHM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQiPjIuIEltYWdlIHN1bW1hcmllcyBhbmQgc3ltYm9sIHN1bW1hcmllcyAoPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+KTwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wcmVwb3J0LW1lcmdpbmciPjIuMS4gTWVyZ2luZyBzZXBhcmF0ZSBwcm9maWxlczwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtY29tcGFyaXNvbiI+Mi4yLiBTaWRlLWJ5LXNpZGUgbXVsdGlwbGUgcmVzdWx0czwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtY2FsbGdyYXBoIj4yLjMuIENhbGxncmFwaCBvdXRwdXQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wcmVwb3J0LWRpZmYiPjIuNC4gRGlmZmVyZW50aWFsIHByb2ZpbGVzIHdpdGggPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+PC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcHJlcG9ydC1hbm9uIj4yLjUuIEFub255bW91cyBleGVjdXRhYmxlIG1hcHBpbmdzPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcHJlcG9ydC1vcHRpb25zIj4yLjYuIE9wdGlvbnMgZm9yIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGFubm90YXRlIj4zLiBPdXRwdXR0aW5nIGFubm90YXRlZCBzb3VyY2UgKDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wYW5ub3RhdGU8L3N0cm9uZz48L3NwYW4+KTwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wYW5ub3RhdGUtZmluZGluZy1zb3VyY2UiPjMuMS4gTG9jYXRpbmcgc291cmNlIGZpbGVzPC9hPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGFubm90YXRlLWRldGFpbHMiPjMuMi4gVXNhZ2Ugb2YgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BncHJvZiI+NC4gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+Z3Byb2Y8L3N0cm9uZz48L3NwYW4+LWNvbXBhdGlibGUgb3V0cHV0ICg8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGdwcm9mPC9zdHJvbmc+PC9zcGFuPik8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGdwcm9mLWRldGFpbHMiPjQuMS4gVXNhZ2Ugb2YgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BncHJvZjwvc3Ryb25nPjwvc3Bhbj48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BhcmNoaXZlIj41LiBBcmNoaXZpbmcgbWVhc3VyZW1lbnRzICg8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGFyY2hpdmU8L3N0cm9uZz48L3NwYW4+KTwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wYXJjaGl2ZS1kZXRhaWxzIj41LjEuIFVzYWdlIG9mIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wYXJjaGl2ZTwvc3Ryb25nPjwvc3Bhbj48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+Ci0gICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnRlcnByZXRpbmciPjUuIEludGVycHJldGluZyBwcm9maWxpbmcgcmVzdWx0czwvYT4KLSAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICA8L2R0PgotICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaXJxLWxhdGVuY3kiPjEuIFByb2ZpbGluZyBpbnRlcnJ1cHQgbGF0ZW5jeTwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2tlcm5lbC1wcm9maWxpbmciPjIuIEtlcm5lbCBwcm9maWxpbmc8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpcnEtbWFza2luZyI+Mi4xLiBJbnRlcnJ1cHQgbWFza2luZzwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaWRsZSI+Mi4yLiBJZGxlIHRpbWU8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2tlcm5lbC1tb2R1bGVzIj4yLjMuIFByb2ZpbGluZyBrZXJuZWwgbW9kdWxlczwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnRlcnByZXRpbmctY2FsbGdyYXBoIj4zLiBJbnRlcnByZXRpbmcgY2FsbC1ncmFwaCBwcm9maWxlczwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2RlYnVnLWluZm8iPjQuIEluYWNjdXJhY2llcyBpbiBhbm5vdGF0ZWQgc291cmNlPC9hPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZWZmZWN0LW9mLW9wdGltaXphdGlvbnMiPjQuMS4gU2lkZSBlZmZlY3RzIG9mIG9wdGltaXphdGlvbnM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2xvZ3VlcyI+NC4yLiBQcm9sb2d1ZXMgYW5kIGVwaWxvZ3VlczwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaW5saW5lZC1mdW5jdGlvbiI+NC4zLiBJbmxpbmVkIGZ1bmN0aW9uczwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjd3JvbmctbGluZW5yLWluZm8iPjQuNC4gSW5hY2N1cmFjeSBpbiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzeW1ib2wtd2l0aG91dC1kZWJ1Zy1pbmZvIj41LiBBc3NlbWJseSBmdW5jdGlvbnM8L2E+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNoaWRkZW4tY29zdCI+Ni4gT3RoZXIgZGlzY3JlcGFuY2llczwvYT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8L2RsPgotICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgPGR0PgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgotICAgICAgICAgICAgICA8YSBocmVmPSIjYWNrIj42LiBBY2tub3dsZWRnbWVudHM8L2E+Ci0gICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgPC9kdD4KLSAgICAgICAgPC9kbD4KLSAgICAgIDwvZGl2PgotICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJpbnRyb2R1Y3Rpb24iPjwvYT5DaGFwdGVyoDEuoEludHJvZHVjdGlvbjwvaDI+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InRvYyI+Ci0gICAgICAgICAgPHA+Ci0gICAgICAgICAgICA8Yj5UYWJsZSBvZiBDb250ZW50czwvYj4KLSAgICAgICAgICA8L3A+Ci0gICAgICAgICAgPGRsPgotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNhcHBsaWNhdGlvbnMiPjEuIEFwcGxpY2F0aW9ucyBvZiBPUHJvZmlsZTwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjcmVxdWlyZW1lbnRzIj4yLiBTeXN0ZW0gcmVxdWlyZW1lbnRzPC9hPgotICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNyZXNvdXJjZXMiPjMuIEludGVybmV0IHJlc291cmNlczwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjaW5zdGFsbCI+NC4gSW5zdGFsbGF0aW9uPC9hPgotICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN1bmluc3RhbGwiPjUuIFVuaW5zdGFsbGluZyBPUHJvZmlsZTwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICA8L2RsPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHA+Ci1UaGlzIG1hbnVhbCBhcHBsaWVzIHRvIE9Qcm9maWxlIHZlcnNpb24gMC45LjFjdnMuCi1PUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gZm9yIExpbnV4IDIuMi8yLjQvMi42IHN5c3RlbXMgb24gYSBudW1iZXIgb2YgYXJjaGl0ZWN0dXJlcy4gSXQgaXMgY2FwYWJsZSBvZiBwcm9maWxpbmcKLWFsbCBwYXJ0cyBvZiBhIHJ1bm5pbmcgc3lzdGVtLCBmcm9tIHRoZSBrZXJuZWwgKGluY2x1ZGluZyBtb2R1bGVzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMpIHRvIHNoYXJlZCBsaWJyYXJpZXMKLXRvIGJpbmFyaWVzLiBJdCBydW5zIHRyYW5zcGFyZW50bHkgaW4gdGhlIGJhY2tncm91bmQgY29sbGVjdGluZyBpbmZvcm1hdGlvbiBhdCBhIGxvdyBvdmVyaGVhZC4gVGhlc2UKLWZlYXR1cmVzIG1ha2UgaXQgaWRlYWwgZm9yIHByb2ZpbGluZyBlbnRpcmUgc3lzdGVtcyB0byBkZXRlcm1pbmUgYm90dGxlIG5lY2tzIGluIHJlYWwtd29ybGQgc3lzdGVtcy4KLTwvcD4KLSAgICAgICAgPHA+Ci1NYW55IENQVXMgcHJvdmlkZSAicGVyZm9ybWFuY2UgY291bnRlcnMiLCBoYXJkd2FyZSByZWdpc3RlcnMgdGhhdCBjYW4gY291bnQgImV2ZW50cyI7IGZvciBleGFtcGxlLAotY2FjaGUgbWlzc2VzLCBvciBDUFUgY3ljbGVzLiBPUHJvZmlsZSBwcm92aWRlcyBwcm9maWxlcyBvZiBjb2RlIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgdGhlc2Ugb2NjdXJyaW5nIGV2ZW50czoKLXJlcGVhdGVkbHksIGV2ZXJ5IHRpbWUgYSBjZXJ0YWluIChjb25maWd1cmFibGUpIG51bWJlciBvZiBldmVudHMgaGFzIG9jY3VycmVkLCB0aGUgUEMgdmFsdWUgaXMgcmVjb3JkZWQuCi1UaGlzIGluZm9ybWF0aW9uIGlzIGFnZ3JlZ2F0ZWQgaW50byBwcm9maWxlcyBmb3IgZWFjaCBiaW5hcnkgaW1hZ2UuPC9wPgotICAgICAgICA8cD4KLVNvbWUgaGFyZHdhcmUgc2V0dXBzIGRvIG5vdCBhbGxvdyBPUHJvZmlsZSB0byB1c2UgcGVyZm9ybWFuY2UgY291bnRlcnM6IGluIHRoZXNlIGNhc2VzLCBubwotZXZlbnRzIGFyZSBhdmFpbGFibGUsIGFuZCBPUHJvZmlsZSBvcGVyYXRlcyBpbiB0aW1lci9SVEMgbW9kZSwgYXMgZGVzY3JpYmVkIGluIGxhdGVyIGNoYXB0ZXJzLgotPC9wPgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iYXBwbGljYXRpb25zIj48L2E+MS6gQXBwbGljYXRpb25zIG9mIE9Qcm9maWxlPC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLU9Qcm9maWxlIGlzIHVzZWZ1bCBpbiBhIG51bWJlciBvZiBzaXR1YXRpb25zLiBZb3UgbWlnaHQgd2FudCB0byB1c2UgT1Byb2ZpbGUgd2hlbiB5b3UgOgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+Ci0gICAgICAgICAgICA8dWwgdHlwZT0iZGlzYyI+Ci0gICAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgICA8cD5uZWVkIGxvdyBvdmVyaGVhZDwvcD4KLSAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgIDxwPmNhbm5vdCB1c2UgaGlnaGx5IGludHJ1c2l2ZSBwcm9maWxpbmcgbWV0aG9kczwvcD4KLSAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgIDxwPm5lZWQgdG8gcHJvZmlsZSBpbnRlcnJ1cHQgaGFuZGxlcnM8L3A+Ci0gICAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgICA8cD5uZWVkIHRvIHByb2ZpbGUgYW4gYXBwbGljYXRpb24gYW5kIGl0cyBzaGFyZWQgbGlicmFyaWVzPC9wPgotICAgICAgICAgICAgICA8L2xpPgotICAgICAgICAgICAgICA8bGk+Ci0gICAgICAgICAgICAgICAgPHA+bmVlZCB0byBjYXB0dXJlIHRoZSBwZXJmb3JtYW5jZSBiZWhhdmlvdXIgb2YgZW50aXJlIHN5c3RlbTwvcD4KLSAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgIDxwPndhbnQgdG8gZXhhbWluZSBoYXJkd2FyZSBlZmZlY3RzIHN1Y2ggYXMgY2FjaGUgbWlzc2VzPC9wPgotICAgICAgICAgICAgICA8L2xpPgotICAgICAgICAgICAgICA8bGk+Ci0gICAgICAgICAgICAgICAgPHA+d2FudCBkZXRhaWxlZCBzb3VyY2UgYW5ub3RhdGlvbjwvcD4KLSAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgIDxwPndhbnQgaW5zdHJ1Y3Rpb24tbGV2ZWwgcHJvZmlsZXM8L3A+Ci0gICAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgICA8cD53YW50IGNhbGwtZ3JhcGggcHJvZmlsZXM8L3A+Ci0gICAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICA8L3VsPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotT1Byb2ZpbGUgaXMgbm90IGEgcGFuYWNlYS4gT1Byb2ZpbGUgbWlnaHQgbm90IGJlIGEgY29tcGxldGUgc29sdXRpb24gd2hlbiB5b3UgOgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+Ci0gICAgICAgICAgICA8dWwgdHlwZT0iZGlzYyI+Ci0gICAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgICA8cD5yZXF1aXJlIGNhbGwgZ3JhcGggcHJvZmlsZXMgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gMi42L3g4NjwvcD4KLSAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgIDxwPmRvbid0IGhhdmUgcm9vdCBwZXJtaXNzaW9uczwvcD4KLSAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgIDxwPnJlcXVpcmUgMTAwJSBpbnN0cnVjdGlvbi1hY2N1cmF0ZSBwcm9maWxlczwvcD4KLSAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgIDxwPm5lZWQgZnVuY3Rpb24gY2FsbCBjb3VudHMgb3IgYW4gaW50ZXJzdGl0aWFsIHByb2ZpbGluZyBBUEk8L3A+Ci0gICAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgICA8cD5jYW5ub3QgdG9sZXJhdGUgYW55IGRpc3R1cmJhbmNlIHRvIHRoZSBzeXN0ZW0gd2hhdHNvZXZlcjwvcD4KLSAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgIDxwPm5lZWQgdG8gcHJvZmlsZSBpbnRlcnByZXRlZCBvciBkeW5hbWljYWxseSBjb21waWxlZCBjb2RlIHN1Y2ggYXMgSmF2YSBvciBQeXRob248L3A+Ci0gICAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICA8L3VsPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9InJlcXVpcmVtZW50cyI+PC9hPjIuoFN5c3RlbSByZXF1aXJlbWVudHM8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci0gICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+TGludXgga2VybmVsIDIuMi8yLjQvMi42PC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCQlPUHJvZmlsZSB1c2VzIGEga2VybmVsIG1vZHVsZSB0aGF0IGNhbiBiZSBjb21waWxlZCBmb3IKLQkJCTIuMi4xMSBvciBsYXRlciBhbmQgMi40LiBWZXJzaW9ucyAyLjQuMTAgb3IgYWJvdmUgYXJlIHJlY29tbWVuZGVkLCBhbmQgcmVxdWlyZWQgaWYgeW91IHVzZSB0aGUKLQkJCWJvb3QtdGltZSBrZXJuZWwgb3B0aW9uIDxjb2RlIGNsYXNzPSJvcHRpb24iPm5vc21wPC9jb2RlPi4gIDIuNiBrZXJuZWxzIGFyZSBzdXBwb3J0ZWQgd2l0aCB0aGUgaW4ta2VybmVsCi0JCQlPUHJvZmlsZSBkcml2ZXIuIE5vdGUgdGhhdCBvbmx5IDMyLWJpdCB4ODYgYW5kIElBNjQgYXJlIHN1cHBvcnRlZCBvbiAyLjIvMi40IGtlcm5lbHMuCi0KLQkJCTwvcD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJCVBQQzY0IHByb2Nlc3NvcnMgKFBvd2VyNC9Qb3dlcjUvUFBDOTcwKSByZXF1aXJlIGEgcmVjZW50ICgmZ3Q7IDIuNi41KSBrZXJuZWwgd2l0aCB0aGUgbGluZSAKLQkJCTxjb2RlIGNsYXNzPSJjb25zdGFudCI+I2RlZmluZSBQVl85NzA8L2NvZGU+IHByZXNlbnQgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5pbmNsdWRlL2FzbS1wcGM2NC9wcm9jZXNzb3IuaDwvY29kZT4uCi0KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPm1vZHV0aWxzIDIuNC42IG9yIGFib3ZlPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCQlZb3Ugc2hvdWxkIGhhdmUgaW5zdGFsbGVkIG1vZHV0aWxzIDIuNC42IG9yIGhpZ2hlciAoaW4gZmFjdCBlYXJsaWVyIHZlcnNpb25zIHdvcmsgd2VsbCBpbiBhbG1vc3QgYWxsCi0JCQljYXNlcykuCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5TdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCQlGb3IgSW50ZWwgSUEzMiwgYSBDUFUgd2l0aCBlaXRoZXIgYSBQNiBnZW5lcmF0aW9uIG9yIFBlbnRpdW0gNCBjb3JlIGlzCi0JCQlyZXF1aXJlZC4gSW4gbWFya2V0aW5nIHRlcm1zIHRoaXMgdHJhbnNsYXRlcyB0byBhbnl0aGluZwotCQkJYmV0d2VlbiBhbiBJbnRlbCBQZW50aXVtIFBybyAobm90IFBlbnRpdW0gQ2xhc3NpY3MpIGFuZAotCQkJYSBQZW50aXVtIDQgLyBYZW9uLCBpbmNsdWRpbmcgYWxsIENlbGVyb25zLiAgVGhlIEFNRAotCQkJQXRobG9uLCBhbmQgRHVyb24gQ1BVcyBhcmUgYWxzbyBzdXBwb3J0ZWQuICBPdGhlciBJQTMyCi0JCQlDUFUgdHlwZXMgb25seSBzdXBwb3J0IHRoZSBSVEMgbW9kZSBvZiBPUHJvZmlsZTsgcGxlYXNlCi0JCQlzZWUgbGF0ZXIgaW4gdGhpcyBtYW51YWwgZm9yIGRldGFpbHMuICBIeXBlci10aHJlYWRlZCBQZW50aXVtIElWcwotCQkJYXJlIG5vdCBzdXBwb3J0ZWQgaW4gMi40LiBGb3IgMi40IGtlcm5lbHMsIHRoZSBJbnRlbAotCQkJSUEtNjQgQ1BVcyBhcmUgYWxzbyBzdXBwb3J0ZWQuIEZvciAyLjYga2VybmVscywgdGhlcmUgaXMgYWRkaXRpb25hbGx5Ci0JCQlzdXBwb3J0IGZvciBBbHBoYSBwcm9jZXNzb3JzLCBNSVBTLCBBUk0sIHg4Ni02NCwgc3BhcmM2NCwgcHBjNjQsIGFuZCwKLQkJCWluIHRpbWVyIG1vZGUsIFBBLVJJU0MgYW5kIHMzOTAuCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5Vbmlwcm9jZXNzb3Igb3IgU01QPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCQlTTVAgbWFjaGluZXMgYXJlIGZ1bGx5IHN1cHBvcnRlZC4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPlJlcXVpcmVkIGxpYnJhcmllczwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQkJVGhlc2UgbGlicmFyaWVzIGFyZSByZXF1aXJlZCA6IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+cG9wdDwvY29kZT4sIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+YmZkPC9jb2RlPiwKLQkJCTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+bGliZXJ0eTwvY29kZT4gKGRlYmlhbiB1c2VyczogbGliaWJlcnR5IGlzIHByb3ZpZGVkIGluIGJpbnV0aWxzLWRldiBwYWNrYWdlKSwgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kbDwvY29kZT4sCi0JCQlwbHVzIHRoZSBzdGFuZGFyZCBDKysgbGlicmFyaWVzLgotCQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+QmFzaCB2ZXJzaW9uIDI8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJCVRoZSA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+IHNjcmlwdCByZXF1aXJlcyBiYXNoIHZlcnNpb24gMiBhdCBsZWFzdCB0byBiZSBpbnN0YWxsZWQKLQkJCWFzIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2Jpbi9iYXNoPC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9iaW4vYmFzaDI8L2NvZGU+Ci0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5PUHJvZmlsZSBHVUk8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJCVRoZSB1c2Ugb2YgdGhlIEdVSSB0byBzdGFydCB0aGUgcHJvZmlsZXIgcmVxdWlyZXMgdGhlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+UXQgMjwvY29kZT4gbGlicmFyeS4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5RdCAzPC9jb2RlPiBzaG91bGQKLQkJCWFsc28gd29yay4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjcm9ueW0iPkVMRjwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJCVByb2JhYmx5IG5vdCB0b28gc3RyZW51b3VzIGEgcmVxdWlyZW1lbnQsIGJ1dCBvbGRlciA8c3BhbiBjbGFzcz0iYWNyb255bSI+QS5PVVQ8L3NwYW4+IGJpbmFyaWVzL2xpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPksmYW1wO1IgY29kaW5nIHN0eWxlPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCQlPSywgc28gaXQncyBub3QgcmVhbGx5IGEgcmVxdWlyZW1lbnQsIGJ1dCBJIHdpc2ggaXQgd2FzLi4uCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0icmVzb3VyY2VzIj48L2E+My6gSW50ZXJuZXQgcmVzb3VyY2VzPC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPldlYiBwYWdlPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCQlUaGVyZSBpcyBhIHdlYiBwYWdlICh3aGljaCB5b3UgbWF5IGJlIHJlYWRpbmcgbm93KSBhdAotCQkJPGEgaHJlZj0iaHR0cDovL29wcm9maWxlLnNmLm5ldC8iPmh0dHA6Ly9vcHJvZmlsZS5zZi5uZXQvPC9hPi4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPkRvd25sb2FkPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCQlZb3UgY2FuIGRvd25sb2FkIGEgc291cmNlIHRhcmJhbGwgb3IgZ2V0IGFub255bW91cyBDVlMgYXQgdGhlIHNvdXJjZWZvcmdlIHBhZ2UsCi0JCQk8YSBocmVmPSJodHRwOi8vc2YubmV0L3Byb2plY3RzL29wcm9maWxlLyI+aHR0cDovL3NmLm5ldC9wcm9qZWN0cy9vcHJvZmlsZS88L2E+LgotCQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+TWFpbGluZyBsaXN0PC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCQlUaGVyZSBpcyBhIGxvdy10cmFmZmljIE9Qcm9maWxlLXNwZWNpZmljIG1haWxpbmcgbGlzdCwgZGV0YWlscyBhdAotCQkJPGEgaHJlZj0iaHR0cDovL3NmLm5ldC9tYWlsLz9ncm91cF9pZD0xNjE5MSI+aHR0cDovL3NmLm5ldC9tYWlsLz9ncm91cF9pZD0xNjE5MTwvYT4uCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5CdWcgdHJhY2tlcjwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQkJVGhlcmUgaXMgYSBidWcgdHJhY2tlciBmb3IgT1Byb2ZpbGUgYXQgU291cmNlRm9yZ2UsCi0JCQk8YSBocmVmPSJodHRwOi8vc2YubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE2MTkxJmFtcDthdGlkPTExNjE5MSI+aHR0cDovL3NmLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNjE5MSZhbXA7YXRpZD0xMTYxOTE8L2E+LgotCQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+SVJDIGNoYW5uZWw8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJCVNldmVyYWwgT1Byb2ZpbGUgZGV2ZWxvcGVycyBhbmQgdXNlcnMgc29tZXRpbWVzIGhhbmcgb3V0IG9uIGNoYW5uZWwgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+I29wcm9maWxlPC9zdHJvbmc+PC9zcGFuPgotCQkJb24gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mcmVlbm9kZS5pbmZvIj5mcmVlbm9kZTwvYT4gbmV0d29yay4gCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iaW5zdGFsbCI+PC9hPjQuoEluc3RhbGxhdGlvbjwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1GaXJzdCB5b3UgbmVlZCB0byBidWlsZCBPUHJvZmlsZSBhbmQgaW5zdGFsbCBpdC4gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+Li9jb25maWd1cmU8L3N0cm9uZz48L3NwYW4+LCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5tYWtlPC9zdHJvbmc+PC9zcGFuPiwgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+bWFrZSBpbnN0YWxsPC9zdHJvbmc+PC9zcGFuPgotaXMgb2Z0ZW4gYWxsIHlvdSBuZWVkLCBidXQgbm90ZSB0aGVzZSBhcmd1bWVudHMgdG8gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+Li9jb25maWd1cmU8L3N0cm9uZz48L3NwYW4+IDoKLTwvcD4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS13aXRoLWxpbnV4PC9jb2RlPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQkJVXNlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgeW91IHdpc2gKLQkJCXRvIGNvbXBpbGUgYWdhaW5zdC4gVGhlIGtlcm5lbCBtb2R1bGUgaXMgYnVpbHQgYWdhaW5zdCB0aGlzIHNvdXJjZSBhbmQKLQkJCXdpbGwgb25seSB3b3JrIHdpdGggYSBydW5uaW5nIGtlcm5lbCBidWlsdCBmcm9tIHRoZSBzYW1lIHNvdXJjZSB3aXRoCi0JCQlleGFjdCBzYW1lIG9wdGlvbnMsIHNvIGl0IGlzIGltcG9ydGFudCB5b3Ugc3BlY2lmeSB0aGlzIG9wdGlvbiBpZiB5b3UgbmVlZAotCQkJdG8uCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0td2l0aC1rZXJuZWwtc3VwcG9ydDwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJCVVzZSB0aGlzIG9wdGlvbiB3aXRoIDIuNiBhbmQgYWJvdmUga2VybmVscyB0byBpbmRpY2F0ZSB0aGUgCi0JICAgIAkJa2VybmVsIHByb3ZpZGVzIHRoZSBPUHJvZmlsZSBkZXZpY2UgZHJpdmVyLgotCQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXdpdGgtcXQtZGlyL2luY2x1ZGVzL2xpYnJhcmllczwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJCVNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIFF0IGhlYWRlcnMgYW5kIGxpYnJhcmllcy4gSXQgZGVmYXVsdHMgdG8gc2VhcmNoaW5nIGluCi0JCQk8Y29kZSBjbGFzcz0iY29uc3RhbnQiPiRRVERJUjwvY29kZT4gaWYgdGhlc2UgYXJlIG5vdCBzcGVjaWZpZWQuCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxhIGlkPSJlbmFibGUtYWJpIj48L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1lbmFibGUtYWJpPC9jb2RlPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQkJQWN0aXZhdGUgY29kZSB3aXRoaW4gdGhlIE9Qcm9maWxlIHNhbXBsZSBjb2xsZWN0aW9uIGRhZW1vbgotCQkJPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Byb2ZpbGVkPC9zdHJvbmc+PC9zcGFuPiB3aGljaCByZWNvcmRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5hcnkKLQkJCWZvcm1hdCBvZiBzYW1wbGUgZmlsZXMgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vdmFyL2xpYi9vcHJvZmlsZS9hYmk8L2NvZGU+LCB0bwotCQkJcGVybWl0IHRoZWlyIHRyYW5zcG9ydCBiZXR3ZWVuIGhvc3RzIHVzaW5nIHRoZQotCQkJPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BpbXBvcnQ8L3N0cm9uZz48L3NwYW4+IHV0aWxpdHkuIFNlZSA8YSBocmVmPSIjb3BpbXBvcnQiPjxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+b3BpbXBvcnQ8L2NvZGU+PC9hPi4gVGhpcyBvcHRpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBlbWJlZGRlZAotCQkJc3lzdGVtcyBvciByZW1vdGUgYW5hbHlzaXMgb2YgcHJvZHVjdGlvbiBtYWNoaW5lczsgaWYgeW91IHdpbGwgYmUKLQkJCXBlcmZvcm1pbmcgYWxsIHNhbXBsZSBhbmFseXNpcyBvbiB0aGUgc2FtZSBtYWNoaW5lIGFzIHlvdSBhcmUgcHJvZmlsaW5nLAotCQkJaXQgaXMgc2FmZSB0byBvbWl0IHRoaXMgb3B0aW9uLgotCQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8YSBpZD0iZGlzYWJsZS13ZXJyb3IiPjwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRpc2FibGUtd2Vycm9yPC9jb2RlPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQkJRGV2ZWxvcG1lbnQgdmVyc2lvbnMgb2YgT1Byb2ZpbGUgYnVpbGQgYnkKLQkJCWRlZmF1bHQgd2l0aCA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tV2Vycm9yPC9jb2RlPi4gVGhpcyBvcHRpb24gdHVybnMKLQkJCTxjb2RlIGNsYXNzPSJvcHRpb24iPi1XZXJyb3I8L2NvZGU+IG9mZi4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPGEgaWQ9ImRpc2FibGUtb3B0aW1pemF0aW9uIj48L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kaXNhYmxlLW9wdGltaXphdGlvbjwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJCURpc2FibGUgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi1PMjwvY29kZT4gY29tcGlsZXIgZmxhZwotCQkJKHVzZWZ1bCBpZiB5b3UgZGlzY292ZXIgYW4gT1Byb2ZpbGUgYnVnIGFuZCB3YW50IHRvIGdpdmUgYSB1c2VmdWwKLQkJCWJhY2stdHJhY2UgZXRjLikKLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLVlvdSdsbCBuZWVkIHRvIGhhdmUgYSBjb25maWd1cmVkIGtlcm5lbCBzb3VyY2UgZm9yIHRoZSBjdXJyZW50IGtlcm5lbAotdG8gYnVpbGQgdGhlIG1vZHVsZSBmb3IgMi40IGtlcm5lbHMuICBTaW5jZSBhbGwgZGlzdHJpYnV0aW9ucyBwcm92aWRlIGRpZmZlcmVudCBrZXJuZWxzIGl0J3MgdW5saWtlbHkgdGhlIHJ1bm5pbmcga2VybmVsIG1hdGNoIHRoZSBjb25maWd1cmVkIHNvdXJjZQoteW91IGluc3RhbGxlZC4gVGhlIHNhZmVzdCB3YXkgaXMgdG8gcmVjb21waWxlIHlvdXIgb3duIGtlcm5lbCwgcnVuIGl0IGFuZCBjb21waWxlIG9wcm9maWxlLiBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgaWYgeW91IGhhdmUgYQotdW5pcHJvY2Vzc29yIG1hY2hpbmUsIHlvdSBlbmFibGUgdGhlIGxvY2FsIEFQSUMgLyBJT19BUElDIHN1cHBvcnQgZm9yCi15b3VyIGtlcm5lbCAodGhpcyBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgZm9yIFNNUCBrZXJuZWxzKS4gV2l0aCBtYW55IEJJT1MsIGtlcm5lbCAmZ3Q7PSAyLjYuOSBhbmQgVVAga2VybmVsIGl0J3Mgbm90IHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSBsb2NhbCBBUElDIHlvdSBtdXN0IGFsc28gdHVybiBpdCBvbiBleHBsaWNpdGVseSBhdCBib290IHRpbWUgYnkgcHJvdmlkaW5nICJsYXBpYyIgb3B0aW9uIHRvIHRoZSBrZXJuZWwuIE9uCi1tYWNoaW5lcyB3aXRoIHBvd2VyIG1hbmFnZW1lbnQsIHN1Y2ggYXMgbGFwdG9wcywgdGhlIHBvd2VyIG1hbmFnZW1lbnQKLW11c3QgYmUgdHVybmVkIG9mZiB3aGVuIHVzaW5nIE9Qcm9maWxlIHdpdGggMi40IGtlcm5lbHMuIFRoZSBwb3dlciBtYW5hZ2VtZW50IHNvZnR3YXJlCi1pbiB0aGUgQklPUyBjYW5ub3QgaGFuZGxlIHRoZSBub24tbWFza2FibGUgaW50ZXJydXB0cyAoTk1JcykgdXNlZCBieQotT1Byb2ZpbGUgZm9yIGRhdGEgY29sbGVjdGlvbi4gSWYgeW91IHVzZSB0aGUgTk1JIHdhdGNoZG9nLCBiZSBhd2FyZSB0aGF0Ci10aGUgd2F0Y2hkb2cgaXMgZGlzYWJsZWQgd2hlbiBwcm9maWxpbmcgc3RhcnRzLCBhbmQgbm90IHJlLWVuYWJsZWQgdW50aWwgdGhlCi1PUHJvZmlsZSBtb2R1bGUgaXMgcmVtb3ZlZCAob3IsIGluIDIuNiwgd2hlbiBPUHJvZmlsZSBpcyBub3QgcnVubmluZykuIElmIHlvdSBjb21waWxlIE9Qcm9maWxlIGZvcgotYSAyLjIga2VybmVsIHlvdSBtdXN0IGJlIHJvb3QgdG8gY29tcGlsZSB0aGUgbW9kdWxlLiBJZiB5b3UgYXJlIHVzaW5nCi0yLjYga2VybmVscyBvciBoaWdoZXIsIHlvdSBkbyBub3QgbmVlZCBrZXJuZWwgc291cmNlLCBhcyBsb25nIGFzIHRoZQotT1Byb2ZpbGUgZHJpdmVyIGlzIGVuYWJsZWQ7IGFkZGl0aW9uYWxseSwgeW91IHNob3VsZCBub3QgbmVlZCB0byBkaXNhYmxlCi1wb3dlciBtYW5hZ2VtZW50LgotPC9wPgotICAgICAgICAgIDxwPgotUGxlYXNlIG5vdGUgdGhhdCB5b3UgbXVzdCBzYXZlIG9yIGhhdmUgYXZhaWxhYmxlIHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnZtbGludXg8L2NvZGU+IGZpbGUKLWdlbmVyYXRlZCBkdXJpbmcgYSBrZXJuZWwgY29tcGlsZSwgYXMgT1Byb2ZpbGUgbmVlZHMgaXQgKHlvdSBjYW4gdXNlCi08Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vLXZtbGludXg8L2NvZGU+LCBidXQgdGhpcyB3aWxsIHByZXZlbnQga2VybmVsIHByb2ZpbGluZykuCi08L3A+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0idW5pbnN0YWxsIj48L2E+NS6gVW5pbnN0YWxsaW5nIE9Qcm9maWxlPC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLVlvdSBtdXN0IGhhdmUgdGhlIHNvdXJjZSB0cmVlIGF2YWlsYWJsZSB0byB1bmluc3RhbGwgT1Byb2ZpbGU7IGEgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+bWFrZSB1bmluc3RhbGw8L3N0cm9uZz48L3NwYW4+IHdpbGwKLXJlbW92ZSBhbGwgaW5zdGFsbGVkIGZpbGVzIGV4Y2VwdCB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgZGlyZWN0b3J5IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+fi8ub3Byb2ZpbGU8L2NvZGU+LgotPC9wPgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvZGl2PgotICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJvdmVydmlldyI+PC9hPkNoYXB0ZXKgMi6gT3ZlcnZpZXc8L2gyPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJ0b2MiPgotICAgICAgICAgIDxwPgotICAgICAgICAgICAgPGI+VGFibGUgb2YgQ29udGVudHM8L2I+Ci0gICAgICAgICAgPC9wPgotICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ2V0dGluZy1zdGFydGVkIj4xLiBHZXR0aW5nIHN0YXJ0ZWQ8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Rvb2xzLW92ZXJ2aWV3Ij4yLiBUb29scyBzdW1tYXJ5PC9hPgotICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L2R0PgotICAgICAgICAgIDwvZGw+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iZ2V0dGluZy1zdGFydGVkIj48L2E+MS6gR2V0dGluZyBzdGFydGVkPC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLUJlZm9yZSB5b3UgY2FuIHVzZSBPUHJvZmlsZSwgeW91IG11c3Qgc2V0IGl0IHVwLiBUaGUgbWluaW11bSBzZXR1cCByZXF1aXJlZCBmb3IgdGhpcwotaXMgdG8gdGVsbCBPUHJvZmlsZSB3aGVyZSB0aGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj52bWxpbnV4PC9jb2RlPiBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi1ydW5uaW5nIGtlcm5lbCBpcywgZm9yIGV4YW1wbGUgOgotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPm9wY29udHJvbCAtLXZtbGludXg9L2Jvb3Qvdm1saW51eC1gdW5hbWUgLXJgPC9wcmU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHA+Ci1JZiB5b3UgZG9uJ3Qgd2FudCB0byBwcm9maWxlIHRoZSBrZXJuZWwgaXRzZWxmLAoteW91IGNhbiB0ZWxsIE9Qcm9maWxlIHlvdSBkb24ndCBoYXZlIGEgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj52bWxpbnV4PC9jb2RlPiBmaWxlIDoKLTwvcD4KLSAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj5vcGNvbnRyb2wgLS1uby12bWxpbnV4PC9wcmU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHA+Ci1Ob3cgd2UgYXJlIHJlYWR5IHRvIHN0YXJ0IHRoZSBkYWVtb24gKDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcm9maWxlZDwvc3Ryb25nPjwvc3Bhbj4pIHdoaWNoIGNvbGxlY3RzCi10aGUgcHJvZmlsZSBkYXRhIDoKLTwvcD4KLSAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj5vcGNvbnRyb2wgLS1zdGFydDwvcHJlPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDxwPgotV2hlbiBJIHdhbnQgdG8gc3RvcCBwcm9maWxpbmcsIEkgY2FuIGRvIHNvIHdpdGggOgotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPm9wY29udHJvbCAtLXNodXRkb3duPC9wcmU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHA+Ci1Ob3RlIHRoYXQgdW5saWtlIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPmdwcm9mPC9zdHJvbmc+PC9zcGFuPiwgbm8gaW5zdHJ1bWVudGF0aW9uICg8Y29kZSBjbGFzcz0ib3B0aW9uIj4tcGc8L2NvZGU+Ci1hbmQgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LWE8L2NvZGU+IG9wdGlvbnMgdG8gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zdHJvbmc+PC9zcGFuPikKLWlzIG5lY2Vzc2FyeS4KLTwvcD4KLSAgICAgICAgICA8cD4KLVBlcmlvZGljYWxseSAob3Igb24gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sIC0tc2h1dGRvd248L3N0cm9uZz48L3NwYW4+IG9yIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wY29udHJvbCAtLWR1bXA8L3N0cm9uZz48L3NwYW4+KQotdGhlIHByb2ZpbGUgZGF0YSBpcyB3cml0dGVuIG91dCBpbnRvIHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi92YXIvbGliL29wcm9maWxlL3NhbXBsZXM8L2NvZGU+IGRpcmVjdG9yeS4KLVRoZXNlIHByb2ZpbGUgZmlsZXMgY292ZXIgc2hhcmVkIGxpYnJhcmllcywgYXBwbGljYXRpb25zLCB0aGUga2VybmVsICh2bWxpbnV4KSwgYW5kIGtlcm5lbCBtb2R1bGVzLgotWW91IGNhbiBjbGVhciB0aGUgcHJvZmlsZSBkYXRhIChhdCBhbnkgdGltZSkgd2l0aCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2wgLS1yZXNldDwvc3Ryb25nPjwvc3Bhbj4uCi08L3A+Ci0gICAgICAgICAgPHA+Ci1Zb3UgY2FuIGdldCBzdW1tYXJpZXMgb2YgdGhpcyBkYXRhIGluIGEgbnVtYmVyIG9mIHdheXMgYXQgYW55IHRpbWUuIFRvIGdldCBhIHN1bW1hcnkgb2YKLWRhdGEgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtIGZvciBhbGwgb2YgdGhlc2UgcHJvZmlsZXMsIHlvdSBjYW4gZG8gOgotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPm9wcmVwb3J0PC9wcmU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHA+Ci1PciB0byBnZXQgYSBtb3JlIGRldGFpbGVkIHN1bW1hcnksIGZvciBhIHBhcnRpY3VsYXIgaW1hZ2UsIHlvdSBjYW4gZG8gc29tZXRoaW5nIGxpa2UgOgotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPm9wcmVwb3J0IC1sIC9ib290L3ZtbGludXgtYHVuYW1lIC1yYDwvcHJlPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDxwPgotVGhlcmUgYXJlIGFsc28gYSBudW1iZXIgb2Ygb3RoZXIgd2F5cyBvZiBwcmVzZW50aW5nIHRoZSBkYXRhLCBhcyBkZXNjcmliZWQgbGF0ZXIgaW4gdGhpcyBtYW51YWwuCi1Ob3RlIHRoYXQgT1Byb2ZpbGUgd2lsbCBjaG9vc2UgYSBkZWZhdWx0IHByb2ZpbGluZyBzZXR1cCBmb3IgeW91LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIKLW9mIG9wdGlvbnMgeW91IGNhbiBwYXNzIHRvIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wY29udHJvbDwvc3Ryb25nPjwvc3Bhbj4gaWYgeW91IG5lZWQgdG8gY2hhbmdlIHNvbWV0aGluZywKLWFsc28gZGV0YWlsZWQgbGF0ZXIuCi08L3A+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0idG9vbHMtb3ZlcnZpZXciPjwvYT4yLqBUb29scyBzdW1tYXJ5PC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLVRoaXMgc2VjdGlvbiBnaXZlcyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGUgT1Byb2ZpbGUgdXRpbGl0aWVzIGFuZCB0aGVpciBwdXJwb3NlLgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci0gICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9waGVscDwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJVGhpcyB1dGlsaXR5IGxpc3RzIHRoZSBhdmFpbGFibGUgZXZlbnRzIGFuZCBzaG9ydCBkZXNjcmlwdGlvbnMuCi0JPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5vcGNvbnRyb2w8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCVVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBPUHJvZmlsZSBkYXRhIGNvbGxlY3Rpb24sIGRpc2N1c3NlZCBpbiA8YSBocmVmPSIjY29udHJvbGxpbmciIHRpdGxlPSJDaGFwdGVyoDMuoENvbnRyb2xsaW5nIHRoZSBwcm9maWxlciI+Q2hhcHRlcqAzLCA8aT5Db250cm9sbGluZyB0aGUgcHJvZmlsZXI8L2k+PC9hPi4KLQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9wcmVwb3J0PC9jb2RlPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQlUaGlzIGlzIHRoZSBtYWluIHRvb2wgZm9yIHJldHJpZXZpbmcgdXNlZnVsIHByb2ZpbGUgZGF0YSwgZGVzY3JpYmVkIGluCi0JCTxhIGhyZWY9IiNvcHJlcG9ydCIgdGl0bGU9IjIuoEltYWdlIHN1bW1hcmllcyBhbmQgc3ltYm9sIHN1bW1hcmllcyAob3ByZXBvcnQpIj5TZWN0aW9uoDIsICYjODIyMDtJbWFnZSBzdW1tYXJpZXMgYW5kIHN5bWJvbCBzdW1tYXJpZXMgKDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPikmIzgyMjE7PC9hPi4KLQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9wYW5ub3RhdGU8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCVRoaXMgdXRpbGl0eSBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGFubm90YXRlZCBzb3VyY2UsIGFzc2VtYmx5IG9yIG1peGVkIHNvdXJjZS9hc3NlbWJseS4KLQkJU291cmNlIGxldmVsIGFubm90YXRpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgdGhlIGFwcGxpY2F0aW9uIHdhcyBjb21waWxlZCB3aXRoIAotCQlkZWJ1Z2dpbmcgc3ltYm9scy4gU2VlIDxhIGhyZWY9IiNvcGFubm90YXRlIiB0aXRsZT0iMy6gT3V0cHV0dGluZyBhbm5vdGF0ZWQgc291cmNlIChvcGFubm90YXRlKSI+U2VjdGlvbqAzLCAmIzgyMjA7T3V0cHV0dGluZyBhbm5vdGF0ZWQgc291cmNlICg8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGFubm90YXRlPC9zdHJvbmc+PC9zcGFuPikmIzgyMjE7PC9hPi4KLQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9wZ3Byb2Y8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCVRoaXMgdXRpbGl0eSBjYW4gb3V0cHV0IGdwcm9mLXN0eWxlIGRhdGEgZmlsZXMgZm9yIGEgYmluYXJ5LCBmb3IgdXNlIHdpdGgKLQkJPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+Z3Byb2YgLXA8L3N0cm9uZz48L3NwYW4+LiBTZWUgPGEgaHJlZj0iI29wZ3Byb2YiIHRpdGxlPSI0LqBncHJvZi1jb21wYXRpYmxlIG91dHB1dCAob3BncHJvZikiPlNlY3Rpb26gNCwgJiM4MjIwOzxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPmdwcm9mPC9zdHJvbmc+PC9zcGFuPi1jb21wYXRpYmxlIG91dHB1dCAoPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BncHJvZjwvc3Ryb25nPjwvc3Bhbj4pJiM4MjIxOzwvYT4uCi0JPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5vcGFyY2hpdmU8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCVRoaXMgdXRpbGl0eSBjYW4gYmUgdXNlZCB0byBjb2xsZWN0IGV4ZWN1dGFibGVzLCBkZWJ1Z2luZm8sCi0JCWFuZCBzYW1wbGUgZmlsZXMgYW5kIGNvcHkgdGhlIGZpbGVzIGludG8gYW4gYXJjaGl2ZS4KLQkJVGhlIGFyY2hpdmUgaXMgc2VsZi1jb250YWluZWQgYW5kIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyCi0JCW1hY2hpbmUgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuCi0JCVNlZSA8YSBocmVmPSIjb3BhcmNoaXZlIiB0aXRsZT0iNS6gQXJjaGl2aW5nIG1lYXN1cmVtZW50cyAob3BhcmNoaXZlKSI+U2VjdGlvbqA1LCAmIzgyMjA7QXJjaGl2aW5nIG1lYXN1cmVtZW50cyAoPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPikmIzgyMjE7PC9hPi4KLQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8YSBpZD0ib3BpbXBvcnQiPjwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9waW1wb3J0PC9jb2RlPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQlUaGlzIHV0aWxpdHkgY29udmVydHMgc2FtcGxlIGRhdGFiYXNlIGZpbGVzIGZyb20gYSBmb3JlaWduIGJpbmFyeSBmb3JtYXQgKGFiaSkgdG8KLQkJdGhlIG5hdGl2ZSBmb3JtYXQuIFRoaXMgaXMgdXNlZnVsIG9ubHkgd2hlbiBtb3Zpbmcgc2FtcGxlIGZpbGVzIGJldHdlZW4gaG9zdHMsCi0JCWZvciBhbmFseXNpcyBvbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB0aGUgb25lIHVzZWQgZm9yIGNvbGxlY3Rpb24uIFRoZSBhYmkgZm9ybWF0Ci0JCW9mIHRoZSBmaWxlIHRvIGJlIGltcG9ydGVkIGlzIGRlc2NyaWJlZCBpbiBhIHRleHQgZmlsZSBsb2NhdGVkIGluCi0JCTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Zhci9saWIvb3Byb2ZpbGUvYWJpPC9jb2RlPiwgaWYgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZW5hYmxlLWFiaTwvY29kZT4KLQkJY29uZmlndXJlLXRpbWUgb3B0aW9uIHdhcyBlbmFibGVkLiBGdXJ0aGVybW9yZSwgdGhlIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9waW1wb3J0PC9zdHJvbmc+PC9zcGFuPgotCQl0b29sIGlzIG5vdCBidWlsdCB1bmxlc3MgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1lbmFibGUtYWJpPC9jb2RlPiBpcyBnaXZlbi4gU2VlIDxhIGhyZWY9IiNlbmFibGUtYWJpIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS1hYmk8L2NvZGU+PC9hPi4KLQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICA8L2RsPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvZGl2PgotICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJjb250cm9sbGluZyI+PC9hPkNoYXB0ZXKgMy6gQ29udHJvbGxpbmcgdGhlIHByb2ZpbGVyPC9oMj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KLSAgICAgICAgICA8cD4KLSAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgotICAgICAgICAgIDwvcD4KLSAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvbnRyb2xsaW5nLWRhZW1vbiI+MS4gVXNpbmcgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPjwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGNvbnRyb2xleGFtcGxlcyI+MS4xLiBFeGFtcGxlczwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNldmVudHNwZWMiPjEuMi4gU3BlY2lmeWluZyBwZXJmb3JtYW5jZSBjb3VudGVyIGV2ZW50czwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3Byb2ZpbGUtZ3VpIj4yLiBVc2luZyA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJvZl9zdGFydDwvc3Ryb25nPjwvc3Bhbj48L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI2RldGFpbGVkLXBhcmFtZXRlcnMiPjMuIENvbmZpZ3VyYXRpb24gZGV0YWlsczwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNoYXJkd2FyZS1jb3VudGVycyI+My4xLiBIYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyczwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNydGMiPjMuMi4gT1Byb2ZpbGUgaW4gUlRDIG1vZGU8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjdGltZXIiPjMuMy4gT1Byb2ZpbGUgaW4gdGltZXIgaW50ZXJydXB0IG1vZGU8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcDQiPjMuNC4gUGVudGl1bSA0IHN1cHBvcnQ8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaWE2NCI+My41LiBJbnRlbCBJdGFuaXVtIDIgc3VwcG9ydDwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwcGM2NCI+My42LiBQb3dlclBDNjQgc3VwcG9ydDwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNtaXN1c2UiPjMuNy4gRGFuZ2Vyb3VzIGNvdW50ZXIgc2V0dGluZ3M8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgPC9kbD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJjb250cm9sbGluZy1kYWVtb24iPjwvYT4xLqBVc2luZyA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+PC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLUluIHRoaXMgc2VjdGlvbiB3ZSBkZXNjcmliZSB0aGUgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbCBvZiB0aGUgcHJvZmlsaW5nIHN5c3RlbQotd2l0aCBvcGNvbnRyb2wgaW4gbW9yZSBkZXB0aC4KLVRoZSA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+IHNjcmlwdCBoYXMgYSBkZWZhdWx0IHNldHVwLCBidXQgeW91Ci1jYW4gYWx0ZXIgdGhpcyB3aXRoIHRoZSBvcHRpb25zIGdpdmVuIGJlbG93LiBJbiBwYXJ0aWN1bGFyLAotaWYgeW91ciBoYXJkd2FyZSBzdXBwb3J0cyBwZXJmb3JtYW5jZSBjb3VudGVycywgeW91IGNhbiBjb25maWd1cmUgdGhlbS4KLVRoZXJlIGFyZSBhIG51bWJlciBvZiBjb3VudGVycyAoZm9yIGV4YW1wbGUsIGNvdW50ZXIgMCBhbmQgY291bnRlciAxCi1vbiB0aGUgUGVudGl1bSBJSUkpLiBFYWNoIG9mIHRoZXNlIGNvdW50ZXJzIGNhbiBiZSBwcm9ncmFtbWVkIHdpdGgKLWFuIGV2ZW50IHRvIGNvdW50LCBzdWNoIGFzIGNhY2hlIG1pc3NlcyBvciBNTVggb3BlcmF0aW9ucy4gVGhlIGV2ZW50Ci1jaG9zZW4gZm9yIGVhY2ggY291bnRlciBpcyByZWZsZWN0ZWQgaW4gdGhlIHByb2ZpbGUgZGF0YSBjb2xsZWN0ZWQKLWJ5IE9Qcm9maWxlOiBmdW5jdGlvbnMgYW5kIGJpbmFyaWVzIGF0IHRoZSB0b3Agb2YgdGhlIHByb2ZpbGVzIHJlZmxlY3QKLXRoYXQgbW9zdCBvZiB0aGUgY2hvc2VuIGV2ZW50cyBoYXBwZW5lZCB3aXRoaW4gdGhhdCBjb2RlLgotPC9wPgotICAgICAgICAgIDxwPgotQWRkaXRpb25hbGx5LCBlYWNoIGNvdW50ZXIgaGFzIGEgImNvdW50IiB2YWx1ZTogdGhpcyBjb3JyZXNwb25kcyB0byBob3cKLWRldGFpbGVkIHRoZSBwcm9maWxlIGlzLiBUaGUgbG93ZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSBmcmVxdWVudGx5IHByb2ZpbGUKLXNhbXBsZXMgYXJlIHRha2VuLiBBIGNvdW50ZXIgY2FuIGNob29zZSB0byBzYW1wbGUgb25seSBrZXJuZWwgY29kZSwgdXNlci1zcGFjZSBjb2RlLAotb3IgYm90aCAoYm90aCBpcyB0aGUgZGVmYXVsdCkuIEZpbmFsbHksIHNvbWUgZXZlbnRzIGhhdmUgYSAidW5pdCBtYXNrIgotLSB0aGlzIGlzIGEgdmFsdWUgdGhhdCBmdXJ0aGVyIHJlc3RyaWN0cyB0aGUgdHlwZXMgb2YgZXZlbnQgdGhhdCBhcmUgY291bnRlZC4gCi1UaGUgZXZlbnQgdHlwZXMgYW5kIHVuaXQgbWFza3MgZm9yIHlvdXIgQ1BVIGFyZSBsaXN0ZWQgYnkgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sCi0tLWxpc3QtZXZlbnRzPC9zdHJvbmc+PC9zcGFuPi4KLTwvcD4KLSAgICAgICAgICA8cD4KLVRoZSA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+IHNjcmlwdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGFjdGlvbnMgOgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci0gICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWluaXQ8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCUxvYWRzIHRoZSBPUHJvZmlsZSBtb2R1bGUgaWYgcmVxdWlyZWQgYW5kIG1ha2VzIHRoZSBPUHJvZmlsZSBkcml2ZXIKLQkJaW50ZXJmYWNlIGF2YWlsYWJsZS4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXR1cDwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJICAgIEZvbGxvd2VkIGJ5IGxpc3QgYXJndW1lbnRzIGZvciBwcm9maWxpbmcgc2V0IHVwLiBMaXN0IG9mIGFyZ3VtZW50cwotCQkgICAgc2F2ZWQgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vcm9vdC8ub3Byb2ZpbGUvZGFlbW9ucmM8L2NvZGU+LgotCQkgICAgR2l2aW5nIHRoaXMgb3B0aW9uIGlzIG5vdCBuZWNlc3Nhcnk7IHlvdSBjYW4ganVzdCBkaXJlY3RseSBwYXNzIG9uZQotCQkgICAgb2YgdGhlIHNldHVwIG9wdGlvbnMsIGUuZy4gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sIC0tbm8tdm1saW51eDwvc3Ryb25nPjwvc3Bhbj4uCi0JCSAgPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zdGF0dXM8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCVNob3cgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zdGFydC1kYWVtb248L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCSAgICBTdGFydCB0aGUgb3Byb2ZpbGUgZGFlbW9uIHdpdGhvdXQgc3RhcnRpbmcgYWN0dWFsIHByb2ZpbGluZy4gVGhlIHByb2ZpbGluZwotCQljYW4gdGhlbiBiZSBzdGFydGVkIHVzaW5nIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3RhcnQ8L2NvZGU+LiBUaGlzIGlzIHVzZWZ1bCBmb3IgYXZvaWRpbmcKLQkJbWVhc3VyaW5nIHRoZSBjb3N0IG9mIGRhZW1vbiBzdGFydHVwLCBhcyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXN0YXJ0PC9jb2RlPiBpcyBhIHNpbXBsZQotCQl3cml0ZSB0byBhIGZpbGUgaW4gb3Byb2ZpbGVmcy4gTm90IGF2YWlsYWJsZSBpbiAyLjIvMi40IGtlcm5lbHMuCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3RhcnQ8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCSAgICBTdGFydCBkYXRhIGNvbGxlY3Rpb24gd2l0aCBlaXRoZXIgYXJndW1lbnRzIHByb3ZpZGVkIGJ5IDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2V0dXA8L2NvZGU+Ci0JCW9yIGluZm9ybWF0aW9uIHNhdmVkIGluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Jvb3QvLm9wcm9maWxlL2RhZW1vbnJjPC9jb2RlPi4gU3BlY2lmeWluZwotCQl0aGUgYWRkaXRpb24gPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXJib3NlPC9jb2RlPiBtYWtlcyB0aGUgZGFlbW9uIGdlbmVyYXRlIGxvdHMgb2YgZGVidWcgZGF0YQotCQl3aGlsc3QgaXQgaXMgcnVubmluZy4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kdW1wPC9jb2RlPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQkgICAgRm9yY2UgYSBmbHVzaCBvZiB0aGUgY29sbGVjdGVkIHByb2ZpbGluZyBkYXRhIHRvIHRoZSBkYWVtb24uCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3RvcDwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJICAgIFN0b3AgZGF0YSBjb2xsZWN0aW9uICh0aGlzIHNlcGFyYXRlIHN0ZXAgaXMgbm90IHBvc3NpYmxlIHdpdGggMi4yIG9yIDIuNCBrZXJuZWxzKS4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zaHV0ZG93bjwvY29kZT4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJICAgIFN0b3AgZGF0YSBjb2xsZWN0aW9uIGFuZCBraWxsIHRoZSBkYWVtb24uCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcmVzZXQ8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCSAgICBDbGVhcnMgb3V0IGRhdGEgZnJvbSBjdXJyZW50IHNlc3Npb24sIGJ1dCBsZWF2ZXMgc2F2ZWQgc2Vzc2lvbnMuCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNhdmU9PC9jb2RlPnNlc3Npb25fbmFtZTwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQkgICAgU2F2ZSBkYXRhIGZyb20gY3VycmVudCBzZXNzaW9uIHRvIHNlc3Npb25fbmFtZS4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kZWluaXQ8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgU2h1dHMgZG93biBkYWVtb24uIFVubG9hZCB0aGUgT1Byb2ZpbGUgbW9kdWxlIGFuZCBvcHJvZmlsZWZzLgotCQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWxpc3QtZXZlbnRzPC9jb2RlPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQkgICAgTGlzdCBldmVudCB0eXBlcyBhbmQgdW5pdCBtYXNrcy4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1oZWxwPC9jb2RlPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQkgICAgR2VuZXJhdGUgdXNhZ2UgbWVzc2FnZXMuCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1UaGVyZSBhcmUgYSBudW1iZXIgb2YgcG9zc2libGUgc2V0dGluZ3MsIG9mIHdoaWNoLCBvbmx5Ci08Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZtbGludXg8L2NvZGU+IChvciA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vLXZtbGludXg8L2NvZGU+KQotaXMgcmVxdWlyZWQuIFRoZXNlIHNldHRpbmdzIGFyZSBzdG9yZWQgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5+Ly5vcHJvZmlsZS9kYWVtb25yYzwvY29kZT4uCi08L3A+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLSAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWJ1ZmZlci1zaXplPTwvY29kZT5udW08L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJTnVtYmVyIG9mIHNhbXBsZXMgaW4ga2VybmVsIGJ1ZmZlci4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY3B1LWJ1ZmZlci1zaXplPTwvY29kZT5udW08L3NwYW4+Ci0gICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8cD4KLQkJTnVtYmVyIG9mIHNhbXBsZXMgaW4ga2VybmVsIHBlci1jcHUgYnVmZmVyICgyLjYgb25seSkuIElmIHlvdQotCQlwcm9maWxlIGF0IGhpZ2ggcmF0ZSBpdCBjYW4gaGVscCB0byBpbmNyZWFzZSB0aGlzIGlmIHRoZSBsb2cKLQkJZmlsZSBzaG93IGV4Y2Vzc2l2ZSBjb3VudCBvZiBzYW1wbGUgbG9zdCBjcHUgYnVmZmVyIG92ZXJmbG93LiAKLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZXZlbnQ9PC9jb2RlPltldmVudHNwZWNdPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCVVzZSB0aGUgZ2l2ZW4gcGVyZm9ybWFuY2UgY291bnRlciBldmVudCB0byBwcm9maWxlLgotCQlTZWUgPGEgaHJlZj0iI2V2ZW50c3BlYyIgdGl0bGU9IjEuMi6gU3BlY2lmeWluZyBwZXJmb3JtYW5jZSBjb3VudGVyIGV2ZW50cyI+U2VjdGlvbqAxLjIsICYjODIyMDtTcGVjaWZ5aW5nIHBlcmZvcm1hbmNlIGNvdW50ZXIgZXZlbnRzJiM4MjIxOzwvYT4gYmVsb3cuCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPTwvY29kZT5bbm9uZSxsaWIsa2VybmVsLHRocmVhZCxjcHUsYWxsXTwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQlCeSBkZWZhdWx0LCBldmVyeSBwcm9maWxlIGlzIHN0b3JlZCBpbiBhIHNpbmdsZSBmaWxlLiBUaHVzLCBmb3IgZXhhbXBsZSwKLQkJc2FtcGxlcyBpbiB0aGUgQyBsaWJyYXJ5IGFyZSBhbGwgYWNjcmVkaXRlZCB0byB0aGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vbGliL2xpYmMubzwvY29kZT4KLQkJcHJvZmlsZS4gSG93ZXZlciwgeW91IGNob29zZSB0byBjcmVhdGUgc2VwYXJhdGUgc2FtcGxlIGZpbGVzIGJ5IHNwZWNpZnlpbmcKLQkJb25lIG9mIHRoZSBiZWxvdyBvcHRpb25zLgotCQk8L3A+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+Ci0gICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvbGdyb3VwPgotICAgICAgICAgICAgICAgICAgICAgIDxjb2wgLz4KLSAgICAgICAgICAgICAgICAgICAgICA8Y29sIC8+Ci0gICAgICAgICAgICAgICAgICAgIDwvY29sZ3JvdXA+Ci0gICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPm5vbmU8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPk5vIHByb2ZpbGUgc2VwYXJhdGlvbiAoZGVmYXVsdCk8L3RkPgotICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5saWI8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPkNyZWF0ZSBwZXItYXBwbGljYXRpb24gcHJvZmlsZXMgZm9yIGxpYnJhcmllczwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmtlcm5lbDwvY29kZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Q3JlYXRlIHBlci1hcHBsaWNhdGlvbiBwcm9maWxlcyBmb3IgdGhlIGtlcm5lbCBhbmQga2VybmVsIG1vZHVsZXM8L3RkPgotICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj50aHJlYWQ8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPkNyZWF0ZSBwcm9maWxlcyBmb3IgZWFjaCB0aHJlYWQgYW5kIGVhY2ggdGFzazwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmNwdTwvY29kZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Q3JlYXRlIHByb2ZpbGVzIGZvciBlYWNoIENQVTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmFsbDwvY29kZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+QWxsIG9mIHRoZSBhYm92ZSBvcHRpb25zPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8cD4KLQkJTm90ZSAgdGhhdCA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPWtlcm5lbDwvY29kZT4gYWxzbyB0dXJucyBvbiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPWxpYjwvY29kZT4uCi0JCQotCQlXaGVuIHVzaW5nIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9a2VybmVsPC9jb2RlPiwgc2FtcGxlcyBpbiBoYXJkd2FyZSBpbnRlcnJ1cHRzLCBzb2Z0LWlycXMsIG9yIG90aGVyCi0JCWFzeW5jaHJvbm91cyBrZXJuZWwgY29udGV4dHMgYXJlIGNyZWRpdGVkIHRvIHRoZSB0YXNrIGN1cnJlbnRseSBydW5uaW5nLiBUaGlzIG1lYW5zIHlvdSB3aWxsIHNlZQotCQlzZWVtaW5nbHkgbm9uc2Vuc2UgcHJvZmlsZXMgc3VjaCBhcyA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9iaW4vYmFzaDwvY29kZT4gc2hvd2luZyBzYW1wbGVzIGZvciB0aGUgUFBQIG1vZHVsZXMsCi0JCWV0Yy4KLQkJPC9wPgotICAgICAgICAgICAgICAgIDxwPgotCQlPbiAyLjIvMi40IG9ubHkga2VybmVsIHRocmVhZHMgYWxyZWFkeSBzdGFydGVkIHdoZW4gcHJvZmlsaW5nIGJlZ2lucyBhcmUgY29ycmVjdGx5IHByb2ZpbGVkOwotCQluZXdseSBzdGFydGVkIGtlcm5lbCB0aHJlYWQgc2FtcGxlcyBhcmUgY3JlZGl0ZWQgdG8gdGhlIHZtbGludXggKGtlcm5lbCkgcHJvZmlsZS4KLQkJPC9wPgotICAgICAgICAgICAgICAgIDxwPgotCQlVc2luZyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPXRocmVhZDwvY29kZT4gY3JlYXRlcyBhIGxvdAotCQlvZiBzYW1wbGUgZmlsZXMgaWYgeW91IGxlYXZlIE9Qcm9maWxlIHJ1bm5pbmcgZm9yIGEgd2hpbGU7IGl0J3MgbW9zdAotCQl1c2VmdWwgd2hlbiB1c2VkIGZvciBzaG9ydCBzZXNzaW9ucywgb3Igd2hlbiB1c2luZyBpbWFnZSBmaWx0ZXJpbmcuCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNhbGxncmFwaD08L2NvZGU+I2RlcHRoPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCUVuYWJsZSBjYWxsLWdyYXBoIHNhbXBsZSBjb2xsZWN0aW9uIHdpdGggYSBtYXhpbXVtIGRlcHRoLiBVc2UgMCB0byBkaXNhYmxlCi0JCWNhbGxncmFwaCBwcm9maWxpbmcuIEN1cnJlbnRseSB0aGlzIHJlcXVpcmVzIGEgcmVjZW50Ci0JCTIuNiBrZXJuZWwsIGFuZCB4ODYuCi0JCTwvcD4KLSAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWltYWdlPTwvY29kZT5pbWFnZSxbaW1hZ2VzXXwiYWxsIjwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDxwPgotCQlJbWFnZSBmaWx0ZXJpbmcuIElmIHlvdSBzcGVjaWZ5IG9uZSBvciBtb3JlIGFic29sdXRlCi0JCXBhdGhzIHRvIGJpbmFyaWVzLCBPUHJvZmlsZSB3aWxsIG9ubHkgcHJvZHVjZSBwcm9maWxlIHJlc3VsdHMgZm9yIHRob3NlCi0JCWJpbmFyeSBpbWFnZXMuIFRoaXMgaXMgdXNlZnVsIGZvciByZXN0cmljdGluZyB0aGUgc29tZXRpbWVzIHZvbHVtaW5vdXMKLQkJb3V0cHV0IHlvdSBtYXkgZ2V0IG90aGVyd2lzZSwgZXNwZWNpYWxseSB3aXRoCi0JCTxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9dGhyZWFkPC9jb2RlPi4gTm90ZSB0aGF0IGlmIHlvdSBhcmUgdXNpbmcKLQkJPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXBhcmF0ZT1saWI8L2NvZGU+IG9yCi0JCTxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9a2VybmVsPC9jb2RlPiwgdGhlbiBpZiB5b3Ugc3BlY2lmaWNhdGlvbiBhbgotCQlhcHBsaWNhdGlvbiBiaW5hcnksIHRoZSBzaGFyZWQgbGlicmFyaWVzIGFuZCBrZXJuZWwgY29kZQotCQk8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5hcmU8L2VtPjwvc3Bhbj4gaW5jbHVkZWQuIFNwZWNpZnkgdGhlIHZhbHVlCi0JCSJhbGwiIHRvIHByb2ZpbGUgZXZlcnl0aGluZyAodGhlIGRlZmF1bHQpLgotCQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12bWxpbnV4PTwvY29kZT5maWxlPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCXZtbGludXgga2VybmVsIGltYWdlLgotCQk8L3A+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vLXZtbGludXg8L2NvZGU+Ci0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgPHA+Ci0JCVVzZSB0aGlzIHdoZW4geW91IGRvbid0IGhhdmUgYSBrZXJuZWwgdm1saW51eCBmaWxlLCBhbmQgeW91IGRvbid0IHdhbnQKLQkJdG8gcHJvZmlsZSB0aGUga2VybmVsLiBUaGlzIHN0aWxsIGNvdW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIGtlcm5lbCBzYW1wbGVzLAotCQlidXQgY2FuJ3QgZ2l2ZSBzeW1ib2wtYmFzZWQgcmVzdWx0cyBmb3IgdGhlIGtlcm5lbCBvciBhbnkgbW9kdWxlcy4KLQkJPC9wPgotICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ib3Bjb250cm9sZXhhbXBsZXMiPjwvYT4xLjEuoEV4YW1wbGVzPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QzIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImV4YW1wbGVzcGVyZmN0ciI+PC9hPjEuMS4xLqBJbnRlbCBwZXJmb3JtYW5jZSBjb3VudGVyIHNldHVwPC9oND4KLSAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPHA+Ci1IZXJlLCB3ZSBoYXZlIGEgUGVudGl1bSBJSUkgcnVubmluZyBhdCA4MDBNSHosIGFuZCB3ZSB3YW50IHRvIGxvb2sgYXQgd2hlcmUgZGF0YSBtZW1vcnkKLXJlZmVyZW5jZXMgYXJlIGhhcHBlbmluZyBtb3N0LCBhbmQgYWxzbyBnZXQgcmVzdWx0cyBmb3IgQ1BVIHRpbWUuCi08L3A+Ci0gICAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotIyBvcGNvbnRyb2wgLS1ldmVudD1DUFVfQ0xLX1VOSEFMVEVEOjQwMDAwMCAtLWV2ZW50PURBVEFfTUVNX1JFRlM6MTAwMDAKLSMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC8yLjYuMC92bWxpbnV4Ci0jIG9wY29udHJvbCAtLXN0YXJ0Ci08L3ByZT4KLSAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDMiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9InRpdGxlIj48YSBpZD0iZXhhbXBsZXNydGMiPjwvYT4xLjEuMi6gUlRDIG1vZGU8L2g0PgotICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8cD4KLUhlcmUsIHdlIGhhdmUgYW4gSW50ZWwgbGFwdG9wIHdpdGhvdXQgc3VwcG9ydCBmb3IgcGVyZm9ybWFuY2UgY291bnRlcnMsIHJ1bm5pbmcgb24gMi40IGtlcm5lbHMuCi08L3A+Ci0gICAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotIyBvcGhlbHAgLXIKLUNQVSB3aXRoIFJUQyBkZXZpY2UKLSMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC8yLjQuMTMvdm1saW51eCAtLWV2ZW50PVJUQ19JTlRFUlJVUFRTOjEwMjQKLSMgb3Bjb250cm9sIC0tc3RhcnQKLTwvcHJlPgotICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MyIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idGl0bGUiPjxhIGlkPSJleGFtcGxlc3N0YXJ0ZGFlbW9uIj48L2E+MS4xLjMuoFN0YXJ0aW5nIHRoZSBkYWVtb24gc2VwYXJhdGVseTwvaDQ+Ci0gICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDxwPgotSWYgd2UncmUgcnVubmluZyAyLjYga2VybmVscywgd2UgY2FuIHVzZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXN0YXJ0LWRhZW1vbjwvY29kZT4gdG8gYXZvaWQKLXRoZSBwcm9maWxlciBzdGFydHVwIGFmZmVjdGluZyByZXN1bHRzLgotPC9wPgotICAgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLSMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC8yLjYuMC92bWxpbnV4Ci0jIG9wY29udHJvbCAtLXN0YXJ0LWRhZW1vbgotIyBteV9mYXZvdXJpdGVfYmVuY2htYXJrIC0taW5pdAotIyBvcGNvbnRyb2wgLS1zdGFydCA7IG15X2Zhdm91cml0ZV9iZW5jaG1hcmsgLS1ydW4gOyBvcGNvbnRyb2wgLS1zdG9wCi08L3ByZT4KLSAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDMiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9InRpdGxlIj48YSBpZD0iZXhhbXBsZXNlcGFyYXRlIj48L2E+MS4xLjQuoFNlcGFyYXRlIHByb2ZpbGVzIGZvciBsaWJyYXJpZXMgYW5kIHRoZSBrZXJuZWw8L2g0PgotICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8cD4KLUhlcmUsIHdlIHdhbnQgdG8gc2VlIGEgcHJvZmlsZSBvZiB0aGUgT1Byb2ZpbGUgZGFlbW9uIGl0c2VsZiwgaW5jbHVkaW5nIHdoZW4KLWl0IHdhcyBydW5uaW5nIGluc2lkZSB0aGUga2VybmVsIGRyaXZlciwgYW5kIGl0cyB1c2Ugb2Ygc2hhcmVkIGxpYnJhcmllcy4KLTwvcD4KLSAgICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+Ci0jIG9wY29udHJvbCAtLXNlcGFyYXRlPWtlcm5lbCAtLXZtbGludXg9L2Jvb3QvMi42LjAvdm1saW51eAotIyBvcGNvbnRyb2wgLS1zdGFydAotIyBteV9mYXZvdXJpdGVfc3RyZXNzX3Rlc3QgLS1ydW4KLSMgb3ByZXBvcnQgLWwgLXAgL2xpYi9tb2R1bGVzLzIuNi4wL2tlcm5lbCAvdXNyL2xvY2FsL2Jpbi9vcHJvZmlsZWQKLTwvcHJlPgotICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MyIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idGl0bGUiPjxhIGlkPSJleGFtcGxlc3Nlc3Npb25zIj48L2E+MS4xLjUuoFByb2ZpbGluZyBzZXNzaW9uczwvaDQ+Ci0gICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDxwPgotSXQgY2FuIG9mdGVuIGJlIHVzZWZ1bCB0byBzcGxpdCB1cCBwcm9maWxpbmcgZGF0YSBpbnRvIHNldmVyYWwgZGlmZmVyZW50Ci10aW1lIHBlcmlvZHMuIEZvciBleGFtcGxlLCB5b3UgbWF5IHdhbnQgdG8gY29sbGVjdCBkYXRhIG9uIGFuIGFwcGxpY2F0aW9uJ3MKLXN0YXJ0dXAgc2VwYXJhdGVseSBmcm9tIHRoZSBub3JtYWwgcnVudGltZSBkYXRhLiBZb3UgY2FuIHVzZSB0aGUgc2ltcGxlCi1jb21tYW5kIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wY29udHJvbCAtLXNhdmU8L3N0cm9uZz48L3NwYW4+IHRvIGRvIHRoaXMuIEZvciBleGFtcGxlIDoKLTwvcD4KLSAgICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+Ci0jIG9wY29udHJvbCAtLXNhdmU9YmxhaAotPC9wcmU+Ci0gICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgIDxwPgotd2lsbCBjcmVhdGUgYSBzdWItZGlyZWN0b3J5IGluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlczwvY29kZT4gY29udGFpbmluZyB0aGUgc2FtcGxlcwotdXAgdG8gdGhhdCBwb2ludCAodGhlIGN1cnJlbnQgc2Vzc2lvbidzIHNhbXBsZSBmaWxlcyBhcmUgbW92ZWQgaW50byB0aGlzCi1kaXJlY3RvcnkpLiBZb3UgY2FuIHRoZW4gcGFzcyB0aGlzIHNlc3Npb24gbmFtZSBhcyBhIHBhcmFtZXRlciB0byB0aGUgcG9zdC1wcm9maWxpbmcKLWFuYWx5c2lzIHRvb2xzLCB0byBvbmx5IGdldCBkYXRhIHVwIHRvIHRoZSBwb2ludCB5b3UgbmFtZWQgdGhlCi1zZXNzaW9uLiBJZiB5b3UgZG8gbm90IHdhbnQgdG8gc2F2ZSBhIHNlc3Npb24sIHlvdSBjYW4gZG8KLTxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPnJtIC1yZiAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL3Nlc3Npb25uYW1lPC9zdHJvbmc+PC9zcGFuPiBvciwgZm9yIHRoZQotY3VycmVudCBzZXNzaW9uLCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2wgLS1yZXNldDwvc3Ryb25nPjwvc3Bhbj4uCi08L3A+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iZXZlbnRzcGVjIj48L2E+MS4yLqBTcGVjaWZ5aW5nIHBlcmZvcm1hbmNlIGNvdW50ZXIgZXZlbnRzPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotVGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZXZlbnQ8L2NvZGU+IG9wdGlvbiB0byA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+Ci10YWtlcyBhIHNwZWNpZmljYXRpb24gdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSBkZXRhaWxzIG9mIGVhY2gKLWhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXIgc2hvdWxkIGJlIHNldHVwLiBJZiB5b3Ugd2FudCB0bwotcmV2ZXJ0IHRvIE9Qcm9maWxlJ3MgZGVmYXVsdCBzZXR0aW5nICg8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV2ZW50PC9jb2RlPgotaXMgc3RyaWN0bHkgb3B0aW9uYWwpLCB1c2UgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ldmVudD1kZWZhdWx0PC9jb2RlPi4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotWW91IGNhbiBwYXNzIG11bHRpcGxlIGV2ZW50IHNwZWNpZmljYXRpb25zLiBPUHJvZmlsZSB3aWxsIGFsbG9jYXRlCi1oYXJkd2FyZSBjb3VudGVycyBhcyBuZWNlc3NhcnkuIE5vdGUgdGhhdCBzb21lIGNvbWJpbmF0aW9ucyBhcmUgbm90Ci1hbGxvd2VkIGJ5IHRoZSBDUFU7IHJ1bm5pbmcgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sIC0tbGlzdC1ldmVudHM8L3N0cm9uZz48L3NwYW4+IGdpdmVzIHRoZSBkZXRhaWxzCi1vZiBlYWNoIGV2ZW50LiBUaGUgZXZlbnQgc3BlY2lmaWNhdGlvbiBpcyBhIGNvbG9uLXNlcGFyYXRlZCBzdHJpbmcKLW9mIHRoZSBmb3JtIDxjb2RlIGNsYXNzPSJvcHRpb24iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm5hbWU8L2VtPjwvc3Bhbj46PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Y291bnQ8L2VtPjwvc3Bhbj46PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dW5pdG1hc2s8L2VtPjwvc3Bhbj46PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+a2VybmVsPC9lbT48L3NwYW4+OjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnVzZXI8L2VtPjwvc3Bhbj48L2NvZGU+IGFzIGRlc2NyaWJlZCBpbiB0aGlzIHRhYmxlOgotPC9wPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgotICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz4KLSAgICAgICAgICAgICAgPHA+Ci1Gb3IgdGhlIFBvd2VyUEMgcGxhdGZvcm1zLCBhbGwgZXZlbnRzIHNwZWNpZmllZCBtdXN0IGJlIGluIHRoZSBzYW1lIGdyb3VwOyBpLmUuLCB0aGUgZ3JvdXAgbnVtYmVyCi1hcHBlbmRlZCB0byB0aGUgZXZlbnQgbmFtZSAoZS5nLiA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPiZsdDs8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5zb21lLWV2ZW50LW5hbWU8L2VtPjwvc3Bhbj4mZ3Q7X0dSUDk8L2NvZGU+KSBtdXN0IGJlIHRoZSBzYW1lLgotPC9wPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLTwvcD4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPgotICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgICAgICA8Y29sZ3JvdXA+Ci0gICAgICAgICAgICAgICAgICA8Y29sIC8+Ci0gICAgICAgICAgICAgICAgICA8Y29sIC8+Ci0gICAgICAgICAgICAgICAgPC9jb2xncm91cD4KLSAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5uYW1lPC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+VGhlIHN5bWJvbGljIGV2ZW50IG5hbWUsIGUuZy4gPGNvZGUgY2xhc3M9ImNvbnN0YW50Ij5DUFVfQ0xLX1VOSEFMVEVEPC9jb2RlPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+Y291bnQ8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5UaGUgY291bnRlciByZXNldCB2YWx1ZSwgZS5nLiAxMDAwMDA8L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPnVuaXRtYXNrPC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+VGhlIHVuaXQgbWFzaywgYXMgZ2l2ZW4gaW4gdGhlIGV2ZW50cyBsaXN0LCBlLmcuIDB4MGY8L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmtlcm5lbDwvY29kZT4KLSAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPldoZXRoZXIgdG8gcHJvZmlsZSBrZXJuZWwgY29kZTwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+dXNlcjwvY29kZT4KLSAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPldoZXRoZXIgdG8gcHJvZmlsZSB1c2Vyc3BhY2UgY29kZTwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotVGhlIGxhc3QgdGhyZWUgdmFsdWVzIGFyZSBvcHRpb25hbCwgaWYgeW91IG9taXQgdGhlbSAoZS5nLiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV2ZW50PURBVEFfTUVNX1JFRlM6MzAwMDA8L2NvZGU+KSwKLXRoZXkgd2lsbCBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWVzIChhIHVuaXQgbWFzayBvZiAwLCBhbmQgcHJvZmlsaW5nIGJvdGgga2VybmVsIGFuZAotdXNlcnNwYWNlIGNvZGUpLiBOb3RlIHRoYXQgc29tZSBldmVudHMgcmVxdWlyZSBhIHVuaXQgbWFzay4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotSWYgT1Byb2ZpbGUgaXMgdXNpbmcgUlRDIG1vZGUsIGFuZCB5b3Ugd2FudCB0byBhbHRlciB0aGUgZGVmYXVsdCBjb3VudGVyIHZhbHVlLAoteW91IGNhbiB1c2Ugc29tZXRoaW5nIGxpa2UgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ldmVudD1SVENfSU5URVJSVVBUUzoyMDQ4PC9jb2RlPi4gTm90ZSB0aGUgbGFzdAotdGhyZWUgdmFsdWVzIGhlcmUgYXJlIGlnbm9yZWQuCi1JZiBPUHJvZmlsZSBpcyB1c2luZyB0aW1lci1pbnRlcnJ1cHQgbW9kZSwgdGhlcmUgaXMgbm8gY29uZmlndXJhdGlvbiBwb3NzaWJsZS4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotVGhlIHRhYmxlIGJlbG93IGxpc3RzIHRoZSBldmVudHMgc2VsZWN0ZWQgYnkgZGVmYXVsdAotKDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZXZlbnQ9ZGVmYXVsdDwvY29kZT4pIGZvciB0aGUgdmFyaW91cyBjb21wdXRlciBhcmNoaXRlY3R1cmVzOgotPC9wPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+Ci0gICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiPgotICAgICAgICAgICAgICAgIDxjb2xncm91cD4KLSAgICAgICAgICAgICAgICAgIDxjb2wgLz4KLSAgICAgICAgICAgICAgICAgIDxjb2wgLz4KLSAgICAgICAgICAgICAgICAgIDxjb2wgLz4KLSAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPgotICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPlByb2Nlc3NvcjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5jcHVfdHlwZTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5EZWZhdWx0IGV2ZW50PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5BbHBoYSBFVjQ8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+YWxwaGEvZXY0PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkNZQ0xFUzoxMDAwMDA6MDoxOjE8L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkFscGhhIEVWNTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5hbHBoYS9ldjU8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q1lDTEVTOjEwMDAwMDowOjE6MTwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+QWxwaGEgUENBNTY8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+YWxwaGEvcGNhNTY8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q1lDTEVTOjEwMDAwMDowOjE6MTwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+QWxwaGEgRVY2PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPmFscGhhL2V2NjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5DWUNMRVM6MTAwMDAwOjA6MToxPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5BbHBoYSBFVjY3PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPmFscGhhL2V2Njc8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q1lDTEVTOjEwMDAwMDowOjE6MTwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+QVJNL1hTY2FsZSBQTVUxPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPmFybS94c2NhbGUxPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkNQVV9DWUNMRVM6MTAwMDAwOjA6MToxPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5BUk0vWFNjYWxlIFBNVTI8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+YXJtL3hzY2FsZTI8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q1BVX0NZQ0xFUzoxMDAwMDA6MDoxOjE8L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkF0aGxvbjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5pMzg2L2F0aGxvbjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+UGVudGl1bSBQcm88L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+aTM4Ni9wcHJvPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkNQVV9DTEtfVU5IQUxURUQ6MTAwMDAwOjA6MToxPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5QZW50aXVtIElJPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPmkzODYvcGlpPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkNQVV9DTEtfVU5IQUxURUQ6MTAwMDAwOjA6MToxPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5QZW50aXVtIElJSTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5pMzg2L3BpaWk8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPlBlbnRpdW0gTSAoUDYgY29yZSk8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+aTM4Ni9wNl9tb2JpbGU8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPlBlbnRpdW0gNCAobm9uLUhUKTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5pMzg2L3A0PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkdMT0JBTF9QT1dFUl9FVkVOVFM6MTAwMDAwOjE6MToxPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5QZW50aXVtIDQgKEhUKTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5pMzg2L3A0LWh0PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkdMT0JBTF9QT1dFUl9FVkVOVFM6MTAwMDAwOjE6MToxPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5IYW1tZXI8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+eDg2LTY0L2hhbW1lcjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+SXRhbml1bTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5pYTY0L2l0YW5pdW08L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q1BVX0NZQ0xFUzoxMDAwMDA6MDoxOjE8L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkl0YW5pdW0gMjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5pYTY0L2l0YW5pdW0yPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkNQVV9DWUNMRVM6MTAwMDAwOjA6MToxPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5USU1FUl9JTlQ8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+dGltZXI8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Tm9uZSBzZWxlY3RhYmxlPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5JQk0gaXNlcmllczwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5Qb3dlclBDIDQvNS85NzA8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q1lDTEVTOjEwMDAwOjA6MToxPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5JQk0gcHNlcmllczwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5Qb3dlclBDIDQvNS85NzA8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q1lDTEVTOjEwMDAwOjA6MToxPC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5JQk0gczM5MDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD50aW1lcjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5Ob25lIHNlbGVjdGFibGU8L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPklCTSBzMzkweDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD50aW1lcjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5Ob25lIHNlbGVjdGFibGU8L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ib3Byb2ZpbGUtZ3VpIj48L2E+Mi6gVXNpbmcgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Byb2Zfc3RhcnQ8L3N0cm9uZz48L3NwYW4+PC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLVRoZSA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJvZl9zdGFydDwvc3Ryb25nPjwvc3Bhbj4gYXBwbGljYXRpb24gcHJvdmlkZXMgYSBjb252ZW5pZW50IHdheSB0byBzdGFydCB0aGUgcHJvZmlsZXIuCi1Ob3RlIHRoYXQgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Byb2Zfc3RhcnQ8L3N0cm9uZz48L3NwYW4+IGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCB0aGUgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPiBzY3JpcHQsCi1zbyBpdCBkb2VzIG5vdCBwcm92aWRlIG1vcmUgc2VydmljZXMgdGhhbiB0aGUgc2NyaXB0IGl0c2VsZi4KLTwvcD4KLSAgICAgICAgICA8cD4KLUFmdGVyIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcm9mX3N0YXJ0PC9zdHJvbmc+PC9zcGFuPiBpcyBzdGFydGVkIHlvdSBjYW4gc2VsZWN0IHRoZSBldmVudCB0eXBlIGZvciBlYWNoIGNvdW50ZXI7Ci10aGUgc2FtcGxpbmcgcmF0ZSBhbmQgb3RoZXIgcmVsYXRlZCBwYXJhbWV0ZXJzIGFyZSBleHBsYWluZWQgaW4gPGEgaHJlZj0iI2NvbnRyb2xsaW5nLWRhZW1vbiIgdGl0bGU9IjEuoFVzaW5nIG9wY29udHJvbCI+U2VjdGlvbqAxLCAmIzgyMjA7VXNpbmcgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPiYjODIyMTs8L2E+LgotVGhlICJDb25maWd1cmF0aW9uIiBzZWN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGdlbmVyYWwgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBidWZmZXIgc2l6ZSwga2VybmVsIGZpbGVuYW1lCi1ldGMuIFRoZSBjb3VudGVyIHNldHVwIGludGVyZmFjZSBzaG91bGQgYmUgc2VsZi1leHBsYW5hdG9yeTsgPGEgaHJlZj0iI2hhcmR3YXJlLWNvdW50ZXJzIiB0aXRsZT0iMy4xLqBIYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyI+U2VjdGlvbqAzLjEsICYjODIyMDtIYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyYjODIyMTs8L2E+IGFuZCByZWxhdGVkIAotbGlua3MgY29udGFpbiBpbmZvcm1hdGlvbiBvbiB1c2luZyB1bml0IG1hc2tzLgotPC9wPgotICAgICAgICAgIDxwPgotQSBzdGF0dXMgbGluZSBzaG93cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHByb2ZpbGVyOiBob3cgbG9uZyBpdCBoYXMgYmVlbiBydW5uaW5nLCBhbmQgdGhlIGF2ZXJhZ2UKLW51bWJlciBvZiBpbnRlcnJ1cHRzIHJlY2VpdmVkIHBlciBzZWNvbmQgYW5kIHRoZSB0b3RhbCwgb3ZlciBhbGwgcHJvY2Vzc29ycy4KLU5vdGUgdGhhdCBxdWl0dGluZyA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJvZl9zdGFydDwvc3Ryb25nPjwvc3Bhbj4gZG9lcyBub3Qgc3RvcCB0aGUgcHJvZmlsZXIuCi08L3A+Ci0gICAgICAgICAgPHA+Ci1Zb3VyIGNvbmZpZ3VyYXRpb24gaXMgc2F2ZWQgaW4gdGhlIHNhbWUgZmlsZSBhcyA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+IHVzZXM7IHRoYXQgaXMsCi08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPn4vLm9wcm9maWxlL2RhZW1vbnJjPC9jb2RlPi4KLTwvcD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJkZXRhaWxlZC1wYXJhbWV0ZXJzIj48L2E+My6gQ29uZmlndXJhdGlvbiBkZXRhaWxzPC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iaGFyZHdhcmUtY291bnRlcnMiPjwvYT4zLjEuoEhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KLSAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+Ci0gICAgICAgICAgICAgIDxwPgotWW91ciBDUFUgdHlwZSBtYXkgbm90IGluY2x1ZGUgdGhlIHJlcXVpc2l0ZSBzdXBwb3J0IGZvciBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycywgaW4gd2hpY2ggY2FzZQoteW91IG11c3QgdXNlIE9Qcm9maWxlIGluIFJUQyBtb2RlIGluIDIuNCAoc2VlIDxhIGhyZWY9IiNydGMiIHRpdGxlPSIzLjIuoE9Qcm9maWxlIGluIFJUQyBtb2RlIj5TZWN0aW9uoDMuMiwgJiM4MjIwO09Qcm9maWxlIGluIFJUQyBtb2RlJiM4MjIxOzwvYT4pLCBvciB0aW1lciBtb2RlIGluIDIuNiAoc2VlIDxhIGhyZWY9IiN0aW1lciIgdGl0bGU9IjMuMy6gT1Byb2ZpbGUgaW4gdGltZXIgaW50ZXJydXB0IG1vZGUiPlNlY3Rpb26gMy4zLCAmIzgyMjA7T1Byb2ZpbGUgaW4gdGltZXIgaW50ZXJydXB0IG1vZGUmIzgyMjE7PC9hPikuIAotWW91IGRvIG5vdCByZWFsbHkgbmVlZCB0byByZWFkIHRoaXMgc2VjdGlvbiB1bmxlc3MgeW91IGFyZSBpbnRlcmVzdGVkIGluIHVzaW5nIAotZXZlbnRzIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgZXZlbnQgY2hvc2VuIGJ5IE9Qcm9maWxlLgotPC9wPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLVRoZSBJbnRlbCBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhcmUgZGV0YWlsZWQgaW4gdGhlIEludGVsIElBLTMyIEFyY2hpdGVjdHVyZSBNYW51YWwsIFZvbHVtZSAzLCBhdmFpbGFibGUKLWZyb20gPGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vIj5odHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS88L2E+LiBUaGUgQU1EIEF0aGxvbi9EdXJvbgotaW1wbGVtZW50YXRpb24gaXMgZGV0YWlsZWQgaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL2Fzc2V0cy9jb250ZW50X3R5cGUvd2hpdGVfcGFwZXJzX2FuZF90ZWNoX2RvY3MvMjIwMDcucGRmIj4KLWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzIyMDA3LnBkZjwvYT4uCi1Gb3IgUG93ZXJQQzY0IHByb2Nlc3NvcnMgaW4gSUJNIGlTZXJpZXMgYW5kIHBTZXJpZXMgc3lzdGVtcywgcHJvY2Vzc29yIGRvY3VtZW50YXRpb24KLWlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LTMwNi5pYm0uY29tL2NoaXBzL3RlY2hsaWIvdGVjaGxpYi5uc2YvcHJvZHVjdGZhbWlsaWVzL1Bvd2VyUEMvIj4KLWh0dHA6Ly93d3ctMzA2LmlibS5jb20vY2hpcHMvdGVjaGxpYi90ZWNobGliLm5zZi9wcm9kdWN0ZmFtaWxpZXMvUG93ZXJQQzwvYT4uICAoRm9yIGV4YW1wbGUsIHRoZQotc3BlY2lmaWMgcHVibGljYXRpb24gY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbiB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvciB1bml0IGZvciB0aGUgUG93ZXJQQzk3MCBpcyAKLSJJQk0gUG93ZXJQQyA5NzBGWCBSSVNDIE1pY3JvcHJvY2Vzc29yIFVzZXIncyBNYW51YWwuIikKLVRoZXNlIHByb2Nlc3NvcnMgYXJlIGNhcGFibGUgb2YgZGVsaXZlcmluZyBhbiBpbnRlcnJ1cHQgd2hlbiBhIGNvdW50ZXIgb3ZlcmZsb3dzLgotVGhpcyBpcyB0aGUgYmFzaWMgbWVjaGFuaXNtIG9uIHdoaWNoIE9Qcm9maWxlIGlzIGJhc2VkLiBUaGUgZGVsaXZlcnkgbW9kZSBpcyA8c3BhbiBjbGFzcz0iYWNyb255bSI+Tk1JPC9zcGFuPiwKLXNvIGJsb2NraW5nIGludGVycnVwdHMgaW4gdGhlIGtlcm5lbCBkb2VzIG5vdCBwcmV2ZW50IHByb2ZpbGluZy4gV2hlbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgY2FsbGVkLAotdGhlIGN1cnJlbnQgPHNwYW4gY2xhc3M9ImFjcm9ueW0iPlBDPC9zcGFuPiB2YWx1ZSBhbmQgdGhlIGN1cnJlbnQgdGFzayBhcmUgcmVjb3JkZWQgaW50byB0aGUgcHJvZmlsaW5nIHN0cnVjdHVyZS4KLVRoaXMgYWxsb3dzIHRoZSBvdmVyZmxvdyBldmVudCB0byBiZSBhdHRhY2hlZCB0byBhIHNwZWNpZmljIGFzc2VtYmx5IGluc3RydWN0aW9uIGluIGEgYmluYXJ5IGltYWdlLgotVGhlIGRhZW1vbiByZWNlaXZlcyB0aGlzIGRhdGEgZnJvbSB0aGUga2VybmVsLCBhbmQgd3JpdGVzIGl0IHRvIHRoZSBzYW1wbGUgZmlsZXMuCi08L3A+Ci0gICAgICAgICAgICA8cD4KLUlmIHdlIHVzZSBhbiBldmVudCBzdWNoIGFzIDxjb2RlIGNsYXNzPSJjb25zdGFudCI+Q1BVX0NMS19VTkhBTFRFRDwvY29kZT4gb3IgPGNvZGUgY2xhc3M9ImNvbnN0YW50Ij5JTlNUX1JFVElSRUQ8L2NvZGU+Ci0oPGNvZGUgY2xhc3M9ImNvbnN0YW50Ij5HTE9CQUxfUE9XRVJfRVZFTlRTPC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPklOU1RSX1JFVElSRUQ8L2NvZGU+LCByZXNwZWN0aXZlbHksIG9uIHRoZSBQZW50aXVtIDQpLCB3ZSBjYW4KLXVzZSB0aGUgb3ZlcmZsb3cgY291bnRzIGFzIGFuIGVzdGltYXRlIG9mIGFjdHVhbCB0aW1lIHNwZW50IGluIGVhY2ggcGFydCBvZiBjb2RlLiBBbHRlcm5hdGl2ZWx5IHdlIGNhbiBwcm9maWxlIGludGVyZXN0aW5nCi1kYXRhIHN1Y2ggYXMgdGhlIGNhY2hlIGJlaGF2aW91ciBvZiByb3V0aW5lcyB3aXRoIHRoZSBvdGhlciBhdmFpbGFibGUgY291bnRlcnMuCi08L3A+Ci0gICAgICAgICAgICA8cD4KLUhvd2V2ZXIgdGhlcmUgYXJlIHNldmVyYWwgY2F2ZWF0cy4gRmlyc3QsIHRoZXJlIGFyZSB0aG9zZSBpc3N1ZXMgbGlzdGVkIGluIHRoZSBJbnRlbCBtYW51YWwuIFRoZXJlIGlzIGEgZGVsYXkKLWJldHdlZW4gdGhlIGNvdW50ZXIgb3ZlcmZsb3cgYW5kIHRoZSBpbnRlcnJ1cHQgZGVsaXZlcnkgdGhhdCBjYW4gc2tldyByZXN1bHRzIG9uIGEgc21hbGwgc2NhbGUgLSB0aGlzIG1lYW5zCi15b3UgY2Fubm90IHJlbHkgb24gdGhlIHByb2ZpbGVzIGF0IHRoZSBpbnN0cnVjdGlvbiBsZXZlbCBhcyBiZWluZyBwZXJmZWN0bHkgYWNjdXJhdGUuCi1JZiB5b3UgYXJlIHVzaW5nIGFuICJldmVudC1tb2RlIiBjb3VudGVyIHN1Y2ggYXMgdGhlIGNhY2hlIGNvdW50ZXJzLCBhIGNvdW50IHJlZ2lzdGVyZWQgYWdhaW5zdCBpdCBkb2Vzbid0IG1lYW4KLXRoYXQgaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoYXQgZXZlbnQuIEhvd2V2ZXIsIGl0IGltcGxpZXMgdGhhdCB0aGUgY291bnRlciBvdmVyZmxvd2VkIGluIHRoZSBkeW5hbWljCi12aWNpbml0eSBvZiB0aGF0IGluc3RydWN0aW9uLCB0byB3aXRoaW4gYSBmZXcgaW5zdHJ1Y3Rpb25zLiBGdXJ0aGVyIGRldGFpbHMgb24gdGhpcyBwcm9ibGVtIGNhbiBiZSBmb3VuZCBpbiAKLTxhIGhyZWY9IiNpbnRlcnByZXRpbmciIHRpdGxlPSJDaGFwdGVyoDUuoEludGVycHJldGluZyBwcm9maWxpbmcgcmVzdWx0cyI+Q2hhcHRlcqA1LCA8aT5JbnRlcnByZXRpbmcgcHJvZmlsaW5nIHJlc3VsdHM8L2k+PC9hPiBhbmQgYWxzbyBpbiB0aGUgRGlnaXRhbCBwYXBlciAiUHJvZmlsZU1lOiBBIEhhcmR3YXJlIFBlcmZvcm1hbmNlIENvdW50ZXIiLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1FYWNoIGNvdW50ZXIgaGFzIHNldmVyYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgotRmlyc3QsIHRoZXJlIGlzIHRoZSB1bml0IG1hc2s6IHRoaXMgc2ltcGx5IGZ1cnRoZXIgc3BlY2lmaWVzIHdoYXQgdG8gY291bnQuCi1TZWNvbmQsIHRoZXJlIGlzIHRoZSBjb3VudGVyIHZhbHVlLCBkaXNjdXNzZWQgYmVsb3cuIFRoaXJkLCB0aGVyZSBpcyBhIHBhcmFtZXRlciB3aGV0aGVyIHRvIGluY3JlbWVudCBjb3VudHMKLXdoaWxzdCBpbiBrZXJuZWwgb3IgdXNlciBzcGFjZS4gWW91IGNhbiBjb25maWd1cmUgdGhlc2Ugc2VwYXJhdGVseSBmb3IgZWFjaCBjb3VudGVyLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1BZnRlciBlYWNoIG92ZXJmbG93IGV2ZW50LCB0aGUgY291bnRlciB3aWxsIGJlIHJlLWluaXRpYWxpemVkCi1zdWNoIHRoYXQgYW5vdGhlciBvdmVyZmxvdyB3aWxsIG9jY3VyIGFmdGVyIHRoaXMgbWFueSBldmVudHMgaGF2ZSBiZWVuIGNvdW50ZWQuIFRodXMsIGhpZ2hlcgotdmFsdWVzIG1lYW4gbGVzcy1kZXRhaWxlZCBwcm9maWxpbmcsIGFuZCBsb3dlciB2YWx1ZXMgbWVhbiBtb3JlIGRldGFpbCwgYnV0IGhpZ2hlciBvdmVyaGVhZC4KLVBpY2tpbmcgYSBnb29kIHZhbHVlIGZvciB0aGlzCi1wYXJhbWV0ZXIgaXMsIHVuZm9ydHVuYXRlbHksIHNvbWV3aGF0IG9mIGEgYmxhY2sgYXJ0LiBJdCBpcyBvZiBjb3Vyc2UgZGVwZW5kZW50IG9uIHRoZSBldmVudAoteW91IGhhdmUgY2hvc2VuLgotU3BlY2lmeWluZyB0b28gbGFyZ2UgYSB2YWx1ZSB3aWxsIG1lYW4gbm90IGVub3VnaCBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQKLXRvIGdpdmUgYSByZWFsaXN0aWMgcHJvZmlsZSAodGhvdWdoIHRoaXMgcHJvYmxlbSBjYW4gYmUgYW1lbGlvcmF0ZWQgYnkgcHJvZmlsaW5nIGZvciA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sb25nZXI8L2VtPjwvc3Bhbj4pLgotU3BlY2lmeWluZyB0b28gc21hbGwgYSB2YWx1ZSBjYW4gbGVhZCB0byBoaWdoZXIgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InJ0YyI+PC9hPjMuMi6gT1Byb2ZpbGUgaW4gUlRDIG1vZGU8L2gzPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgotICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz4KLSAgICAgICAgICAgICAgPHA+Ci1UaGlzIHNlY3Rpb24gYXBwbGllcyB0byAyLjIvMi40IGtlcm5lbHMgb25seS4KLTwvcD4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPHA+Ci1Tb21lIENQVSB0eXBlcyBkbyBub3QgcHJvdmlkZSB0aGUgbmVlZGVkIGhhcmR3YXJlIHN1cHBvcnQgdG8gdXNlIHRoZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycy4gVGhpcyBpbmNsdWRlcwotc29tZSBsYXB0b3BzLCBjbGFzc2ljIFBlbnRpdW1zLCBhbmQgb3RoZXIgQ1BVIHR5cGVzIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IE9Qcm9maWxlIChzdWNoIGFzIEN5cml4KS4gCi1PbiB0aGVzZSBtYWNoaW5lcywgT1Byb2ZpbGUgZmFsbHMKLWJhY2sgdG8gdXNpbmcgdGhlIHJlYWwtdGltZSBjbG9jayBpbnRlcnJ1cHQgdG8gY29sbGVjdCBzYW1wbGVzLiBUaGlzIGludGVycnVwdCBpcyBhbHNvIHVzZWQgYnkgdGhlIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPnJ0Yzwvc3Ryb25nPjwvc3Bhbj4KLW1vZHVsZTogeW91IGNhbm5vdCBoYXZlIGJvdGggdGhlIE9Qcm9maWxlIGFuZCBydGMgbW9kdWxlcyBsb2FkZWQgbm9yIHRoZSBydGMgc3VwcG9ydCBjb21waWxlZCBpbiB0aGUga2VybmVsLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1SVEMgbW9kZSBpcyBsZXNzIGNhcGFibGUgdGhhbiB0aGUgaGFyZHdhcmUgY291bnRlcnMgbW9kZTsgaW4gcGFydGljdWxhciwgaXQgaXMgdW5hYmxlIHRvIHByb2ZpbGUgc2VjdGlvbnMgb2YKLXRoZSBrZXJuZWwgd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuIFRoZXJlIGlzIGp1c3Qgb25lIGF2YWlsYWJsZSBldmVudCwgIlJUQyBpbnRlcnJ1cHRzIiwgYW5kIGl0cyB2YWx1ZSAKLWNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBnZW5lcmF0ZWQgcGVyIHNlY29uZCAodGhhdCBpcywgYSBoaWdoZXIgbnVtYmVyIG1lYW5zIGEgYmV0dGVyIHByb2ZpbGluZwotcmVzb2x1dGlvbiwgYW5kIGhpZ2hlciBvdmVyaGVhZCkuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSByZWFsLXRpbWUgY2xvY2sgc3VwcG9ydHMgb25seSBwb3dlci1vZi10d28KLXNhbXBsaW5nIHJhdGVzIGZyb20gMiB0byA0MDk2IHBlciBzZWNvbmQuICBPdGhlciB2YWx1ZXMgd2l0aGluIHRoaXMgcmFuZ2UgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YKLXR3by4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotU2V0dGluZyB0aGUgdmFsdWUgZnJvbSB0aGUgR1VJIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuIE9uIHRoZSBjb21tYW5kIGxpbmUsIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlCi1ldmVudCB0byA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+LCBlLmcuIDoKLTwvcD4KLSAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICA8c3Bhbj4KLSAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2wgLS1ldmVudD1SVENfSU5URVJSVVBUUzoyNTY8L3N0cm9uZz4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9wPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJ0aW1lciI+PC9hPjMuMy6gT1Byb2ZpbGUgaW4gdGltZXIgaW50ZXJydXB0IG1vZGU8L2gzPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgotICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz4KLSAgICAgICAgICAgICAgPHA+Ci1UaGlzIHNlY3Rpb24gYXBwbGllcyB0byAyLjYga2VybmVscyBhbmQgYWJvdmUgb25seS4KLTwvcD4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPHA+Ci1JbiAyLjYga2VybmVscyBvbiBDUFVzIHdpdGhvdXQgT1Byb2ZpbGUgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCB0aGUgZHJpdmVyCi1mYWxscyBiYWNrIHRvIHVzaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQgZm9yIHByb2ZpbGluZy4gTGlrZSB0aGUgUlRDIG1vZGUgaW4gMi40IGtlcm5lbHMsIHRoaXMgaXMgbm90IGFibGUgdG8KLXByb2ZpbGUgY29kZSB0aGF0IGhhcyBpbnRlcnJ1cHRzIGRpc2FibGVkLiBOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IKLXNldHRpbmcgdGhpcywgdW5saWtlIHRoZSBSVEMgYW5kIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXIgc2V0dXAuCi08L3A+Ci0gICAgICAgICAgICA8cD4KLVlvdSBjYW4gZm9yY2UgdXNlIG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQgYnkgdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPnRpbWVyPTE8L2NvZGU+IG1vZHVsZQotcGFyYW1ldGVyIChvciA8Y29kZSBjbGFzcz0ib3B0aW9uIj5vcHJvZmlsZS50aW1lcj0xPC9jb2RlPiBvbiB0aGUgYm9vdCBjb21tYW5kIGxpbmUgaWYgT1Byb2ZpbGUgaXMKLWJ1aWx0LWluKS4KLTwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0icDQiPjwvYT4zLjQuoFBlbnRpdW0gNCBzdXBwb3J0PC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotVGhlIFBlbnRpdW0gNCAvIFhlb24gcGVyZm9ybWFuY2UgY291bnRlcnMgYXJlIG9yZ2FuaXplZCBhcm91bmQgMyB0eXBlcyBvZiBtb2RlbCBzcGVjaWZpYyByZWdpc3RlcnMgKE1TUnMpOiA0NSBldmVudAotc2VsZWN0aW9uIGNvbnRyb2wgcmVnaXN0ZXJzIChFU0NScyksIDE4IGNvdW50ZXIgY29uZmlndXJhdGlvbiBjb250cm9sIHJlZ2lzdGVycyAoQ0NDUnMpIGFuZCAxOCBjb3VudGVycy4gRVNDUnMgZGVzY3JpYmUgYQotcGFydGljdWxhciBzZXQgb2YgZXZlbnRzIHdoaWNoIGFyZSB0byBiZSByZWNvcmRlZCwgYW5kIENDQ1JzIGJpbmQgRVNDUnMgdG8gY291bnRlcnMgYW5kIGNvbmZpZ3VyZSB0aGVpcgotb3BlcmF0aW9uLiBVbmZvcnR1bmF0ZWx5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSByZWdpc3RlcnMgaXMgcXVpdGUgY29tcGxleDsgdGhleSBjYW5ub3QgYWxsIGJlIHVzZWQgd2l0aCBvbmUKLWFub3RoZXIgYXQgYW55IHRpbWUuIFRoZXJlIGlzLCBob3dldmVyLCBhIHN1YnNldCBvZiA4IGNvdW50ZXJzLCA4IEVTQ1JzLCBhbmQgOCBDQ0NScyB3aGljaCBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5IG9mCi1vbmUgYW5vdGhlciwgc28gT1Byb2ZpbGUgb25seSBhY2Nlc3NlcyB0aG9zZSByZWdpc3RlcnMsIHRyZWF0aW5nIHRoZW0gYXMgYSBiYW5rIG9mIDggIm5vcm1hbCIgY291bnRlcnMsIHNpbWlsYXIKLXRvIHRob3NlIGluIHRoZSBQNiBvciBBdGhsb24gZmFtaWxpZXMgb2YgQ1BVLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1UaGVyZSBpcyBjdXJyZW50bHkgbm8gc3VwcG9ydCBmb3IgUHJlY2lzaW9uIEV2ZW50LUJhc2VkIFNhbXBsaW5nIChQRUJTKSwgbm9yIGFueSBhZHZhbmNlZCB1c2VzIG9mIHRoZSBEZWJ1ZyBTdG9yZQotKERTKS4gQ3VycmVudCBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gdGhlIGNvbnNlcnZhdGl2ZSBleHRlbnNpb24gb2YgT1Byb2ZpbGUncyBleGlzdGluZyBpbnRlcnJ1cHQtYmFzZWQgbW9kZWwgZGVzY3JpYmVkCi1hYm92ZS4gIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaGFyZHdhcmUgb24gUGVudGl1bSA0IC8gWGVvbiBwcm9jZXNzb3JzIHdpdGggSHlwZXJ0aHJlYWRpbmcgZW5hYmxlZCAobXVsdGlwbGUgbG9naWNhbAotcHJvY2Vzc29ycyBvbiBhIHNpbmdsZSBkaWUpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMi40IGtlcm5lbHMgKHlvdSBjYW4gdXNlIE9Qcm9maWxlIGlmIHlvdSBkaXNhYmxlIGh5cGVyLXRocmVhZGluZywKLXRob3VnaCkuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImlhNjQiPjwvYT4zLjUuoEludGVsIEl0YW5pdW0gMiBzdXBwb3J0PC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotVGhlIEl0YW5pdW0gMiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQgKFBNVSkgb3JnYW5pemVzIHRoZSBjb3VudGVycyBhcyBmb3VyCi1wYWlycyBvZiBwZXJmb3JtYW5jZSBldmVudCBtb25pdG9yaW5nIHJlZ2lzdGVycy4gRWFjaCBwYWlyIGlzIGNvbXBvc2VkIG9mIGEKLVBlcmZvcm1hbmNlIE1vbml0b3JpbmcgQ29uZmlndXJhdGlvbiAoUE1DKSByZWdpc3RlciBhbmQgUGVyZm9ybWFuY2UgTW9uaXRvcmluZwotRGF0YSAoUE1EKSByZWdpc3Rlci4gIFRoZSBQTUMgc2VsZWN0cyB0aGUgcGVyZm9ybWFuY2UgZXZlbnQgYmVpbmcgbW9uaXRvcmVkIGFuZAotdGhlIFBNRCBkZXRlcm1pbmVzIHRoZSBzYW1wbGluZyBpbnRlcnZhbC4gVGhlIElBNjQgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0Ci0oUE1VKSB0cmlnZ2VycyBzYW1wbGluZyB3aXRoIG1hc2thYmxlIGludGVycnVwdHMuIFRodXMsIHNhbXBsZXMgd2lsbCBub3Qgb2NjdXIKLWluIHNlY3Rpb25zIG9mIHRoZSBJQTY0IGtlcm5lbCB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotTm9uZSBvZiB0aGUgYWR2YW5jZSBmZWF0dXJlcyBvZiB0aGUgSXRhbml1bSAyIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAotc3VjaCBhcyBvcGNvZGUgbWF0Y2hpbmcsIGFkZHJlc3MgcmFuZ2UgbWF0Y2hpbmcsIG9yIHByZWNpc2UgZXZlbnQgc2FtcGxpbmcgYXJlCi1zdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIE9Qcm9maWxlLiAgVGhlIEl0YW5pdW0gMiBzdXBwb3J0IG9ubHkgbWFwcyBPUHJvZmlsZSdzCi1leGlzdGluZyBpbnRlcnJ1cHQtYmFzZWQgbW9kZWwgdG8gdGhlIFBNVSBoYXJkd2FyZS4KLTwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0icHBjNjQiPjwvYT4zLjYuoFBvd2VyUEM2NCBzdXBwb3J0PC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotVGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAoUE1VKSBmb3IgdGhlIFBvd2VyUEMgNjQtYml0IHByb2Nlc3NvcnMgCi1jb25zaXN0cyBvZiBiZXR3ZWVuIDYgYW5kIDggY291bnRlcnMgKGRlcGVuZGluZyBvbiB0aGUgbW9kZWwpLCBwbHVzIHRocmVlCi1zcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzIHVzZWQgZm9yIHByb2dyYW1taW5nIHRoZSBjb3VudGVycyAtLSBNTUNSMCwgTU1DUjEsCi1hbmQgTU1DUkEuICBBZHZhbmNlZCBmZWF0dXJlcyBzdWNoIGFzIGluc3RydWN0aW9uIG1hdGNoaW5nIGFuZCB0aHJlc2hvbGRpbmcgYXJlCi1ub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBPUHJvZmlsZS4KLTwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ibWlzdXNlIj48L2E+My43LqBEYW5nZXJvdXMgY291bnRlciBzZXR0aW5nczwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLU9Qcm9maWxlIGlzIGEgbG93LWxldmVsIHByb2ZpbGVyIHdoaWNoIGFsbG93IGNvbnRpbnVvdXMgcHJvZmlsaW5nIHdpdGggYSBsb3ctb3ZlcmhlYWQgY29zdC4KLUlmIHRvbyBsb3cgYSBjb3VudCByZXNldCB2YWx1ZSBpcyBzZXQgZm9yIGEgY291bnRlciwgdGhlIHN5c3RlbSBjYW4gYmVjb21lIG92ZXJsb2FkZWQgd2l0aCBjb3VudGVyCi1pbnRlcnJ1cHRzLCBhbmQgc2VlbSBhcyBpZiB0aGUgc3lzdGVtIGhhcyBmcm96ZW4uIFdoaWxzdCBzb21lIHZhbGlkYXRpb24gaXMgZG9uZSwgaXQKLWlzIG5vdCBmb29scHJvb2YuCi08L3A+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+Ci0gICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgotICAgICAgICAgICAgICA8cD4KLVRoaXMgY2FuIGhhcHBlbiBhcyBmb2xsb3dzOiBXaGVuIHRoZSBwcm9maWxlciBjb3VudAotcmVhY2hlcyB6ZXJvIGFuIE5NSSBoYW5kbGVyIGlzIGNhbGxlZCB3aGljaCBzdG9yZXMgdGhlIHNhbXBsZSB2YWx1ZXMgaW4gYW4gaW50ZXJuYWwgYnVmZmVyLCB0aGVuIHJlc2V0cyB0aGUgY291bnRlcgotdG8gaXRzIG9yaWdpbmFsIHZhbHVlLiBJZiB0aGUgY291bnQgaXMgdmVyeSBsb3csIGEgcGVuZGluZyBOTUkgY2FuIGJlIHNlbnQgYmVmb3JlIHRoZSBOTUkgaGFuZGxlciBoYXMKLWNvbXBsZXRlZC4gRHVlIHRvIHRoZSBwcmlvcml0eSBvZiB0aGUgTk1JLCB0aGUgbG9jYWwgQVBJQyBkZWxpdmVycyB0aGUgcGVuZGluZyBpbnRlcnJ1cHQgaW1tZWRpYXRlbHkgYWZ0ZXIKLWNvbXBsZXRpb24gb2YgdGhlIHByZXZpb3VzIGludGVycnVwdCBoYW5kbGVyLCBhbmQgY29udHJvbCBuZXZlciByZXR1cm5zIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCi1JbiB0aGlzIHdheSB0aGUgc3lzdGVtIHNlZW1zIHRvIGJlIGZyb3plbi4KLTwvcD4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPHA+SWYgdGhpcyBoYXBwZW5zLCBpdCB3aWxsIGJlIGltcG9zc2libGUgdG8gYnJpbmcgdGhlIHN5c3RlbSBiYWNrIHRvIGEgd29ya2FibGUgc3RhdGUuCi1UaGVyZSBpcyBubyB3YXkgdG8gcHJvdmlkZSByZWFsIHNlY3VyaXR5IGFnYWluc3QgdGhpcyBoYXBwZW5pbmcsIG90aGVyIHRoYW4gbWFraW5nIHN1cmUgdG8gdXNlIGEgcmVhc29uYWJsZSB2YWx1ZQotZm9yIHRoZSBjb3VudGVyIHJlc2V0LiBGb3IgZXhhbXBsZSwgc2V0dGluZyA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkNQVV9DTEtfVU5IQUxURUQ8L2NvZGU+IGV2ZW50IHR5cGUgd2l0aCBhIHJpZGljdWxvdXNseSBsb3cgcmVzZXQgY291bnQgKGUuZy4gNTAwKQotaXMgbGlrZWx5IHRvIGZyZWV6ZSB0aGUgc3lzdGVtLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1JbiBzaG9ydCA6IDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPkRvbid0IHRyeSBhIGZvb2xpc2ggc2FtcGxlIGNvdW50IHZhbHVlPC9zdHJvbmc+PC9zcGFuPi4gVW5mb3J0dW5hdGVseSB0aGUgZGVmaW5pdGlvbiBvZiBhIGZvb2xpc2ggdmFsdWUKLWlzIHJlYWxseSBkZXBlbmRlbnQgb24gdGhlIGV2ZW50IHR5cGUgLSBpZiBldmVyIGluIGRvdWJ0LCBlLW1haWwgPC9wPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRkcmVzcyI+Ci0gICAgICAgICAgICAgIDxwPjxjb2RlIGNsYXNzPSJlbWFpbCI+Jmx0OzxhIGhyZWY9Im1haWx0bzpvcHJvZmlsZS1saXN0QGxpc3RzLnNmLm5ldCI+b3Byb2ZpbGUtbGlzdEBsaXN0cy5zZi5uZXQ8L2E+Jmd0OzwvY29kZT4uPC9wPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InJlc3VsdHMiPjwvYT5DaGFwdGVyoDQuoE9idGFpbmluZyByZXN1bHRzPC9oMj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KLSAgICAgICAgICA8cD4KLSAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgotICAgICAgICAgIDwvcD4KLSAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2ZpbGUtc3BlYyI+MS4gUHJvZmlsZSBzcGVjaWZpY2F0aW9uczwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwcm9maWxlLXNwZWMtZXhhbXBsZXMiPjEuMS4gRXhhbXBsZXM8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJvZmlsZS1zcGVjLWRldGFpbHMiPjEuMi4gUHJvZmlsZSBzcGVjaWZpY2F0aW9uIHBhcmFtZXRlcnM8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaWQyNjgyOTM2Ij4xLjMuIExvY2F0aW5nIGFuZCBtYW5hZ2luZyBiaW5hcnkgaW1hZ2VzPC9hPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI25vLXJlc3VsdHMiPjEuNC4gV2hhdCB0byBkbyB3aGVuIHlvdSBkb24ndCBnZXQgYW55IHJlc3VsdHM8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wcmVwb3J0Ij4yLiBJbWFnZSBzdW1tYXJpZXMgYW5kIHN5bWJvbCBzdW1tYXJpZXMgKDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPik8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtbWVyZ2luZyI+Mi4xLiBNZXJnaW5nIHNlcGFyYXRlIHByb2ZpbGVzPC9hPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wcmVwb3J0LWNvbXBhcmlzb24iPjIuMi4gU2lkZS1ieS1zaWRlIG11bHRpcGxlIHJlc3VsdHM8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtY2FsbGdyYXBoIj4yLjMuIENhbGxncmFwaCBvdXRwdXQ8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtZGlmZiI+Mi40LiBEaWZmZXJlbnRpYWwgcHJvZmlsZXMgd2l0aCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj48L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtYW5vbiI+Mi41LiBBbm9ueW1vdXMgZXhlY3V0YWJsZSBtYXBwaW5nczwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcHJlcG9ydC1vcHRpb25zIj4yLjYuIE9wdGlvbnMgZm9yIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPjwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3Bhbm5vdGF0ZSI+My4gT3V0cHV0dGluZyBhbm5vdGF0ZWQgc291cmNlICg8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGFubm90YXRlPC9zdHJvbmc+PC9zcGFuPik8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3Bhbm5vdGF0ZS1maW5kaW5nLXNvdXJjZSI+My4xLiBMb2NhdGluZyBzb3VyY2UgZmlsZXM8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3Bhbm5vdGF0ZS1kZXRhaWxzIj4zLjIuIFVzYWdlIG9mIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wYW5ub3RhdGU8L3N0cm9uZz48L3NwYW4+PC9hPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGdwcm9mIj40LiA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5ncHJvZjwvc3Ryb25nPjwvc3Bhbj4tY29tcGF0aWJsZSBvdXRwdXQgKDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wZ3Byb2Y8L3N0cm9uZz48L3NwYW4+KTwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGdwcm9mLWRldGFpbHMiPjQuMS4gVXNhZ2Ugb2YgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BncHJvZjwvc3Ryb25nPjwvc3Bhbj48L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wYXJjaGl2ZSI+NS4gQXJjaGl2aW5nIG1lYXN1cmVtZW50cyAoPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPik8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BhcmNoaXZlLWRldGFpbHMiPjUuMS4gVXNhZ2Ugb2YgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPjwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8L2RsPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHA+Ci1PSywgc28gdGhlIHByb2ZpbGVyIGhhcyBiZWVuIHJ1bm5pbmcsIGJ1dCBpdCdzIG5vdCBtdWNoIHVzZSB1bmxlc3Mgd2UgY2FuIGdldCBzb21lIGRhdGEgb3V0LiBGYWlybHkgb2Z0ZW4sCi1PUHJvZmlsZSBkb2VzIGEgbGl0dGxlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnRvbzwvZW0+PC9zcGFuPiBnb29kIGEgam9iIG9mIGtlZXBpbmcgb3ZlcmhlYWQgbG93LCBhbmQgbm8gZGF0YSByZWFjaGVzCi10aGUgcHJvZmlsZXIuIFRoaXMgY2FuIGhhcHBlbiBvbiBsaWdodGx5LWxvYWRlZCBtYWNoaW5lcy4gUmVtZW1iZXIgeW91IGNhbiBmb3JjZSBhIGR1bXAgYXQgYW55IHRpbWUgd2l0aCA6Ci08L3A+Ci0gICAgICAgIDxwPgotICAgICAgICAgIDxzcGFuPgotICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sIC0tZHVtcDwvc3Ryb25nPgotICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgPC9wPgotICAgICAgICA8cD5SZW1lbWJlciB0byBkbyB0aGlzIGJlZm9yZSBjb21wbGFpbmluZyB0aGVyZSBpcyBubyBwcm9maWxpbmcgZGF0YSAhCi1Ob3cgdGhhdCB3ZSd2ZSBnb3Qgc29tZSBkYXRhLCBpdCBoYXMgdG8gYmUgcHJvY2Vzc2VkLiBUaGF0J3MgdGhlIGpvYiBvZiA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4sCi08c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGFubm90YXRlPC9zdHJvbmc+PC9zcGFuPiwgb3IgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BncHJvZjwvc3Ryb25nPjwvc3Bhbj4uCi08L3A+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJwcm9maWxlLXNwZWMiPjwvYT4xLqBQcm9maWxlIHNwZWNpZmljYXRpb25zPC9oMj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8cD4KLUFsbCBvZiB0aGUgYW5hbHlzaXMgdG9vbHMgdGFrZSBhIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvZW0+PC9zcGFuPi4KLVRoaXMgaXMgYSBzZXQgb2YgZGVmaW5pdGlvbnMgdGhhdCBkZXNjcmliZSB3aGljaCBhY3R1YWwgcHJvZmlsZXMgc2hvdWxkIGJlCi1leGFtaW5lZC4gVGhlIHNpbXBsZXN0IHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBpcyBlbXB0eTogdGhpcyB3aWxsIG1hdGNoIGFsbAotdGhlIGF2YWlsYWJsZSBwcm9maWxlIGZpbGVzIGZvciB0aGUgY3VycmVudCBzZXNzaW9uICh0aGlzIGlzIHdoYXQgaGFwcGVucwotd2hlbiB5b3UgZG8gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+KS4KLTwvcD4KLSAgICAgICAgICA8cD4KLVNwZWNpZmljYXRpb24gcGFyYW1ldGVycyBhcmUgb2YgdGhlIGZvcm0gPGNvZGUgY2xhc3M9Im9wdGlvbiI+bmFtZTp2YWx1ZVssdmFsdWVdPC9jb2RlPi4KLUZvciBleGFtcGxlLCBpZiBJIHdhbnRlZCB0byBnZXQgYSBjb21iaW5lZCBzeW1ib2wgc3VtbWFyeSBmb3IKLTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2Jpbi9teXByb2c8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9iaW4vbXlwcm9nMjwvY29kZT4sCi1JIGNvdWxkIGRvIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0IC1sIGltYWdlOi9iaW4vbXlwcm9nLC9iaW4vbXlwcm9nMjwvc3Ryb25nPjwvc3Bhbj4uCi1BcyBhIHNwZWNpYWwgY2FzZSwgeW91IGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+aW1hZ2U6PC9jb2RlPgotcGFydCBoZXJlOiBhbnl0aGluZyBsZWZ0IG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgYXNzdW1lZCB0byBiZSBhbgotPGNvZGUgY2xhc3M9Im9wdGlvbiI+aW1hZ2U6PC9jb2RlPiBuYW1lLiBTaW1pbGFybHksIGlmIG5vIDxjb2RlIGNsYXNzPSJvcHRpb24iPnNlc3Npb246PC9jb2RlPgotaXMgc3BlY2lmaWVkLCB0aGVuIDxjb2RlIGNsYXNzPSJvcHRpb24iPnNlc3Npb246Y3VycmVudDwvY29kZT4gaXMgYXNzdW1lZCAoImN1cnJlbnQiCi1pcyBhIHNwZWNpYWwgbmFtZSBvZiB0aGUgY3VycmVudCAvIGxhc3QgcHJvZmlsaW5nIHNlc3Npb24pLgotPC9wPgotICAgICAgICAgIDxwPgotSW4gYWRkaXRpb24gdG8gdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHNob3duIGFib3ZlLCBzb21lIG9mIHRoZSAKLXNwZWNpZmljYXRpb24gcGFyYW1ldGVycyBjYW4gdGFrZSA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5nbG9iPC9zdHJvbmc+PC9zcGFuPi1zdHlsZQotdmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgSSB3YW50IHRvIHNlZSBpbWFnZSBzdW1tYXJpZXMgZm9yIGFsbAotYmluYXJpZXMgcHJvZmlsZWQgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vdXNyL2Jpbi88L2NvZGU+LCBJIGNvdWxkIGRvCi08c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydCBpbWFnZTovdXNyL2Jpbi9cKjwvc3Ryb25nPjwvc3Bhbj4uIE5vdGUgdGhlIG5lY2Vzc2l0eQotdG8gZXNjYXBlIHRoZSBzcGVjaWFsIGNoYXJhY3RlciBmcm9tIHRoZSBzaGVsbC4KLTwvcD4KLSAgICAgICAgICA8cD4KLUZvciA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4sIHByb2ZpbGUgc3BlY2lmaWNhdGlvbnMgY2FuIGJlIHVzZWQgdG8KLWRlZmluZSB0d28gcHJvZmlsZXMsIGdpdmluZyBkaWZmZXJlbnRpYWwgb3V0cHV0LiBUaGlzIGlzIGRvbmUgYnkKLWVuY2xvc2luZyBlYWNoIG9mIHRoZSB0d28gc3BlY2lmaWNhdGlvbnMgd2l0aGluIGN1cmx5IGJyYWNlcywgYXMgc2hvd24KLWluIHRoZSBleGFtcGxlcyBiZWxvdy4gQW55IHNwZWNpZmljYXRpb25zIG91dHNpZGUgb2YgY3VybHkgYnJhY2VzIGFyZQotc2hhcmVkIGFjcm9zcyBib3RoLgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJwcm9maWxlLXNwZWMtZXhhbXBsZXMiPjwvYT4xLjEuoEV4YW1wbGVzPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotSW1hZ2Ugc3VtbWFyaWVzIGZvciBhbGwgcHJvZmlsZXMgd2l0aCA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkRBVEFfTUVNX1JFRlM8L2NvZGU+Ci1zYW1wbGVzIGluIHRoZSBzYXZlZCBzZXNzaW9uIGNhbGxlZCAic3RyZXNzdGVzdCIgOgotPC9wPgotICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KLSAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+Ci0jIG9wcmVwb3J0IHNlc3Npb246c3RyZXNzdGVzdCBldmVudDpEQVRBX01FTV9SRUZTCi08L3ByZT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIDxwPgotU3ltYm9sIHN1bW1hcnkgZm9yIHRoZSBhcHBsaWNhdGlvbiBjYWxsZWQgInRlc3Rfc3ltNTNjOHh4LDl4eCIuIE5vdGUgdGhlCi1lc2NhcGluZyBpcyBuZWNlc3NhcnkgYXMgPGNvZGUgY2xhc3M9Im9wdGlvbiI+aW1hZ2U6PC9jb2RlPiB0YWtlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgotPC9wPgotICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KLSAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+Ci0jIG9wcmVwb3J0IC1sIC4vdGVzdC90ZXN0X3N5bTUzYzh4eFwsOXh4Ci08L3ByZT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIDxwPgotSW1hZ2Ugc3VtbWFyaWVzIGZvciBhbGwgYmluYXJpZXMgaW4gdGhlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+dGVzdDwvY29kZT4gZGlyZWN0b3J5LAotZXhjZXB0aW5nIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+Ym9yaW5nLXRlc3Q8L2NvZGU+IDoKLTwvcD4KLSAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotIyBvcHJlcG9ydCBpbWFnZTouL3Rlc3QvXCogaW1hZ2UtZXhjbHVkZTouL3Rlc3QvYm9yaW5nLXRlc3QKLTwvcHJlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPHA+Ci1EaWZmZXJlbnRpYWwgcHJvZmlsZSBvZiBhIGJpbmFyeSBzdG9yZWQgaW4gdHdvIGFyY2hpdmVzIDoKLTwvcD4KLSAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotIyBvcHJlcG9ydCAtbCAvYmluL2Jhc2ggeyBhcmNoaXZlOi4vb3JpZyB9IHsgYXJjaGl2ZTouL25ldyB9Ci08L3ByZT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIDxwPgotRGlmZmVyZW50aWFsIHByb2ZpbGUgb2YgYW4gYXJjaGl2ZWQgYmluYXJ5IHdpdGggdGhlIGN1cnJlbnQgc2Vzc2lvbiA6Ci08L3A+Ci0gICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLSMgb3ByZXBvcnQgLWwgL2Jpbi9iYXNoIHsgYXJjaGl2ZTouL29yaWcgfSB7IH0KLTwvcHJlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJwcm9maWxlLXNwZWMtZGV0YWlscyI+PC9hPjEuMi6gUHJvZmlsZSBzcGVjaWZpY2F0aW9uIHBhcmFtZXRlcnM8L2gzPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLSAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+YXJjaGl2ZTo8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGVtPmFyY2hpdmVwYXRoPC9lbT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci0JCUEgcGF0aCB0byBhbiBhcmNoaXZlIG1hZGUgd2l0aCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGFyY2hpdmU8L3N0cm9uZz48L3NwYW4+LgotCQlBYnNlbmNlIG9mIHRoaXMgdGFnLCB1bmxpa2Ugb3RoZXJzLCBtZWFucyAidGhlIGN1cnJlbnQgc3lzdGVtIiwKLQkJZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nICJhcmNoaXZlOiIuCi0JCTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+c2Vzc2lvbjo8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGVtPnNlc3Npb25saXN0PC9lbT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci0JCUEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2Vzc2lvbiBuYW1lcyB0byByZXNvbHZlIGluLiBBYnNlbmNlIG9mIHRoaXMKLQkJdGFnLCB1bmxpa2Ugb3RoZXJzLCBtZWFucyAidGhlIGN1cnJlbnQgc2Vzc2lvbiIsIGVxdWl2YWxlbnQgdG8KLQkJc3BlY2lmeWluZyAic2Vzc2lvbjpjdXJyZW50Ii4KLQkJPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5zZXNzaW9uLWV4Y2x1ZGU6PC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPgotICAgICAgICAgICAgICAgICAgICAgIDxlbT5zZXNzaW9ubGlzdDwvZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2Vzc2lvbnMgdG8gZXhjbHVkZS4KLQkJPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5pbWFnZTo8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGVtPmltYWdlbGlzdDwvZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgbmFtZXMgdG8gcmVzb2x2ZS4gRWFjaCBlbnRyeSBtYXkgYmUgcmVsYXRpdmUKLSAgICAgICAgICAgICAgICBwYXRoLCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5nbG9iPC9zdHJvbmc+PC9zcGFuPi1zdHlsZSBuYW1lLCBvciBmdWxsIHBhdGgsIGUuZy48L3A+Ci0gICAgICAgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj5vcHJlcG9ydCAnaW1hZ2U6L3Vzci9iaW4vb3Byb2ZpbGVkLCpvcCosLi9vcHJlcG9ydCc8L3ByZT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+aW1hZ2UtZXhjbHVkZTo8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGVtPmltYWdlbGlzdDwvZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotCQlTYW1lIGFzIDxjb2RlIGNsYXNzPSJvcHRpb24iPmltYWdlOjwvY29kZT4sIGJ1dCB0aGUgbWF0Y2hpbmcgaW1hZ2VzIGFyZSBleGNsdWRlZC4KLQkJPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5saWItaW1hZ2U6PC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPgotICAgICAgICAgICAgICAgICAgICAgIDxlbT5pbWFnZWxpc3Q8L2VtPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLQkJU2FtZSBhcyA8Y29kZSBjbGFzcz0ib3B0aW9uIj5pbWFnZTo8L2NvZGU+LCBidXQgb25seSBmb3IgaW1hZ2VzIHRoYXQgYXJlIGZvcgotCQlhIHBhcnRpY3VsYXIgcHJpbWFyeSBiaW5hcnkgaW1hZ2UgKG5hbWVseSwgYW4gYXBwbGljYXRpb24pLiBUaGlzIG9ubHkKLQkJbWFrZXMgc2Vuc2UgdG8gdXNlIGlmIHlvdSdyZSB1c2luZyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPC9jb2RlPi4KLQkJVGhpcyBpbmNsdWRlcyBrZXJuZWwgbW9kdWxlcyBhbmQgdGhlIGtlcm5lbCB3aGVuIHVzaW5nCi0JCTxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9a2VybmVsPC9jb2RlPi4KLQkJPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5saWItaW1hZ2UtZXhjbHVkZTo8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGVtPmltYWdlbGlzdDwvZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotCQlTYW1lIGFzIDxjb2RlIGNsYXNzPSJvcHRpb24iPmxpYi1pbWFnZTo8L2NvZGU+LCBidXQgdGhlIG1hdGNoaW5nIGltYWdlcwotCQlhcmUgZXhjbHVkZWQuCi0JCTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+ZXZlbnQ6PC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPgotICAgICAgICAgICAgICAgICAgICAgIDxlbT5ldmVudGxpc3Q8L2VtPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLQkJVGhlIHN5bWJvbGljIGV2ZW50IG5hbWUgdG8gbWF0Y2ggb24sIGUuZy4gPGNvZGUgY2xhc3M9Im9wdGlvbiI+ZXZlbnQ6REFUQV9NRU1fUkVGUzwvY29kZT4uCi0JCVlvdSBjYW4gcGFzcyBhIGxpc3Qgb2YgZXZlbnRzIGZvciBzaWRlLWJ5LXNpZGUgY29tcGFyaXNvbiB3aXRoIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPi4KLQkJV2hlbiB1c2luZyB0aGUgdGltZXIgaW50ZXJydXB0LCB0aGUgZXZlbnQgaXMgYWx3YXlzICJUSU1FUiIuCi0JCTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+Y291bnQ6PC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPgotICAgICAgICAgICAgICAgICAgICAgIDxlbT5ldmVudGNvdW50bGlzdDwvZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotCQlUaGUgZXZlbnQgY291bnQgdG8gbWF0Y2ggb24sIGUuZy4gPGNvZGUgY2xhc3M9Im9wdGlvbiI+ZXZlbnQ6REFUQV9NRU1fUkVGUyBjb3VudDozMDAwMDwvY29kZT4uCi0JCU5vdGUgdGhhdCB0aGlzIHZhbHVlIHJlZmVycyB0byB0aGUgc2V0dGluZyB1c2VkIGZvciA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+Ci0JCW9ubHksIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBzYW1wbGUgY291bnRzIGluIHRoZSBwcm9maWxlIGRhdGEKLQkJaXRzZWxmLgotCQlZb3UgY2FuIHBhc3MgYSBsaXN0IG9mIGV2ZW50cyBmb3Igc2lkZS1ieS1zaWRlIGNvbXBhcmlzb24gd2l0aCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4uCi0JCVdoZW4gdXNpbmcgdGhlIHRpbWVyIGludGVycnVwdCwgdGhlIGNvdW50IGlzIGFsd2F5cyAwIChpbmRpY2F0aW5nIGl0IGNhbm5vdCBiZSBzZXQpLgotCQk8L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPnVuaXQtbWFzazo8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGVtPm1hc2tsaXN0PC9lbT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci0JCVRoZSB1bml0IG1hc2sgdmFsdWUgb2YgdGhlIGV2ZW50IHRvIG1hdGNoIG9uLCBlLmcuIDxjb2RlIGNsYXNzPSJvcHRpb24iPnVuaXQtbWFzazoxPC9jb2RlPi4KLQkJWW91IGNhbiBwYXNzIGEgbGlzdCBvZiBldmVudHMgZm9yIHNpZGUtYnktc2lkZSBjb21wYXJpc29uIHdpdGggPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+LgotCQk8L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmNwdTo8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGVtPmNwdWxpc3Q8L2VtPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLQkJT25seSBjb25zaWRlciBwcm9maWxlcyBmb3IgdGhlIGdpdmVuIG51bWJlcmVkIENQVSAoc3RhcnRpbmcgZnJvbSB6ZXJvKS4KLQkJVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHVzaW5nIENQVSBwcm9maWxlIHNlcGFyYXRpb24uCi0JCTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+dGdpZDo8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGVtPnBpZGxpc3Q8L2VtPgotICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLQkJT25seSBjb25zaWRlciBwcm9maWxlcyBmb3IgdGhlIGdpdmVuIHRhc2sgZ3JvdXBzLiBVbmxlc3Mgc29tZSBwcm9ncmFtCi0JCWlzIHVzaW5nIHRocmVhZHMsIHRoZSB0YXNrIGdyb3VwIElEIG9mIGEgcHJvY2VzcyBpcyB0aGUgc2FtZQotCQlhcyBpdHMgcHJvY2VzcyBJRC4gVGhpcyBvcHRpb24gY29ycmVzcG9uZHMgdG8gdGhlIFBPU0lYCi0JCW5vdGlvbiBvZiBhIHRocmVhZCBncm91cC4KLQkJVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHVzaW5nIHBlci1wcm9jZXNzIHByb2ZpbGUgc2VwYXJhdGlvbi4KLQkJPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj50aWQ6PC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPgotICAgICAgICAgICAgICAgICAgICAgIDxlbT50aWRsaXN0PC9lbT4KLSAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci0JCU9ubHkgY29uc2lkZXIgcHJvZmlsZXMgZm9yIHRoZSBnaXZlbiB0aHJlYWRzLiBXaGVuIHVzaW5nCi0JCXJlY2VudCB0aHJlYWQgbGlicmFyaWVzLCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3Mgc2hhcmUgdGhlCi0JCXNhbWUgdGFzayBncm91cCBJRCwgYnV0IGhhdmUgZGlmZmVyZW50IHRocmVhZCBJRHMuIFlvdSBjYW4KLQkJdXNlIHRoaXMgb3B0aW9uIGluIGNvbWJpbmF0aW9uIHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+dGdpZDo8L2NvZGU+IHRvCi0JCXJlc3RyaWN0IHRoZSByZXN1bHRzIHRvIHBhcnRpY3VsYXIgdGhyZWFkcyB3aXRoaW4gYSBwcm9jZXNzLgotCQlUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgcGVyLXByb2Nlc3MgcHJvZmlsZSBzZXBhcmF0aW9uLgotCQk8L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJpZDI2ODI5MzYiPjwvYT4xLjMuoExvY2F0aW5nIGFuZCBtYW5hZ2luZyBiaW5hcnkgaW1hZ2VzPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotRWFjaCBzZXNzaW9uJ3Mgc2FtcGxlIGZpbGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLzwvY29kZT4gZGlyZWN0b3J5LgotVGhlc2UgYXJlIHVzZWQsIGFsb25nIHdpdGggdGhlIGJpbmFyeSBpbWFnZSBmaWxlcywgdG8gcHJvZHVjZSBodW1hbi1yZWFkYWJsZSBkYXRhLgotSW4gc29tZSBjaXJjdW1zdGFuY2VzIChrZXJuZWwgbW9kdWxlcyBpbiBhbiBpbml0cmQsIG9yIG1vZHVsZXMgb24gMi42IGtlcm5lbHMpLCBPUHJvZmlsZQotd2lsbCBub3QgYmUgYWJsZSB0byBmaW5kIHRoZSBiaW5hcnkgaW1hZ2VzLiBBbGwgdGhlIHRvb2xzIGhhdmUgYW4gPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1pbWFnZS1wYXRoPC9jb2RlPgotb3B0aW9uIHRvIHdoaWNoIHlvdSBjYW4gcGFzcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFsdGVybmF0ZSBwYXRocyB0byBzZWFyY2guIEZvciBleGFtcGxlLAotSSBjYW4gbGV0IE9Qcm9maWxlIGZpbmQgbXkgMi42IG1vZHVsZXMgYnkgdXNpbmcgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+LS1pbWFnZS1wYXRoIC9saWIvbW9kdWxlcy8yLjYuMC9rZXJuZWwvPC9zdHJvbmc+PC9zcGFuPi4KLUl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgaW1hZ2VzIGFyZSBmb3VuZCB3aGVuIHVzaW5nIHRoaXMKLW9wdGlvbi4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotTm90ZSB0aGF0IGlmIGEgYmluYXJ5IGltYWdlIGNoYW5nZXMgYWZ0ZXIgdGhlIHNhbXBsZSBmaWxlIHdhcyBjcmVhdGVkLCB5b3Ugd29uJ3QgYmUgYWJsZSB0byBnZXQgdXNlZnVsCi1zeW1ib2wtYmFzZWQgZGF0YSBvdXQuIFRoaXMgc2l0dWF0aW9uIGlzIGRldGVjdGVkIGZvciB5b3UuIElmIHlvdSByZXBsYWNlIGEgYmluYXJ5LCB5b3Ugc2hvdWxkCi1tYWtlIHN1cmUgdG8gc2F2ZSB0aGUgb2xkIGJpbmFyeSBpZiB5b3UgbmVlZCB0byBkbyBjb21wYXJhdGl2ZSBwcm9maWxlcy4KLTwvcD4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ibm8tcmVzdWx0cyI+PC9hPjEuNC6gV2hhdCB0byBkbyB3aGVuIHlvdSBkb24ndCBnZXQgYW55IHJlc3VsdHM8L2gzPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPHA+Ci1XaGVuIGF0dGVtcHRpbmcgdG8gZ2V0IG91dHB1dCwgeW91IG1heSBzZWUgdGhlIGVycm9yIDoKLTwvcD4KLSAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotZXJyb3I6IG5vIHNhbXBsZSBmaWxlcyBmb3VuZDogcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHRvbyBzdHJpY3QgPwotPC9wcmU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8cD4KLVdoYXQgdGhpcyBpcyBzYXlpbmcgaXMgdGhhdCB0aGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHlvdSBwYXNzZWQgaW4sCi13aGVuIG1hdGNoZWQgYWdhaW5zdCB0aGUgYXZhaWxhYmxlIHNhbXBsZSBmaWxlcywgcmVzdWx0ZWQgaW4gbm8gbWF0Y2hlcy4KLVRoZXJlIGFyZSBhIG51bWJlciBvZiByZWFzb25zIHRoaXMgbWlnaHQgaGFwcGVuOgotPC9wPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLSAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5zcGVsbGluZzwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotWW91IHNwZWNpZmllZCBhIGJpbmFyeSBuYW1lLCBidXQgc3BlbHQgaXQgd3JvbmdseS4gQ2hlY2sgeW91ciBzcGVsbGluZyAhCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+cHJvZmlsZXIgd2Fzbid0IHJ1bm5pbmc8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLU1ha2UgdmVyeSBzdXJlIHRoYXQgT1Byb2ZpbGUgd2FzIGFjdHVhbGx5IHVwIGFuZCBydW5uaW5nIHdoZW4geW91IHJhbgotdGhlIGJpbmFyeS4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5iaW5hcnkgZGlkbid0IHJ1biBsb25nIGVub3VnaDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotUmVtZW1iZXIgT1Byb2ZpbGUgaXMgYSBzdGF0aXN0aWNhbCBwcm9maWxlciAtIHlvdSdyZSBub3QgZ3VhcmFudGVlZCB0bwotZ2V0IHNhbXBsZXMgZm9yIHNob3J0LXJ1bm5pbmcgcHJvZ3JhbXMuIFlvdSBjYW4gaGVscCB0aGlzIGJ5IHVzaW5nIGEKLWxvd2VyIGNvdW50IGZvciB0aGUgcGVyZm9ybWFuY2UgY291bnRlciwgc28gdGhlcmUgYXJlIGEgbG90IG1vcmUgc2FtcGxlcwotdGFrZW4gcGVyIHNlY29uZC4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5iaW5hcnkgc3BlbnQgbW9zdCBvZiBpdHMgdGltZSBpbiBsaWJyYXJpZXM8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLVNpbWlsYXJseSwgaWYgdGhlIGJpbmFyeSBzcGVuZHMgbGl0dGxlIHRpbWUgaW4gdGhlIG1haW4gYmluYXJ5IGltYWdlCi1pdHNlbGYsIHdpdGggbW9zdCBvZiBpdCBzcGVudCBpbiBzaGFyZWQgbGlicmFyaWVzIGl0IHVzZXMsIHlvdSBtaWdodAotbm90IHNlZSBhbnkgc2FtcGxlcyBmb3IgdGhlIGJpbmFyeSBpbWFnZSBpdHNlbGYuIFlvdSBjYW4gY2hlY2sgdGhpcwotYnkgdXNpbmcgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sIC0tc2VwYXJhdGU9bGliPC9zdHJvbmc+PC9zcGFuPiBiZWZvcmUgdGhlCi1wcm9maWxpbmcgc2Vzc2lvbiwgc28gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+IGFuZCBmcmllbmRzIHNob3cKLXRoZSBsaWJyYXJ5IHByb2ZpbGVzIG9uIGEgcGVyLWFwcGxpY2F0aW9uIGJhc2lzLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPnNwZWNpZmljYXRpb24gd2FzIHJlYWxseSB0b28gc3RyaWN0PC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1Gb3IgZXhhbXBsZSwgeW91IHNwZWNpZmllZCBzb21ldGhpbmcgbGlrZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj50Z2lkOjM0MzM8L2NvZGU+LAotYnV0IG5vIHRhc2sgd2l0aCB0aGF0IGdyb3VwIElEIGV2ZXIgcmFuIHRoZSBjb2RlLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPmJpbmFyeSBkaWRuJ3QgZ2VuZXJhdGUgYW55IGV2ZW50czwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotSWYgeW91J3JlIHVzaW5nIGEgcGFydGljdWxhciBldmVudCBjb3VudGVyLCBmb3IgZXhhbXBsZSBjb3VudGluZyBNTVgKLW9wZXJhdGlvbnMsIHRoZSBjb2RlIG1pZ2h0IHNpbXBseSBoYXZlIG5vdCBnZW5lcmF0ZWQgYW55IGV2ZW50cyBpbiB0aGUKLWZpcnN0IHBsYWNlLiBWZXJpZnkgdGhlIGNvZGUgeW91J3JlIHByb2ZpbGluZyBkb2VzIHdoYXQgeW91IGV4cGVjdCBpdAotdG8uCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+eW91IGRpZG4ndCBzcGVjaWZ5IGtlcm5lbCBtb2R1bGUgbmFtZSBjb3JyZWN0bHk8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLUlmIHlvdSdyZSB1c2luZyAyLjYga2VybmVscywgYW5kIHRyeWluZyB0byBnZXQgcmVwb3J0cyBmb3IgYSBrZXJuZWwKLW1vZHVsZSwgbWFrZSBzdXJlIHRvIHVzZSB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LXA8L2NvZGU+IG9wdGlvbiwgYW5kIHNwZWNpZnkgdGhlCi1tb2R1bGUgbmFtZSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT53aXRoPC9lbT48L3NwYW4+IHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi5rbzwvY29kZT4KLWV4dGVuc2lvbi4gQ2hlY2sgaWYgdGhlIG1vZHVsZSBpcyBvbmUgbG9hZGVkIGZyb20gaW5pdHJkLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvcHJlcG9ydCI+PC9hPjIuoEltYWdlIHN1bW1hcmllcyBhbmQgc3ltYm9sIHN1bW1hcmllcyAoPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+KTwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1UaGUgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+IHV0aWxpdHkgaXMgdGhlIHByaW1hcnkgdXRpbGl0eSB5b3Ugd2lsbCB1c2UgZm9yIAotZ2V0dGluZyBmb3JtYXR0ZWQgZGF0YSBvdXQgb2YgT1Byb2ZpbGUuIEl0IHByb2R1Y2VzIHR3byB0eXBlcyBvZiBkYXRhOiBpbWFnZSBzdW1tYXJpZXMKLWFuZCBzeW1ib2wgc3VtbWFyaWVzLiBBbiBpbWFnZSBzdW1tYXJ5IGxpc3RzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBmb3IgaW5kaXZpZHVhbAotYmluYXJ5IGltYWdlcyBzdWNoIGFzIGxpYnJhcmllcyBvciBhcHBsaWNhdGlvbnMuIFN5bWJvbCBzdW1tYXJpZXMgcHJvdmlkZSBwZXItc3ltYm9sCi1wcm9maWxlIGRhdGEuIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgd2UncmUgZ2V0dGluZyBhbiBpbWFnZSBzdW1tYXJ5IGZvciB0aGUgd2hvbGUKLXN5c3RlbToKLTwvcD4KLSAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLSQgb3ByZXBvcnQgLS1sb25nLWZpbGVuYW1lcwotQ1BVOiBQSUlJLCBzcGVlZCA4NjMuMTk1IE1IeiAoZXN0aW1hdGVkKQotQ291bnRlZCBDUFVfQ0xLX1VOSEFMVEVEIGV2ZW50cyAoY2xvY2tzIHByb2Nlc3NvciBpcyBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMjMxNTAKLSAgIDkwNTg5OCA1OS43NDE1IC91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yL2NjMXBsdXMKLSAgIDIxNDMyMCAxNC4xMzM4IC9ib290LzIuNi4wL3ZtbGludXgKLSAgIDEwMzQ1MCAgNi44MjIyIC9saWIvaTY4Ni9saWJjLTIuMy4yLnNvCi0gICAgNjAxNjAgIDMuOTY3NCAvdXNyL2xvY2FsL2Jpbi9tYWRwbGF5Ci0gICAgMzE3NjkgIDIuMDk1MSAvdXNyL2xvY2FsL29wcm9maWxlLXBwL2Jpbi9vcHJvZmlsZWQKLSAgICAyNjU1MCAgMS43NTA5IC91c3IvbGliL2xpYmFydHNmbG93LnNvLjEuMC4wCi0gICAgMjM5MDYgIDEuNTc2NSAvdXNyL2Jpbi9hcwotICAgIDE4NzcwICAxLjIzNzggL29wcm9maWxlCi0gICAgMTU1MjggIDEuMDI0MCAvdXNyL2xpYi9xdC0zLjAuNS9saWIvbGlicXQtbXQuc28uMy4wLjUKLSAgICAxMTk3OSAgMC43OTAwIC91c3IvWDExUjYvYmluL1hGcmVlODYKLSAgICAxMTMyOCAgMC43NDcxIC9iaW4vYmFzaAotICAgIC4uLgotPC9wcmU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHA+Ci1JZiB3ZSBoYWQgc3BlY2lmaWVkIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3ltYm9sczwvY29kZT4gaW4gdGhlIHByZXZpb3VzIGNvbW1hbmQsIHdlIHdvdWxkIGhhdmUKLWdvdHRlbiBhIHN5bWJvbCBzdW1tYXJ5IG9mIGFsbCB0aGUgaW1hZ2VzIGFjcm9zcyB0aGUgZW50aXJlIHN5c3RlbS4gV2UgY2FuIHJlc3RyaWN0IHRoaXMgdG8gb25seQotcGFydCBvZiB0aGUgc3lzdGVtIHByb2ZpbGU7IGZvciBleGFtcGxlLAotYmVsb3cgaXMgYSBzeW1ib2wgc3VtbWFyeSBvZiB0aGUgT1Byb2ZpbGUgZGFlbW9uLiBOb3RlIHRoYXQgYXMgd2UgdXNlZAotPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bjb250cm9sIC0tc2VwYXJhdGU9a2VybmVsPC9zdHJvbmc+PC9zcGFuPiwgc3ltYm9scyBmcm9tIGltYWdlcyB0aGF0IDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcm9maWxlZDwvc3Ryb25nPjwvc3Bhbj4KLWhhcyB1c2VkIGFyZSBhbHNvIHNob3duLgotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotJCBvcHJlcG9ydCAtbCBgd2hpY2ggb3Byb2ZpbGVkYCAyJmd0Oy9kZXYvbnVsbCB8IG1vcmUKLUNQVTogUElJSSwgc3BlZWQgODYzLjE5NSBNSHogKGVzdGltYXRlZCkKLUNvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKGNsb2NrcyBwcm9jZXNzb3IgaXMgbm90IGhhbHRlZCkgd2l0aCBhIHVuaXQgbWFzayBvZiAweDAwIChObyB1bml0IG1hc2spIGNvdW50IDIzMTUwCi12bWEgICAgICBzYW1wbGVzICAlICAgICAgICAgICBpbWFnZSBuYW1lICAgICAgICAgICAgICAgc3ltYm9sIG5hbWUKLTA4MDRiZTEwIDE0OTcxICAgIDI4LjE5OTMgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvZGJfaW5zZXJ0Ci0wODA0YWZkYyA3MTQ0ICAgICAxMy40NTY0ICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgcG9wX2J1ZmZlcl92YWx1ZQotYzAxZGFlYTAgNjExMyAgICAgMTEuNTE0NCAgICAgdm1saW51eCAgICAgICAgICAgICAgICAgIF9fY29weV90b191c2VyX2xsCi0wODA0YjA2MCAyODE2ICAgICAgNS4zMDQyICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgb3BkX3B1dF9zYW1wbGUKLTA4MDRiNGEwIDIxNDcgICAgICA0LjA0NDEgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvcGRfcHJvY2Vzc19zYW1wbGVzCi0wODA0YWNmNCAxODU1ICAgICAgMy40OTQxICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgb3BkX3B1dF9pbWFnZV9zYW1wbGUKLTA4MDRhZDg0IDE3NjYgICAgICAzLjMyNjQgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvcGRfZmluZF9pbWFnZQotMDgwNGE1ZWMgMTA4NCAgICAgIDIuMDQxOCAgICAgb3Byb2ZpbGVkICAgICAgICAgICAgICAgIG9wZF9maW5kX21vZHVsZQotMDgwNGJhNWMgNzQxICAgICAgIDEuMzk1NyAgICAgb3Byb2ZpbGVkICAgICAgICAgICAgICAgIG9kYl9oYXNoX2FkZF9ub2RlCi0uLi4KLTwvcHJlPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDxwPgotVGhlc2UgYXJlIHRoZSB0d28gYmFzaWMgd2F5cyB5b3UgYXJlIG1vc3QgbGlrZWx5IHRvIHVzZSByZWd1bGFybHksIGJ1dCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4KLWNhbiBkbyBhIGxvdCBtb3JlIHRoYW4gdGhhdCwgYXMgZGVzY3JpYmVkIGJlbG93LgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ib3ByZXBvcnQtbWVyZ2luZyI+PC9hPjIuMS6gTWVyZ2luZyBzZXBhcmF0ZSBwcm9maWxlczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci0KLUlmIHlvdSBoYXZlIHVzZWQgb25lIG9mIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPTwvY29kZT4gb3B0aW9ucwotd2hpbHN0IHByb2ZpbGluZywgdGhlcmUgY2FuIGJlIHNldmVyYWwgc2VwYXJhdGUgcHJvZmlsZXMgZm9yCi1hIHNpbmdsZSBiaW5hcnkgaW1hZ2Ugd2l0aGluIGEgc2Vzc2lvbi4gTm9ybWFsbHkgdGhlIG91dHB1dAotd2lsbCBrZWVwIHRoZXNlIGltYWdlcyBzZXBhcmF0ZWQgKHNvLCBmb3IgZXhhbXBsZSwgdGhlIGltYWdlIHN1bW1hcnkKLW91dHB1dCBzaG93cyBsaWJyYXJ5IGltYWdlIHN1bW1hcmllcyBvbiBhIHBlci1hcHBsaWNhdGlvbiBiYXNpcywKLXdoZW4gdXNpbmcgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXBhcmF0ZT1saWI8L2NvZGU+KS4KLVNvbWV0aW1lcyBpdCBjYW4gYmUgdXNlZnVsIHRvIG1lcmdlIHRoZXNlIHJlc3VsdHMgYmFjayB0b2dldGhlcgotYmVmb3JlIGdldHRpbmcgcmVzdWx0cy4gVGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbWVyZ2U8L2NvZGU+IG9wdGlvbiBhbGxvd3MKLXlvdSB0byBkbyB0aGF0LgotPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcHJlcG9ydC1jb21wYXJpc29uIj48L2E+Mi4yLqBTaWRlLWJ5LXNpZGUgbXVsdGlwbGUgcmVzdWx0czwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci1JZiB5b3UgaGF2ZSB1c2VkIG11bHRpcGxlIGV2ZW50cyB3aGVuIHByb2ZpbGluZywgYnkgZGVmYXVsdCB5b3UgZ2V0Ci1zaWRlLWJ5LXNpZGUgcmVzdWx0cyBvZiBlYWNoIGV2ZW50J3Mgc2FtcGxlIHZhbHVlcyBmcm9tIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPi4KLVlvdSBjYW4gcmVzdHJpY3Qgd2hpY2ggZXZlbnRzIHRvIGxpc3QgYnkgYXBwcm9wcmlhdGUgdXNlIG9mIHRoZQotPGNvZGUgY2xhc3M9Im9wdGlvbiI+ZXZlbnQ6PC9jb2RlPiBwcm9maWxlIHNwZWNpZmljYXRpb25zLCBldGMuCi08L2Rpdj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ib3ByZXBvcnQtY2FsbGdyYXBoIj48L2E+Mi4zLqBDYWxsZ3JhcGggb3V0cHV0PC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotV2hlbiB1c2luZyB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+b3Bjb250cm9sIC0tY2FsbGdyYXBoPC9jb2RlPiBvcHRpb24sIHlvdSBjYW4gc2VlIHdoYXQKLWZ1bmN0aW9ucyBhcmUgY2FsbGluZyBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG91dHB1dC4gQ29uc2lkZXIgdGhlCi1mb2xsb3dpbmcgcHJvZ3JhbToKLTwvcD4KLSAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwotI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwotI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7Ci0KLSNkZWZpbmUgU0laRSA1MDAwMDAKLQotc3RhdGljIGludCBjb21wYXJlKGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMikKLXsKLSAgICAgICAgcmV0dXJuIHN0cmNtcChzMSwgczIpOwotfQotCi1zdGF0aWMgdm9pZCByZXBlYXQodm9pZCkKLXsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGNoYXIgKnN0cmluZ3NbU0laRV07Ci0gICAgICAgIGNoYXIgc3RyW10gPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBTSVpFOyArK2kpIHsKLSAgICAgICAgICAgICAgICBzdHJpbmdzW2ldID0gc3RyZHVwKHN0cik7Ci0gICAgICAgICAgICAgICAgc3RyZnJ5KHN0cmluZ3NbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcXNvcnQoc3RyaW5ncywgU0laRSwgc2l6ZW9mKGNoYXIgKiksIGNvbXBhcmUpOwotfQotCi1pbnQgbWFpbigpCi17Ci0gICAgICAgIHdoaWxlICgxKQotICAgICAgICAgICAgICAgIHJlcGVhdCgpOwotfQotPC9wcmU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8cD4KLVdoZW4gcnVubmluZyB3aXRoIHRoZSBjYWxsLWdyYXBoIG9wdGlvbiwgT1Byb2ZpbGUgd2lsbAotcmVjb3JkIHRoZSBmdW5jdGlvbiBzdGFjayBldmVyeSB0aW1lIGl0IHRha2VzIGEgc2FtcGxlLgotPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQgLS1jYWxsZ3JhcGg8L3N0cm9uZz48L3NwYW4+IG91dHB1dHMgYW4gZW50cnkgZm9yIGVhY2gKLWZ1bmN0aW9uLCB3aGVyZSBlYWNoIGVudHJ5IGxvb2tzIHNpbWlsYXIgdG86Ci08L3A+Ci0gICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLXNhbXBsZXMgICUgICAgICAgIGltYWdlIG5hbWUgICAgICAgICAgICAgICBzeW1ib2wgbmFtZQotICAxOTcgICAgICAgMC4xNTQ4ICBjZyAgICAgICAgICAgICAgICAgICAgICAgbWFpbgotICAxMjcwMzYgICA5OS44NDUyICBjZyAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0Ci04NDU5MCAgICA0Mi41MDg0ICBsaWJjLTIuMy4yLnNvICAgICAgICAgICAgc3RyZnJ5Ci0gIDg0NTkwICAgIDY2LjQ4MzggIGxpYmMtMi4zLjIuc28gICAgICAgICAgICBzdHJmcnkgW3NlbGZdCi0gIDM5MTY5ICAgIDMwLjc4NTAgIGxpYmMtMi4zLjIuc28gICAgICAgICAgICByYW5kb21fcgotICAzNDc1ICAgICAgMi43MzEyICBsaWJjLTIuMy4yLnNvICAgICAgICAgICAgX19pNjg2LmdldF9wY190aHVuay5ieAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPC9wcmU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8cD4KLUhlcmUgdGhlIG5vbi1pbmRlbnRlZCBsaW5lIGlzIHRoZSBmdW5jdGlvbiB3ZSdyZSBmb2N1c3NpbmcgdXBvbgotKDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3RyZnJ5KCk8L2NvZGU+KS4gVGhpcwotbGluZSBpcyB0aGUgc2FtZSBhcyB5b3UnZCBnZXQgZnJvbSBhIG5vcm1hbCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4KLW91dHB1dC4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotQWJvdmUgdGhlIG5vbi1pbmRlbnRlZCBsaW5lIHdlIGZpbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGxlZCB0aGlzCi1mdW5jdGlvbiAoZm9yIGV4YW1wbGUsIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+cmVwZWF0KCk8L2NvZGU+IGNhbGxzCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnN0cmZyeSgpPC9jb2RlPikuIFRoZSBzYW1wbGVzIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBoZXJlCi1yZWZlciB0byB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIHRvb2sgYSBzYW1wbGUgd2hlcmUgdGhpcyBjYWxsIHdhcyBmb3VuZAotaW4gdGhlIHN0YWNrOyB0aGUgcGVyY2VudGFnZSBpcyByZWxhdGl2ZSB0byBhbGwgb3RoZXIgY2FsbGVycyBvZiB0aGUKLWZ1bmN0aW9uIHdlJ3JlIGZvY3Vzc2luZyBvbi4gTm90ZSB0aGF0IHRoZXNlIHZhbHVlcyBhcmUKLTxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm5vdDwvZW0+PC9zcGFuPiBjYWxsIGNvdW50czsgdGhleSBvbmx5IHJlZmxlY3QgdGhlIGNhbGwgc3RhY2sKLWV2ZXJ5IHRpbWUgYSBzYW1wbGUgaXMgdGFrZW47IHRoYXQgaXMsIGlmIGEgY2FsbCBpcyBmb3VuZCBpbiB0aGUgc3RhY2sKLWF0IHRoZSB0aW1lIG9mIGEgc2FtcGxlLCBpdCBpcyByZWNvcmRlZCBpbiB0aGlzIGNvdW50LgotPC9wPgotICAgICAgICAgICAgPHA+Ci1CZWxvdyB0aGUgbGluZSBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBieQotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5zdHJmcnkoKTwvY29kZT4gKGNhbGxlZCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5jYWxsZWVzPC9lbT48L3NwYW4+KS4KLUl0J3MgY2xlYXIgaGVyZSB0aGF0IDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3RyZnJ5KCk8L2NvZGU+IGNhbGxzCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnJhbmRvbV9yKCk8L2NvZGU+LiBXZSBhbHNvIHNlZSBhIHNwZWNpYWwgZW50cnkgd2l0aCBhCi0iW3NlbGZdIiBtYXJrZXIuIFRoaXMgcmVjb3JkcyB0aGUgbm9ybWFsIHNhbXBsZXMgZm9yIHRoZSBmdW5jdGlvbiwgYnV0Ci10aGUgcGVyY2VudGFnZSBiZWNvbWVzIHJlbGF0aXZlIHRvIGFsbCBjYWxsZWVzLiBUaGlzIGFsbG93cyB5b3UgdG8KLWNvbXBhcmUgdGltZSBzcGVudCBpbiB0aGUgZnVuY3Rpb24gaXRzZWxmIGNvbXBhcmVkIHRvIGZ1bmN0aW9ucyBpdAotY2FsbHMuIE5vdGUgdGhhdCBpZiBhIGZ1bmN0aW9uIGNhbGxzIGl0c2VsZiwgdGhlbiBpdCB3aWxsIGFwcGVhciBpbiB0aGUKLWxpc3Qgb2YgY2FsbGVlcyBvZiBpdHNlbGYsIGJ1dCB3aXRob3V0IHRoZSAiW3NlbGZdIiBtYXJrZXI7IHNvIHJlY3Vyc2l2ZQotY2FsbHMgYXJlIHN0aWxsIGNsZWFybHkgc2VwYXJhYmxlLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1Zb3UgbWF5IGhhdmUgbm90aWNlZCB0aGF0IHRoZSBvdXRwdXQgbGlzdHMgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tYWluKCk8L2NvZGU+Ci1hcyBjYWxsaW5nIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3RyZnJ5KCk8L2NvZGU+LCBidXQgaXQncyBjbGVhciBmcm9tIHRoZSBzb3VyY2UKLXRoYXQgdGhpcyBkb2Vzbid0IGFjdHVhbGx5IGhhcHBlbi4gU2VlIDxhIGhyZWY9IiNpbnRlcnByZXRpbmctY2FsbGdyYXBoIiB0aXRsZT0iMy6gSW50ZXJwcmV0aW5nIGNhbGwtZ3JhcGggcHJvZmlsZXMiPlNlY3Rpb26gMywgJiM4MjIwO0ludGVycHJldGluZyBjYWxsLWdyYXBoIHByb2ZpbGVzJiM4MjIxOzwvYT4gZm9yIGFuIGV4cGxhbmF0aW9uLgotPC9wPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcHJlcG9ydC1kaWZmIj48L2E+Mi40LqBEaWZmZXJlbnRpYWwgcHJvZmlsZXMgd2l0aCA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj48L2gzPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPHA+Ci1PZnRlbiwgd2UnZCBsaWtlIHRvIGJlIGFibGUgdG8gY29tcGFyZSB0d28gcHJvZmlsZXMuIEZvciBleGFtcGxlLCB3aGVuCi1hbmFseXNpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIGFuIGFwcGxpY2F0aW9uLCB3ZSdkIGxpa2UgdG8gbWFrZSBjb2RlCi1jaGFuZ2VzIGFuZCBleGFtaW5lIHRoZSBlZmZlY3Qgb2YgdGhlIGNoYW5nZS4gVGhpcyBpcyBzdXBwb3J0ZWQgaW4KLTxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiBieSBnaXZpbmcgYSBwcm9maWxlIHNwZWNpZmljYXRpb24gdGhhdAotaWRlbnRpZmllcyB0d28gZGlmZmVyZW50IHByb2ZpbGVzLiBUaGUgZ2VuZXJhbCBmb3JtIGlzIG9mOgotPC9wPgotICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KLSAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+Ci0kIG9wcmVwb3J0ICZsdDtzaGFyZWQtc3BlYyZndDsgeyAmbHQ7Zmlyc3QtcHJvZmlsZSZndDsgfSB7ICZsdDtzZWNvbmQtcHJvZmlsZSZndDsgfQotPC9wcmU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8cD4KLUZvciBlYWNoIG9mIHRoZSBwcm9maWxlcywgdGhlIHNoYXJlZCBzZWN0aW9uIGlzIHByZWZpeGVkLCBhbmQgdGhlbiB0aGUKLXNwZWNpZmljYXRpb24gaXMgYW5hbHlzZWQuIFRoZSB1c3VhbCBwYXJhbWV0ZXJzIHdvcmsgYm90aCB3aXRoaW4gdGhlCi1zaGFyZWQgc2VjdGlvbiwgYW5kIGluIHRoZSBzdWItc3BlY2lmaWNhdGlvbiB3aXRoaW4gdGhlIGN1cmx5IGJyYWNlcy4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotQSB0eXBpY2FsIHdheSB0byB1c2UgdGhpcyBmZWF0dXJlIGlzIHdpdGggYXJjaGl2ZXMgY3JlYXRlZCB3aXRoCi08c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGFyY2hpdmU8L3N0cm9uZz48L3NwYW4+LiBMZXQncyBsb29rIGF0IGFuIGV4YW1wbGU6Ci08L3A+Ci0gICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLSQgLi9hCi0kIG9wYXJjaGl2ZSAtbyBvcmlnIC4vYQotJCBvcGNvbnRyb2wgLS1yZXNldAotICAjIGVkaXQgYW5kIHJlY29tcGlsZSBhCi0kIC4vYQotICAjIG5vdyBjb21wYXJlIHRoZSBjdXJyZW50IHByb2ZpbGUgb2YgYSB3aXRoIHRoZSBhcmNoaXZlZCBwcm9maWxlCi0kIG9wcmVwb3J0IC14bCAuL2EgeyBhcmNoaXZlOi4vb3JpZyB9IHsgfQotQ1BVOiBQSUlJLCBzcGVlZCA4NjMuMjMzIE1IeiAoZXN0aW1hdGVkKQotQ291bnRlZCBDUFVfQ0xLX1VOSEFMVEVEIGV2ZW50cyAoY2xvY2tzIHByb2Nlc3NvciBpcyBub3QgaGFsdGVkKSB3aXRoIGEKLXVuaXQgbWFzayBvZiAweDAwIChObyB1bml0IG1hc2spIGNvdW50IDEwMDAwMAotc2FtcGxlcyAgJSAgICAgICAgZGlmZiAlICAgIHN5bWJvbCBuYW1lCi05MjQzNSAgICA0OC41MzY2ICArMC40OTk5ICAgYQotNTQyMjYgICAgLS0tICAgICAgLS0tICAgICAgIGMKLTQ5MjIyICAgIDI1Ljg0NTkgICsrKyAgICAgICBkCi00ODc4NyAgICAyNS42MTc1ICAtMi4yZS0wMSAgYgotPC9wcmU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8cD4KLU5vdGUgdGhhdCB3ZSBzcGVjaWZpZWQgYW4gZW1wdHkgc2Vjb25kIHByb2ZpbGUgaW4gdGhlIGN1cmx5IGJyYWNlcywgYXMKLXdlIHdhbnRlZCB0byB1c2UgdGhlIGN1cnJlbnQgc2Vzc2lvbjsgYWx0ZXJuYXRpdmVseSwgd2UgY291bGQKLWhhdmUgc3BlY2lmaWVkIGFub3RoZXIgYXJjaGl2ZSwgb3IgYSB0Z2lkIGV0Yy4gV2Ugc3BlY2lmaWVkIHRoZSBiaW5hcnkKLTxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPmE8L3N0cm9uZz48L3NwYW4+IGluIHRoZSBzaGFyZWQgc2VjdGlvbiwgc28gd2UgbWF0Y2hlZCB0aGF0IGluIGJvdGgKLXRoZSBwcm9maWxlcyB3ZSdyZSBkaWZmaW5nLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1BcyBpbiB0aGUgbm9ybWFsIG91dHB1dCwgdGhlIHJlc3VsdHMgYXJlIHNvcnRlZCBieSB0aGUgbnVtYmVyIG9mCi1zYW1wbGVzLCBhbmQgdGhlIHBlcmNlbnRhZ2UgZmllbGQgcmVwcmVzZW50cyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZgotdGhlIHN5bWJvbCdzIHNhbXBsZXMgaW4gdGhlIHNlY29uZCBwcm9maWxlLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1Ob3RpY2UgdGhlIG5ldyBjb2x1bW4gaW4gdGhlIG91dHB1dC4gVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZQotcGVyY2VudGFnZSBjaGFuZ2Ugb2YgdGhlIHJlbGF0aXZlIHBlcmNlbnQgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZQotc2Vjb25kIHByb2ZpbGU6IHJvdWdobHksICJob3cgbXVjaCBtb3JlIGltcG9ydGFudCB0aGlzIHN5bWJvbCBpcyIuCi1Mb29raW5nIGF0IHRoZSBzeW1ib2wgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5hKCk8L2NvZGU+LCB3ZSBjYW4gc2VlIHRoYXQgaXQgdG9vawotcm91Z2hseSB0aGUgc2FtZSBhbW91bnQgb2YgdGhlIHRvdGFsIHByb2ZpbGUgaW4gYm90aCB0aGUgZmlyc3QgYW5kIHRoZQotc2Vjb25kIHByb2ZpbGUuIFRoZSBmdW5jdGlvbiA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmMoKTwvY29kZT4gd2FzIG5vdCBpbiB0aGUgbmV3Ci1wcm9maWxlLCBzbyBoYXMgYmVlbiBtYXJrZWQgd2l0aCA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPi0tLTwvY29kZT4uIE5vdGUgdGhhdCB0aGUKLXNhbXBsZSB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIGZpcnN0IHByb2ZpbGU7IHNpbmNlIHdlJ3JlCi1kaXNwbGF5aW5nIHJlc3VsdHMgZm9yIHRoZSBzZWNvbmQgcHJvZmlsZSwgd2UgZG9uJ3QgbGlzdCBhIHBlcmNlbnRhZ2UKLXZhbHVlIGZvciBpdCwgYXMgaXQgd291bGQgYmUgbWVhbmluZ2xlc3MuIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+ZCgpPC9jb2RlPiBpcwotbmV3IGluIHRoZSBzZWNvbmQgcHJvZmlsZSwgYW5kIGNvbnNlcXVlbnRseSBtYXJrZWQgd2l0aAotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj4rKys8L2NvZGU+LgotPC9wPgotICAgICAgICAgICAgPHA+Ci1XaGVuIGNvbXBhcmluZyBwcm9maWxlcyBiZXR3ZWVuIGRpZmZlcmVudCBiaW5hcmllcywgaXQgc2hvdWxkIGJlIGNsZWFyCi10aGF0IGZ1bmN0aW9ucyBjYW4gY2hhbmdlIGluIHRlcm1zIG9mIFZNQSBhbmQgc2l6ZS4gVG8gYXZvaWQgdGhpcwotcHJvYmxlbSwgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+IGNvbnNpZGVycyBhIHN5bWJvbCB0byBiZSB0aGUgc2FtZQotaWYgdGhlIHN5bWJvbCBuYW1lLCBpbWFnZSBuYW1lLCBhbmQgb3duaW5nIGFwcGxpY2F0aW9uIG5hbWUgYWxsIG1hdGNoOwotYW55IG90aGVyIGZhY3RvcnMgYXJlIGlnbm9yZWQuIE5vdGUgdGhhdCB0aGUgY2hlY2sgZm9yIGFwcGxpY2F0aW9uIG5hbWUKLW1lYW5zIHRoYXQgdHJ5aW5nIHRvIGNvbXBhcmUgbGlicmFyeSBwcm9maWxlcyBiZXR3ZWVuIHR3byBkaWZmZXJlbnQKLWFwcGxpY2F0aW9ucyB3aWxsIG5vdCB3b3JrIGFzIHlvdSBtaWdodCBleHBlY3Q6IGVhY2ggc3ltYm9sIHdpbGwgYmUKLWNvbnNpZGVyZWQgZGlmZmVyZW50LgotPC9wPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcHJlcG9ydC1hbm9uIj48L2E+Mi41LqBBbm9ueW1vdXMgZXhlY3V0YWJsZSBtYXBwaW5nczwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLU1hbnkgYXBwbGljYXRpb25zLCB0eXBpY2FsbHkgb25lcyBpbnZvbHZpbmcgZHluYW1pYyBjb21waWxhdGlvbiBpbnRvCi1tYWNoaW5lIGNvZGUsIGhhdmUgZXhlY3V0YWJsZSBtYXBwaW5ncyB0aGF0IGFyZSBub3QgYmFja2VkIGJ5IGFuIEVMRgotZmlsZS4gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+IGhhcyBiYXNpYyBzdXBwb3J0IGZvciBzaG93aW5nIHRoZQotc2FtcGxlcyB0YWtlbiBpbiB0aGVzZSByZWdpb25zOyBmb3IgZXhhbXBsZToKLTwvcD4KLSAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotJCBvcHJlcG9ydCAvdXNyL2pyZTEuNS4wL2Jpbi9qYXZhCi1DUFU6IFBJSUksIHNwZWVkIDg2My4xOTUgTUh6IChlc3RpbWF0ZWQpCi1Db3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChjbG9ja3MgcHJvY2Vzc29yIGlzIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKLUNQVV9DTEtfVU5IQUxULi4ufAotICBzYW1wbGVzfCAgICAgICV8Ci0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAyNzM0NCAxMDAuMDAwIGphdmEKLSAgICAgICAgQ1BVX0NMS19VTkhBTFQuLi58Ci0gICAgICAgICAgc2FtcGxlc3wgICAgICAlfAotICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIDI3MjM2ICA5OS42MDUgYW5vbiAodGdpZDoxMjEzNSByYW5nZToweGIyY2I4MDAwLTB4YjJlODAwMDApCi0gICAgICAgICAgICAgIDEwOCAgMC4zOTQ5IGphdmEKLTwvcHJlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPHA+Ci1DdXJyZW50bHksIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGdldHRpbmcgc3ltYm9sLWJhc2VkIHN1bW1hcmllcyBmb3IKLXN1Y2ggcmVnaW9ucy4gTm90ZSB0aGF0LCBzaW5jZSBzdWNoIG1hcHBpbmdzIGFyZSBkZXBlbmRlbnQgdXBvbgotaW5kaXZpZHVhbCBpbnZvY2F0aW9ucyBvZiBhIGJpbmFyeSwgdGhlc2UgbWFwcGluZ3MgYXJlIGFsd2F5cyBsaXN0ZWQgYXMKLWEgZGVwZW5kZW50IGltYWdlLCBldmVuIHdoZW4gdXNpbmcgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXBhcmF0ZT1ub25lPC9jb2RlPi4KLUVxdWFsbHksIHRoZSByZXN1bHRzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbWVyZ2U8L2NvZGU+Ci1vcHRpb24uCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Im9wcmVwb3J0LW9wdGlvbnMiPjwvYT4yLjYuoE9wdGlvbnMgZm9yIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPjwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFjY3VtdWxhdGVkIC8gLWE8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLUFjY3VtdWxhdGUgc2FtcGxlIGFuZCBwZXJjZW50YWdlIGNvdW50cyBpbiB0aGUgc3ltYm9sIGxpc3QuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY2FsbGdyYXBoIC8gLWM8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLVNob3cgY2FsbGdyYXBoIGluZm9ybWF0aW9uLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlYnVnLWluZm8gLyAtZzwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotU2hvdyBzb3VyY2UgZmlsZSBhbmQgbGluZSBmb3IgZWFjaCBzeW1ib2wuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZGVtYW5nbGUgLyAtRCBub25lfG5vcm1hbHxzbWFydDwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotbm9uZTogbm8gZGVtYW5nbGluZy4gbm9ybWFsOiB1c2UgZGVmYXVsdCBkZW1hbmdsZXIgKGRlZmF1bHQpIHNtYXJ0OiB1c2UKLXBhdHRlcm4tbWF0Y2hpbmcgdG8gbWFrZSBDKysgc3ltYm9sIGRlbWFuZ2xpbmcgbW9yZSByZWFkYWJsZS4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kZXRhaWxzIC8gLWQ8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLVNob3cgcGVyLWluc3RydWN0aW9uIGRldGFpbHMgZm9yIGFsbCBzZWxlY3RlZCBzeW1ib2xzLiBOb3RlIHRoYXQsIGZvcgotYmluYXJpZXMgd2l0aG91dCBzeW1ib2wgaW5mb3JtYXRpb24sIHRoZSBWTUEgdmFsdWVzIHNob3duIGFyZSByYXcgZmlsZQotb2Zmc2V0cyBmb3IgdGhlIGltYWdlIGJpbmFyeS4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1leGNsdWRlLWRlcGVuZGVudCAvIC14PC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1EbyBub3QgaW5jbHVkZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBpbWFnZXMgZm9yIGxpYnJhcmllcywga2VybmVsIG1vZHVsZXMKLWFuZCB0aGUga2VybmVsLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBwcm9maWxlIHNlc3Npb24KLXVzZWQgLS1zZXBhcmF0ZS4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1leGNsdWRlLXN5bWJvbHMgLyAtZSBbc3ltYm9sc108L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLUV4Y2x1ZGUgYWxsIHRoZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1nbG9iYWwtcGVyY2VudCAvIC0lPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1NYWtlIGFsbCBwZXJjZW50YWdlcyByZWxhdGl2ZSB0byB0aGUgd2hvbGUgcHJvZmlsZS4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1oZWxwIC8gLT8gLyAtLXVzYWdlPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1TaG93IGhlbHAgbWVzc2FnZS4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1pbWFnZS1wYXRoIC8gLXAgW3BhdGhzXTwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBwYXRocyB0byBzZWFyY2ggZm9yIGJpbmFyaWVzLgotVGhpcyBpcyBuZWVkZWQgdG8gZmluZCBtb2R1bGVzIGluIGtlcm5lbHMgMi42IGFuZCB1cHdhcmRzLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWluY2x1ZGUtc3ltYm9scyAvIC1pIFtzeW1ib2xzXTwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotT25seSBpbmNsdWRlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWxvbmctZmlsZW5hbWVzIC8gLWw8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLU91dHB1dCBmdWxsIHBhdGhzIGluc3RlYWQgb2YgYmFzZW5hbWVzLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW1lcmdlIC8gLW0gW2xpYixjcHUsdGlkLHRnaWQsdW5pdG1hc2ssYWxsXTwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotTWVyZ2UgYW55IHByb2ZpbGVzIHNlcGFyYXRlZCBpbiBhIC0tc2VwYXJhdGUgc2Vzc2lvbi4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1uby1oZWFkZXI8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLURvbid0IG91dHB1dCBhIGhlYWRlciBkZXRhaWxpbmcgcHJvZmlsaW5nIHBhcmFtZXRlcnMuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LWZpbGUgLyAtbyBbZmlsZV08L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLU91dHB1dCB0byB0aGUgZ2l2ZW4gZmlsZSBpbnN0ZWFkIG9mIHN0ZG91dC4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1yZXZlcnNlLXNvcnQgLyAtcjwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotUmV2ZXJzZSB0aGUgc29ydCBmcm9tIHRoZSBkZWZhdWx0LgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNob3ctYWRkcmVzcyAvIC13PC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1TaG93IHRoZSBWTUEgYWRkcmVzcyBvZiBlYWNoIHN5bWJvbCAob2ZmIGJ5IGRlZmF1bHQpLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNvcnQgLyAtcyBbdm1hLHNhbXBsZSxzeW1ib2wsZGVidWcsaW1hZ2VdPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1Tb3J0IHRoZSBsaXN0IG9mIHN5bWJvbHMgYnksIHJlc3BlY3RpdmVseSwgc3ltYm9sIGFkZHJlc3MsCi1udW1iZXIgb2Ygc2FtcGxlcywgc3ltYm9sIG5hbWUsIGRlYnVnIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlciwKLWJpbmFyeSBpbWFnZSBmaWxlbmFtZS4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zeW1ib2xzIC8gLWw8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLUxpc3QgcGVyLXN5bWJvbCBpbmZvcm1hdGlvbiBpbnN0ZWFkIG9mIGEgYmluYXJ5IGltYWdlIHN1bW1hcnkuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdGhyZXNob2xkIC8gLXQgW3BlcmNlbnRhZ2VdPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1Pbmx5IG91dHB1dCBkYXRhIGZvciBzeW1ib2xzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gdGhlIGdpdmVuIHBlcmNlbnRhZ2UKLW9mIHRvdGFsIHNhbXBsZXMuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmVyYm9zZSAvIC1WIFtvcHRpb25zXTwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmVyc2lvbiAvIC12PC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1TaG93IHZlcnNpb24uCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9Im9wYW5ub3RhdGUiPjwvYT4zLqBPdXRwdXR0aW5nIGFubm90YXRlZCBzb3VyY2UgKDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wYW5ub3RhdGU8L3N0cm9uZz48L3NwYW4+KTwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1UaGUgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj4gdXRpbGl0eSBnZW5lcmF0ZXMgYW5ub3RhdGVkIHNvdXJjZSBmaWxlcyBvciBhc3NlbWJseSBsaXN0aW5ncywgb3B0aW9uYWxseQotbWl4ZWQgd2l0aCBzb3VyY2UuCi1JZiB5b3Ugd2FudCB0byBzZWUgdGhlIHNvdXJjZSBmaWxlLCB0aGUgcHJvZmlsZWQgYXBwbGljYXRpb24gbmVlZHMgdG8gaGF2ZSBkZWJ1ZyBpbmZvcm1hdGlvbiwgYW5kIHRoZSBzb3VyY2UKLW11c3QgYmUgYXZhaWxhYmxlIHRocm91Z2ggdGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbi4gRm9yIEdDQywgeW91IG11c3QgdXNlIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tZzwvY29kZT4gb3B0aW9uCi13aGVuIHlvdSBhcmUgY29tcGlsaW5nLgotSWYgdGhlIGJpbmFyeSBkb2Vzbid0IGNvbnRhaW4gc3VmZmljaWVudCBkZWJ1ZyBpbmZvcm1hdGlvbiwgeW91IGNhbiBzdGlsbAotdXNlIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wYW5ub3RhdGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hc3NlbWJseTwvY29kZT48L3N0cm9uZz48L3NwYW4+IHRvIGdldCBhbm5vdGF0ZWQgYXNzZW1ibHkuCi08L3A+Ci0gICAgICAgICAgPHA+Ci1Ob3RlIHRoYXQgZm9yIHRoZSByZWFzb24gZXhwbGFpbmVkIGluIDxhIGhyZWY9IiNoYXJkd2FyZS1jb3VudGVycyIgdGl0bGU9IjMuMS6gSGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMiPlNlY3Rpb26gMy4xLCAmIzgyMjA7SGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMmIzgyMjE7PC9hPiB0aGUgcmVzdWx0cyBjYW4gYmUKLWluYWNjdXJhdGUuIFRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpdHNlbGYgY2FuIGFkZCBvdGhlciBwcm9ibGVtczsgZm9yIGV4YW1wbGUsIHRoZSBsaW5lIG51bWJlciBmb3IgYSBzeW1ib2wgY2FuIGJlCi1pbmNvcnJlY3QuIEFzc2VtYmx5IGluc3RydWN0aW9ucyBjYW4gYmUgcmUtb3JkZXJlZCBhbmQgbW92ZWQgYnkgdGhlIGNvbXBpbGVyLCBhbmQgdGhpcyBjYW4gbGVhZCB0bwotY3JlZGl0aW5nIHNvdXJjZSBsaW5lcyB3aXRoIHNhbXBsZXMgbm90IHJlYWxseSAib3duZWQiIGJ5IHRoaXMgbGluZS4gQWxzbyBzZWUKLTxhIGhyZWY9IiNpbnRlcnByZXRpbmciIHRpdGxlPSJDaGFwdGVyoDUuoEludGVycHJldGluZyBwcm9maWxpbmcgcmVzdWx0cyI+Q2hhcHRlcqA1LCA8aT5JbnRlcnByZXRpbmcgcHJvZmlsaW5nIHJlc3VsdHM8L2k+PC9hPi4KLTwvcD4KLSAgICAgICAgICA8cD4KLVlvdSBjYW4gb3V0cHV0IHRoZSBhbm5vdGF0aW9uIHRvIG9uZSBzaW5nbGUgZmlsZSwgY29udGFpbmluZyBhbGwgdGhlIHNvdXJjZSBmb3VuZCB1c2luZyB0aGUKLTxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc291cmNlPC9jb2RlPi4gWW91IGNhbiB1c2UgdGhpcyBpbiBjb25qdW5jdGlvbiB3aXRoIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYXNzZW1ibHk8L2NvZGU+Ci10byBnZXQgY29tYmluZWQgc291cmNlL2Fzc2VtYmx5IG91dHB1dC4KLTwvcD4KLSAgICAgICAgICA8cD4KLVlvdSBjYW4gYWxzbyBvdXRwdXQgYSBkaXJlY3Rvcnkgb2YgYW5ub3RhdGVkIHNvdXJjZSBmaWxlcyB0aGF0IG1haW50YWlucyB0aGUgc3RydWN0dXJlIG9mCi10aGUgb3JpZ2luYWwgc291cmNlcy4gRWFjaCBsaW5lIGluIHRoZSBhbm5vdGF0ZWQgc291cmNlIGlzIHByZXBlbmRlZCB3aXRoIHRoZSBzYW1wbGVzCi1mb3IgdGhhdCBsaW5lLiBBZGRpdGlvbmFsbHksIGVhY2ggc3ltYm9sIGlzIGFubm90YXRlZCBnaXZpbmcgZGV0YWlscyBmb3IgdGhlIHN5bWJvbAotYXMgYSB3aG9sZS4gQW4gZXhhbXBsZToKLTwvcD4KLSAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLSQgb3Bhbm5vdGF0ZSAtLXNvdXJjZSAtLW91dHB1dC1kaXI9YW5ub3RhdGVkIC91c3IvbG9jYWwvb3Byb2ZpbGUtcHAvYmluL29wcm9maWxlZAotJCBscyBhbm5vdGF0ZWQvaG9tZS9tb3ovc3JjL29wcm9maWxlLXBwL2RhZW1vbi8KLW9wZF9jb29raWUuaCAgb3BkX2ltYWdlLmMgIG9wZF9rZXJuZWwuYyAgb3BkX3NhbXBsZV9maWxlcy5jICBvcHJvZmlsZWQuYwotPC9wcmU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHA+Ci1MaW5lIG51bWJlcnMgYXJlIG1haW50YWluZWQgaW4gdGhlIHNvdXJjZSBmaWxlcywgYnV0IGVhY2ggZmlsZSBoYXMKLWEgZm9vdGVyIGFwcGVuZGVkIGRlc2NyaWJpbmcgdGhlIHByb2ZpbGluZyBkZXRhaWxzLiBUaGUgYWN0dWFsIGFubm90YXRpb24KLWxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXMgOgotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotLi4uCi0gICAgICAgICAgICAgICA6c3RhdGljIHVpbnQ2NF90IHBvcF9idWZmZXJfdmFsdWUoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKQotIDExNTEwICAxLjk2NjEgOnsgLyogcG9wX2J1ZmZlcl92YWx1ZSB0b3RhbDogIDg5OTAxIDE1LjM1NjYgKi8KLSAgICAgICAgICAgICAgIDogICAgICAgIHVpbnQ2NF90IHZhbDsKLSAgICAgICAgICAgICAgIDoKLSAxMDIyNyAgMS43NDY5IDogICAgICAgIGlmICghdHJhbnMtJmd0O3JlbWFpbmluZykgewotICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJVRzogcG9wcGluZyBlbXB0eSBidWZmZXIgIVxuIik7Ci0gICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgICAgICAgIDogICAgICAgIH0KLSAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICAgIDogICAgICAgIHZhbCA9IGdldF9idWZmZXJfdmFsdWUodHJhbnMtJmd0O2J1ZmZlciwgMCk7Ci0gIDIyODEgIDAuMzg5NiA6ICAgICAgICB0cmFucy0mZ3Q7cmVtYWluaW5nLS07Ci0gIDIyOTYgIDAuMzkyMiA6ICAgICAgICB0cmFucy0mZ3Q7YnVmZmVyICs9IGtlcm5lbF9wb2ludGVyX3NpemU7Ci0gICAgICAgICAgICAgICA6ICAgICAgICByZXR1cm4gdmFsOwotIDEwNDU0ICAxLjc4NTcgOn0KLS4uLgotPC9wcmU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHA+Ci1UaGUgZmlyc3QgbnVtYmVyIG9uIGVhY2ggbGluZSBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMsIHdoaWxzdCB0aGUgc2Vjb25kIGlzCi10aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0b3RhbCBzYW1wbGVzLgotPC9wPgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcGFubm90YXRlLWZpbmRpbmctc291cmNlIj48L2E+My4xLqBMb2NhdGluZyBzb3VyY2UgZmlsZXM8L2gzPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPHA+Ci1PZiBjb3Vyc2UsIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wYW5ub3RhdGU8L3N0cm9uZz48L3NwYW4+IG5lZWRzIHRvIGJlIGFibGUgdG8gbG9jYXRlIHRoZSBzb3VyY2UgZmlsZXMKLWZvciB0aGUgYmluYXJ5IGltYWdlKHMpIGluIG9yZGVyIHRvIHByb2R1Y2Ugb3V0cHV0LiBTb21lIGJpbmFyeSBpbWFnZXMgaGF2ZSBkZWJ1ZwotaW5mb3JtYXRpb24gd2hlcmUgdGhlIGdpdmVuIHNvdXJjZSBmaWxlIHBhdGhzIGFyZSByZWxhdGl2ZSwgbm90IGFic29sdXRlLiBZb3UgY2FuCi1zcGVjaWZ5IHNlYXJjaCBwYXRocyB0byBsb29rIGZvciB0aGVzZSBmaWxlcyAoc2ltaWxhciB0byA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5nZGI8L3N0cm9uZz48L3NwYW4+J3MKLTxjb2RlIGNsYXNzPSJvcHRpb24iPmRpcjwvY29kZT4gY29tbWFuZCkgd2l0aCB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZWFyY2gtZGlyczwvY29kZT4gb3B0aW9uLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1Tb21ldGltZXMgeW91IG1heSBoYXZlIGEgYmluYXJ5IGltYWdlIHdoaWNoIGdpdmVzIGFic29sdXRlIHBhdGhzIGZvciB0aGUgc291cmNlIGZpbGVzLAotYnV0IHlvdSBoYXZlIHRoZSBhY3R1YWwgc291cmNlcyBlbHNld2hlcmUgKGNvbW1vbmx5LCB5b3UndmUgaW5zdGFsbGVkIGFuIFNSUE0gZm9yCi1hIGJpbmFyeSBvbiB5b3VyIHN5c3RlbSBhbmQgeW91IHdhbnQgYW5ub3RhdGlvbiBmcm9tIGFuIGV4aXN0aW5nIHByb2ZpbGUpLiBZb3UgY2FuCi11c2UgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYmFzZS1kaXJzPC9jb2RlPiBvcHRpb24gdG8gcmVkaXJlY3QgT1Byb2ZpbGUgdG8gbG9vayBzb21ld2hlcmUKLWVsc2UgZm9yIHNvdXJjZSBmaWxlcy4gRm9yIGV4YW1wbGUsIGltYWdpbmUgd2UgaGF2ZSBhIGJpbmFyeSBnZW5lcmF0ZWQgZnJvbSBhIHNvdXJjZQotZmlsZSB0aGF0IGlzIGdpdmVuIGluIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBhcyA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi90bXAvYnVpbGQvbGliZm9vL2Zvby5jPC9jb2RlPiwKLWFuZCB5b3UgaGF2ZSB0aGUgc291cmNlIHRyZWUgbWF0Y2hpbmcgdGhhdCBiaW5hcnkgaW5zdGFsbGVkIGluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2hvbWUvdXNlci9saWJmb28vPC9jb2RlPi4KLVlvdSBjYW4gcmVkaXJlY3QgT1Byb2ZpbGUgdG8gZmluZCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmZvby5jPC9jb2RlPiBjb3JyZWN0bHkgbGlrZSB0aGlzIDoKLTwvcD4KLSAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotJCBvcGFubm90YXRlIC0tc291cmNlIC0tYmFzZS1kaXJzPS90bXAvYnVpbGQvbGliZm9vLyAtLXNlYXJjaC1kaXJzPS9ob21lL3VzZXIvbGliZm9vLyAtLW91dHB1dC1kaXI9YW5ub3RhdGVkLyAvbGliL2xpYmZvby5zbwotPC9wcmU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8cD4KLVlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSAoY29tbWEtc2VwYXJhdGVkKSBwYXRocyB0byBib3RoIG9wdGlvbnMuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Im9wYW5ub3RhdGUtZGV0YWlscyI+PC9hPjMuMi6gVXNhZ2Ugb2YgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj48L2gzPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLSAgICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hc3NlbWJseSAvIC1hPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1PdXRwdXQgYW5ub3RhdGVkIGFzc2VtYmx5LiBJZiB0aGlzIGlzIGNvbWJpbmVkIHdpdGggLS1zb3VyY2UsIHRoZW4gbWl4ZWQKLXNvdXJjZSAvIGFzc2VtYmx5IGFubm90YXRpb25zIGFyZSBvdXRwdXQuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYmFzZS1kaXJzIC8gLWIgW3BhdGhzXS88L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLUNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhdGggcHJlZml4ZXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcG9pbnQgT1Byb2ZpbGUgdG8gYQotZGlmZmVyZW50IGxvY2F0aW9uIGZvciBzb3VyY2UgZmlsZXMgd2hlbiB0aGUgZGVidWcgaW5mb3JtYXRpb24gc3BlY2lmaWVzIGFuCi1hYnNvbHV0ZSBwYXRoIG9uIHlvdXIgc3lzdGVtIGZvciB0aGUgc291cmNlIHRoYXQgZG9lcyBub3QgZXhpc3QuIFRoZSBwcmVmaXgKLWlzIHN0cmlwcGVkIGZyb20gdGhlIGRlYnVnIHNvdXJjZSBmaWxlIHBhdGhzLCB0aGVuIHNlYXJjaGVkIGluIHRoZSBzZWFyY2ggZGlycwotc3BlY2lmaWVkIGJ5IDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VhcmNoLWRpcnM8L2NvZGU+LgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlbWFuZ2xlIC8gLUQgbm9uZXxub3JtYWx8c21hcnQ8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLW5vbmU6IG5vIGRlbWFuZ2xpbmcuIG5vcm1hbDogdXNlIGRlZmF1bHQgZGVtYW5nbGVyIChkZWZhdWx0KSBzbWFydDogdXNlCi1wYXR0ZXJuLW1hdGNoaW5nIHRvIG1ha2UgQysrIHN5bWJvbCBkZW1hbmdsaW5nIG1vcmUgcmVhZGFibGUuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZXhjbHVkZS1kZXBlbmRlbnQgLyAteDwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotRG8gbm90IGluY2x1ZGUgYXBwbGljYXRpb24tc3BlY2lmaWMgaW1hZ2VzIGZvciBsaWJyYXJpZXMsIGtlcm5lbCBtb2R1bGVzCi1hbmQgdGhlIGtlcm5lbC4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcHJvZmlsZSBzZXNzaW9uCi11c2VkIC0tc2VwYXJhdGUuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZXhjbHVkZS1maWxlIFtmaWxlc108L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLUV4Y2x1ZGUgYWxsIGZpbGVzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV4Y2x1ZGUtc3ltYm9scyAvIC1lIFtzeW1ib2xzXTwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotRXhjbHVkZSBhbGwgdGhlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLVNob3cgaGVscCBtZXNzYWdlLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCi1UaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0taW5jbHVkZS1maWxlIFtmaWxlc108L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLU9ubHkgaW5jbHVkZSBmaWxlcyBpbiB0aGUgZ2l2ZW4gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1pbmNsdWRlLXN5bWJvbHMgLyAtaSBbc3ltYm9sc108L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLU9ubHkgaW5jbHVkZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1vYmpkdW1wLXBhcmFtcyBbcGFyYW1zXTwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotUGFzcyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhcyBleHRyYSB2YWx1ZXMgd2hlbiBjYWxsaW5nIG9iamR1bXAuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LWRpciAvIC1vIFtkaXJdPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1PdXRwdXQgZGlyZWN0b3J5LiBUaGlzIG1ha2VzIG9wYW5ub3RhdGUgb3V0cHV0IG9uZSBhbm5vdGF0ZWQgZmlsZSBmb3IgZWFjaAotc291cmNlIGZpbGUuIFRoaXMgb3B0aW9uIGNhbid0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAtLWFzc2VtYmx5LgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlYXJjaC1kaXJzIC8gLWQgW3BhdGhzXTwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGF0aHMgdG8gc2VhcmNoIGZvciBzb3VyY2UgZmlsZXMuIFRoaXMgaXMgdXNlZnVsIHRvIGZpbmQKLXNvdXJjZSBmaWxlcyB3aGVuIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBvbmx5IGNvbnRhaW5zIHJlbGF0aXZlIHBhdGhzLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNvdXJjZSAvIC1zPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1PdXRwdXQgYW5ub3RhdGVkIHNvdXJjZS4gVGhpcyByZXF1aXJlcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gYmUgYXZhaWxhYmxlCi1mb3IgdGhlIGJpbmFyaWVzLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXRocmVzaG9sZCAvIC10IFtwZXJjZW50YWdlXTwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotT25seSBvdXRwdXQgZGF0YSBmb3Igc3ltYm9scyB0aGF0IGhhdmUgbW9yZSB0aGFuIHRoZSBnaXZlbiBwZXJjZW50YWdlCi1vZiB0b3RhbCBzYW1wbGVzLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcmJvc2UgLyAtViBbb3B0aW9uc108L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLUdpdmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb24gLyAtdjwvY29kZT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgIDxwPgotU2hvdyB2ZXJzaW9uLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvcGdwcm9mIj48L2E+NC6gPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+Z3Byb2Y8L3N0cm9uZz48L3NwYW4+LWNvbXBhdGlibGUgb3V0cHV0ICg8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGdwcm9mPC9zdHJvbmc+PC9zcGFuPik8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotSWYgeW91J3JlIGZhbWlsaWFyIHdpdGggdGhlIG91dHB1dCBwcm9kdWNlZCBieSA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5HTlUgZ3Byb2Y8L3N0cm9uZz48L3NwYW4+LAoteW91IG1heSBmaW5kIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wZ3Byb2Y8L3N0cm9uZz48L3NwYW4+IHVzZWZ1bC4gSXQgdGFrZXMgYSBzaW5nbGUgYmluYXJ5Ci1hcyBhbiBhcmd1bWVudCwgYW5kIHByb2R1Y2VzIGEgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5nbW9uLm91dDwvY29kZT4gZmlsZSBmb3IgdXNlCi13aXRoIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPmdwcm9mIC1wPC9zdHJvbmc+PC9zcGFuPi4gSWYgY2FsbC1ncmFwaCBwcm9maWxpbmcgaXMgZW5hYmxlZCwKLXRoZW4gdGhpcyBpcyBhbHNvIGluY2x1ZGVkLgotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotJCBvcGdwcm9mIGB3aGljaCBvcHJvZmlsZWRgICMgZ2VuZXJhdGVzIGdtb24ub3V0IGZpbGUKLSQgZ3Byb2YgLXAgYHdoaWNoIG9wcm9maWxlZGAgfCBoZWFkCi1GbGF0IHByb2ZpbGU6Ci0KLUVhY2ggc2FtcGxlIGNvdW50cyBhcyAxIHNhbXBsZXMuCi0gICUgICBjdW11bGF0aXZlICAgc2VsZiAgICAgICAgICAgICAgc2VsZiAgICAgdG90YWwKLSB0aW1lICAgc2FtcGxlcyAgIHNhbXBsZXMgICAgY2FsbHMgIFQxL2NhbGwgIFQxL2NhbGwgIG5hbWUKLSAzMy4xMyAyMDYyMzcuMDAgMjA2MjM3LjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGJfaW5zZXJ0Ci0gMjIuNjcgMzQ3Mzg2LjAwIDE0MTE0OS4wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wX2J1ZmZlcl92YWx1ZQotICA5LjU2IDQwNjg4MS4wMCA1OTQ5NS4wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BkX3B1dF9zYW1wbGUKLSAgNy4zNCA0NTI1OTkuMDAgNDU3MTguMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZF9maW5kX2ltYWdlCi0gIDcuMTkgNDk3MzI3LjAwIDQ0NzI4LjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGRfcHJvY2Vzc19zYW1wbGVzCi08L3ByZT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ib3BncHJvZi1kZXRhaWxzIj48L2E+NC4xLqBVc2FnZSBvZiA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGdwcm9mPC9zdHJvbmc+PC9zcGFuPjwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLVNob3cgaGVscCBtZXNzYWdlLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCi1UaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LWZpbGVuYW1lIC8gLW8gW2ZpbGVdPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1PdXRwdXQgdG8gdGhlIGdpdmVuIGZpbGUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCwgZ21vbi5vdXQKLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS10aHJlc2hvbGQgLyAtdCBbcGVyY2VudGFnZV08L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLU9ubHkgb3V0cHV0IGRhdGEgZm9yIHN5bWJvbHMgdGhhdCBoYXZlIG1vcmUgdGhhbiB0aGUgZ2l2ZW4gcGVyY2VudGFnZQotb2YgdG90YWwgc2FtcGxlcy4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXJib3NlIC8gLVYgW29wdGlvbnNdPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1HaXZlIHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dC4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXJzaW9uIC8gLXY8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLVNob3cgdmVyc2lvbi4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ib3BhcmNoaXZlIj48L2E+NS6gQXJjaGl2aW5nIG1lYXN1cmVtZW50cyAoPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPik8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotCVRoZSA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcGFyY2hpdmU8L3N0cm9uZz48L3NwYW4+IHV0aWxpdHkgZ2VuZXJhdGVzIGEgZGlyZWN0b3J5IHBvcHVsYXRlZAotCXdpdGggZXhlY3V0YWJsZSwgZGVidWcsIGFuZCBvcHJvZmlsZSBzYW1wbGUgZmlsZXMuIFRoaXMgZGlyZWN0b3J5IGNhbiBiZQotCW1vdmVkIHRvIGFub3RoZXIgbWFjaGluZSB2aWEgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+dGFyPC9zdHJvbmc+PC9zcGFuPiBhbmQgYW5hbHl6ZWQgd2l0aG91dAotCWZ1cnRoZXIgdXNlIG9mIHRoZSBkYXRhIGNvbGxlY3Rpb24gbWFjaGluZS4KLTwvcD4KLSAgICAgICAgICA8cD4KLQlUaGUgZm9sbG93aW5nIGNvbW1hbmQgd291bGQgY29sbGVjdCB0aGUgc2FtcGxlIGZpbGVzLCB0aGUgZXhlY3V0YWJsZXMKLQlhc3NvY2lhdGVkIHdpdGggdGhlIHNhbXBsZSBmaWxlcywgYW5kIHRoZSBkZWJ1Z2luZm8gZmlsZXMgYXNzb2NpYXRlZAotCXdpdGggdGhlIGV4ZWN1dGFibGVzIGFuZCBjb3B5IHRoZW0gaW50bwotCTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3RtcC9jdXJyZW50X2RhdGE8L2NvZGU+OgotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotIyBvcGFyY2hpdmUgLW8gL3RtcC9jdXJyZW50X2RhdGEKLTwvcHJlPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcGFyY2hpdmUtZGV0YWlscyI+PC9hPjUuMS6gVXNhZ2Ugb2YgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPjwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotICAgICAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLVNob3cgaGVscCBtZXNzYWdlLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV4Y2x1ZGUtZGVwZW5kZW50IC8gLXg8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLURvIG5vdCBpbmNsdWRlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGltYWdlcyBmb3IgbGlicmFyaWVzLCBrZXJuZWwgbW9kdWxlcwotYW5kIHRoZSBrZXJuZWwuIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIHByb2ZpbGUgc2Vzc2lvbgotdXNlZCAtLXNlcGFyYXRlLgotPC9wPgotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCi1UaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCi08L3A+Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LWRpcmVjdG9yeSAvIC1vIFtkaXJlY3RvcnldPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1PdXRwdXQgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4gVGhlcmUgaXMgbm8gZGVmYXVsdC4gVGhpcyBtdXN0IGJlIHNwZWNpZmllZC4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXJib3NlIC8gLVYgW29wdGlvbnNdPC9jb2RlPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgPHA+Ci1HaXZlIHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dC4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXJzaW9uIC8gLXY8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICA8cD4KLVNob3cgdmVyc2lvbi4KLTwvcD4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImludGVycHJldGluZyI+PC9hPkNoYXB0ZXKgNS6gSW50ZXJwcmV0aW5nIHByb2ZpbGluZyByZXN1bHRzPC9oMj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KLSAgICAgICAgICA8cD4KLSAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgotICAgICAgICAgIDwvcD4KLSAgICAgICAgICA8ZGw+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI2lycS1sYXRlbmN5Ij4xLiBQcm9maWxpbmcgaW50ZXJydXB0IGxhdGVuY3k8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iI2tlcm5lbC1wcm9maWxpbmciPjIuIEtlcm5lbCBwcm9maWxpbmc8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaXJxLW1hc2tpbmciPjIuMS4gSW50ZXJydXB0IG1hc2tpbmc8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaWRsZSI+Mi4yLiBJZGxlIHRpbWU8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIja2VybmVsLW1vZHVsZXMiPjIuMy4gUHJvZmlsaW5nIGtlcm5lbCBtb2R1bGVzPC9hPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgIDwvZGw+Ci0gICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnRlcnByZXRpbmctY2FsbGdyYXBoIj4zLiBJbnRlcnByZXRpbmcgY2FsbC1ncmFwaCBwcm9maWxlczwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjZGVidWctaW5mbyI+NC4gSW5hY2N1cmFjaWVzIGluIGFubm90YXRlZCBzb3VyY2U8L2E+Ci0gICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZWZmZWN0LW9mLW9wdGltaXphdGlvbnMiPjQuMS4gU2lkZSBlZmZlY3RzIG9mIG9wdGltaXphdGlvbnM8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJvbG9ndWVzIj40LjIuIFByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzPC9hPgotICAgICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2lubGluZWQtZnVuY3Rpb24iPjQuMy4gSW5saW5lZCBmdW5jdGlvbnM8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjd3JvbmctbGluZW5yLWluZm8iPjQuNC4gSW5hY2N1cmFjeSBpbiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbjwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSIjc3ltYm9sLXdpdGhvdXQtZGVidWctaW5mbyI+NS4gQXNzZW1ibHkgZnVuY3Rpb25zPC9hPgotICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L2R0PgotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNoaWRkZW4tY29zdCI+Ni4gT3RoZXIgZGlzY3JlcGFuY2llczwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICA8L2RsPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHA+Ci1UaGUgc3RhbmRhcmQgY2F2ZWF0cyBvZiBwcm9maWxpbmcgYXBwbHkgaW4gaW50ZXJwcmV0aW5nIHRoZSByZXN1bHRzIGZyb20gT1Byb2ZpbGU6Ci1wcm9maWxlIHJlYWxpc3RpYyBzaXR1YXRpb25zLCBwcm9maWxlIGRpZmZlcmVudCBzY2VuYXJpb3MsIHByb2ZpbGUKLWZvciBhcyBsb25nIGFzIGEgdGltZSBhcyBwb3NzaWJsZSwgYXZvaWQgc3lzdGVtLXNwZWNpZmljIGFydGlmYWN0cywgZG9uJ3QgdHJ1c3QKLXRoZSBwcm9maWxlIGRhdGEgdG9vIG11Y2guIEFsc28gYmVhciBpbiBtaW5kIHRoZSBjb21tZW50cyBvbiB0aGUgcGVyZm9ybWFuY2UKLWNvdW50ZXJzIGFib3ZlIC0geW91IDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmNhbm5vdDwvZW0+PC9zcGFuPiByZWx5IG9uIHRvdGFsbHkgYWNjdXJhdGUKLWluc3RydWN0aW9uLWxldmVsIHByb2ZpbGluZy4gIEhvd2V2ZXIsIGZvciBhbG1vc3QgYWxsIGNpcmN1bXN0YW5jZXMgdGhlIGRhdGEKLWNhbiBiZSB1c2VmdWwuIElkZWFsbHkgYSB1dGlsaXR5IHN1Y2ggYXMgSW50ZWwncyBWVFVORSB3b3VsZCBiZSBhdmFpbGFibGUgdG8KLWFsbG93IGNhcmVmdWwgaW5zdHJ1Y3Rpb24tbGV2ZWwgYW5hbHlzaXM7IGdvIGhhc3NsZSBJbnRlbCBmb3IgdGhpcywgbm90IG1lIDspCi08L3A+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJpcnEtbGF0ZW5jeSI+PC9hPjEuoFByb2ZpbGluZyBpbnRlcnJ1cHQgbGF0ZW5jeTwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1UaGlzIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRoZSBsYXRlbmN5IG9mIGRlbGl2ZXJ5IG9mIHByb2ZpbGluZyBpbnRlcnJ1cHRzCi1jYW4gaW1wYWN0IHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgcHJvZmlsaW5nIGRhdGEuIFRoaXMgaXMgcHJldHR5IG11Y2ggYSAKLXdvcnN0LWNhc2Utc2NlbmFyaW8gZXhhbXBsZTogdGhlc2UgcHJvYmxlbXMgYXJlIGZhaXJseSByYXJlLgotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotZG91YmxlIGZ1bihkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKQotewotIGRvdWJsZSByZXN1bHQgPSAwOwotIGZvciAoaW50IGkgPSAwIDsgaSAmbHQ7IDEwMDAwOyArK2kpIHsKLSAgcmVzdWx0ICs9IGE7Ci0gIHJlc3VsdCAqPSBiOwotICByZXN1bHQgLz0gYzsKLSB9Ci0gcmV0dXJuIHJlc3VsdDsKLX0KLTwvcHJlPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDxwPgotSGVyZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBvZiB0aGUgbG9vcCBpcyB2ZXJ5IGNvc3RseSwgYW5kIHlvdSB3b3VsZCBleHBlY3QgdGhlIHJlc3VsdAotcmVmbGVjdGluZyB0aGF0IC0gYnV0IChjdXR0aW5nIHRoZSBpbnN0cnVjdGlvbnMgaW5zaWRlIHRoZSBsb29wKToKLTwvcD4KLSAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLSQgb3Bhbm5vdGF0ZSAtYSAtdCAxMCAuL2Eub3V0Ci0KLSAgICAgODggMTUuMzglIDogODA0ODMzNzogICAgICAgZmFkZCAgICVzdCgzKSwlc3QKLSAgICAgNDggOC4zOTElIDogODA0ODMzOTogICAgICAgZm11bCAgICVzdCgyKSwlc3QKLSAgICAgNjggMTEuODglIDogODA0ODMzYjogICAgICAgZmRpdiAgICVzdCgxKSwlc3QKLSAgICAzNjggNjQuMzMlIDogODA0ODMzZDogICAgICAgaW5jICAgICVlYXgKLSAgICAgICAgICAgICAgIDogODA0ODMzZTogICAgICAgY21wICAgICQweDI3MGYsJWVheAotICAgICAgICAgICAgICAgOiA4MDQ4MzQzOiAgICAgICBqbGUgICAgODA0ODMzNwotPC9wcmU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHA+Ci1UaGUgcHJvYmxlbSBjb21lcyBmcm9tIHRoZSB4ODYgaGFyZHdhcmU7IHdoZW4gdGhlIGNvdW50ZXIgb3ZlcmZsb3dzIHRoZSBJUlEKLWlzIGFzc2VydGVkIGJ1dCB0aGUgaGFyZHdhcmUgaGFzIGZlYXR1cmVzIHRoYXQgY2FuIGRlbGF5IHRoZSBOTUkgaW50ZXJydXB0OgoteDg2IGhhcmR3YXJlIGlzIHN5bmNocm9ub3VzIChpLmUuIGNhbm5vdCBpbnRlcnJ1cHQgZHVyaW5nIGFuIGluc3RydWN0aW9uKTsKLXRoZXJlIGlzIGFsc28gYSBsYXRlbmN5IHdoZW4gdGhlIElSUSBpcyBhc3NlcnRlZCwgYW5kIHRoZSBtdWx0aXBsZQotZXhlY3V0aW9uIHVuaXRzIGFuZCB0aGUgb3V0LW9mLW9yZGVyIG1vZGVsIG9mIG1vZGVybiB4ODYgQ1BVcyBhbHNvIGNhdXNlcwotcHJvYmxlbXMuIFRoaXMgaXMgdGhlIHNhbWUgZnVuY3Rpb24sIHdpdGggYW5ub3RhdGlvbiA6Ci08L3A+Ci0gICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+Ci0kIG9wYW5ub3RhdGUgLXMgLXQgMTAgLi9hLm91dAotCi0gICAgICAgICAgICAgICA6ZG91YmxlIGZ1bihkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKQotICAgICAgICAgICAgICAgOnsgLyogX1ozZnVuZGRkIHRvdGFsOiAgICAgNTcyIDEwMC4wJSAqLwotICAgICAgICAgICAgICAgOiBkb3VibGUgcmVzdWx0ID0gMDsKLSAgICAzNjggNjQuMzMlIDogZm9yIChpbnQgaSA9IDAgOyBpICZsdDsgMTAwMDA7ICsraSkgewotICAgICA4OCAxNS4zOCUgOiAgcmVzdWx0ICs9IGE7Ci0gICAgIDQ4IDguMzkxJSA6ICByZXN1bHQgKj0gYjsKLSAgICAgNjggMTEuODglIDogIHJlc3VsdCAvPSBjOwotICAgICAgICAgICAgICAgOiB9Ci0gICAgICAgICAgICAgICA6IHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICA6fQotPC9wcmU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHA+Ci1UaGUgY29uY2x1c2lvbjogZG9uJ3QgdHJ1c3Qgc2FtcGxlcyBjb21pbmcgYXQgdGhlIGVuZCBvZiBhIGxvb3AsCi1wYXJ0aWN1bGFybHkgaWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciBpcyBjb3N0bHkuIFRoaXMKLWNhc2UgY2FuIGFsc28gb2NjdXIgZm9yIGJyYW5jaGVzLiBBbHdheXMgYmVhciBpbiBtaW5kIHRoYXQgc2FtcGxlcwotY2FuIGJlIGRlbGF5ZWQgYnkgYSBmZXcgY3ljbGVzIGZyb20gaXRzIHJlYWwgcG9zaXRpb24uIFRoYXQncyBhIGhhcmR3YXJlCi1wcm9ibGVtIGFuZCBPUHJvZmlsZSBjYW4gZG8gbm90aGluZyBhYm91dCBpdC4KLTwvcD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJrZXJuZWwtcHJvZmlsaW5nIj48L2E+Mi6gS2VybmVsIHByb2ZpbGluZzwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImlycS1tYXNraW5nIj48L2E+Mi4xLqBJbnRlcnJ1cHQgbWFza2luZzwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLU9Qcm9maWxlIHVzZXMgbm9uLW1hc2thYmxlIGludGVycnVwdHMgKE5NSSkgb24gdGhlIFA2IGdlbmVyYXRpb24sIFBlbnRpdW0gNCwKLUF0aGxvbiBhbmQgRHVyb24gcHJvY2Vzc29ycy4gVGhlc2UgaW50ZXJydXB0cyBjYW4gb2NjdXIgZXZlbiBpbiBzZWN0aW9uIG9mIHRoZQotTGludXggd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIGFsbG93aW5nIGNvbGxlY3Rpb24gb2Ygc2FtcGxlcyBpbiB2aXJ0dWFsbHkKLWFsbCBleGVjdXRhYmxlIGNvZGUuICBUaGUgUlRDLCB0aW1lciBpbnRlcnJ1cHQgbW9kZSwgYW5kIEl0YW5pdW0gMiBjb2xsZWN0aW9uIG1lY2hhbmlzbXMKLXVzZSBtYXNrYWJsZSBpbnRlcnJ1cHRzLiBUaHVzLCB0aGUgUlRDIGFuZCBJdGFuaXVtIDIgZGF0YSBjb2xsZWN0aW9uIG1lY2hhbmlzbSBoYXZlICJzYW1wbGUKLXNoYWRvd3MiLCBvciBibGluZCBzcG90czogcmVnaW9ucyB3aGVyZSBubyBzYW1wbGVzIHdpbGwgYmUgY29sbGVjdGVkLiBUeXBpY2FsbHksIHRoZSBzYW1wbGVzCi13aWxsIGJlIGF0dHJpYnV0ZWQgdG8gdGhlIGNvZGUgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGludGVycnVwdHMgYXJlIHJlLWVuYWJsZWQuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImlkbGUiPjwvYT4yLjIuoElkbGUgdGltZTwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLVlvdXIga2VybmVsIGlzIGxpa2VseSB0byBzdXBwb3J0IGhhbHRpbmcgdGhlIHByb2Nlc3NvciB3aGVuIGEgQ1BVIGlzIGlkbGUuIEFzCi10aGUgdHlwaWNhbCBoYXJkd2FyZSBldmVudHMgbGlrZSA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkNQVV9DTEtfVU5IQUxURUQ8L2NvZGU+IGRvIG5vdAotY291bnQgd2hlbiB0aGUgQ1BVIGlzIGhhbHRlZCwgdGhlIGtlcm5lbCBwcm9maWxlIHdpbGwgbm90IHJlZmxlY3QgdGhlIGFjdHVhbAotYW1vdW50IG9mIHRpbWUgc3BlbnQgaWRsZS4gWW91IGNhbiBjaGFuZ2UgdGhpcyBiZWhhdmlvdXIgYnkgYm9vdGluZyB3aXRoCi10aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+aWRsZT1wb2xsPC9jb2RlPiBvcHRpb24sIHdoaWNoIHVzZXMgYSBkaWZmZXJlbnQgaWRsZSByb3V0aW5lLiBUaGlzCi13aWxsIGFwcGVhciBhcyA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnBvbGxfaWRsZSgpPC9jb2RlPiBpbiB5b3VyIGtlcm5lbCBwcm9maWxlLgotPC9wPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJrZXJuZWwtbW9kdWxlcyI+PC9hPjIuMy6gUHJvZmlsaW5nIGtlcm5lbCBtb2R1bGVzPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotT1Byb2ZpbGUgcHJvZmlsZXMga2VybmVsIG1vZHVsZXMgYnkgZGVmYXVsdC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgY291cGxlIG9mIHByb2JsZW1zCi15b3UgbWF5IGhhdmUgd2hlbiB0cnlpbmcgdG8gZ2V0IHJlc3VsdHMuIEZpcnN0LCB5b3UgbWF5IGhhdmUgYm9vdGVkIHZpYSBhbiBpbml0cmQ7Ci10aGlzIG1lYW5zIHRoYXQgdGhlIGFjdHVhbCBwYXRoIGZvciB0aGUgbW9kdWxlIGJpbmFyaWVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuCi1UbyBnZXQgYXJvdW5kIHRoaXMsIHlvdSBjYW4gdXNlIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tcDwvY29kZT4gb3B0aW9uIHRvIHRoZSBwcm9maWxpbmcgdG9vbHMKLXRvIHNwZWNpZnkgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGtlcm5lbCBtb2R1bGVzLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1JbiAyLjYsIHRoZSBpbmZvcm1hdGlvbiBvbiB3aGVyZSBrZXJuZWwgbW9kdWxlIGJpbmFyaWVzIGFyZSBsb2NhdGVkIGhhcyBiZWVuIHJlbW92ZWQuCi1UaGlzIG1lYW5zIE9Qcm9maWxlIG5lZWRzIGd1aWRpbmcgd2l0aCB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LXA8L2NvZGU+IG9wdGlvbiB0byBmaW5kIHlvdXIKLW1vZHVsZXMuIE5vcm1hbGx5LCB5b3UgY2FuIGp1c3QgdXNlIHlvdXIgc3RhbmRhcmQgbW9kdWxlIHRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIHRoaXMuCi1Ob3RlIHRoYXQgZHVlIHRvIHRoaXMgcHJvYmxlbSwgT1Byb2ZpbGUgY2Fubm90IGNoZWNrIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBtYXRjaDsKLWl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIHlvdSBkbyBub3QgbW9kaWZ5IGEgYmluYXJ5IGFmdGVyIGEgcHJvZmlsZQotaGFzIGJlZW4gY3JlYXRlZC4KLTwvcD4KLSAgICAgICAgICAgIDxwPgotSWYgeW91IGhhdmUgcnVuIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPmluc21vZDwvc3Ryb25nPjwvc3Bhbj4gb3IgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+bW9kcHJvYmU8L3N0cm9uZz48L3NwYW4+IHRvIGluc2VydCBhIG1vZHVsZQotaW4gYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IHNwZWNpZnkgdGhpcyBkaXJlY3Rvcnkgd2l0aCB0aGUgCi08Y29kZSBjbGFzcz0ib3B0aW9uIj4tcDwvY29kZT4gb3B0aW9uIGZpcnN0LCBzbyB0aGF0IGl0IG92ZXItcmlkZXMgYW4gb2xkZXIgbW9kdWxlIGJpbmFyeSB0aGF0IG1pZ2h0Ci1leGlzdCBpbiBvdGhlciBkaXJlY3RvcmllcyB5b3UndmUgc3BlY2lmaWVkIHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+LXA8L2NvZGU+LiBJdCBpcyB1cCB0byB5b3UKLXRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHZhbHVlcyBhcmUgY29ycmVjdDogMi42IGtlcm5lbHMgc2ltcGx5IGRvIG5vdCBwcm92aWRlIGVub3VnaAotaW5mb3JtYXRpb24gZm9yIE9Qcm9maWxlIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uLgotPC9wPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImludGVycHJldGluZy1jYWxsZ3JhcGgiPjwvYT4zLqBJbnRlcnByZXRpbmcgY2FsbC1ncmFwaCBwcm9maWxlczwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1Tb21ldGltZXMgdGhlIHJlc3VsdHMgZnJvbSBjYWxsLWdyYXBoIHByb2ZpbGVzIG1heSBiZSBkaWZmZXJlbnQgdG8gd2hhdAoteW91IGV4cGVjdCB0byBzZWUuIFRoZSBmaXJzdCB0aGluZyB0byBjaGVjayBpcyB3aGV0aGVyIHRoZSB0YXJnZXQKLWJpbmFyaWVzIHdoZXJlIGNvbXBpbGVkIHdpdGggZnJhbWUgcG9pbnRlcnMgZW5hYmxlZCAoaWYgdGhlIGJpbmFyeSB3YXMKLWNvbXBpbGVkIHVzaW5nIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Ryb25nPjwvc3Bhbj4ncwotPGNvZGUgY2xhc3M9Im9wdGlvbiI+LWZvbWl0LWZyYW1lLXBvaW50ZXI8L2NvZGU+IG9wdGlvbiwgeW91IHdpbGwgbm90IGdldAotbWVhbmluZ2Z1bCByZXN1bHRzKS4gTm90ZSB0aGF0IGFzIG9mIHRoaXMgd3JpdGluZywgdGhlIEdDQyBkZXZlbG9wZXJzCi1wbGFuIHRvIGRpc2FibGUgZnJhbWUgcG9pbnRlcnMgYnkgZGVmYXVsdC4gVGhlIExpbnV4IGtlcm5lbCBpcyBidWlsdAotd2l0aG91dCBmcmFtZSBwb2ludGVycyBieSBkZWZhdWx0OyB0aGVyZSBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHlvdQotY2FuIHVzZSB0byB0dXJuIGl0IG9uIHVuZGVyIHRoZSAiS2VybmVsIEhhY2tpbmciIG1lbnUuCi08L3A+Ci0gICAgICAgICAgPHA+Ci1PZnRlbiB5b3UgbWF5IHNlZSBhIGNhbGxlciBvZiBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgYWN0dWFsbHkgZGlyZWN0bHkKLWNhbGwgdGhlIGZ1bmN0aW9uIHlvdSdyZSBsb29raW5nIGF0IChlLmcuIGlmIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+YSgpPC9jb2RlPgotY2FsbHMgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5iKCk8L2NvZGU+LCB3aGljaCBpbiB0dXJuIGNhbGxzCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmMoKTwvY29kZT4sIHlvdSBtYXkgc2VlIGFuIGVudHJ5IGZvcgotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5hKCktJmd0O2MoKTwvY29kZT4pLiAgV2hhdCdzIGFjdHVhbGx5IG9jY3VycmluZyBpcyB0aGF0IHdlCi1hcmUgdGFraW5nIHNhbXBsZXMgYXQgdGhlIHZlcnkgc3RhcnQgKG9yIHRoZSB2ZXJ5IGVuZCkgb2YKLTxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+YygpPC9jb2RlPjsgYXQgdGhlc2UgZmV3IGluc3RydWN0aW9ucywgd2UgaGF2ZW4ndCB5ZXQKLWNyZWF0ZWQgdGhlIG5ldyBmdW5jdGlvbidzIGZyYW1lLCBzbyBpdCBhcHBlYXJzIGFzIGlmCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmEoKTwvY29kZT4gaXMgY2FsbGluZyBkaXJlY3RseSBpbnRvCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmMoKTwvY29kZT4uIEJlIGNhcmVmdWwgbm90IHRvIGJlIG1pc2xlZCBieSB0aGVzZQotZW50cmllcy4KLTwvcD4KLSAgICAgICAgICA8cD4KLUxpa2UgdGhlIHJlc3Qgb2YgT1Byb2ZpbGUsIGNhbGwtZ3JhcGggcHJvZmlsaW5nIHVzZXMgYSBzdGF0aXN0aWNhbAotYXBwcm9hY2g7IHRoaXMgbWVhbnMgdGhhdCBzb21ldGltZXMgYSBiYWNrdHJhY2Ugc2FtcGxlIGlzIHRydW5jYXRlZCwgb3IKLWV2ZW4gcGFydGlhbGx5IHdyb25nLiBCZWFyIHRoaXMgaW4gbWluZCB3aGVuIGV4YW1pbmluZyByZXN1bHRzLgotPC9wPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImRlYnVnLWluZm8iPjwvYT40LqBJbmFjY3VyYWNpZXMgaW4gYW5ub3RhdGVkIHNvdXJjZTwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImVmZmVjdC1vZi1vcHRpbWl6YXRpb25zIj48L2E+NC4xLqBTaWRlIGVmZmVjdHMgb2Ygb3B0aW1pemF0aW9uczwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLVRoZSBjb21waWxlciBjYW4gaW50cm9kdWNlIHNvbWUgcGl0ZmFsbHMgaW4gdGhlIGFubm90YXRlZCBzb3VyY2Ugb3V0cHV0LgotVGhlIG9wdGltaXplciBjYW4gbW92ZSBwaWVjZXMgb2YgY29kZSBpbiBzdWNoIG1hbm5lciB0aGF0IHR3byBsaW5lIG9mIGNvZGVzCi1hcmUgaW50ZXJsYWNlZCAoaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZykuIEFsc28gZGVidWcgaW5mbyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIAotY2FuIHNob3cgc3RyYW5nZSBiZWhhdmlvci4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgZm9yIGNvbXBsZXggZXhwcmVzc2lvbnMgZS5nLiBpbnNpZGUKLWFuIGlmIHN0YXRlbWVudDoKLTwvcD4KLSAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotCWlmIChhICZhbXA7JmFtcDsgLi4KLQkgICAgYiAmYW1wOyZhbXA7IC4uCi0JICAgIGMgJmFtcDsmYW1wOykKLTwvcHJlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPHA+Ci1oZXJlIHRoZSBwcm9ibGVtIGNvbWUgZnJvbSB0aGUgcG9zaXRpb24gb2YgbGluZSBudW1iZXIuIFRoZSBhdmFpbGFibGUgZGVidWcKLWluZm8gZG9lcyBub3QgZ2l2ZSBlbm91Z2ggZGV0YWlscyBmb3IgdGhlIGlmIGNvbmRpdGlvbiwgc28gYWxsIHNhbXBsZXMgYXJlCi1hY2N1bXVsYXRlZCBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIHJpZ2h0IGJyYWNlIG9mIHRoZSBleHByZXNzaW9uLiBVc2luZwotPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bhbm5vdGF0ZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tYTwvY29kZT48L3N0cm9uZz48L3NwYW4+IGNhbiBoZWxwIHRvIHNob3cgdGhlIHJlYWwKLXNhbXBsZXMgYXQgYW4gYXNzZW1ibHkgbGV2ZWwuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InByb2xvZ3VlcyI+PC9hPjQuMi6gUHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXM8L2gzPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPHA+Ci1UaGUgY29tcGlsZXIgZ2VuZXJhbGx5IG5lZWRzIHRvIGdlbmVyYXRlICJnbHVlIiBjb2RlIGFjcm9zcyBmdW5jdGlvbiBjYWxscywgZGVwZW5kZW50Ci1vbiB0aGUgcGFydGljdWxhciBmdW5jdGlvbiBjYWxsIGNvbnZlbnRpb25zIHVzZWQuIEFkZGl0aW9uYWxseSBvdGhlciB0aGluZ3MKLW5lZWQgdG8gaGFwcGVuLCBsaWtlIHN0YWNrIHBvaW50ZXIgYWRqdXN0bWVudCBmb3IgdGhlIGxvY2FsIHZhcmlhYmxlczsgdGhpcwotY29kZSBpcyBrbm93biBhcyB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuIFNpbWlsYXIgY29kZSBpcyBuZWVkZWQgYXQgZnVuY3Rpb24gcmV0dXJuLAotYW5kIGlzIGtub3duIGFzIHRoZSBmdW5jdGlvbiBlcGlsb2d1ZS4gVGhpcyB3aWxsIHNob3cgdXAgaW4gYW5ub3RhdGlvbnMgYXMKLXNhbXBsZXMgYXQgdGhlIHZlcnkgc3RhcnQgYW5kIGVuZCBvZiBhIGZ1bmN0aW9uLCB3aGVyZSB0aGVyZSBpcyBubyBhcHBhcmVudAotZXhlY3V0YWJsZSBjb2RlIGluIHRoZSBzb3VyY2UuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImlubGluZWQtZnVuY3Rpb24iPjwvYT40LjMuoElubGluZWQgZnVuY3Rpb25zPC9oMz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxwPgotWW91IG1heSBzZWUgdGhhdCBhIGZ1bmN0aW9uIGlzIGNyZWRpdGVkIHdpdGggYSBjZXJ0YWluIG51bWJlciBvZiBzYW1wbGVzLCBidXQKLXRoZSBsaXN0aW5nIGRvZXMgbm90IGFkZCB1cCB0byB0aGUgY29ycmVjdCB0b3RhbC4gVG8gcGljayBhIHJlYWwgZXhhbXBsZSA6Ci08L3A+Ci0gICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLSAgICAgICAgICAgICAgIDppbnRlcm5hbF9za19idWZmX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBza19idWZmICpza2IpCi0gMzUzIDIuMzQyJSAgICA6eyAvKiBpbnRlcm5hbF9za19idWZmX2FsbG9jX3NlY3VyaXR5IHRvdGFsOiAxODgyIDEyLjQ4JSAqLwotICAgICAgICAgICAgICAgOgotICAgICAgICAgICAgICAgOiAgICAgICAgc2tfYnVmZl9zZWN1cml0eV90ICpza3NlYzsKLSAgMTUgMC4wOTk1JSAgIDogICAgICAgIGludCByYyA9IDA7Ci0gICAgICAgICAgICAgICA6Ci0gIDEwIDAuMDY2MzMlICA6ICAgICAgICBza3NlYyA9IHNrYi0mZ3Q7bHNtX3NlY3VyaXR5OwotIDQ2OCAzLjEwNCUgICAgOiAgICAgICAgaWYgKHNrc2VjICZhbXA7JmFtcDsgc2tzZWMtJmd0O21hZ2ljID09IERTSV9NQUdJQykgewotICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgICAgIDogICAgICAgIH0KLSAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICAgIDogICAgICAgIHNrc2VjID0gKHNrX2J1ZmZfc2VjdXJpdHlfdCAqKSBnZXRfc2tfYnVmZl9tZW1vcnkoc2tiKTsKLSAgIDMgMC4wMTk5JSAgIDogICAgICAgIGlmICghc2tzZWMpIHsKLSAgMzggMC4yNTIxJSAgIDogICAgICAgICAgICAgICAgcmMgPSAtRU5PTUVNOwotICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgMTAgMC4wNjYzMyUgIDogICAgICAgIH0KLSAgICAgICAgICAgICAgIDogICAgICAgIG1lbXNldChza3NlYywgMCwgc2l6ZW9mIChza19idWZmX3NlY3VyaXR5X3QpKTsKLSAgNDQgMC4yOTE5JSAgIDogICAgICAgIHNrc2VjLSZndDttYWdpYyA9IERTSV9NQUdJQzsKLSAgMzIgMC4yMTIzJSAgIDogICAgICAgIHNrc2VjLSZndDtza2IgPSBza2I7Ci0gIDQ1IDAuMjk4NSUgICA6ICAgICAgICBza3NlYy0mZ3Q7c2lkID0gRFNJX1NJRF9OT1JNQUw7Ci0gIDMxIDAuMjA1NiUgICA6ICAgICAgICBza2ItJmd0O2xzbV9zZWN1cml0eSA9IHNrc2VjOwotICAgICAgICAgICAgICAgOgotICAgICAgICAgICAgICAgOiAgICAgIG91dDoKLSAgICAgICAgICAgICAgIDoKLSAxNDYgMC45Njg1JSAgIDogICAgICAgIHJldHVybiByYzsKLSAgICAgICAgICAgICAgIDoKLSAgOTggMC42NTAxJSAgIDp9Ci08L3ByZT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIDxwPgotSGVyZSwgdGhlIGZ1bmN0aW9uIGlzIGNyZWRpdGVkIHdpdGggMSw4ODIgc2FtcGxlcywgYnV0IHRoZSBhbm5vdGF0aW9ucwotYmVsb3cgZG8gbm90IGFjY291bnQgZm9yIHRoaXMuIFRoaXMgaXMgdXN1YWxseSBiZWNhdXNlIG9mIGlubGluZSBmdW5jdGlvbnMgLQotdGhlIGNvbXBpbGVyIG1hcmtzIHN1Y2ggY29kZSB3aXRoIGRlYnVnIGVudHJpZXMgZm9yIHRoZSBpbmxpbmUgZnVuY3Rpb24KLWRlZmluaXRpb24sIGFuZCB0aGlzIGlzIHdoZXJlIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wYW5ub3RhdGU8L3N0cm9uZz48L3NwYW4+IGFubm90YXRlcwotc3VjaCBzYW1wbGVzLiBJbiB0aGUgY2FzZSBhYm92ZSwgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tZW1zZXQ8L2NvZGU+IGlzIHRoZSBtb3N0Ci1saWtlbHkgY2FuZGlkYXRlIGZvciB0aGlzIHByb2JsZW0uIEV4YW1pbmluZyB0aGUgbWl4ZWQgc291cmNlL2Fzc2VtYmx5Ci1vdXRwdXQgY2FuIGhlbHAgaWRlbnRpZnkgc3VjaCByZXN1bHRzLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1XaGVuIHJ1bm5pbmcgPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj4sIHlvdSBtYXkgZ2V0IGEgd2FybmluZwotInNvbWUgZnVuY3Rpb25zIGNvbXBpbGVkIHdpdGhvdXQgZGVidWcgaW5mb3JtYXRpb24gbWF5IGhhdmUgaW5jb3JyZWN0IHNvdXJjZSBsaW5lIGF0dHJpYnV0aW9ucyIuCi1JbiBzb21lIHJhcmUgY2FzZXMsIE9Qcm9maWxlIGlzIG5vdCBhYmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBkZXJpdmVkIHNvdXJjZSBsaW5lCi1pcyBjb3JyZWN0ICh3aGVuIHNvbWUgcGFydHMgb2YgdGhlIGJpbmFyeSBpbWFnZSBhcmUgY29tcGlsZWQgd2l0aG91dCBkZWJ1Z2dpbmcKLWluZm9ybWF0aW9uKS4gQmUgd2FyeSBvZiByZXN1bHRzIGlmIHRoaXMgd2FybmluZyBhcHBlYXJzLgotPC9wPgotICAgICAgICAgICAgPHA+Ci1GdXJ0aGVybW9yZSwgZm9yIHNvbWUgbGFuZ3VhZ2VzIHRoZSBjb21waWxlciBjYW4gaW1wbGljaXRseSBnZW5lcmF0ZSBmdW5jdGlvbnMsCi1zdWNoIGFzIGRlZmF1bHQgY29weSBjb25zdHJ1Y3RvcnMuIFN1Y2ggZnVuY3Rpb25zIGFyZSBsYWJlbGxlZCBieSB0aGUgY29tcGlsZXIKLWFzIGhhdmluZyBhIGxpbmUgbnVtYmVyIG9mIDAsIHdoaWNoIG1lYW5zIHRoZSBzb3VyY2UgYW5ub3RhdGlvbiBjYW4gYmUgY29uZnVzaW5nLgotPC9wPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJ3cm9uZy1saW5lbnItaW5mbyI+PC9hPjQuNC6gSW5hY2N1cmFjeSBpbiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbjwvaDM+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8cD4KLURlcGVuZGluZyBvbiB5b3VyIGNvbXBpbGVyIHlvdSBjYW4gZmFsbCBpbnRvIHRoZSBmb2xsb3dpbmcgcHJvYmxlbToKLTwvcD4KLSAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotc3RydWN0IGJpZ19vYmplY3QgeyBpbnQgYVs1MDBdOyB9OwotCi1pbnQgbWFpbigpCi17Ci0JYmlnX29iamVjdCBhLCBiOwotCWZvciAoaW50IGkgPSAwIDsgaSAhPSAxMDAwICogMTAwMDsgKytpKQotCQliID0gYTsKLQlyZXR1cm4gMDsKLX0KLQotPC9wcmU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8cD4KLUNvbXBpbGVkIHdpdGggPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zdHJvbmc+PC9zcGFuPiAzLjAuNCB0aGUgYW5ub3RhdGVkIHNvdXJjZSBpcyBjbGVhcmx5IGluYWNjdXJhdGU6Ci08L3A+Ci0gICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLSAgICAgICAgICAgICAgIDppbnQgbWFpbigpCi0gICAgICAgICAgICAgICA6eyAgLyogbWFpbiB0b3RhbDogNzg3MSAxMDAlICovCi0gICAgICAgICAgICAgICA6ICAgICAgICBiaWdfb2JqZWN0IGEsIGI7Ci0gICAgICAgICAgICAgICA6ICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgIT0gMTAwMCAqIDEwMDA7ICsraSkKLSAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgYiA9IGE7Ci0gNzg3MSAxMDAlICAgICA6ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgIDp9Ci08L3ByZT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIDxwPgotVGhlIHByb2JsZW0gaGVyZSBpcyBkaXN0aW5jdCBmcm9tIHRoZSBJUlEgbGF0ZW5jeSBwcm9ibGVtOyB0aGUgZGVidWcgbGluZSBudW1iZXIKLWluZm9ybWF0aW9uIGlzIG5vdCBwcmVjaXNlIGVub3VnaDsgYWdhaW4sIGxvb2tpbmcgYXQgb3V0cHV0IG9mIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm9wYW5ub2F0YXRlIC1hczwvc3Ryb25nPjwvc3Bhbj4gY2FuIGhlbHAuCi08L3A+Ci0gICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLSAgICAgICAgICAgICAgIDppbnQgbWFpbigpCi0gICAgICAgICAgICAgICA6ewotICAgICAgICAgICAgICAgOiAgICAgICAgYmlnX29iamVjdCBhLCBiOwotICAgICAgICAgICAgICAgOiAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpICE9IDEwMDAgKiAxMDAwOyArK2kpCi0gICAgICAgICAgICAgICA6IDgwNDg0YzA6ICAgICAgIHB1c2ggICAlZWJwCi0gICAgICAgICAgICAgICA6IDgwNDg0YzE6ICAgICAgIG1vdiAgICAlZXNwLCVlYnAKLSAgICAgICAgICAgICAgIDogODA0ODRjMzogICAgICAgc3ViICAgICQweGZhYywlZXNwCi0gICAgICAgICAgICAgICA6IDgwNDg0Yzk6ICAgICAgIHB1c2ggICAlZWRpCi0gICAgICAgICAgICAgICA6IDgwNDg0Y2E6ICAgICAgIHB1c2ggICAlZXNpCi0gICAgICAgICAgICAgICA6IDgwNDg0Y2I6ICAgICAgIHB1c2ggICAlZWJ4Ci0gICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGIgPSBhOwotICAgICAgICAgICAgICAgOiA4MDQ4NGNjOiAgICAgICBsZWEgICAgMHhmZmZmZjA2MCglZWJwKSwlZWR4Ci0gICAgICAgICAgICAgICA6IDgwNDg0ZDI6ICAgICAgIGxlYSAgICAweGZmZmZmODMwKCVlYnApLCVlYXgKLSAgICAgICAgICAgICAgIDogODA0ODRkODogICAgICAgbW92ICAgICQweGY0MjNmLCVlYngKLSAgICAgICAgICAgICAgIDogODA0ODRkZDogICAgICAgbGVhICAgIDB4MCglZXNpKSwlZXNpCi0gICAgICAgICAgICAgICA6ICAgICAgICByZXR1cm4gMDsKLSAgICAzIDAuMDM4MTElIDogODA0ODRlMDogICAgICAgbW92ICAgICVlZHgsJWVkaQotICAgICAgICAgICAgICAgOiA4MDQ4NGUyOiAgICAgICBtb3YgICAgJWVheCwlZXNpCi0gICAgMSAwLjAxMjclICA6IDgwNDg0ZTQ6ICAgICAgIGNsZAotICAgIDggMC4xMDE2JSAgOiA4MDQ4NGU1OiAgICAgICBtb3YgICAgJDB4MWY0LCVlY3gKLSA3ODUwIDk5LjczJSAgIDogODA0ODRlYTogICAgICAgcmVweiBtb3ZzbCAlZHM6KCVlc2kpLCVlczooJWVkaSkKLSAgICA5IDAuMTE0MyUgIDogODA0ODRlYzogICAgICAgZGVjICAgICVlYngKLSAgICAgICAgICAgICAgIDogODA0ODRlZDogICAgICAgam5zICAgIDgwNDg0ZTAKLSAgICAgICAgICAgICAgIDogODA0ODRlZjogICAgICAgeG9yICAgICVlYXgsJWVheAotICAgICAgICAgICAgICAgOiA4MDQ4NGYxOiAgICAgICBwb3AgICAgJWVieAotICAgICAgICAgICAgICAgOiA4MDQ4NGYyOiAgICAgICBwb3AgICAgJWVzaQotICAgICAgICAgICAgICAgOiA4MDQ4NGYzOiAgICAgICBwb3AgICAgJWVkaQotICAgICAgICAgICAgICAgOiA4MDQ4NGY0OiAgICAgICBsZWF2ZQotICAgICAgICAgICAgICAgOiA4MDQ4NGY1OiAgICAgICByZXQKLTwvcHJlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPHA+Ci1TbyBoZXJlIGl0J3MgY2xlYXIgdGhhdCBjb3B5aW5nIGlzIGNvcnJlY3RseSBjcmVkaXRlZCB3aXRoIG9mIGFsbCB0aGUgc2FtcGxlcywgYnV0IHRoZQotbGluZSBudW1iZXIgaW5mb3JtYXRpb24gaXMgbWlzcGxhY2VkLiA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vYmpkdW1wIC1kUzwvc3Ryb25nPjwvc3Bhbj4gZXhwb3NlcyB0aGUKLXNhbWUgcHJvYmxlbS4gTm90ZSB0aGF0IG1haW50YWluaW5nIGFjY3VyYXRlIGRlYnVnIGluZm9ybWF0aW9uIGZvciBjb21waWxlcnMgd2hlbiBvcHRpbWl6aW5nIGlzIGRpZmZpY3VsdCwgc28gdGhpcyBwcm9ibGVtIGlzIG5vdCBzdXByaXNpbmcuCi1UaGUgcHJvYmxlbSBvZiBkZWJ1ZyBpbmZvcm1hdGlvbgotYWNjdXJhY3kgaXMgYWxzbyBkZXBlbmRlbnQgb24gdGhlIGJpbnV0aWxzIHZlcnNpb24gdXNlZDsgc29tZSBCRkQgbGlicmFyeSB2ZXJzaW9ucwotY29udGFpbiBhIHdvcmstYXJvdW5kIGZvciBrbm93biBwcm9ibGVtcyBvZiA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5nY2M8L3N0cm9uZz48L3NwYW4+LCBzb21lIG90aGVycyBkbyBub3QuIFRoaXMgaXMgdW5mb3J0dW5hdGUgYnV0IHdlIG11c3QgbGl2ZSB3aXRoIHRoYXQsCi1zaW5jZSBwcm9maWxpbmcgaXMgcG9pbnRsZXNzIHdoZW4geW91IGRpc2FibGUgb3B0aW1pc2F0aW9uICh3aGljaCB3b3VsZCBnaXZlIGJldHRlciBkZWJ1Z2dpbmcgZW50cmllcykuCi08L3A+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ic3ltYm9sLXdpdGhvdXQtZGVidWctaW5mbyI+PC9hPjUuoEFzc2VtYmx5IGZ1bmN0aW9uczwvaDI+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPHA+Ci1PZnRlbiB0aGUgYXNzZW1ibGVyIGNhbm5vdCBnZW5lcmF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBhdXRvbWF0aWNhbGx5LgotVGhpcyBtZWFucyB0aGF0IHlvdSBjYW5ub3QgZ2V0IGEgc291cmNlIHJlcG9ydCB1bmxlc3MgCi15b3UgbWFudWFsbHkgZGVmaW5lIHRoZSBuZWNjZXNzYXJ5IGRlYnVnIGluZm9ybWF0aW9uOyByZWFkIHlvdXIgYXNzZW1ibGVyIGRvY3VtZW50YXRpb24gZm9yIGhvdyB5b3UgbWlnaHQKLWRvIHRoYXQuIFRoZSBvbmx5Ci1kZWJ1Z2dpbmcgaW5mbyBuZWVkZWQgY3VycmVudGx5IGJ5IE9Qcm9maWxlIGlzIHRoZSBsaW5lLW51bWJlci9maWxlbmFtZS1WTUEgYXNzb2NpYXRpb24uIFdoZW4gcHJvZmlsaW5nIGFzc2VtYmx5Ci13aXRob3V0IGRlYnVnZ2luZyBpbmZvIHlvdSBjYW4gYWx3YXlzIGdldCByZXBvcnQgZm9yIHN5bWJvbHMsIGFuZCBvcHRpb25hbGx5IGZvciBWTUEsIHRocm91Z2ggPHNwYW4+PHN0cm9uZyBjbGFzcz0iY29tbWFuZCI+b3ByZXBvcnQgLWw8L3N0cm9uZz48L3NwYW4+Ci1vciA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5vcHJlcG9ydCAtZDwvc3Ryb25nPjwvc3Bhbj4sIGJ1dCB0aGlzIHdvcmtzIG9ubHkgZm9yIHN5bWJvbHMgd2l0aCB0aGUgcmlnaHQgYXR0cmlidXRlcy4KLUZvciA8c3Bhbj48c3Ryb25nIGNsYXNzPSJjb21tYW5kIj5nYXM8L3N0cm9uZz48L3NwYW4+IHlvdSBjYW4gZ2V0IHRoaXMgYnkKLTwvcD4KLSAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KLS5nbG9ibCBmb28KLQkudHlwZQlmb28sQGZ1bmN0aW9uCi08L3ByZT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICA8cD4gCi13aGlsc3QgZm9yIDxzcGFuPjxzdHJvbmcgY2xhc3M9ImNvbW1hbmQiPm5hc208L3N0cm9uZz48L3NwYW4+IHlvdSBtdXN0IHVzZQotPC9wPgotICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgotCSAgR0xPQkFMIGZvbzpmdW5jdGlvbgkJOyBbMV0KLTwvcHJlPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDxwPgotTm90ZSB0aGF0IE9Qcm9maWxlIGRvZXMgbm90IG5lZWQgdGhlIGdsb2JhbCBhdHRyaWJ1dGUsIG9ubHkgdGhlIGZ1bmN0aW9uIGF0dHJpYnV0ZS4KLTwvcD4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJoaWRkZW4tY29zdCI+PC9hPjYuoE90aGVyIGRpc2NyZXBhbmNpZXM8L2gyPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDxwPgotQW5vdGhlciBjYXVzZSBvZiBhcHBhcmVudCBwcm9ibGVtcyBpcyB0aGUgaGlkZGVuIGNvc3Qgb2YgaW5zdHJ1Y3Rpb25zLiBBIHZlcnkKLWNvbW1vbiBleGFtcGxlIGlzIHR3byBtZW1vcnkgcmVhZHM6IG9uZSBmcm9tIEwxIGNhY2hlIGFuZCB0aGUgb3RoZXIgZnJvbSBtZW1vcnk6Ci10aGUgc2Vjb25kIG1lbW9yeSByZWFkIGlzIGxpa2VseSB0byBoYXZlIG1vcmUgc2FtcGxlcy4KLVRoZXJlIGFyZSBtYW55IG90aGVyIGNhdXNlcyBvZiBoaWRkZW4gY29zdCBvZiBpbnN0cnVjdGlvbnMuIEEgbm9uLWV4aGF1c3RpdmUKLWxpc3Q6IG1pcy1wcmVkaWN0ZWQgYnJhbmNoLCBUTEIgY2FjaGUgbWlzcywgcGFydGlhbCByZWdpc3RlciBzdGFsbCwKLXBhcnRpYWwgcmVnaXN0ZXIgZGVwZW5kZW5jaWVzLCBtZW1vcnkgbWlzbWF0Y2ggc3RhbGwsIHJlLWV4ZWN1dGVkILVvcHMuIElmIHlvdSB3YW50IHRvIHdyaXRlCi1wcm9ncmFtcyBhdCB0aGUgYXNzZW1ibHkgbGV2ZWwsIGJlIHN1cmUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEludGVsIGFuZAotQU1EIGRvY3VtZW50YXRpb24gYXQgPGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vIj5odHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS88L2E+Ci1hbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5hbWQuY29tL3Byb2R1Y3RzL2NwZy9hdGhsb24vdGVjaGRvY3MvIj5odHRwOi8vd3d3LmFtZC5jb20vcHJvZHVjdHMvY3BnL2F0aGxvbi90ZWNoZG9jcy88L2E+LgotPC9wPgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvZGl2PgotICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+Ci0gICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJhY2siPjwvYT5DaGFwdGVyoDYuoEFja25vd2xlZGdtZW50czwvaDI+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxwPgotVGhhbmtzIHRvIChpbiBubyBwYXJ0aWN1bGFyIG9yZGVyKSA6IEFyamFuIHZhbiBkZSBWZW4sIFJpayB2YW4gUmllbCwgSnVhbiBRdWludGVsYSwgUGhpbGlwcGUgRWxpZSwKLVBoaWxsaXBwIFJ1bXBmLCBUaWdyYW4gQWl2YXppYW4sIEFsZXggQnJvd24sIEFsaXNkYWlyIFJhd3N0aG9ybmUsIEJvYiBNb250Z29tZXJ5LCBSYXkgQnJ5YW50LCBILkouIEx1LAotSmVmZiBFc3BlciwgV2lsbCBDb2hlbiwgR3JheWRvbiBIb2FyZSwgQ2xpZmYgV29vbGxleSwgQWxleCBUc2FyaW91bm92LCBBbCBTdG9uZSwgSmFzb24gWWVoLAotUmFuZG9scGggQ2h1bmcsIEFudG9uIEJsYW5jaGFyZCwgUmljaGFyZCBIZW5kZXJzb24sIEFuZHJpZXMgQnJvdXdlciwgQnJ5YW4gUml0dG1leWVyLAotTWF5bmFyZCBQLiBKb2huc29uLAotUmljaGFyZCBSZWljaCAocnJlaWNoQHJkcnRlY2guY29tKSwgWndhbmUgTXdhaWthbWJvLCBEYXZlIEpvbmVzLCBDaGFybGVzIEZpbHRuZXNzOyBhbmQgZmluYWxseSBQdWxwLCBmb3IgIkludHJvIi4KLTwvcD4KLSAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotICA8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9kb2Mvb3Byb2ZpbGUueG1sIGIvZG9jL29wcm9maWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwZjI5Ni4uMDAwMDAwMAotLS0gYS9kb2Mvb3Byb2ZpbGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjM2NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4KLQotPGJvb2sgaWQ9Im9wcm9maWxlLWd1aWRlIj4KLTxib29raW5mbz4KLQk8dGl0bGU+T1Byb2ZpbGUgbWFudWFsPC90aXRsZT4KLSAKLQk8YXV0aG9yZ3JvdXA+Ci0JCTxhdXRob3I+Ci0JCQk8Zmlyc3RuYW1lPkpvaG48L2ZpcnN0bmFtZT4KLQkJCTxzdXJuYW1lPkxldm9uPC9zdXJuYW1lPgotCQkJPGFmZmlsaWF0aW9uPgotCQkJCTxhZGRyZXNzPjxlbWFpbD5sZXZvbkBtb3ZlbWVudGFyaWFuLm9yZzwvZW1haWw+PC9hZGRyZXNzPgotCQkJPC9hZmZpbGlhdGlvbj4KLQkJPC9hdXRob3I+Ci0JPC9hdXRob3Jncm91cD4KLQotCTxjb3B5cmlnaHQ+Ci0JCTx5ZWFyPjIwMDAtMjAwNDwveWVhcj4KLQkJPGhvbGRlcj5WaWN0b3JpYSBVbml2ZXJzaXR5IG9mIE1hbmNoZXN0ZXIsIEpvaG4gTGV2b24gYW5kIG90aGVyczwvaG9sZGVyPgotCTwvY29weXJpZ2h0PgotPC9ib29raW5mbz4KLQotPHRvYz48L3RvYz4KLQotPGNoYXB0ZXIgaWQ9ImludHJvZHVjdGlvbiI+Ci08dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KLQotPHBhcmE+Ci1UaGlzIG1hbnVhbCBhcHBsaWVzIHRvIE9Qcm9maWxlIHZlcnNpb24gPG9wcm9maWxldmVyc2lvbiAvPi4KLU9Qcm9maWxlIGlzIGEgcHJvZmlsaW5nIHN5c3RlbSBmb3IgTGludXggMi4yLzIuNC8yLjYgc3lzdGVtcyBvbiBhIG51bWJlciBvZiBhcmNoaXRlY3R1cmVzLiBJdCBpcyBjYXBhYmxlIG9mIHByb2ZpbGluZwotYWxsIHBhcnRzIG9mIGEgcnVubmluZyBzeXN0ZW0sIGZyb20gdGhlIGtlcm5lbCAoaW5jbHVkaW5nIG1vZHVsZXMgYW5kIGludGVycnVwdCBoYW5kbGVycykgdG8gc2hhcmVkIGxpYnJhcmllcwotdG8gYmluYXJpZXMuIEl0IHJ1bnMgdHJhbnNwYXJlbnRseSBpbiB0aGUgYmFja2dyb3VuZCBjb2xsZWN0aW5nIGluZm9ybWF0aW9uIGF0IGEgbG93IG92ZXJoZWFkLiBUaGVzZQotZmVhdHVyZXMgbWFrZSBpdCBpZGVhbCBmb3IgcHJvZmlsaW5nIGVudGlyZSBzeXN0ZW1zIHRvIGRldGVybWluZSBib3R0bGUgbmVja3MgaW4gcmVhbC13b3JsZCBzeXN0ZW1zLgotPC9wYXJhPgotPHBhcmE+Ci1NYW55IENQVXMgcHJvdmlkZSAicGVyZm9ybWFuY2UgY291bnRlcnMiLCBoYXJkd2FyZSByZWdpc3RlcnMgdGhhdCBjYW4gY291bnQgImV2ZW50cyI7IGZvciBleGFtcGxlLAotY2FjaGUgbWlzc2VzLCBvciBDUFUgY3ljbGVzLiBPUHJvZmlsZSBwcm92aWRlcyBwcm9maWxlcyBvZiBjb2RlIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgdGhlc2Ugb2NjdXJyaW5nIGV2ZW50czoKLXJlcGVhdGVkbHksIGV2ZXJ5IHRpbWUgYSBjZXJ0YWluIChjb25maWd1cmFibGUpIG51bWJlciBvZiBldmVudHMgaGFzIG9jY3VycmVkLCB0aGUgUEMgdmFsdWUgaXMgcmVjb3JkZWQuCi1UaGlzIGluZm9ybWF0aW9uIGlzIGFnZ3JlZ2F0ZWQgaW50byBwcm9maWxlcyBmb3IgZWFjaCBiaW5hcnkgaW1hZ2UuPC9wYXJhPgotPHBhcmE+Ci1Tb21lIGhhcmR3YXJlIHNldHVwcyBkbyBub3QgYWxsb3cgT1Byb2ZpbGUgdG8gdXNlIHBlcmZvcm1hbmNlIGNvdW50ZXJzOiBpbiB0aGVzZSBjYXNlcywgbm8KLWV2ZW50cyBhcmUgYXZhaWxhYmxlLCBhbmQgT1Byb2ZpbGUgb3BlcmF0ZXMgaW4gdGltZXIvUlRDIG1vZGUsIGFzIGRlc2NyaWJlZCBpbiBsYXRlciBjaGFwdGVycy4KLTwvcGFyYT4KLTxzZWN0MSBpZD0iYXBwbGljYXRpb25zIj4KLTx0aXRsZT5BcHBsaWNhdGlvbnMgb2YgT1Byb2ZpbGU8L3RpdGxlPgotPHBhcmE+Ci1PUHJvZmlsZSBpcyB1c2VmdWwgaW4gYSBudW1iZXIgb2Ygc2l0dWF0aW9ucy4gWW91IG1pZ2h0IHdhbnQgdG8gdXNlIE9Qcm9maWxlIHdoZW4geW91IDoKLTwvcGFyYT4KLTxpdGVtaXplZGxpc3Q+Ci08bGlzdGl0ZW0+PHBhcmE+bmVlZCBsb3cgb3ZlcmhlYWQ8L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT5jYW5ub3QgdXNlIGhpZ2hseSBpbnRydXNpdmUgcHJvZmlsaW5nIG1ldGhvZHM8L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT5uZWVkIHRvIHByb2ZpbGUgaW50ZXJydXB0IGhhbmRsZXJzPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+bmVlZCB0byBwcm9maWxlIGFuIGFwcGxpY2F0aW9uIGFuZCBpdHMgc2hhcmVkIGxpYnJhcmllczwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPm5lZWQgdG8gY2FwdHVyZSB0aGUgcGVyZm9ybWFuY2UgYmVoYXZpb3VyIG9mIGVudGlyZSBzeXN0ZW08L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT53YW50IHRvIGV4YW1pbmUgaGFyZHdhcmUgZWZmZWN0cyBzdWNoIGFzIGNhY2hlIG1pc3NlczwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPndhbnQgZGV0YWlsZWQgc291cmNlIGFubm90YXRpb248L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT53YW50IGluc3RydWN0aW9uLWxldmVsIHByb2ZpbGVzPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+d2FudCBjYWxsLWdyYXBoIHByb2ZpbGVzPC9wYXJhPjwvbGlzdGl0ZW0+Ci08L2l0ZW1pemVkbGlzdD4KLTxwYXJhPgotT1Byb2ZpbGUgaXMgbm90IGEgcGFuYWNlYS4gT1Byb2ZpbGUgbWlnaHQgbm90IGJlIGEgY29tcGxldGUgc29sdXRpb24gd2hlbiB5b3UgOgotPC9wYXJhPgotPGl0ZW1pemVkbGlzdD4KLTxsaXN0aXRlbT48cGFyYT5yZXF1aXJlIGNhbGwgZ3JhcGggcHJvZmlsZXMgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gMi42L3g4NjwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPmRvbid0IGhhdmUgcm9vdCBwZXJtaXNzaW9uczwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPnJlcXVpcmUgMTAwJSBpbnN0cnVjdGlvbi1hY2N1cmF0ZSBwcm9maWxlczwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPm5lZWQgZnVuY3Rpb24gY2FsbCBjb3VudHMgb3IgYW4gaW50ZXJzdGl0aWFsIHByb2ZpbGluZyBBUEk8L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT5jYW5ub3QgdG9sZXJhdGUgYW55IGRpc3R1cmJhbmNlIHRvIHRoZSBzeXN0ZW0gd2hhdHNvZXZlcjwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPm5lZWQgdG8gcHJvZmlsZSBpbnRlcnByZXRlZCBvciBkeW5hbWljYWxseSBjb21waWxlZCBjb2RlIHN1Y2ggYXMgSmF2YSBvciBQeXRob248L3BhcmE+PC9saXN0aXRlbT4KLTwvaXRlbWl6ZWRsaXN0PgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJyZXF1aXJlbWVudHMiPgotPHRpdGxlPlN5c3RlbSByZXF1aXJlbWVudHM8L3RpdGxlPgotCi08dmFyaWFibGVsaXN0PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPkxpbnV4IGtlcm5lbCAyLjIvMi40LzIuNjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkJT1Byb2ZpbGUgdXNlcyBhIGtlcm5lbCBtb2R1bGUgdGhhdCBjYW4gYmUgY29tcGlsZWQgZm9yCi0JCQkyLjIuMTEgb3IgbGF0ZXIgYW5kIDIuNC4gVmVyc2lvbnMgMi40LjEwIG9yIGFib3ZlIGFyZSByZWNvbW1lbmRlZCwgYW5kIHJlcXVpcmVkIGlmIHlvdSB1c2UgdGhlCi0JCQlib290LXRpbWUga2VybmVsIG9wdGlvbiA8b3B0aW9uPm5vc21wPC9vcHRpb24+LiAgMi42IGtlcm5lbHMgYXJlIHN1cHBvcnRlZCB3aXRoIHRoZSBpbi1rZXJuZWwKLQkJCU9Qcm9maWxlIGRyaXZlci4gTm90ZSB0aGF0IG9ubHkgMzItYml0IHg4NiBhbmQgSUE2NCBhcmUgc3VwcG9ydGVkIG9uIDIuMi8yLjQga2VybmVscy4KLQotCQkJPC9wYXJhPgotCQkJPHBhcmE+Ci0JCQlQUEM2NCBwcm9jZXNzb3JzIChQb3dlcjQvUG93ZXI1L1BQQzk3MCkgcmVxdWlyZSBhIHJlY2VudCAoJmd0OyAyLjYuNSkga2VybmVsIHdpdGggdGhlIGxpbmUgCi0JCQk8Y29uc3RhbnQ+I2RlZmluZSBQVl85NzA8L2NvbnN0YW50PiBwcmVzZW50IGluIDxmaWxlbmFtZT5pbmNsdWRlL2FzbS1wcGM2NC9wcm9jZXNzb3IuaDwvZmlsZW5hbWU+LgotPCEtLSBGSVhNRTogZG8gd2UgcmVxdWlyZSBhbHdheXMgZ3RlIDIuNC4xMCBmb3Igbm9zbXAgPyAtLT4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+bW9kdXRpbHMgMi40LjYgb3IgYWJvdmU8L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJCVlvdSBzaG91bGQgaGF2ZSBpbnN0YWxsZWQgbW9kdXRpbHMgMi40LjYgb3IgaGlnaGVyIChpbiBmYWN0IGVhcmxpZXIgdmVyc2lvbnMgd29yayB3ZWxsIGluIGFsbW9zdCBhbGwKLQkJCWNhc2VzKS4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+U3VwcG9ydGVkIGFyY2hpdGVjdHVyZTwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkJRm9yIEludGVsIElBMzIsIGEgQ1BVIHdpdGggZWl0aGVyIGEgUDYgZ2VuZXJhdGlvbiBvciBQZW50aXVtIDQgY29yZSBpcwotCQkJcmVxdWlyZWQuIEluIG1hcmtldGluZyB0ZXJtcyB0aGlzIHRyYW5zbGF0ZXMgdG8gYW55dGhpbmcKLQkJCWJldHdlZW4gYW4gSW50ZWwgUGVudGl1bSBQcm8gKG5vdCBQZW50aXVtIENsYXNzaWNzKSBhbmQKLQkJCWEgUGVudGl1bSA0IC8gWGVvbiwgaW5jbHVkaW5nIGFsbCBDZWxlcm9ucy4gIFRoZSBBTUQKLQkJCUF0aGxvbiwgYW5kIER1cm9uIENQVXMgYXJlIGFsc28gc3VwcG9ydGVkLiAgT3RoZXIgSUEzMgotCQkJQ1BVIHR5cGVzIG9ubHkgc3VwcG9ydCB0aGUgUlRDIG1vZGUgb2YgT1Byb2ZpbGU7IHBsZWFzZQotCQkJc2VlIGxhdGVyIGluIHRoaXMgbWFudWFsIGZvciBkZXRhaWxzLiAgSHlwZXItdGhyZWFkZWQgUGVudGl1bSBJVnMKLQkJCWFyZSBub3Qgc3VwcG9ydGVkIGluIDIuNC4gRm9yIDIuNCBrZXJuZWxzLCB0aGUgSW50ZWwKLQkJCUlBLTY0IENQVXMgYXJlIGFsc28gc3VwcG9ydGVkLiBGb3IgMi42IGtlcm5lbHMsIHRoZXJlIGlzIGFkZGl0aW9uYWxseQotCQkJc3VwcG9ydCBmb3IgQWxwaGEgcHJvY2Vzc29ycywgTUlQUywgQVJNLCB4ODYtNjQsIHNwYXJjNjQsIHBwYzY0LCBhbmQsCi0JCQlpbiB0aW1lciBtb2RlLCBQQS1SSVNDIGFuZCBzMzkwLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT5Vbmlwcm9jZXNzb3Igb3IgU01QPC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCQlTTVAgbWFjaGluZXMgYXJlIGZ1bGx5IHN1cHBvcnRlZC4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+UmVxdWlyZWQgbGlicmFyaWVzPC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCQlUaGVzZSBsaWJyYXJpZXMgYXJlIHJlcXVpcmVkIDogPGZpbGVuYW1lPnBvcHQ8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJmZDwvZmlsZW5hbWU+LAotCQkJPGZpbGVuYW1lPmxpYmVydHk8L2ZpbGVuYW1lPiAoZGViaWFuIHVzZXJzOiBsaWJpYmVydHkgaXMgcHJvdmlkZWQgaW4gYmludXRpbHMtZGV2IHBhY2thZ2UpLCA8ZmlsZW5hbWU+ZGw8L2ZpbGVuYW1lPiwKLQkJCXBsdXMgdGhlIHN0YW5kYXJkIEMrKyBsaWJyYXJpZXMuCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPkJhc2ggdmVyc2lvbiAyPC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCQlUaGUgPGNvbW1hbmQ+b3Bjb250cm9sPC9jb21tYW5kPiBzY3JpcHQgcmVxdWlyZXMgYmFzaCB2ZXJzaW9uIDIgYXQgbGVhc3QgdG8gYmUgaW5zdGFsbGVkCi0JCQlhcyA8ZmlsZW5hbWU+L2Jpbi9iYXNoPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi9iaW4vYmFzaDI8L2ZpbGVuYW1lPgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT5PUHJvZmlsZSBHVUk8L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJCVRoZSB1c2Ugb2YgdGhlIEdVSSB0byBzdGFydCB0aGUgcHJvZmlsZXIgcmVxdWlyZXMgdGhlIDxmaWxlbmFtZT5RdCAyPC9maWxlbmFtZT4gbGlicmFyeS4gPGZpbGVuYW1lPlF0IDM8L2ZpbGVuYW1lPiBzaG91bGQKLQkJCWFsc28gd29yay4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLSAJCTx0ZXJtPjxhY3JvbnltPkVMRjwvYWNyb255bT48L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJCVByb2JhYmx5IG5vdCB0b28gc3RyZW51b3VzIGEgcmVxdWlyZW1lbnQsIGJ1dCBvbGRlciA8YWNyb255bT5BLk9VVDwvYWNyb255bT4gYmluYXJpZXMvbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT5LJmFtcDtSIGNvZGluZyBzdHlsZTwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkJT0ssIHNvIGl0J3Mgbm90IHJlYWxseSBhIHJlcXVpcmVtZW50LCBidXQgSSB3aXNoIGl0IHdhcy4uLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLTwvdmFyaWFibGVsaXN0PgotCi0KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0icmVzb3VyY2VzIj4KLTx0aXRsZT5JbnRlcm5ldCByZXNvdXJjZXM8L3RpdGxlPgotCi08dmFyaWFibGVsaXN0PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPldlYiBwYWdlPC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCQlUaGVyZSBpcyBhIHdlYiBwYWdlICh3aGljaCB5b3UgbWF5IGJlIHJlYWRpbmcgbm93KSBhdAotCQkJPHVsaW5rIHVybD0iaHR0cDovL29wcm9maWxlLnNmLm5ldC8iPmh0dHA6Ly9vcHJvZmlsZS5zZi5uZXQvPC91bGluaz4uCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPkRvd25sb2FkPC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCQlZb3UgY2FuIGRvd25sb2FkIGEgc291cmNlIHRhcmJhbGwgb3IgZ2V0IGFub255bW91cyBDVlMgYXQgdGhlIHNvdXJjZWZvcmdlIHBhZ2UsCi0JCQk8dWxpbmsgdXJsPSJodHRwOi8vc2YubmV0L3Byb2plY3RzL29wcm9maWxlLyI+aHR0cDovL3NmLm5ldC9wcm9qZWN0cy9vcHJvZmlsZS88L3VsaW5rPi4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+TWFpbGluZyBsaXN0PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCQlUaGVyZSBpcyBhIGxvdy10cmFmZmljIE9Qcm9maWxlLXNwZWNpZmljIG1haWxpbmcgbGlzdCwgZGV0YWlscyBhdAotCQkJPHVsaW5rIHVybD0iaHR0cDovL3NmLm5ldC9tYWlsLz9ncm91cF9pZD0xNjE5MSI+aHR0cDovL3NmLm5ldC9tYWlsLz9ncm91cF9pZD0xNjE5MTwvdWxpbms+LgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT5CdWcgdHJhY2tlcjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkJVGhlcmUgaXMgYSBidWcgdHJhY2tlciBmb3IgT1Byb2ZpbGUgYXQgU291cmNlRm9yZ2UsCi0JCQk8dWxpbmsgdXJsPSJodHRwOi8vc2YubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE2MTkxJmFtcDthdGlkPTExNjE5MSI+aHR0cDovL3NmLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNjE5MSZhbXA7YXRpZD0xMTYxOTE8L3VsaW5rPi4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+SVJDIGNoYW5uZWw8L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJCVNldmVyYWwgT1Byb2ZpbGUgZGV2ZWxvcGVycyBhbmQgdXNlcnMgc29tZXRpbWVzIGhhbmcgb3V0IG9uIGNoYW5uZWwgPGNvbW1hbmQ+I29wcm9maWxlPC9jb21tYW5kPgotCQkJb24gdGhlIDx1bGluayB1cmw9Imh0dHA6Ly9mcmVlbm9kZS5pbmZvIj5mcmVlbm9kZTwvdWxpbms+IG5ldHdvcmsuIAotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLTwvdmFyaWFibGVsaXN0PgotCi08L3NlY3QxPgotCi08c2VjdDEgaWQ9Imluc3RhbGwiPgotPHRpdGxlPkluc3RhbGxhdGlvbjwvdGl0bGU+Ci0KLTxwYXJhPgotRmlyc3QgeW91IG5lZWQgdG8gYnVpbGQgT1Byb2ZpbGUgYW5kIGluc3RhbGwgaXQuIDxjb21tYW5kPi4vY29uZmlndXJlPC9jb21tYW5kPiwgPGNvbW1hbmQ+bWFrZTwvY29tbWFuZD4sIDxjb21tYW5kPm1ha2UgaW5zdGFsbDwvY29tbWFuZD4KLWlzIG9mdGVuIGFsbCB5b3UgbmVlZCwgYnV0IG5vdGUgdGhlc2UgYXJndW1lbnRzIHRvIDxjb21tYW5kPi4vY29uZmlndXJlPC9jb21tYW5kPiA6Ci08L3BhcmE+Ci08dmFyaWFibGVsaXN0PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+LS13aXRoLWxpbnV4PC9vcHRpb24+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCQlVc2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSB5b3Ugd2lzaAotCQkJdG8gY29tcGlsZSBhZ2FpbnN0LiBUaGUga2VybmVsIG1vZHVsZSBpcyBidWlsdCBhZ2FpbnN0IHRoaXMgc291cmNlIGFuZAotCQkJd2lsbCBvbmx5IHdvcmsgd2l0aCBhIHJ1bm5pbmcga2VybmVsIGJ1aWx0IGZyb20gdGhlIHNhbWUgc291cmNlIHdpdGgKLQkJCWV4YWN0IHNhbWUgb3B0aW9ucywgc28gaXQgaXMgaW1wb3J0YW50IHlvdSBzcGVjaWZ5IHRoaXMgb3B0aW9uIGlmIHlvdSBuZWVkCi0JCQl0by4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj4tLXdpdGgta2VybmVsLXN1cHBvcnQ8L29wdGlvbj48L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJCVVzZSB0aGlzIG9wdGlvbiB3aXRoIDIuNiBhbmQgYWJvdmUga2VybmVscyB0byBpbmRpY2F0ZSB0aGUgCi0JICAgIAkJa2VybmVsIHByb3ZpZGVzIHRoZSBPUHJvZmlsZSBkZXZpY2UgZHJpdmVyLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPi0td2l0aC1xdC1kaXIvaW5jbHVkZXMvbGlicmFyaWVzPC9vcHRpb24+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCQlTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBRdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMuIEl0IGRlZmF1bHRzIHRvIHNlYXJjaGluZyBpbgotCQkJPGNvbnN0YW50PiRRVERJUjwvY29uc3RhbnQ+IGlmIHRoZXNlIGFyZSBub3Qgc3BlY2lmaWVkLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5IGlkPSJlbmFibGUtYWJpIj4KLQkJPHRlcm0+PG9wdGlvbj4tLWVuYWJsZS1hYmk8L29wdGlvbj48L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJCUFjdGl2YXRlIGNvZGUgd2l0aGluIHRoZSBPUHJvZmlsZSBzYW1wbGUgY29sbGVjdGlvbiBkYWVtb24KLQkJCTxjb21tYW5kPm9wcm9maWxlZDwvY29tbWFuZD4gd2hpY2ggcmVjb3JkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmluYXJ5Ci0JCQlmb3JtYXQgb2Ygc2FtcGxlIGZpbGVzIGluIDxmaWxlbmFtZT4vdmFyL2xpYi9vcHJvZmlsZS9hYmk8L2ZpbGVuYW1lPiwgdG8KLQkJCXBlcm1pdCB0aGVpciB0cmFuc3BvcnQgYmV0d2VlbiBob3N0cyB1c2luZyB0aGUKLQkJCTxjb21tYW5kPm9waW1wb3J0PC9jb21tYW5kPiB1dGlsaXR5LiBTZWUgPHhyZWYKLQkJCWxpbmtlbmQ9Im9waW1wb3J0IiAvPi4gVGhpcyBvcHRpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBlbWJlZGRlZAotCQkJc3lzdGVtcyBvciByZW1vdGUgYW5hbHlzaXMgb2YgcHJvZHVjdGlvbiBtYWNoaW5lczsgaWYgeW91IHdpbGwgYmUKLQkJCXBlcmZvcm1pbmcgYWxsIHNhbXBsZSBhbmFseXNpcyBvbiB0aGUgc2FtZSBtYWNoaW5lIGFzIHlvdSBhcmUgcHJvZmlsaW5nLAotCQkJaXQgaXMgc2FmZSB0byBvbWl0IHRoaXMgb3B0aW9uLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5IGlkPSJkaXNhYmxlLXdlcnJvciI+Ci0JCTx0ZXJtPjxvcHRpb24+LS1kaXNhYmxlLXdlcnJvcjwvb3B0aW9uPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkJRGV2ZWxvcG1lbnQgdmVyc2lvbnMgb2YgT1Byb2ZpbGUgYnVpbGQgYnkKLQkJCWRlZmF1bHQgd2l0aCA8b3B0aW9uPi1XZXJyb3I8L29wdGlvbj4uIFRoaXMgb3B0aW9uIHR1cm5zCi0JCQk8b3B0aW9uPi1XZXJyb3I8L29wdGlvbj4gb2ZmLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5IGlkPSJkaXNhYmxlLW9wdGltaXphdGlvbiI+Ci0JCTx0ZXJtPjxvcHRpb24+LS1kaXNhYmxlLW9wdGltaXphdGlvbjwvb3B0aW9uPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkJRGlzYWJsZSB0aGUgPG9wdGlvbj4tTzI8L29wdGlvbj4gY29tcGlsZXIgZmxhZwotCQkJKHVzZWZ1bCBpZiB5b3UgZGlzY292ZXIgYW4gT1Byb2ZpbGUgYnVnIGFuZCB3YW50IHRvIGdpdmUgYSB1c2VmdWwKLQkJCWJhY2stdHJhY2UgZXRjLikKLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci08L3ZhcmlhYmxlbGlzdD4KLTxwYXJhPgotWW91J2xsIG5lZWQgdG8gaGF2ZSBhIGNvbmZpZ3VyZWQga2VybmVsIHNvdXJjZSBmb3IgdGhlIGN1cnJlbnQga2VybmVsCi10byBidWlsZCB0aGUgbW9kdWxlIGZvciAyLjQga2VybmVscy4gIFNpbmNlIGFsbCBkaXN0cmlidXRpb25zIHByb3ZpZGUgZGlmZmVyZW50IGtlcm5lbHMgaXQncyB1bmxpa2VseSB0aGUgcnVubmluZyBrZXJuZWwgbWF0Y2ggdGhlIGNvbmZpZ3VyZWQgc291cmNlCi15b3UgaW5zdGFsbGVkLiBUaGUgc2FmZXN0IHdheSBpcyB0byByZWNvbXBpbGUgeW91ciBvd24ga2VybmVsLCBydW4gaXQgYW5kIGNvbXBpbGUgb3Byb2ZpbGUuIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBpZiB5b3UgaGF2ZSBhCi11bmlwcm9jZXNzb3IgbWFjaGluZSwgeW91IGVuYWJsZSB0aGUgbG9jYWwgQVBJQyAvIElPX0FQSUMgc3VwcG9ydCBmb3IKLXlvdXIga2VybmVsICh0aGlzIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBmb3IgU01QIGtlcm5lbHMpLiBXaXRoIG1hbnkgQklPUywga2VybmVsID49IDIuNi45IGFuZCBVUCBrZXJuZWwgaXQncyBub3Qgc3VmZmljaWVudCB0byBlbmFibGUgdGhlIGxvY2FsIEFQSUMgeW91IG11c3QgYWxzbyB0dXJuIGl0IG9uIGV4cGxpY2l0ZWx5IGF0IGJvb3QgdGltZSBieSBwcm92aWRpbmcgImxhcGljIiBvcHRpb24gdG8gdGhlIGtlcm5lbC4gT24KLW1hY2hpbmVzIHdpdGggcG93ZXIgbWFuYWdlbWVudCwgc3VjaCBhcyBsYXB0b3BzLCB0aGUgcG93ZXIgbWFuYWdlbWVudAotbXVzdCBiZSB0dXJuZWQgb2ZmIHdoZW4gdXNpbmcgT1Byb2ZpbGUgd2l0aCAyLjQga2VybmVscy4gVGhlIHBvd2VyIG1hbmFnZW1lbnQgc29mdHdhcmUKLWluIHRoZSBCSU9TIGNhbm5vdCBoYW5kbGUgdGhlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzIChOTUlzKSB1c2VkIGJ5Ci1PUHJvZmlsZSBmb3IgZGF0YSBjb2xsZWN0aW9uLiBJZiB5b3UgdXNlIHRoZSBOTUkgd2F0Y2hkb2csIGJlIGF3YXJlIHRoYXQKLXRoZSB3YXRjaGRvZyBpcyBkaXNhYmxlZCB3aGVuIHByb2ZpbGluZyBzdGFydHMsIGFuZCBub3QgcmUtZW5hYmxlZCB1bnRpbCB0aGUKLU9Qcm9maWxlIG1vZHVsZSBpcyByZW1vdmVkIChvciwgaW4gMi42LCB3aGVuIE9Qcm9maWxlIGlzIG5vdCBydW5uaW5nKS4gSWYgeW91IGNvbXBpbGUgT1Byb2ZpbGUgZm9yCi1hIDIuMiBrZXJuZWwgeW91IG11c3QgYmUgcm9vdCB0byBjb21waWxlIHRoZSBtb2R1bGUuIElmIHlvdSBhcmUgdXNpbmcKLTIuNiBrZXJuZWxzIG9yIGhpZ2hlciwgeW91IGRvIG5vdCBuZWVkIGtlcm5lbCBzb3VyY2UsIGFzIGxvbmcgYXMgdGhlCi1PUHJvZmlsZSBkcml2ZXIgaXMgZW5hYmxlZDsgYWRkaXRpb25hbGx5LCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGRpc2FibGUKLXBvd2VyIG1hbmFnZW1lbnQuCi08L3BhcmE+Ci08cGFyYT4KLVBsZWFzZSBub3RlIHRoYXQgeW91IG11c3Qgc2F2ZSBvciBoYXZlIGF2YWlsYWJsZSB0aGUgPGZpbGVuYW1lPnZtbGludXg8L2ZpbGVuYW1lPiBmaWxlCi1nZW5lcmF0ZWQgZHVyaW5nIGEga2VybmVsIGNvbXBpbGUsIGFzIE9Qcm9maWxlIG5lZWRzIGl0ICh5b3UgY2FuIHVzZQotPG9wdGlvbj4tLW5vLXZtbGludXg8L29wdGlvbj4sIGJ1dCB0aGlzIHdpbGwgcHJldmVudCBrZXJuZWwgcHJvZmlsaW5nKS4KLTwvcGFyYT4KLQotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJ1bmluc3RhbGwiPgotPHRpdGxlPlVuaW5zdGFsbGluZyBPUHJvZmlsZTwvdGl0bGU+Ci08cGFyYT4KLVlvdSBtdXN0IGhhdmUgdGhlIHNvdXJjZSB0cmVlIGF2YWlsYWJsZSB0byB1bmluc3RhbGwgT1Byb2ZpbGU7IGEgPGNvbW1hbmQ+bWFrZSB1bmluc3RhbGw8L2NvbW1hbmQ+IHdpbGwKLXJlbW92ZSBhbGwgaW5zdGFsbGVkIGZpbGVzIGV4Y2VwdCB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgZGlyZWN0b3J5IDxmaWxlbmFtZT5+Ly5vcHJvZmlsZTwvZmlsZW5hbWU+LgotPC9wYXJhPgotPC9zZWN0MT4KLQotPC9jaGFwdGVyPgotCi08Y2hhcHRlciBpZD0ib3ZlcnZpZXciPiAKLTx0aXRsZT5PdmVydmlldzwvdGl0bGU+Ci0KLTxzZWN0MSBpZD0iZ2V0dGluZy1zdGFydGVkIj4KLTx0aXRsZT5HZXR0aW5nIHN0YXJ0ZWQ8L3RpdGxlPgotPHBhcmE+Ci1CZWZvcmUgeW91IGNhbiB1c2UgT1Byb2ZpbGUsIHlvdSBtdXN0IHNldCBpdCB1cC4gVGhlIG1pbmltdW0gc2V0dXAgcmVxdWlyZWQgZm9yIHRoaXMKLWlzIHRvIHRlbGwgT1Byb2ZpbGUgd2hlcmUgdGhlIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZQotcnVubmluZyBrZXJuZWwgaXMsIGZvciBleGFtcGxlIDoKLTwvcGFyYT4KLTxzY3JlZW4+b3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmA8L3NjcmVlbj4KLTxwYXJhPgotSWYgeW91IGRvbid0IHdhbnQgdG8gcHJvZmlsZSB0aGUga2VybmVsIGl0c2VsZiwKLXlvdSBjYW4gdGVsbCBPUHJvZmlsZSB5b3UgZG9uJ3QgaGF2ZSBhIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZSA6Ci08L3BhcmE+Ci08c2NyZWVuPm9wY29udHJvbCAtLW5vLXZtbGludXg8L3NjcmVlbj4KLTxwYXJhPgotTm93IHdlIGFyZSByZWFkeSB0byBzdGFydCB0aGUgZGFlbW9uICg8Y29tbWFuZD5vcHJvZmlsZWQ8L2NvbW1hbmQ+KSB3aGljaCBjb2xsZWN0cwotdGhlIHByb2ZpbGUgZGF0YSA6Ci08L3BhcmE+Ci08c2NyZWVuPm9wY29udHJvbCAtLXN0YXJ0PC9zY3JlZW4+Ci08cGFyYT4KLVdoZW4gSSB3YW50IHRvIHN0b3AgcHJvZmlsaW5nLCBJIGNhbiBkbyBzbyB3aXRoIDoKLTwvcGFyYT4KLTxzY3JlZW4+b3Bjb250cm9sIC0tc2h1dGRvd248L3NjcmVlbj4KLTxwYXJhPgotTm90ZSB0aGF0IHVubGlrZSA8Y29tbWFuZD5ncHJvZjwvY29tbWFuZD4sIG5vIGluc3RydW1lbnRhdGlvbiAoPG9wdGlvbj4tcGc8L29wdGlvbj4KLWFuZCA8b3B0aW9uPi1hPC9vcHRpb24+IG9wdGlvbnMgdG8gPGNvbW1hbmQ+Z2NjPC9jb21tYW5kPikKLWlzIG5lY2Vzc2FyeS4KLTwvcGFyYT4KLTxwYXJhPgotUGVyaW9kaWNhbGx5IChvciBvbiA8Y29tbWFuZD5vcGNvbnRyb2wgLS1zaHV0ZG93bjwvY29tbWFuZD4gb3IgPGNvbW1hbmQ+b3Bjb250cm9sIC0tZHVtcDwvY29tbWFuZD4pCi10aGUgcHJvZmlsZSBkYXRhIGlzIHdyaXR0ZW4gb3V0IGludG8gdGhlIDxmaWxlbmFtZT4vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzPC9maWxlbmFtZT4gZGlyZWN0b3J5LgotVGhlc2UgcHJvZmlsZSBmaWxlcyBjb3ZlciBzaGFyZWQgbGlicmFyaWVzLCBhcHBsaWNhdGlvbnMsIHRoZSBrZXJuZWwgKHZtbGludXgpLCBhbmQga2VybmVsIG1vZHVsZXMuCi1Zb3UgY2FuIGNsZWFyIHRoZSBwcm9maWxlIGRhdGEgKGF0IGFueSB0aW1lKSB3aXRoIDxjb21tYW5kPm9wY29udHJvbCAtLXJlc2V0PC9jb21tYW5kPi4KLTwvcGFyYT4KLTxwYXJhPgotWW91IGNhbiBnZXQgc3VtbWFyaWVzIG9mIHRoaXMgZGF0YSBpbiBhIG51bWJlciBvZiB3YXlzIGF0IGFueSB0aW1lLiBUbyBnZXQgYSBzdW1tYXJ5IG9mCi1kYXRhIGFjcm9zcyB0aGUgZW50aXJlIHN5c3RlbSBmb3IgYWxsIG9mIHRoZXNlIHByb2ZpbGVzLCB5b3UgY2FuIGRvIDoKLTwvcGFyYT4KLTxzY3JlZW4+b3ByZXBvcnQ8L3NjcmVlbj4KLTxwYXJhPgotT3IgdG8gZ2V0IGEgbW9yZSBkZXRhaWxlZCBzdW1tYXJ5LCBmb3IgYSBwYXJ0aWN1bGFyIGltYWdlLCB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlIDoKLTwvcGFyYT4KLTxzY3JlZW4+b3ByZXBvcnQgLWwgL2Jvb3Qvdm1saW51eC1gdW5hbWUgLXJgPC9zY3JlZW4+Ci08cGFyYT4KLVRoZXJlIGFyZSBhbHNvIGEgbnVtYmVyIG9mIG90aGVyIHdheXMgb2YgcHJlc2VudGluZyB0aGUgZGF0YSwgYXMgZGVzY3JpYmVkIGxhdGVyIGluIHRoaXMgbWFudWFsLgotTm90ZSB0aGF0IE9Qcm9maWxlIHdpbGwgY2hvb3NlIGEgZGVmYXVsdCBwcm9maWxpbmcgc2V0dXAgZm9yIHlvdS4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyCi1vZiBvcHRpb25zIHlvdSBjYW4gcGFzcyB0byA8Y29tbWFuZD5vcGNvbnRyb2w8L2NvbW1hbmQ+IGlmIHlvdSBuZWVkIHRvIGNoYW5nZSBzb21ldGhpbmcsCi1hbHNvIGRldGFpbGVkIGxhdGVyLgotPC9wYXJhPgotCi08L3NlY3QxPgotCi08c2VjdDEgaWQ9InRvb2xzLW92ZXJ2aWV3Ij4KLTx0aXRsZT5Ub29scyBzdW1tYXJ5PC90aXRsZT4KLTxwYXJhPgotVGhpcyBzZWN0aW9uIGdpdmVzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZSBPUHJvZmlsZSB1dGlsaXRpZXMgYW5kIHRoZWlyIHB1cnBvc2UuCi08L3BhcmE+Ci08dmFyaWFibGVsaXN0PgotPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZmlsZW5hbWU+b3BoZWxwPC9maWxlbmFtZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPjxwYXJhPgotCQlUaGlzIHV0aWxpdHkgbGlzdHMgdGhlIGF2YWlsYWJsZSBldmVudHMgYW5kIHNob3J0IGRlc2NyaXB0aW9ucy4KLQk8L3BhcmE+PC9saXN0aXRlbT4KLTwvdmFybGlzdGVudHJ5PgotCQotPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZmlsZW5hbWU+b3Bjb250cm9sPC9maWxlbmFtZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPjxwYXJhPgotCQlVc2VkIGZvciBjb250cm9sbGluZyB0aGUgT1Byb2ZpbGUgZGF0YSBjb2xsZWN0aW9uLCBkaXNjdXNzZWQgaW4gPHhyZWYgbGlua2VuZD0iY29udHJvbGxpbmciIC8+LgotCTwvcGFyYT48L2xpc3RpdGVtPgotPC92YXJsaXN0ZW50cnk+Ci0KLTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGZpbGVuYW1lPm9wcmVwb3J0PC9maWxlbmFtZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPjxwYXJhPgotCQlUaGlzIGlzIHRoZSBtYWluIHRvb2wgZm9yIHJldHJpZXZpbmcgdXNlZnVsIHByb2ZpbGUgZGF0YSwgZGVzY3JpYmVkIGluCi0JCTx4cmVmIGxpbmtlbmQ9Im9wcmVwb3J0IiAvPi4KLQk8L3BhcmE+PC9saXN0aXRlbT4KLTwvdmFybGlzdGVudHJ5PgotCi08dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxmaWxlbmFtZT5vcGFubm90YXRlPC9maWxlbmFtZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPjxwYXJhPgotCQlUaGlzIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8gcHJvZHVjZSBhbm5vdGF0ZWQgc291cmNlLCBhc3NlbWJseSBvciBtaXhlZCBzb3VyY2UvYXNzZW1ibHkuCi0JCVNvdXJjZSBsZXZlbCBhbm5vdGF0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHRoZSBhcHBsaWNhdGlvbiB3YXMgY29tcGlsZWQgd2l0aCAKLQkJZGVidWdnaW5nIHN5bWJvbHMuIFNlZSA8eHJlZiBsaW5rZW5kPSJvcGFubm90YXRlIiAvPi4KLQk8L3BhcmE+PC9saXN0aXRlbT4KLTwvdmFybGlzdGVudHJ5PgotCi08dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxmaWxlbmFtZT5vcGdwcm9mPC9maWxlbmFtZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPjxwYXJhPgotCQlUaGlzIHV0aWxpdHkgY2FuIG91dHB1dCBncHJvZi1zdHlsZSBkYXRhIGZpbGVzIGZvciBhIGJpbmFyeSwgZm9yIHVzZSB3aXRoCi0JCTxjb21tYW5kPmdwcm9mIC1wPC9jb21tYW5kPi4gU2VlIDx4cmVmIGxpbmtlbmQ9Im9wZ3Byb2YiIC8+LgotCTwvcGFyYT48L2xpc3RpdGVtPgotPC92YXJsaXN0ZW50cnk+Ci0KLTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGZpbGVuYW1lPm9wYXJjaGl2ZTwvZmlsZW5hbWU+PC90ZXJtPgotCTxsaXN0aXRlbT48cGFyYT4KLQkJVGhpcyB1dGlsaXR5IGNhbiBiZSB1c2VkIHRvIGNvbGxlY3QgZXhlY3V0YWJsZXMsIGRlYnVnaW5mbywKLQkJYW5kIHNhbXBsZSBmaWxlcyBhbmQgY29weSB0aGUgZmlsZXMgaW50byBhbiBhcmNoaXZlLgotCQlUaGUgYXJjaGl2ZSBpcyBzZWxmLWNvbnRhaW5lZCBhbmQgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIKLQkJbWFjaGluZSBmb3IgZnVydGhlciBhbmFseXNpcy4KLQkJU2VlIDx4cmVmIGxpbmtlbmQ9Im9wYXJjaGl2ZSIgLz4uCi0JPC9wYXJhPjwvbGlzdGl0ZW0+Ci08L3Zhcmxpc3RlbnRyeT4KLQotPHZhcmxpc3RlbnRyeSBpZD0ib3BpbXBvcnQiPgotCTx0ZXJtPjxmaWxlbmFtZT5vcGltcG9ydDwvZmlsZW5hbWU+PC90ZXJtPgotCTxsaXN0aXRlbT48cGFyYT4KLQkJVGhpcyB1dGlsaXR5IGNvbnZlcnRzIHNhbXBsZSBkYXRhYmFzZSBmaWxlcyBmcm9tIGEgZm9yZWlnbiBiaW5hcnkgZm9ybWF0IChhYmkpIHRvCi0JCXRoZSBuYXRpdmUgZm9ybWF0LiBUaGlzIGlzIHVzZWZ1bCBvbmx5IHdoZW4gbW92aW5nIHNhbXBsZSBmaWxlcyBiZXR3ZWVuIGhvc3RzLAotCQlmb3IgYW5hbHlzaXMgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gdGhlIG9uZSB1c2VkIGZvciBjb2xsZWN0aW9uLiBUaGUgYWJpIGZvcm1hdAotCQlvZiB0aGUgZmlsZSB0byBiZSBpbXBvcnRlZCBpcyBkZXNjcmliZWQgaW4gYSB0ZXh0IGZpbGUgbG9jYXRlZCBpbgotCQk8ZmlsZW5hbWU+L3Zhci9saWIvb3Byb2ZpbGUvYWJpPC9maWxlbmFtZT4sIGlmIHRoZSA8b3B0aW9uPi0tZW5hYmxlLWFiaTwvb3B0aW9uPgotCQljb25maWd1cmUtdGltZSBvcHRpb24gd2FzIGVuYWJsZWQuIEZ1cnRoZXJtb3JlLCB0aGUgPGNvbW1hbmQ+b3BpbXBvcnQ8L2NvbW1hbmQ+Ci0JCXRvb2wgaXMgbm90IGJ1aWx0IHVubGVzcyA8b3B0aW9uPi0tZW5hYmxlLWFiaTwvb3B0aW9uPiBpcyBnaXZlbi4gU2VlIDx4cmVmCi0JCWxpbmtlbmQ9ImVuYWJsZS1hYmkiIC8+LgotCTwvcGFyYT48L2xpc3RpdGVtPgotPC92YXJsaXN0ZW50cnk+Ci0KLTwvdmFyaWFibGVsaXN0PgotPC9zZWN0MT4KLQkKLTwvY2hhcHRlcj4KLSAKLTxjaGFwdGVyIGlkPSJjb250cm9sbGluZyI+Ci08dGl0bGU+Q29udHJvbGxpbmcgdGhlIHByb2ZpbGVyPC90aXRsZT4KLQotPHNlY3QxIGlkPSJjb250cm9sbGluZy1kYWVtb24iPgotPHRpdGxlPlVzaW5nIDxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD48L3RpdGxlPgotPHBhcmE+Ci1JbiB0aGlzIHNlY3Rpb24gd2UgZGVzY3JpYmUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgb2YgdGhlIHByb2ZpbGluZyBzeXN0ZW0KLXdpdGggb3Bjb250cm9sIGluIG1vcmUgZGVwdGguCi1UaGUgPGNvbW1hbmQ+b3Bjb250cm9sPC9jb21tYW5kPiBzY3JpcHQgaGFzIGEgZGVmYXVsdCBzZXR1cCwgYnV0IHlvdQotY2FuIGFsdGVyIHRoaXMgd2l0aCB0aGUgb3B0aW9ucyBnaXZlbiBiZWxvdy4gSW4gcGFydGljdWxhciwKLWlmIHlvdXIgaGFyZHdhcmUgc3VwcG9ydHMgcGVyZm9ybWFuY2UgY291bnRlcnMsIHlvdSBjYW4gY29uZmlndXJlIHRoZW0uCi1UaGVyZSBhcmUgYSBudW1iZXIgb2YgY291bnRlcnMgKGZvciBleGFtcGxlLCBjb3VudGVyIDAgYW5kIGNvdW50ZXIgMQotb24gdGhlIFBlbnRpdW0gSUlJKS4gRWFjaCBvZiB0aGVzZSBjb3VudGVycyBjYW4gYmUgcHJvZ3JhbW1lZCB3aXRoCi1hbiBldmVudCB0byBjb3VudCwgc3VjaCBhcyBjYWNoZSBtaXNzZXMgb3IgTU1YIG9wZXJhdGlvbnMuIFRoZSBldmVudAotY2hvc2VuIGZvciBlYWNoIGNvdW50ZXIgaXMgcmVmbGVjdGVkIGluIHRoZSBwcm9maWxlIGRhdGEgY29sbGVjdGVkCi1ieSBPUHJvZmlsZTogZnVuY3Rpb25zIGFuZCBiaW5hcmllcyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9maWxlcyByZWZsZWN0Ci10aGF0IG1vc3Qgb2YgdGhlIGNob3NlbiBldmVudHMgaGFwcGVuZWQgd2l0aGluIHRoYXQgY29kZS4KLTwvcGFyYT4KLTxwYXJhPgotQWRkaXRpb25hbGx5LCBlYWNoIGNvdW50ZXIgaGFzIGEgImNvdW50IiB2YWx1ZTogdGhpcyBjb3JyZXNwb25kcyB0byBob3cKLWRldGFpbGVkIHRoZSBwcm9maWxlIGlzLiBUaGUgbG93ZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSBmcmVxdWVudGx5IHByb2ZpbGUKLXNhbXBsZXMgYXJlIHRha2VuLiBBIGNvdW50ZXIgY2FuIGNob29zZSB0byBzYW1wbGUgb25seSBrZXJuZWwgY29kZSwgdXNlci1zcGFjZSBjb2RlLAotb3IgYm90aCAoYm90aCBpcyB0aGUgZGVmYXVsdCkuIEZpbmFsbHksIHNvbWUgZXZlbnRzIGhhdmUgYSAidW5pdCBtYXNrIgotLSB0aGlzIGlzIGEgdmFsdWUgdGhhdCBmdXJ0aGVyIHJlc3RyaWN0cyB0aGUgdHlwZXMgb2YgZXZlbnQgdGhhdCBhcmUgY291bnRlZC4gCi1UaGUgZXZlbnQgdHlwZXMgYW5kIHVuaXQgbWFza3MgZm9yIHlvdXIgQ1BVIGFyZSBsaXN0ZWQgYnkgPGNvbW1hbmQ+b3Bjb250cm9sCi0tLWxpc3QtZXZlbnRzPC9jb21tYW5kPi4KLTwvcGFyYT4KLTxwYXJhPgotVGhlIDxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD4gc2NyaXB0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyA6Ci08L3BhcmE+Ci08dmFyaWFibGVsaXN0PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+LS1pbml0PC9vcHRpb24+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCUxvYWRzIHRoZSBPUHJvZmlsZSBtb2R1bGUgaWYgcmVxdWlyZWQgYW5kIG1ha2VzIHRoZSBPUHJvZmlsZSBkcml2ZXIKLQkJaW50ZXJmYWNlIGF2YWlsYWJsZS4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj4tLXNldHVwPC9vcHRpb24+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCSAgICBGb2xsb3dlZCBieSBsaXN0IGFyZ3VtZW50cyBmb3IgcHJvZmlsaW5nIHNldCB1cC4gTGlzdCBvZiBhcmd1bWVudHMKLQkJICAgIHNhdmVkIGluIDxmaWxlbmFtZT4vcm9vdC8ub3Byb2ZpbGUvZGFlbW9ucmM8L2ZpbGVuYW1lPi4KLQkJICAgIEdpdmluZyB0aGlzIG9wdGlvbiBpcyBub3QgbmVjZXNzYXJ5OyB5b3UgY2FuIGp1c3QgZGlyZWN0bHkgcGFzcyBvbmUKLQkJICAgIG9mIHRoZSBzZXR1cCBvcHRpb25zLCBlLmcuIDxjb21tYW5kPm9wY29udHJvbCAtLW5vLXZtbGludXg8L2NvbW1hbmQ+LgotCQkgIDwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+LS1zdGF0dXM8L29wdGlvbj48L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJU2hvdyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPi0tc3RhcnQtZGFlbW9uPC9vcHRpb24+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCSAgICBTdGFydCB0aGUgb3Byb2ZpbGUgZGFlbW9uIHdpdGhvdXQgc3RhcnRpbmcgYWN0dWFsIHByb2ZpbGluZy4gVGhlIHByb2ZpbGluZwotCQljYW4gdGhlbiBiZSBzdGFydGVkIHVzaW5nIDxvcHRpb24+LS1zdGFydDwvb3B0aW9uPi4gVGhpcyBpcyB1c2VmdWwgZm9yIGF2b2lkaW5nCi0JCW1lYXN1cmluZyB0aGUgY29zdCBvZiBkYWVtb24gc3RhcnR1cCwgYXMgPG9wdGlvbj4tLXN0YXJ0PC9vcHRpb24+IGlzIGEgc2ltcGxlCi0JCXdyaXRlIHRvIGEgZmlsZSBpbiBvcHJvZmlsZWZzLiBOb3QgYXZhaWxhYmxlIGluIDIuMi8yLjQga2VybmVscy4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj4tLXN0YXJ0PC9vcHRpb24+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCSAgICBTdGFydCBkYXRhIGNvbGxlY3Rpb24gd2l0aCBlaXRoZXIgYXJndW1lbnRzIHByb3ZpZGVkIGJ5IDxvcHRpb24+LS1zZXR1cDwvb3B0aW9uPgotCQlvciBpbmZvcm1hdGlvbiBzYXZlZCBpbiA8ZmlsZW5hbWU+L3Jvb3QvLm9wcm9maWxlL2RhZW1vbnJjPC9maWxlbmFtZT4uIFNwZWNpZnlpbmcKLQkJdGhlIGFkZGl0aW9uIDxvcHRpb24+LS12ZXJib3NlPC9vcHRpb24+IG1ha2VzIHRoZSBkYWVtb24gZ2VuZXJhdGUgbG90cyBvZiBkZWJ1ZyBkYXRhCi0JCXdoaWxzdCBpdCBpcyBydW5uaW5nLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPi0tZHVtcDwvb3B0aW9uPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkgICAgRm9yY2UgYSBmbHVzaCBvZiB0aGUgY29sbGVjdGVkIHByb2ZpbGluZyBkYXRhIHRvIHRoZSBkYWVtb24uCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+LS1zdG9wPC9vcHRpb24+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCSAgICBTdG9wIGRhdGEgY29sbGVjdGlvbiAodGhpcyBzZXBhcmF0ZSBzdGVwIGlzIG5vdCBwb3NzaWJsZSB3aXRoIDIuMiBvciAyLjQga2VybmVscykuCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+LS1zaHV0ZG93bjwvb3B0aW9uPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkgICAgU3RvcCBkYXRhIGNvbGxlY3Rpb24gYW5kIGtpbGwgdGhlIGRhZW1vbi4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj4tLXJlc2V0PC9vcHRpb24+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCSAgICBDbGVhcnMgb3V0IGRhdGEgZnJvbSBjdXJyZW50IHNlc3Npb24sIGJ1dCBsZWF2ZXMgc2F2ZWQgc2Vzc2lvbnMuCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+LS1zYXZlPTwvb3B0aW9uPnNlc3Npb25fbmFtZTwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkgICAgU2F2ZSBkYXRhIGZyb20gY3VycmVudCBzZXNzaW9uIHRvIHNlc3Npb25fbmFtZS4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj4tLWRlaW5pdDwvb3B0aW9uPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIFNodXRzIGRvd24gZGFlbW9uLiBVbmxvYWQgdGhlIE9Qcm9maWxlIG1vZHVsZSBhbmQgb3Byb2ZpbGVmcy4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj4tLWxpc3QtZXZlbnRzPC9vcHRpb24+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCSAgICBMaXN0IGV2ZW50IHR5cGVzIGFuZCB1bml0IG1hc2tzLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPi0taGVscDwvb3B0aW9uPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQkgICAgR2VuZXJhdGUgdXNhZ2UgbWVzc2FnZXMuCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotPC92YXJpYWJsZWxpc3Q+Ci0KLTxwYXJhPgotVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBvc3NpYmxlIHNldHRpbmdzLCBvZiB3aGljaCwgb25seQotPG9wdGlvbj4tLXZtbGludXg8L29wdGlvbj4gKG9yIDxvcHRpb24+LS1uby12bWxpbnV4PC9vcHRpb24+KQotaXMgcmVxdWlyZWQuIFRoZXNlIHNldHRpbmdzIGFyZSBzdG9yZWQgaW4gPGZpbGVuYW1lPn4vLm9wcm9maWxlL2RhZW1vbnJjPC9maWxlbmFtZT4uCi08L3BhcmE+Ci08dmFyaWFibGVsaXN0PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+LS1idWZmZXItc2l6ZT08L29wdGlvbj5udW08L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJTnVtYmVyIG9mIHNhbXBsZXMgaW4ga2VybmVsIGJ1ZmZlci4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj4tLWNwdS1idWZmZXItc2l6ZT08L29wdGlvbj5udW08L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJTnVtYmVyIG9mIHNhbXBsZXMgaW4ga2VybmVsIHBlci1jcHUgYnVmZmVyICgyLjYgb25seSkuIElmIHlvdQotCQlwcm9maWxlIGF0IGhpZ2ggcmF0ZSBpdCBjYW4gaGVscCB0byBpbmNyZWFzZSB0aGlzIGlmIHRoZSBsb2cKLQkJZmlsZSBzaG93IGV4Y2Vzc2l2ZSBjb3VudCBvZiBzYW1wbGUgbG9zdCBjcHUgYnVmZmVyIG92ZXJmbG93LiAKLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj4tLWV2ZW50PTwvb3B0aW9uPltldmVudHNwZWNdPC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCVVzZSB0aGUgZ2l2ZW4gcGVyZm9ybWFuY2UgY291bnRlciBldmVudCB0byBwcm9maWxlLgotCQlTZWUgPHhyZWYgbGlua2VuZD0iZXZlbnRzcGVjIiAvPiBiZWxvdy4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj4tLXNlcGFyYXRlPTwvb3B0aW9uPltub25lLGxpYixrZXJuZWwsdGhyZWFkLGNwdSxhbGxdPC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCUJ5IGRlZmF1bHQsIGV2ZXJ5IHByb2ZpbGUgaXMgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGUuIFRodXMsIGZvciBleGFtcGxlLAotCQlzYW1wbGVzIGluIHRoZSBDIGxpYnJhcnkgYXJlIGFsbCBhY2NyZWRpdGVkIHRvIHRoZSA8ZmlsZW5hbWU+L2xpYi9saWJjLm88L2ZpbGVuYW1lPgotCQlwcm9maWxlLiBIb3dldmVyLCB5b3UgY2hvb3NlIHRvIGNyZWF0ZSBzZXBhcmF0ZSBzYW1wbGUgZmlsZXMgYnkgc3BlY2lmeWluZwotCQlvbmUgb2YgdGhlIGJlbG93IG9wdGlvbnMuCi0JCTwvcGFyYT4KLQkJPGluZm9ybWFsdGFibGUgZnJhbWU9ImFsbCI+Ci0JCTx0Z3JvdXAgY29scz0nMic+IAotCQk8dGJvZHk+Ci0JCTxyb3c+PGVudHJ5PjxvcHRpb24+bm9uZTwvb3B0aW9uPjwvZW50cnk+PGVudHJ5Pk5vIHByb2ZpbGUgc2VwYXJhdGlvbiAoZGVmYXVsdCk8L2VudHJ5Pjwvcm93PgotCQk8cm93PjxlbnRyeT48b3B0aW9uPmxpYjwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PkNyZWF0ZSBwZXItYXBwbGljYXRpb24gcHJvZmlsZXMgZm9yIGxpYnJhcmllczwvZW50cnk+PC9yb3c+Ci0JCTxyb3c+PGVudHJ5PjxvcHRpb24+a2VybmVsPC9vcHRpb24+PC9lbnRyeT48ZW50cnk+Q3JlYXRlIHBlci1hcHBsaWNhdGlvbiBwcm9maWxlcyBmb3IgdGhlIGtlcm5lbCBhbmQga2VybmVsIG1vZHVsZXM8L2VudHJ5Pjwvcm93PgotCQk8cm93PjxlbnRyeT48b3B0aW9uPnRocmVhZDwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PkNyZWF0ZSBwcm9maWxlcyBmb3IgZWFjaCB0aHJlYWQgYW5kIGVhY2ggdGFzazwvZW50cnk+PC9yb3c+Ci0JCTxyb3c+PGVudHJ5PjxvcHRpb24+Y3B1PC9vcHRpb24+PC9lbnRyeT48ZW50cnk+Q3JlYXRlIHByb2ZpbGVzIGZvciBlYWNoIENQVTwvZW50cnk+PC9yb3c+Ci0JCTxyb3c+PGVudHJ5PjxvcHRpb24+YWxsPC9vcHRpb24+PC9lbnRyeT48ZW50cnk+QWxsIG9mIHRoZSBhYm92ZSBvcHRpb25zPC9lbnRyeT48L3Jvdz4KLQkJPC90Ym9keT4KLQkJPC90Z3JvdXA+Ci0JCTwvaW5mb3JtYWx0YWJsZT4KLQkJPHBhcmE+Ci0JCU5vdGUgIHRoYXQgPG9wdGlvbj4tLXNlcGFyYXRlPWtlcm5lbDwvb3B0aW9uPiBhbHNvIHR1cm5zIG9uIDxvcHRpb24+LS1zZXBhcmF0ZT1saWI8L29wdGlvbj4uCi0JCTwhLS0gRklYTUU6IHVwZGF0ZSBpZiB0aGlzIGNoYW5nZSAtLT4KLQkJV2hlbiB1c2luZyA8b3B0aW9uPi0tc2VwYXJhdGU9a2VybmVsPC9vcHRpb24+LCBzYW1wbGVzIGluIGhhcmR3YXJlIGludGVycnVwdHMsIHNvZnQtaXJxcywgb3Igb3RoZXIKLQkJYXN5bmNocm9ub3VzIGtlcm5lbCBjb250ZXh0cyBhcmUgY3JlZGl0ZWQgdG8gdGhlIHRhc2sgY3VycmVudGx5IHJ1bm5pbmcuIFRoaXMgbWVhbnMgeW91IHdpbGwgc2VlCi0JCXNlZW1pbmdseSBub25zZW5zZSBwcm9maWxlcyBzdWNoIGFzIDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPiBzaG93aW5nIHNhbXBsZXMgZm9yIHRoZSBQUFAgbW9kdWxlcywKLQkJZXRjLgotCQk8L3BhcmE+Ci0JCTxwYXJhPgotCQlPbiAyLjIvMi40IG9ubHkga2VybmVsIHRocmVhZHMgYWxyZWFkeSBzdGFydGVkIHdoZW4gcHJvZmlsaW5nIGJlZ2lucyBhcmUgY29ycmVjdGx5IHByb2ZpbGVkOwotCQluZXdseSBzdGFydGVkIGtlcm5lbCB0aHJlYWQgc2FtcGxlcyBhcmUgY3JlZGl0ZWQgdG8gdGhlIHZtbGludXggKGtlcm5lbCkgcHJvZmlsZS4KLQkJPC9wYXJhPgotCQk8cGFyYT4KLQkJVXNpbmcgPG9wdGlvbj4tLXNlcGFyYXRlPXRocmVhZDwvb3B0aW9uPiBjcmVhdGVzIGEgbG90Ci0JCW9mIHNhbXBsZSBmaWxlcyBpZiB5b3UgbGVhdmUgT1Byb2ZpbGUgcnVubmluZyBmb3IgYSB3aGlsZTsgaXQncyBtb3N0Ci0JCXVzZWZ1bCB3aGVuIHVzZWQgZm9yIHNob3J0IHNlc3Npb25zLCBvciB3aGVuIHVzaW5nIGltYWdlIGZpbHRlcmluZy4KLQkJPC9wYXJhPgotCQk8L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+LS1jYWxsZ3JhcGg9PC9vcHRpb24+I2RlcHRoPC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCUVuYWJsZSBjYWxsLWdyYXBoIHNhbXBsZSBjb2xsZWN0aW9uIHdpdGggYSBtYXhpbXVtIGRlcHRoLiBVc2UgMCB0byBkaXNhYmxlCi0JCWNhbGxncmFwaCBwcm9maWxpbmcuIEN1cnJlbnRseSB0aGlzIHJlcXVpcmVzIGEgcmVjZW50Ci0JCTIuNiBrZXJuZWwsIGFuZCB4ODYuCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+LS1pbWFnZT08L29wdGlvbj5pbWFnZSxbaW1hZ2VzXXwiYWxsIjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQlJbWFnZSBmaWx0ZXJpbmcuIElmIHlvdSBzcGVjaWZ5IG9uZSBvciBtb3JlIGFic29sdXRlCi0JCXBhdGhzIHRvIGJpbmFyaWVzLCBPUHJvZmlsZSB3aWxsIG9ubHkgcHJvZHVjZSBwcm9maWxlIHJlc3VsdHMgZm9yIHRob3NlCi0JCWJpbmFyeSBpbWFnZXMuIFRoaXMgaXMgdXNlZnVsIGZvciByZXN0cmljdGluZyB0aGUgc29tZXRpbWVzIHZvbHVtaW5vdXMKLQkJb3V0cHV0IHlvdSBtYXkgZ2V0IG90aGVyd2lzZSwgZXNwZWNpYWxseSB3aXRoCi0JCTxvcHRpb24+LS1zZXBhcmF0ZT10aHJlYWQ8L29wdGlvbj4uIE5vdGUgdGhhdCBpZiB5b3UgYXJlIHVzaW5nCi0JCTxvcHRpb24+LS1zZXBhcmF0ZT1saWI8L29wdGlvbj4gb3IKLQkJPG9wdGlvbj4tLXNlcGFyYXRlPWtlcm5lbDwvb3B0aW9uPiwgdGhlbiBpZiB5b3Ugc3BlY2lmaWNhdGlvbiBhbgotCQlhcHBsaWNhdGlvbiBiaW5hcnksIHRoZSBzaGFyZWQgbGlicmFyaWVzIGFuZCBrZXJuZWwgY29kZQotCQk8ZW1waGFzaXM+YXJlPC9lbXBoYXNpcz4gaW5jbHVkZWQuIFNwZWNpZnkgdGhlIHZhbHVlCi0JCSJhbGwiIHRvIHByb2ZpbGUgZXZlcnl0aGluZyAodGhlIGRlZmF1bHQpLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPi0tdm1saW51eD08L29wdGlvbj5maWxlPC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCXZtbGludXgga2VybmVsIGltYWdlLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPi0tbm8tdm1saW51eDwvb3B0aW9uPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQlVc2UgdGhpcyB3aGVuIHlvdSBkb24ndCBoYXZlIGEga2VybmVsIHZtbGludXggZmlsZSwgYW5kIHlvdSBkb24ndCB3YW50Ci0JCXRvIHByb2ZpbGUgdGhlIGtlcm5lbC4gVGhpcyBzdGlsbCBjb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiBrZXJuZWwgc2FtcGxlcywKLQkJYnV0IGNhbid0IGdpdmUgc3ltYm9sLWJhc2VkIHJlc3VsdHMgZm9yIHRoZSBrZXJuZWwgb3IgYW55IG1vZHVsZXMuCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotPC92YXJpYWJsZWxpc3Q+Ci0KLTxzZWN0MiBpZD0ib3Bjb250cm9sZXhhbXBsZXMiPgotPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KLQotPHNlY3QzIGlkPSJleGFtcGxlc3BlcmZjdHIiPgotPHRpdGxlPkludGVsIHBlcmZvcm1hbmNlIGNvdW50ZXIgc2V0dXA8L3RpdGxlPgotPHBhcmE+Ci1IZXJlLCB3ZSBoYXZlIGEgUGVudGl1bSBJSUkgcnVubmluZyBhdCA4MDBNSHosIGFuZCB3ZSB3YW50IHRvIGxvb2sgYXQgd2hlcmUgZGF0YSBtZW1vcnkKLXJlZmVyZW5jZXMgYXJlIGhhcHBlbmluZyBtb3N0LCBhbmQgYWxzbyBnZXQgcmVzdWx0cyBmb3IgQ1BVIHRpbWUuCi08L3BhcmE+Ci08c2NyZWVuPgotIyBvcGNvbnRyb2wgLS1ldmVudD1DUFVfQ0xLX1VOSEFMVEVEOjQwMDAwMCAtLWV2ZW50PURBVEFfTUVNX1JFRlM6MTAwMDAKLSMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC8yLjYuMC92bWxpbnV4Ci0jIG9wY29udHJvbCAtLXN0YXJ0Ci08L3NjcmVlbj4KLTwvc2VjdDM+Ci0KLTxzZWN0MyBpZD0iZXhhbXBsZXNydGMiPgotPHRpdGxlPlJUQyBtb2RlPC90aXRsZT4KLTxwYXJhPgotSGVyZSwgd2UgaGF2ZSBhbiBJbnRlbCBsYXB0b3Agd2l0aG91dCBzdXBwb3J0IGZvciBwZXJmb3JtYW5jZSBjb3VudGVycywgcnVubmluZyBvbiAyLjQga2VybmVscy4KLTwvcGFyYT4KLTxzY3JlZW4+Ci0jIG9waGVscCAtcgotQ1BVIHdpdGggUlRDIGRldmljZQotIyBvcGNvbnRyb2wgLS12bWxpbnV4PS9ib290LzIuNC4xMy92bWxpbnV4IC0tZXZlbnQ9UlRDX0lOVEVSUlVQVFM6MTAyNAotIyBvcGNvbnRyb2wgLS1zdGFydAotPC9zY3JlZW4+Ci08L3NlY3QzPgotCi08c2VjdDMgaWQ9ImV4YW1wbGVzc3RhcnRkYWVtb24iPgotPHRpdGxlPlN0YXJ0aW5nIHRoZSBkYWVtb24gc2VwYXJhdGVseTwvdGl0bGU+Ci08cGFyYT4KLUlmIHdlJ3JlIHJ1bm5pbmcgMi42IGtlcm5lbHMsIHdlIGNhbiB1c2UgPG9wdGlvbj4tLXN0YXJ0LWRhZW1vbjwvb3B0aW9uPiB0byBhdm9pZAotdGhlIHByb2ZpbGVyIHN0YXJ0dXAgYWZmZWN0aW5nIHJlc3VsdHMuCi08L3BhcmE+Ci08c2NyZWVuPgotIyBvcGNvbnRyb2wgLS12bWxpbnV4PS9ib290LzIuNi4wL3ZtbGludXgKLSMgb3Bjb250cm9sIC0tc3RhcnQtZGFlbW9uCi0jIG15X2Zhdm91cml0ZV9iZW5jaG1hcmsgLS1pbml0Ci0jIG9wY29udHJvbCAtLXN0YXJ0IDsgbXlfZmF2b3VyaXRlX2JlbmNobWFyayAtLXJ1biA7IG9wY29udHJvbCAtLXN0b3AKLTwvc2NyZWVuPgotPC9zZWN0Mz4KLQotPHNlY3QzIGlkPSJleGFtcGxlc2VwYXJhdGUiPgotPHRpdGxlPlNlcGFyYXRlIHByb2ZpbGVzIGZvciBsaWJyYXJpZXMgYW5kIHRoZSBrZXJuZWw8L3RpdGxlPgotPHBhcmE+Ci1IZXJlLCB3ZSB3YW50IHRvIHNlZSBhIHByb2ZpbGUgb2YgdGhlIE9Qcm9maWxlIGRhZW1vbiBpdHNlbGYsIGluY2x1ZGluZyB3aGVuCi1pdCB3YXMgcnVubmluZyBpbnNpZGUgdGhlIGtlcm5lbCBkcml2ZXIsIGFuZCBpdHMgdXNlIG9mIHNoYXJlZCBsaWJyYXJpZXMuCi08L3BhcmE+Ci08c2NyZWVuPgotIyBvcGNvbnRyb2wgLS1zZXBhcmF0ZT1rZXJuZWwgLS12bWxpbnV4PS9ib290LzIuNi4wL3ZtbGludXgKLSMgb3Bjb250cm9sIC0tc3RhcnQKLSMgbXlfZmF2b3VyaXRlX3N0cmVzc190ZXN0IC0tcnVuCi0jIG9wcmVwb3J0IC1sIC1wIC9saWIvbW9kdWxlcy8yLjYuMC9rZXJuZWwgL3Vzci9sb2NhbC9iaW4vb3Byb2ZpbGVkCi08L3NjcmVlbj4KLTwvc2VjdDM+Ci0KLTxzZWN0MyBpZD0iZXhhbXBsZXNzZXNzaW9ucyI+Ci08dGl0bGU+UHJvZmlsaW5nIHNlc3Npb25zPC90aXRsZT4KLTxwYXJhPgotSXQgY2FuIG9mdGVuIGJlIHVzZWZ1bCB0byBzcGxpdCB1cCBwcm9maWxpbmcgZGF0YSBpbnRvIHNldmVyYWwgZGlmZmVyZW50Ci10aW1lIHBlcmlvZHMuIEZvciBleGFtcGxlLCB5b3UgbWF5IHdhbnQgdG8gY29sbGVjdCBkYXRhIG9uIGFuIGFwcGxpY2F0aW9uJ3MKLXN0YXJ0dXAgc2VwYXJhdGVseSBmcm9tIHRoZSBub3JtYWwgcnVudGltZSBkYXRhLiBZb3UgY2FuIHVzZSB0aGUgc2ltcGxlCi1jb21tYW5kIDxjb21tYW5kPm9wY29udHJvbCAtLXNhdmU8L2NvbW1hbmQ+IHRvIGRvIHRoaXMuIEZvciBleGFtcGxlIDoKLTwvcGFyYT4KLTxzY3JlZW4+Ci0jIG9wY29udHJvbCAtLXNhdmU9YmxhaAotPC9zY3JlZW4+Ci08cGFyYT4KLXdpbGwgY3JlYXRlIGEgc3ViLWRpcmVjdG9yeSBpbiA8ZmlsZW5hbWU+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlczwvZmlsZW5hbWU+IGNvbnRhaW5pbmcgdGhlIHNhbXBsZXMKLXVwIHRvIHRoYXQgcG9pbnQgKHRoZSBjdXJyZW50IHNlc3Npb24ncyBzYW1wbGUgZmlsZXMgYXJlIG1vdmVkIGludG8gdGhpcwotZGlyZWN0b3J5KS4gWW91IGNhbiB0aGVuIHBhc3MgdGhpcyBzZXNzaW9uIG5hbWUgYXMgYSBwYXJhbWV0ZXIgdG8gdGhlIHBvc3QtcHJvZmlsaW5nCi1hbmFseXNpcyB0b29scywgdG8gb25seSBnZXQgZGF0YSB1cCB0byB0aGUgcG9pbnQgeW91IG5hbWVkIHRoZQotc2Vzc2lvbi4gSWYgeW91IGRvIG5vdCB3YW50IHRvIHNhdmUgYSBzZXNzaW9uLCB5b3UgY2FuIGRvCi08Y29tbWFuZD5ybSAtcmYgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9zZXNzaW9ubmFtZTwvY29tbWFuZD4gb3IsIGZvciB0aGUKLWN1cnJlbnQgc2Vzc2lvbiwgPGNvbW1hbmQ+b3Bjb250cm9sIC0tcmVzZXQ8L2NvbW1hbmQ+LgotPC9wYXJhPgotPC9zZWN0Mz4KLTwvc2VjdDI+IAotCi08c2VjdDIgaWQ9ImV2ZW50c3BlYyI+Ci08dGl0bGU+U3BlY2lmeWluZyBwZXJmb3JtYW5jZSBjb3VudGVyIGV2ZW50czwvdGl0bGU+Ci08cGFyYT4KLVRoZSA8b3B0aW9uPi0tZXZlbnQ8L29wdGlvbj4gb3B0aW9uIHRvIDxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD4KLXRha2VzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGluZGljYXRlcyBob3cgdGhlIGRldGFpbHMgb2YgZWFjaAotaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlciBzaG91bGQgYmUgc2V0dXAuIElmIHlvdSB3YW50IHRvCi1yZXZlcnQgdG8gT1Byb2ZpbGUncyBkZWZhdWx0IHNldHRpbmcgKDxvcHRpb24+LS1ldmVudDwvb3B0aW9uPgotaXMgc3RyaWN0bHkgb3B0aW9uYWwpLCB1c2UgPG9wdGlvbj4tLWV2ZW50PWRlZmF1bHQ8L29wdGlvbj4uCi08L3BhcmE+Ci08cGFyYT4KLVlvdSBjYW4gcGFzcyBtdWx0aXBsZSBldmVudCBzcGVjaWZpY2F0aW9ucy4gT1Byb2ZpbGUgd2lsbCBhbGxvY2F0ZQotaGFyZHdhcmUgY291bnRlcnMgYXMgbmVjZXNzYXJ5LiBOb3RlIHRoYXQgc29tZSBjb21iaW5hdGlvbnMgYXJlIG5vdAotYWxsb3dlZCBieSB0aGUgQ1BVOyBydW5uaW5nIDxjb21tYW5kPm9wY29udHJvbCAtLWxpc3QtZXZlbnRzPC9jb21tYW5kPiBnaXZlcyB0aGUgZGV0YWlscwotb2YgZWFjaCBldmVudC4gVGhlIGV2ZW50IHNwZWNpZmljYXRpb24gaXMgYSBjb2xvbi1zZXBhcmF0ZWQgc3RyaW5nCi1vZiB0aGUgZm9ybSA8b3B0aW9uPjxlbXBoYXNpcz5uYW1lPC9lbXBoYXNpcz46PGVtcGhhc2lzPmNvdW50PC9lbXBoYXNpcz46PGVtcGhhc2lzPnVuaXRtYXNrPC9lbXBoYXNpcz46PGVtcGhhc2lzPmtlcm5lbDwvZW1waGFzaXM+OjxlbXBoYXNpcz51c2VyPC9lbXBoYXNpcz48L29wdGlvbj4gYXMgZGVzY3JpYmVkIGluIHRoaXMgdGFibGU6Ci08bm90ZT48cGFyYT4KLUZvciB0aGUgUG93ZXJQQyBwbGF0Zm9ybXMsIGFsbCBldmVudHMgc3BlY2lmaWVkIG11c3QgYmUgaW4gdGhlIHNhbWUgZ3JvdXA7IGkuZS4sIHRoZSBncm91cCBudW1iZXIKLWFwcGVuZGVkIHRvIHRoZSBldmVudCBuYW1lIChlLmcuIDxjb25zdGFudD4mbHQ7PGVtcGhhc2lzPnNvbWUtZXZlbnQtbmFtZTwvZW1waGFzaXM+Jmd0O19HUlA5PC9jb25zdGFudD4pIG11c3QgYmUgdGhlIHNhbWUuCi08L3BhcmE+PC9ub3RlPgotPC9wYXJhPgotPGluZm9ybWFsdGFibGUgZnJhbWU9ImFsbCI+Ci08dGdyb3VwIGNvbHM9JzInPiAKLTx0Ym9keT4KLTxyb3c+PGVudHJ5PjxvcHRpb24+bmFtZTwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PlRoZSBzeW1ib2xpYyBldmVudCBuYW1lLCBlLmcuIDxjb25zdGFudD5DUFVfQ0xLX1VOSEFMVEVEPC9jb25zdGFudD48L2VudHJ5Pjwvcm93PgotPHJvdz48ZW50cnk+PG9wdGlvbj5jb3VudDwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PlRoZSBjb3VudGVyIHJlc2V0IHZhbHVlLCBlLmcuIDEwMDAwMDwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT48b3B0aW9uPnVuaXRtYXNrPC9vcHRpb24+PC9lbnRyeT48ZW50cnk+VGhlIHVuaXQgbWFzaywgYXMgZ2l2ZW4gaW4gdGhlIGV2ZW50cyBsaXN0LCBlLmcuIDB4MGY8L2VudHJ5Pjwvcm93PgotPHJvdz48ZW50cnk+PG9wdGlvbj5rZXJuZWw8L29wdGlvbj48L2VudHJ5PjxlbnRyeT5XaGV0aGVyIHRvIHByb2ZpbGUga2VybmVsIGNvZGU8L2VudHJ5Pjwvcm93PgotPHJvdz48ZW50cnk+PG9wdGlvbj51c2VyPC9vcHRpb24+PC9lbnRyeT48ZW50cnk+V2hldGhlciB0byBwcm9maWxlIHVzZXJzcGFjZSBjb2RlPC9lbnRyeT48L3Jvdz4KLTwvdGJvZHk+Ci08L3Rncm91cD4KLTwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPgotVGhlIGxhc3QgdGhyZWUgdmFsdWVzIGFyZSBvcHRpb25hbCwgaWYgeW91IG9taXQgdGhlbSAoZS5nLiA8b3B0aW9uPi0tZXZlbnQ9REFUQV9NRU1fUkVGUzozMDAwMDwvb3B0aW9uPiksCi10aGV5IHdpbGwgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlcyAoYSB1bml0IG1hc2sgb2YgMCwgYW5kIHByb2ZpbGluZyBib3RoIGtlcm5lbCBhbmQKLXVzZXJzcGFjZSBjb2RlKS4gTm90ZSB0aGF0IHNvbWUgZXZlbnRzIHJlcXVpcmUgYSB1bml0IG1hc2suCi08L3BhcmE+Ci08cGFyYT4KLUlmIE9Qcm9maWxlIGlzIHVzaW5nIFJUQyBtb2RlLCBhbmQgeW91IHdhbnQgdG8gYWx0ZXIgdGhlIGRlZmF1bHQgY291bnRlciB2YWx1ZSwKLXlvdSBjYW4gdXNlIHNvbWV0aGluZyBsaWtlIDxvcHRpb24+LS1ldmVudD1SVENfSU5URVJSVVBUUzoyMDQ4PC9vcHRpb24+LiBOb3RlIHRoZSBsYXN0Ci10aHJlZSB2YWx1ZXMgaGVyZSBhcmUgaWdub3JlZC4KLUlmIE9Qcm9maWxlIGlzIHVzaW5nIHRpbWVyLWludGVycnVwdCBtb2RlLCB0aGVyZSBpcyBubyBjb25maWd1cmF0aW9uIHBvc3NpYmxlLgotPC9wYXJhPgotPHBhcmE+Ci1UaGUgdGFibGUgYmVsb3cgbGlzdHMgdGhlIGV2ZW50cyBzZWxlY3RlZCBieSBkZWZhdWx0Ci0oPG9wdGlvbj4tLWV2ZW50PWRlZmF1bHQ8L29wdGlvbj4pIGZvciB0aGUgdmFyaW91cyBjb21wdXRlciBhcmNoaXRlY3R1cmVzOgotPC9wYXJhPgotPGluZm9ybWFsdGFibGUgZnJhbWU9ImFsbCI+Ci08dGdyb3VwIGNvbHM9JzMnPiAKLTx0Ym9keT4KLTxyb3c+PGVudHJ5PlByb2Nlc3NvcjwvZW50cnk+PGVudHJ5PmNwdV90eXBlPC9lbnRyeT48ZW50cnk+RGVmYXVsdCBldmVudDwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5BbHBoYSBFVjQ8L2VudHJ5PjxlbnRyeT5hbHBoYS9ldjQ8L2VudHJ5PjxlbnRyeT5DWUNMRVM6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KLTxyb3c+PGVudHJ5PkFscGhhIEVWNTwvZW50cnk+PGVudHJ5PmFscGhhL2V2NTwvZW50cnk+PGVudHJ5PkNZQ0xFUzoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgotPHJvdz48ZW50cnk+QWxwaGEgUENBNTY8L2VudHJ5PjxlbnRyeT5hbHBoYS9wY2E1NjwvZW50cnk+PGVudHJ5PkNZQ0xFUzoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgotPHJvdz48ZW50cnk+QWxwaGEgRVY2PC9lbnRyeT48ZW50cnk+YWxwaGEvZXY2PC9lbnRyeT48ZW50cnk+Q1lDTEVTOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5BbHBoYSBFVjY3PC9lbnRyeT48ZW50cnk+YWxwaGEvZXY2NzwvZW50cnk+PGVudHJ5PkNZQ0xFUzoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgotPHJvdz48ZW50cnk+QVJNL1hTY2FsZSBQTVUxPC9lbnRyeT48ZW50cnk+YXJtL3hzY2FsZTE8L2VudHJ5PjxlbnRyeT5DUFVfQ1lDTEVTOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5BUk0vWFNjYWxlIFBNVTI8L2VudHJ5PjxlbnRyeT5hcm0veHNjYWxlMjwvZW50cnk+PGVudHJ5PkNQVV9DWUNMRVM6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KLTxyb3c+PGVudHJ5PkF0aGxvbjwvZW50cnk+PGVudHJ5PmkzODYvYXRobG9uPC9lbnRyeT48ZW50cnk+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgotPHJvdz48ZW50cnk+UGVudGl1bSBQcm88L2VudHJ5PjxlbnRyeT5pMzg2L3Bwcm88L2VudHJ5PjxlbnRyeT5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5QZW50aXVtIElJPC9lbnRyeT48ZW50cnk+aTM4Ni9waWk8L2VudHJ5PjxlbnRyeT5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5QZW50aXVtIElJSTwvZW50cnk+PGVudHJ5PmkzODYvcGlpaTwvZW50cnk+PGVudHJ5PkNQVV9DTEtfVU5IQUxURUQ6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KLTxyb3c+PGVudHJ5PlBlbnRpdW0gTSAoUDYgY29yZSk8L2VudHJ5PjxlbnRyeT5pMzg2L3A2X21vYmlsZTwvZW50cnk+PGVudHJ5PkNQVV9DTEtfVU5IQUxURUQ6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KLTxyb3c+PGVudHJ5PlBlbnRpdW0gNCAobm9uLUhUKTwvZW50cnk+PGVudHJ5PmkzODYvcDQ8L2VudHJ5PjxlbnRyeT5HTE9CQUxfUE9XRVJfRVZFTlRTOjEwMDAwMDoxOjE6MTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5QZW50aXVtIDQgKEhUKTwvZW50cnk+PGVudHJ5PmkzODYvcDQtaHQ8L2VudHJ5PjxlbnRyeT5HTE9CQUxfUE9XRVJfRVZFTlRTOjEwMDAwMDoxOjE6MTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5IYW1tZXI8L2VudHJ5PjxlbnRyeT54ODYtNjQvaGFtbWVyPC9lbnRyeT48ZW50cnk+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgotPHJvdz48ZW50cnk+SXRhbml1bTwvZW50cnk+PGVudHJ5PmlhNjQvaXRhbml1bTwvZW50cnk+PGVudHJ5PkNQVV9DWUNMRVM6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KLTxyb3c+PGVudHJ5Pkl0YW5pdW0gMjwvZW50cnk+PGVudHJ5PmlhNjQvaXRhbml1bTI8L2VudHJ5PjxlbnRyeT5DUFVfQ1lDTEVTOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5USU1FUl9JTlQ8L2VudHJ5PjxlbnRyeT50aW1lcjwvZW50cnk+PGVudHJ5Pk5vbmUgc2VsZWN0YWJsZTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5JQk0gaXNlcmllczwvZW50cnk+PGVudHJ5PlBvd2VyUEMgNC81Lzk3MDwvZW50cnk+PGVudHJ5PkNZQ0xFUzoxMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5JQk0gcHNlcmllczwvZW50cnk+PGVudHJ5PlBvd2VyUEMgNC81Lzk3MDwvZW50cnk+PGVudHJ5PkNZQ0xFUzoxMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Ci08cm93PjxlbnRyeT5JQk0gczM5MDwvZW50cnk+PGVudHJ5PnRpbWVyPC9lbnRyeT48ZW50cnk+Tm9uZSBzZWxlY3RhYmxlPC9lbnRyeT48L3Jvdz4KLTxyb3c+PGVudHJ5PklCTSBzMzkweDwvZW50cnk+PGVudHJ5PnRpbWVyPC9lbnRyeT48ZW50cnk+Tm9uZSBzZWxlY3RhYmxlPC9lbnRyeT48L3Jvdz4KLTwvdGJvZHk+Ci08L3Rncm91cD4KLTwvaW5mb3JtYWx0YWJsZT4KLQotPC9zZWN0Mj4KLQotPC9zZWN0MT4KLSAKLTxzZWN0MSBpZD0ib3Byb2ZpbGUtZ3VpIj4KLTx0aXRsZT5Vc2luZyA8Y29tbWFuZD5vcHJvZl9zdGFydDwvY29tbWFuZD48L3RpdGxlPgotPHBhcmE+Ci1UaGUgPGNvbW1hbmQ+b3Byb2Zfc3RhcnQ8L2NvbW1hbmQ+IGFwcGxpY2F0aW9uIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgdG8gc3RhcnQgdGhlIHByb2ZpbGVyLgotTm90ZSB0aGF0IDxjb21tYW5kPm9wcm9mX3N0YXJ0PC9jb21tYW5kPiBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgdGhlIDxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD4gc2NyaXB0LAotc28gaXQgZG9lcyBub3QgcHJvdmlkZSBtb3JlIHNlcnZpY2VzIHRoYW4gdGhlIHNjcmlwdCBpdHNlbGYuCi08L3BhcmE+Ci08cGFyYT4KLUFmdGVyIDxjb21tYW5kPm9wcm9mX3N0YXJ0PC9jb21tYW5kPiBpcyBzdGFydGVkIHlvdSBjYW4gc2VsZWN0IHRoZSBldmVudCB0eXBlIGZvciBlYWNoIGNvdW50ZXI7Ci10aGUgc2FtcGxpbmcgcmF0ZSBhbmQgb3RoZXIgcmVsYXRlZCBwYXJhbWV0ZXJzIGFyZSBleHBsYWluZWQgaW4gPHhyZWYgbGlua2VuZD0iY29udHJvbGxpbmctZGFlbW9uIiAvPi4KLVRoZSAiQ29uZmlndXJhdGlvbiIgc2VjdGlvbiBhbGxvd3MgeW91IHRvIHNldCBnZW5lcmFsIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgYnVmZmVyIHNpemUsIGtlcm5lbCBmaWxlbmFtZQotZXRjLiBUaGUgY291bnRlciBzZXR1cCBpbnRlcmZhY2Ugc2hvdWxkIGJlIHNlbGYtZXhwbGFuYXRvcnk7IDx4cmVmIGxpbmtlbmQ9ImhhcmR3YXJlLWNvdW50ZXJzIiAvPiBhbmQgcmVsYXRlZCAKLWxpbmtzIGNvbnRhaW4gaW5mb3JtYXRpb24gb24gdXNpbmcgdW5pdCBtYXNrcy4KLTwvcGFyYT4KLTxwYXJhPgotQSBzdGF0dXMgbGluZSBzaG93cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHByb2ZpbGVyOiBob3cgbG9uZyBpdCBoYXMgYmVlbiBydW5uaW5nLCBhbmQgdGhlIGF2ZXJhZ2UKLW51bWJlciBvZiBpbnRlcnJ1cHRzIHJlY2VpdmVkIHBlciBzZWNvbmQgYW5kIHRoZSB0b3RhbCwgb3ZlciBhbGwgcHJvY2Vzc29ycy4KLU5vdGUgdGhhdCBxdWl0dGluZyA8Y29tbWFuZD5vcHJvZl9zdGFydDwvY29tbWFuZD4gZG9lcyBub3Qgc3RvcCB0aGUgcHJvZmlsZXIuCi08L3BhcmE+Ci08cGFyYT4KLVlvdXIgY29uZmlndXJhdGlvbiBpcyBzYXZlZCBpbiB0aGUgc2FtZSBmaWxlIGFzIDxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD4gdXNlczsgdGhhdCBpcywKLTxmaWxlbmFtZT5+Ly5vcHJvZmlsZS9kYWVtb25yYzwvZmlsZW5hbWU+LgotPC9wYXJhPgotCi08L3NlY3QxPgotCi08c2VjdDEgaWQ9ImRldGFpbGVkLXBhcmFtZXRlcnMiPgotPHRpdGxlPkNvbmZpZ3VyYXRpb24gZGV0YWlsczwvdGl0bGU+Ci0KLTxzZWN0MiBpZD0iaGFyZHdhcmUtY291bnRlcnMiPgotPHRpdGxlPkhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzPC90aXRsZT4KLTxub3RlPgotPHBhcmE+Ci1Zb3VyIENQVSB0eXBlIG1heSBub3QgaW5jbHVkZSB0aGUgcmVxdWlzaXRlIHN1cHBvcnQgZm9yIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBpbiB3aGljaCBjYXNlCi15b3UgbXVzdCB1c2UgT1Byb2ZpbGUgaW4gUlRDIG1vZGUgaW4gMi40IChzZWUgPHhyZWYgbGlua2VuZD0icnRjIiAvPiksIG9yIHRpbWVyIG1vZGUgaW4gMi42IChzZWUgPHhyZWYgbGlua2VuZD0idGltZXIiIC8+KS4gCi1Zb3UgZG8gbm90IHJlYWxseSBuZWVkIHRvIHJlYWQgdGhpcyBzZWN0aW9uIHVubGVzcyB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdXNpbmcgCi1ldmVudHMgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBldmVudCBjaG9zZW4gYnkgT1Byb2ZpbGUuCi08L3BhcmE+Ci08L25vdGU+Ci08cGFyYT4KLVRoZSBJbnRlbCBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhcmUgZGV0YWlsZWQgaW4gdGhlIEludGVsIElBLTMyIEFyY2hpdGVjdHVyZSBNYW51YWwsIFZvbHVtZSAzLCBhdmFpbGFibGUKLWZyb20gPHVsaW5rIHVybD0iaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vIj5odHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS88L3VsaW5rPi4gVGhlIEFNRCBBdGhsb24vRHVyb24KLWltcGxlbWVudGF0aW9uIGlzIGRldGFpbGVkIGluIDx1bGluawotdXJsPSJodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8yMjAwNy5wZGYiPgotaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL2Fzc2V0cy9jb250ZW50X3R5cGUvd2hpdGVfcGFwZXJzX2FuZF90ZWNoX2RvY3MvMjIwMDcucGRmPC91bGluaz4uCi1Gb3IgUG93ZXJQQzY0IHByb2Nlc3NvcnMgaW4gSUJNIGlTZXJpZXMgYW5kIHBTZXJpZXMgc3lzdGVtcywgcHJvY2Vzc29yIGRvY3VtZW50YXRpb24KLWlzIGF2YWlsYWJsZSBhdCA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LTMwNi5pYm0uY29tL2NoaXBzL3RlY2hsaWIvdGVjaGxpYi5uc2YvcHJvZHVjdGZhbWlsaWVzL1Bvd2VyUEMvIj4KLWh0dHA6Ly93d3ctMzA2LmlibS5jb20vY2hpcHMvdGVjaGxpYi90ZWNobGliLm5zZi9wcm9kdWN0ZmFtaWxpZXMvUG93ZXJQQzwvdWxpbms+LiAgKEZvciBleGFtcGxlLCB0aGUKLXNwZWNpZmljIHB1YmxpY2F0aW9uIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gb24gdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgdW5pdCBmb3IgdGhlIFBvd2VyUEM5NzAgaXMgCi0iSUJNIFBvd2VyUEMgOTcwRlggUklTQyBNaWNyb3Byb2Nlc3NvciBVc2VyJ3MgTWFudWFsLiIpCi1UaGVzZSBwcm9jZXNzb3JzIGFyZSBjYXBhYmxlIG9mIGRlbGl2ZXJpbmcgYW4gaW50ZXJydXB0IHdoZW4gYSBjb3VudGVyIG92ZXJmbG93cy4KLVRoaXMgaXMgdGhlIGJhc2ljIG1lY2hhbmlzbSBvbiB3aGljaCBPUHJvZmlsZSBpcyBiYXNlZC4gVGhlIGRlbGl2ZXJ5IG1vZGUgaXMgPGFjcm9ueW0+Tk1JPC9hY3JvbnltPiwKLXNvIGJsb2NraW5nIGludGVycnVwdHMgaW4gdGhlIGtlcm5lbCBkb2VzIG5vdCBwcmV2ZW50IHByb2ZpbGluZy4gV2hlbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgY2FsbGVkLAotdGhlIGN1cnJlbnQgPGFjcm9ueW0+UEM8L2Fjcm9ueW0+IHZhbHVlIGFuZCB0aGUgY3VycmVudCB0YXNrIGFyZSByZWNvcmRlZCBpbnRvIHRoZSBwcm9maWxpbmcgc3RydWN0dXJlLgotVGhpcyBhbGxvd3MgdGhlIG92ZXJmbG93IGV2ZW50IHRvIGJlIGF0dGFjaGVkIHRvIGEgc3BlY2lmaWMgYXNzZW1ibHkgaW5zdHJ1Y3Rpb24gaW4gYSBiaW5hcnkgaW1hZ2UuCi1UaGUgZGFlbW9uIHJlY2VpdmVzIHRoaXMgZGF0YSBmcm9tIHRoZSBrZXJuZWwsIGFuZCB3cml0ZXMgaXQgdG8gdGhlIHNhbXBsZSBmaWxlcy4KLTwvcGFyYT4KLTxwYXJhPgotSWYgd2UgdXNlIGFuIGV2ZW50IHN1Y2ggYXMgPGNvbnN0YW50PkNQVV9DTEtfVU5IQUxURUQ8L2NvbnN0YW50PiBvciA8Y29uc3RhbnQ+SU5TVF9SRVRJUkVEPC9jb25zdGFudD4KLSg8Y29uc3RhbnQ+R0xPQkFMX1BPV0VSX0VWRU5UUzwvY29uc3RhbnQ+IG9yIDxjb25zdGFudD5JTlNUUl9SRVRJUkVEPC9jb25zdGFudD4sIHJlc3BlY3RpdmVseSwgb24gdGhlIFBlbnRpdW0gNCksIHdlIGNhbgotdXNlIHRoZSBvdmVyZmxvdyBjb3VudHMgYXMgYW4gZXN0aW1hdGUgb2YgYWN0dWFsIHRpbWUgc3BlbnQgaW4gZWFjaCBwYXJ0IG9mIGNvZGUuIEFsdGVybmF0aXZlbHkgd2UgY2FuIHByb2ZpbGUgaW50ZXJlc3RpbmcKLWRhdGEgc3VjaCBhcyB0aGUgY2FjaGUgYmVoYXZpb3VyIG9mIHJvdXRpbmVzIHdpdGggdGhlIG90aGVyIGF2YWlsYWJsZSBjb3VudGVycy4KLTwvcGFyYT4KLTxwYXJhPgotSG93ZXZlciB0aGVyZSBhcmUgc2V2ZXJhbCBjYXZlYXRzLiBGaXJzdCwgdGhlcmUgYXJlIHRob3NlIGlzc3VlcyBsaXN0ZWQgaW4gdGhlIEludGVsIG1hbnVhbC4gVGhlcmUgaXMgYSBkZWxheQotYmV0d2VlbiB0aGUgY291bnRlciBvdmVyZmxvdyBhbmQgdGhlIGludGVycnVwdCBkZWxpdmVyeSB0aGF0IGNhbiBza2V3IHJlc3VsdHMgb24gYSBzbWFsbCBzY2FsZSAtIHRoaXMgbWVhbnMKLXlvdSBjYW5ub3QgcmVseSBvbiB0aGUgcHJvZmlsZXMgYXQgdGhlIGluc3RydWN0aW9uIGxldmVsIGFzIGJlaW5nIHBlcmZlY3RseSBhY2N1cmF0ZS4KLUlmIHlvdSBhcmUgdXNpbmcgYW4gImV2ZW50LW1vZGUiIGNvdW50ZXIgc3VjaCBhcyB0aGUgY2FjaGUgY291bnRlcnMsIGEgY291bnQgcmVnaXN0ZXJlZCBhZ2FpbnN0IGl0IGRvZXNuJ3QgbWVhbgotdGhhdCBpdCBpcyByZXNwb25zaWJsZSBmb3IgdGhhdCBldmVudC4gSG93ZXZlciwgaXQgaW1wbGllcyB0aGF0IHRoZSBjb3VudGVyIG92ZXJmbG93ZWQgaW4gdGhlIGR5bmFtaWMKLXZpY2luaXR5IG9mIHRoYXQgaW5zdHJ1Y3Rpb24sIHRvIHdpdGhpbiBhIGZldyBpbnN0cnVjdGlvbnMuIEZ1cnRoZXIgZGV0YWlscyBvbiB0aGlzIHByb2JsZW0gY2FuIGJlIGZvdW5kIGluIAotPHhyZWYgbGlua2VuZD0iaW50ZXJwcmV0aW5nIiAvPiBhbmQgYWxzbyBpbiB0aGUgRGlnaXRhbCBwYXBlciAiUHJvZmlsZU1lOiBBIEhhcmR3YXJlIFBlcmZvcm1hbmNlIENvdW50ZXIiLgotPC9wYXJhPgotPHBhcmE+Ci1FYWNoIGNvdW50ZXIgaGFzIHNldmVyYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgotRmlyc3QsIHRoZXJlIGlzIHRoZSB1bml0IG1hc2s6IHRoaXMgc2ltcGx5IGZ1cnRoZXIgc3BlY2lmaWVzIHdoYXQgdG8gY291bnQuCi1TZWNvbmQsIHRoZXJlIGlzIHRoZSBjb3VudGVyIHZhbHVlLCBkaXNjdXNzZWQgYmVsb3cuIFRoaXJkLCB0aGVyZSBpcyBhIHBhcmFtZXRlciB3aGV0aGVyIHRvIGluY3JlbWVudCBjb3VudHMKLXdoaWxzdCBpbiBrZXJuZWwgb3IgdXNlciBzcGFjZS4gWW91IGNhbiBjb25maWd1cmUgdGhlc2Ugc2VwYXJhdGVseSBmb3IgZWFjaCBjb3VudGVyLgotPC9wYXJhPgotPHBhcmE+Ci1BZnRlciBlYWNoIG92ZXJmbG93IGV2ZW50LCB0aGUgY291bnRlciB3aWxsIGJlIHJlLWluaXRpYWxpemVkCi1zdWNoIHRoYXQgYW5vdGhlciBvdmVyZmxvdyB3aWxsIG9jY3VyIGFmdGVyIHRoaXMgbWFueSBldmVudHMgaGF2ZSBiZWVuIGNvdW50ZWQuIFRodXMsIGhpZ2hlcgotdmFsdWVzIG1lYW4gbGVzcy1kZXRhaWxlZCBwcm9maWxpbmcsIGFuZCBsb3dlciB2YWx1ZXMgbWVhbiBtb3JlIGRldGFpbCwgYnV0IGhpZ2hlciBvdmVyaGVhZC4KLVBpY2tpbmcgYSBnb29kIHZhbHVlIGZvciB0aGlzCi1wYXJhbWV0ZXIgaXMsIHVuZm9ydHVuYXRlbHksIHNvbWV3aGF0IG9mIGEgYmxhY2sgYXJ0LiBJdCBpcyBvZiBjb3Vyc2UgZGVwZW5kZW50IG9uIHRoZSBldmVudAoteW91IGhhdmUgY2hvc2VuLgotU3BlY2lmeWluZyB0b28gbGFyZ2UgYSB2YWx1ZSB3aWxsIG1lYW4gbm90IGVub3VnaCBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQKLXRvIGdpdmUgYSByZWFsaXN0aWMgcHJvZmlsZSAodGhvdWdoIHRoaXMgcHJvYmxlbSBjYW4gYmUgYW1lbGlvcmF0ZWQgYnkgcHJvZmlsaW5nIGZvciA8ZW1waGFzaXM+bG9uZ2VyPC9lbXBoYXNpcz4pLgotU3BlY2lmeWluZyB0b28gc21hbGwgYSB2YWx1ZSBjYW4gbGVhZCB0byBoaWdoZXIgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuCi08L3BhcmE+Ci0KLTwvc2VjdDI+Ci0KLTxzZWN0MiBpZD0icnRjIj4KLTx0aXRsZT5PUHJvZmlsZSBpbiBSVEMgbW9kZTwvdGl0bGU+Ci08bm90ZT48cGFyYT4KLVRoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIDIuMi8yLjQga2VybmVscyBvbmx5LgotPC9wYXJhPjwvbm90ZT4KLTxwYXJhPgotU29tZSBDUFUgdHlwZXMgZG8gbm90IHByb3ZpZGUgdGhlIG5lZWRlZCBoYXJkd2FyZSBzdXBwb3J0IHRvIHVzZSB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMuIFRoaXMgaW5jbHVkZXMKLXNvbWUgbGFwdG9wcywgY2xhc3NpYyBQZW50aXVtcywgYW5kIG90aGVyIENQVSB0eXBlcyBub3QgeWV0IHN1cHBvcnRlZCBieSBPUHJvZmlsZSAoc3VjaCBhcyBDeXJpeCkuIAotT24gdGhlc2UgbWFjaGluZXMsIE9Qcm9maWxlIGZhbGxzCi1iYWNrIHRvIHVzaW5nIHRoZSByZWFsLXRpbWUgY2xvY2sgaW50ZXJydXB0IHRvIGNvbGxlY3Qgc2FtcGxlcy4gVGhpcyBpbnRlcnJ1cHQgaXMgYWxzbyB1c2VkIGJ5IHRoZSA8Y29tbWFuZD5ydGM8L2NvbW1hbmQ+Ci1tb2R1bGU6IHlvdSBjYW5ub3QgaGF2ZSBib3RoIHRoZSBPUHJvZmlsZSBhbmQgcnRjIG1vZHVsZXMgbG9hZGVkIG5vciB0aGUgcnRjIHN1cHBvcnQgY29tcGlsZWQgaW4gdGhlIGtlcm5lbC4KLTwvcGFyYT4KLTxwYXJhPgotUlRDIG1vZGUgaXMgbGVzcyBjYXBhYmxlIHRoYW4gdGhlIGhhcmR3YXJlIGNvdW50ZXJzIG1vZGU7IGluIHBhcnRpY3VsYXIsIGl0IGlzIHVuYWJsZSB0byBwcm9maWxlIHNlY3Rpb25zIG9mCi10aGUga2VybmVsIHdoZXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGVyZSBpcyBqdXN0IG9uZSBhdmFpbGFibGUgZXZlbnQsICJSVEMgaW50ZXJydXB0cyIsIGFuZCBpdHMgdmFsdWUgCi1jb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgZ2VuZXJhdGVkIHBlciBzZWNvbmQgKHRoYXQgaXMsIGEgaGlnaGVyIG51bWJlciBtZWFucyBhIGJldHRlciBwcm9maWxpbmcKLXJlc29sdXRpb24sIGFuZCBoaWdoZXIgb3ZlcmhlYWQpLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVhbC10aW1lIGNsb2NrIHN1cHBvcnRzIG9ubHkgcG93ZXItb2YtdHdvCi1zYW1wbGluZyByYXRlcyBmcm9tIDIgdG8gNDA5NiBwZXIgc2Vjb25kLiAgT3RoZXIgdmFsdWVzIHdpdGhpbiB0aGlzIHJhbmdlIGFyZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mCi10d28uCi08L3BhcmE+Ci08cGFyYT4KLVNldHRpbmcgdGhlIHZhbHVlIGZyb20gdGhlIEdVSSBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLiBPbiB0aGUgY29tbWFuZCBsaW5lLCB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZQotZXZlbnQgdG8gPGNvbW1hbmQ+b3Bjb250cm9sPC9jb21tYW5kPiwgZS5nLiA6Ci08L3BhcmE+Ci08cGFyYT48Y29tbWFuZD5vcGNvbnRyb2wgLS1ldmVudD1SVENfSU5URVJSVVBUUzoyNTY8L2NvbW1hbmQ+PC9wYXJhPgotPC9zZWN0Mj4KLQotPHNlY3QyIGlkPSJ0aW1lciI+Ci08dGl0bGU+T1Byb2ZpbGUgaW4gdGltZXIgaW50ZXJydXB0IG1vZGU8L3RpdGxlPgotPG5vdGU+PHBhcmE+Ci1UaGlzIHNlY3Rpb24gYXBwbGllcyB0byAyLjYga2VybmVscyBhbmQgYWJvdmUgb25seS4KLTwvcGFyYT48L25vdGU+Ci08cGFyYT4KLUluIDIuNiBrZXJuZWxzIG9uIENQVXMgd2l0aG91dCBPUHJvZmlsZSBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMsIHRoZSBkcml2ZXIKLWZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIHRpbWVyIGludGVycnVwdCBmb3IgcHJvZmlsaW5nLiBMaWtlIHRoZSBSVEMgbW9kZSBpbiAyLjQga2VybmVscywgdGhpcyBpcyBub3QgYWJsZSB0bwotcHJvZmlsZSBjb2RlIHRoYXQgaGFzIGludGVycnVwdHMgZGlzYWJsZWQuIE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvcgotc2V0dGluZyB0aGlzLCB1bmxpa2UgdGhlIFJUQyBhbmQgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlciBzZXR1cC4KLTwvcGFyYT4KLTxwYXJhPgotWW91IGNhbiBmb3JjZSB1c2Ugb2YgdGhlIHRpbWVyIGludGVycnVwdCBieSB1c2luZyB0aGUgPG9wdGlvbj50aW1lcj0xPC9vcHRpb24+IG1vZHVsZQotcGFyYW1ldGVyIChvciA8b3B0aW9uPm9wcm9maWxlLnRpbWVyPTE8L29wdGlvbj4gb24gdGhlIGJvb3QgY29tbWFuZCBsaW5lIGlmIE9Qcm9maWxlIGlzCi1idWlsdC1pbikuCi08L3BhcmE+Ci08L3NlY3QyPgotCi08c2VjdDIgaWQ9InA0Ij4KLTx0aXRsZT5QZW50aXVtIDQgc3VwcG9ydDwvdGl0bGU+Ci08cGFyYT4KLVRoZSBQZW50aXVtIDQgLyBYZW9uIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFyZSBvcmdhbml6ZWQgYXJvdW5kIDMgdHlwZXMgb2YgbW9kZWwgc3BlY2lmaWMgcmVnaXN0ZXJzIChNU1JzKTogNDUgZXZlbnQKLXNlbGVjdGlvbiBjb250cm9sIHJlZ2lzdGVycyAoRVNDUnMpLCAxOCBjb3VudGVyIGNvbmZpZ3VyYXRpb24gY29udHJvbCByZWdpc3RlcnMgKENDQ1JzKSBhbmQgMTggY291bnRlcnMuIEVTQ1JzIGRlc2NyaWJlIGEKLXBhcnRpY3VsYXIgc2V0IG9mIGV2ZW50cyB3aGljaCBhcmUgdG8gYmUgcmVjb3JkZWQsIGFuZCBDQ0NScyBiaW5kIEVTQ1JzIHRvIGNvdW50ZXJzIGFuZCBjb25maWd1cmUgdGhlaXIKLW9wZXJhdGlvbi4gVW5mb3J0dW5hdGVseSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgcmVnaXN0ZXJzIGlzIHF1aXRlIGNvbXBsZXg7IHRoZXkgY2Fubm90IGFsbCBiZSB1c2VkIHdpdGggb25lCi1hbm90aGVyIGF0IGFueSB0aW1lLiBUaGVyZSBpcywgaG93ZXZlciwgYSBzdWJzZXQgb2YgOCBjb3VudGVycywgOCBFU0NScywgYW5kIDggQ0NDUnMgd2hpY2ggY2FuIGJlIHVzZWQgaW5kZXBlbmRlbnRseSBvZgotb25lIGFub3RoZXIsIHNvIE9Qcm9maWxlIG9ubHkgYWNjZXNzZXMgdGhvc2UgcmVnaXN0ZXJzLCB0cmVhdGluZyB0aGVtIGFzIGEgYmFuayBvZiA4ICJub3JtYWwiIGNvdW50ZXJzLCBzaW1pbGFyCi10byB0aG9zZSBpbiB0aGUgUDYgb3IgQXRobG9uIGZhbWlsaWVzIG9mIENQVS4KLTwvcGFyYT4KLTxwYXJhPgotVGhlcmUgaXMgY3VycmVudGx5IG5vIHN1cHBvcnQgZm9yIFByZWNpc2lvbiBFdmVudC1CYXNlZCBTYW1wbGluZyAoUEVCUyksIG5vciBhbnkgYWR2YW5jZWQgdXNlcyBvZiB0aGUgRGVidWcgU3RvcmUKLShEUykuIEN1cnJlbnQgc3VwcG9ydCBpcyBsaW1pdGVkIHRvIHRoZSBjb25zZXJ2YXRpdmUgZXh0ZW5zaW9uIG9mIE9Qcm9maWxlJ3MgZXhpc3RpbmcgaW50ZXJydXB0LWJhc2VkIG1vZGVsIGRlc2NyaWJlZAotYWJvdmUuICBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGhhcmR3YXJlIG9uIFBlbnRpdW0gNCAvIFhlb24gcHJvY2Vzc29ycyB3aXRoIEh5cGVydGhyZWFkaW5nIGVuYWJsZWQgKG11bHRpcGxlIGxvZ2ljYWwKLXByb2Nlc3NvcnMgb24gYSBzaW5nbGUgZGllKSBpcyBub3Qgc3VwcG9ydGVkIGluIDIuNCBrZXJuZWxzICh5b3UgY2FuIHVzZSBPUHJvZmlsZSBpZiB5b3UgZGlzYWJsZSBoeXBlci10aHJlYWRpbmcsCi10aG91Z2gpLgotPC9wYXJhPgotPC9zZWN0Mj4KLQotPHNlY3QyIGlkPSJpYTY0Ij4KLTx0aXRsZT5JbnRlbCBJdGFuaXVtIDIgc3VwcG9ydDwvdGl0bGU+Ci08cGFyYT4KLVRoZSBJdGFuaXVtIDIgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0IChQTVUpIG9yZ2FuaXplcyB0aGUgY291bnRlcnMgYXMgZm91cgotcGFpcnMgb2YgcGVyZm9ybWFuY2UgZXZlbnQgbW9uaXRvcmluZyByZWdpc3RlcnMuIEVhY2ggcGFpciBpcyBjb21wb3NlZCBvZiBhCi1QZXJmb3JtYW5jZSBNb25pdG9yaW5nIENvbmZpZ3VyYXRpb24gKFBNQykgcmVnaXN0ZXIgYW5kIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcKLURhdGEgKFBNRCkgcmVnaXN0ZXIuICBUaGUgUE1DIHNlbGVjdHMgdGhlIHBlcmZvcm1hbmNlIGV2ZW50IGJlaW5nIG1vbml0b3JlZCBhbmQKLXRoZSBQTUQgZGV0ZXJtaW5lcyB0aGUgc2FtcGxpbmcgaW50ZXJ2YWwuIFRoZSBJQTY0IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdAotKFBNVSkgdHJpZ2dlcnMgc2FtcGxpbmcgd2l0aCBtYXNrYWJsZSBpbnRlcnJ1cHRzLiBUaHVzLCBzYW1wbGVzIHdpbGwgbm90IG9jY3VyCi1pbiBzZWN0aW9ucyBvZiB0aGUgSUE2NCBrZXJuZWwgd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCi08L3BhcmE+Ci08cGFyYT4KLU5vbmUgb2YgdGhlIGFkdmFuY2UgZmVhdHVyZXMgb2YgdGhlIEl0YW5pdW0gMiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKLXN1Y2ggYXMgb3Bjb2RlIG1hdGNoaW5nLCBhZGRyZXNzIHJhbmdlIG1hdGNoaW5nLCBvciBwcmVjaXNlIGV2ZW50IHNhbXBsaW5nIGFyZQotc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBPUHJvZmlsZS4gIFRoZSBJdGFuaXVtIDIgc3VwcG9ydCBvbmx5IG1hcHMgT1Byb2ZpbGUncwotZXhpc3RpbmcgaW50ZXJydXB0LWJhc2VkIG1vZGVsIHRvIHRoZSBQTVUgaGFyZHdhcmUuCi08L3BhcmE+Ci08L3NlY3QyPgotCi08c2VjdDIgaWQ9InBwYzY0Ij4KLTx0aXRsZT5Qb3dlclBDNjQgc3VwcG9ydDwvdGl0bGU+Ci08cGFyYT4KLVRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQgKFBNVSkgZm9yIHRoZSBQb3dlclBDIDY0LWJpdCBwcm9jZXNzb3JzIAotY29uc2lzdHMgb2YgYmV0d2VlbiA2IGFuZCA4IGNvdW50ZXJzIChkZXBlbmRpbmcgb24gdGhlIG1vZGVsKSwgcGx1cyB0aHJlZQotc3BlY2lhbCBwdXJwb3NlIHJlZ2lzdGVycyB1c2VkIGZvciBwcm9ncmFtbWluZyB0aGUgY291bnRlcnMgLS0gTU1DUjAsIE1NQ1IxLAotYW5kIE1NQ1JBLiAgQWR2YW5jZWQgZmVhdHVyZXMgc3VjaCBhcyBpbnN0cnVjdGlvbiBtYXRjaGluZyBhbmQgdGhyZXNob2xkaW5nIGFyZQotbm90IHN1cHBvcnRlZCBieSB0aGlzIHZlcnNpb24gb2YgT1Byb2ZpbGUuCi08L3BhcmE+Ci08L3NlY3QyPgotCi08c2VjdDIgaWQ9Im1pc3VzZSI+Ci08dGl0bGU+RGFuZ2Vyb3VzIGNvdW50ZXIgc2V0dGluZ3M8L3RpdGxlPgotPHBhcmE+Ci1PUHJvZmlsZSBpcyBhIGxvdy1sZXZlbCBwcm9maWxlciB3aGljaCBhbGxvdyBjb250aW51b3VzIHByb2ZpbGluZyB3aXRoIGEgbG93LW92ZXJoZWFkIGNvc3QuCi1JZiB0b28gbG93IGEgY291bnQgcmVzZXQgdmFsdWUgaXMgc2V0IGZvciBhIGNvdW50ZXIsIHRoZSBzeXN0ZW0gY2FuIGJlY29tZSBvdmVybG9hZGVkIHdpdGggY291bnRlcgotaW50ZXJydXB0cywgYW5kIHNlZW0gYXMgaWYgdGhlIHN5c3RlbSBoYXMgZnJvemVuLiBXaGlsc3Qgc29tZSB2YWxpZGF0aW9uIGlzIGRvbmUsIGl0Ci1pcyBub3QgZm9vbHByb29mLgotPC9wYXJhPgotPG5vdGU+PHBhcmE+Ci1UaGlzIGNhbiBoYXBwZW4gYXMgZm9sbG93czogV2hlbiB0aGUgcHJvZmlsZXIgY291bnQKLXJlYWNoZXMgemVybyBhbiBOTUkgaGFuZGxlciBpcyBjYWxsZWQgd2hpY2ggc3RvcmVzIHRoZSBzYW1wbGUgdmFsdWVzIGluIGFuIGludGVybmFsIGJ1ZmZlciwgdGhlbiByZXNldHMgdGhlIGNvdW50ZXIKLXRvIGl0cyBvcmlnaW5hbCB2YWx1ZS4gSWYgdGhlIGNvdW50IGlzIHZlcnkgbG93LCBhIHBlbmRpbmcgTk1JIGNhbiBiZSBzZW50IGJlZm9yZSB0aGUgTk1JIGhhbmRsZXIgaGFzCi1jb21wbGV0ZWQuIER1ZSB0byB0aGUgcHJpb3JpdHkgb2YgdGhlIE5NSSwgdGhlIGxvY2FsIEFQSUMgZGVsaXZlcnMgdGhlIHBlbmRpbmcgaW50ZXJydXB0IGltbWVkaWF0ZWx5IGFmdGVyCi1jb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQgaGFuZGxlciwgYW5kIGNvbnRyb2wgbmV2ZXIgcmV0dXJucyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgotSW4gdGhpcyB3YXkgdGhlIHN5c3RlbSBzZWVtcyB0byBiZSBmcm96ZW4uCi08L3BhcmE+PC9ub3RlPgotPHBhcmE+SWYgdGhpcyBoYXBwZW5zLCBpdCB3aWxsIGJlIGltcG9zc2libGUgdG8gYnJpbmcgdGhlIHN5c3RlbSBiYWNrIHRvIGEgd29ya2FibGUgc3RhdGUuCi1UaGVyZSBpcyBubyB3YXkgdG8gcHJvdmlkZSByZWFsIHNlY3VyaXR5IGFnYWluc3QgdGhpcyBoYXBwZW5pbmcsIG90aGVyIHRoYW4gbWFraW5nIHN1cmUgdG8gdXNlIGEgcmVhc29uYWJsZSB2YWx1ZQotZm9yIHRoZSBjb3VudGVyIHJlc2V0LiBGb3IgZXhhbXBsZSwgc2V0dGluZyA8Y29uc3RhbnQ+Q1BVX0NMS19VTkhBTFRFRDwvY29uc3RhbnQ+IGV2ZW50IHR5cGUgd2l0aCBhIHJpZGljdWxvdXNseSBsb3cgcmVzZXQgY291bnQgKGUuZy4gNTAwKQotaXMgbGlrZWx5IHRvIGZyZWV6ZSB0aGUgc3lzdGVtLgotPC9wYXJhPgotPHBhcmE+Ci1JbiBzaG9ydCA6IDxjb21tYW5kPkRvbid0IHRyeSBhIGZvb2xpc2ggc2FtcGxlIGNvdW50IHZhbHVlPC9jb21tYW5kPi4gVW5mb3J0dW5hdGVseSB0aGUgZGVmaW5pdGlvbiBvZiBhIGZvb2xpc2ggdmFsdWUKLWlzIHJlYWxseSBkZXBlbmRlbnQgb24gdGhlIGV2ZW50IHR5cGUgLSBpZiBldmVyIGluIGRvdWJ0LCBlLW1haWwgPC9wYXJhPgotPGFkZHJlc3M+PGVtYWlsPm9wcm9maWxlLWxpc3RAbGlzdHMuc2YubmV0PC9lbWFpbD4uPC9hZGRyZXNzPgotPC9zZWN0Mj4KLQotPC9zZWN0MT4KLSAKLTwvY2hhcHRlcj4KLQotPGNoYXB0ZXIgaWQ9InJlc3VsdHMiPgotPHRpdGxlPk9idGFpbmluZyByZXN1bHRzPC90aXRsZT4KLTxwYXJhPgotT0ssIHNvIHRoZSBwcm9maWxlciBoYXMgYmVlbiBydW5uaW5nLCBidXQgaXQncyBub3QgbXVjaCB1c2UgdW5sZXNzIHdlIGNhbiBnZXQgc29tZSBkYXRhIG91dC4gRmFpcmx5IG9mdGVuLAotT1Byb2ZpbGUgZG9lcyBhIGxpdHRsZSA8ZW1waGFzaXM+dG9vPC9lbXBoYXNpcz4gZ29vZCBhIGpvYiBvZiBrZWVwaW5nIG92ZXJoZWFkIGxvdywgYW5kIG5vIGRhdGEgcmVhY2hlcwotdGhlIHByb2ZpbGVyLiBUaGlzIGNhbiBoYXBwZW4gb24gbGlnaHRseS1sb2FkZWQgbWFjaGluZXMuIFJlbWVtYmVyIHlvdSBjYW4gZm9yY2UgYSBkdW1wIGF0IGFueSB0aW1lIHdpdGggOgotPC9wYXJhPgotPHBhcmE+PGNvbW1hbmQ+b3Bjb250cm9sIC0tZHVtcDwvY29tbWFuZD48L3BhcmE+Ci08cGFyYT5SZW1lbWJlciB0byBkbyB0aGlzIGJlZm9yZSBjb21wbGFpbmluZyB0aGVyZSBpcyBubyBwcm9maWxpbmcgZGF0YSAhCi1Ob3cgdGhhdCB3ZSd2ZSBnb3Qgc29tZSBkYXRhLCBpdCBoYXMgdG8gYmUgcHJvY2Vzc2VkLiBUaGF0J3MgdGhlIGpvYiBvZiA8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4sCi08Y29tbWFuZD5vcGFubm90YXRlPC9jb21tYW5kPiwgb3IgPGNvbW1hbmQ+b3BncHJvZjwvY29tbWFuZD4uCi08L3BhcmE+Ci0KLTxzZWN0MSBpZD0icHJvZmlsZS1zcGVjIj4KLTx0aXRsZT5Qcm9maWxlIHNwZWNpZmljYXRpb25zPC90aXRsZT4KLQotPHBhcmE+Ci1BbGwgb2YgdGhlIGFuYWx5c2lzIHRvb2xzIHRha2UgYSA8ZW1waGFzaXM+cHJvZmlsZSBzcGVjaWZpY2F0aW9uPC9lbXBoYXNpcz4uCi1UaGlzIGlzIGEgc2V0IG9mIGRlZmluaXRpb25zIHRoYXQgZGVzY3JpYmUgd2hpY2ggYWN0dWFsIHByb2ZpbGVzIHNob3VsZCBiZQotZXhhbWluZWQuIFRoZSBzaW1wbGVzdCBwcm9maWxlIHNwZWNpZmljYXRpb24gaXMgZW1wdHk6IHRoaXMgd2lsbCBtYXRjaCBhbGwKLXRoZSBhdmFpbGFibGUgcHJvZmlsZSBmaWxlcyBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbiAodGhpcyBpcyB3aGF0IGhhcHBlbnMKLXdoZW4geW91IGRvIDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPikuCi08L3BhcmE+Ci08cGFyYT4KLVNwZWNpZmljYXRpb24gcGFyYW1ldGVycyBhcmUgb2YgdGhlIGZvcm0gPG9wdGlvbj5uYW1lOnZhbHVlWyx2YWx1ZV08L29wdGlvbj4uCi1Gb3IgZXhhbXBsZSwgaWYgSSB3YW50ZWQgdG8gZ2V0IGEgY29tYmluZWQgc3ltYm9sIHN1bW1hcnkgZm9yCi08ZmlsZW5hbWU+L2Jpbi9teXByb2c8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi9iaW4vbXlwcm9nMjwvZmlsZW5hbWU+LAotSSBjb3VsZCBkbyA8Y29tbWFuZD5vcHJlcG9ydCAtbCBpbWFnZTovYmluL215cHJvZywvYmluL215cHJvZzI8L2NvbW1hbmQ+LgotQXMgYSBzcGVjaWFsIGNhc2UsIHlvdSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIHNwZWNpZnkgdGhlIDxvcHRpb24+aW1hZ2U6PC9vcHRpb24+Ci1wYXJ0IGhlcmU6IGFueXRoaW5nIGxlZnQgb24gdGhlIGNvbW1hbmQgbGluZSBpcyBhc3N1bWVkIHRvIGJlIGFuCi08b3B0aW9uPmltYWdlOjwvb3B0aW9uPiBuYW1lLiBTaW1pbGFybHksIGlmIG5vIDxvcHRpb24+c2Vzc2lvbjo8L29wdGlvbj4KLWlzIHNwZWNpZmllZCwgdGhlbiA8b3B0aW9uPnNlc3Npb246Y3VycmVudDwvb3B0aW9uPiBpcyBhc3N1bWVkICgiY3VycmVudCIKLWlzIGEgc3BlY2lhbCBuYW1lIG9mIHRoZSBjdXJyZW50IC8gbGFzdCBwcm9maWxpbmcgc2Vzc2lvbikuCi08L3BhcmE+Ci08cGFyYT4KLUluIGFkZGl0aW9uIHRvIHRoZSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBzaG93biBhYm92ZSwgc29tZSBvZiB0aGUgCi1zcGVjaWZpY2F0aW9uIHBhcmFtZXRlcnMgY2FuIHRha2UgPGNvbW1hbmQ+Z2xvYjwvY29tbWFuZD4tc3R5bGUKLXZhbHVlcy4gRm9yIGV4YW1wbGUsIGlmIEkgd2FudCB0byBzZWUgaW1hZ2Ugc3VtbWFyaWVzIGZvciBhbGwKLWJpbmFyaWVzIHByb2ZpbGVkIGluIDxmaWxlbmFtZT4vdXNyL2Jpbi88L2ZpbGVuYW1lPiwgSSBjb3VsZCBkbwotPGNvbW1hbmQ+b3ByZXBvcnQgaW1hZ2U6L3Vzci9iaW4vXCo8L2NvbW1hbmQ+LiBOb3RlIHRoZSBuZWNlc3NpdHkKLXRvIGVzY2FwZSB0aGUgc3BlY2lhbCBjaGFyYWN0ZXIgZnJvbSB0aGUgc2hlbGwuCi08L3BhcmE+Ci08cGFyYT4KLUZvciA8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4sIHByb2ZpbGUgc3BlY2lmaWNhdGlvbnMgY2FuIGJlIHVzZWQgdG8KLWRlZmluZSB0d28gcHJvZmlsZXMsIGdpdmluZyBkaWZmZXJlbnRpYWwgb3V0cHV0LiBUaGlzIGlzIGRvbmUgYnkKLWVuY2xvc2luZyBlYWNoIG9mIHRoZSB0d28gc3BlY2lmaWNhdGlvbnMgd2l0aGluIGN1cmx5IGJyYWNlcywgYXMgc2hvd24KLWluIHRoZSBleGFtcGxlcyBiZWxvdy4gQW55IHNwZWNpZmljYXRpb25zIG91dHNpZGUgb2YgY3VybHkgYnJhY2VzIGFyZQotc2hhcmVkIGFjcm9zcyBib3RoLgotPC9wYXJhPgotCi08c2VjdDIgaWQ9InByb2ZpbGUtc3BlYy1leGFtcGxlcyI+Ci08dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgotCi08cGFyYT4KLUltYWdlIHN1bW1hcmllcyBmb3IgYWxsIHByb2ZpbGVzIHdpdGggPGNvbnN0YW50PkRBVEFfTUVNX1JFRlM8L2NvbnN0YW50Pgotc2FtcGxlcyBpbiB0aGUgc2F2ZWQgc2Vzc2lvbiBjYWxsZWQgInN0cmVzc3Rlc3QiIDoKLTwvcGFyYT4KLTxzY3JlZW4+Ci0jIG9wcmVwb3J0IHNlc3Npb246c3RyZXNzdGVzdCBldmVudDpEQVRBX01FTV9SRUZTCi08L3NjcmVlbj4KLQotPHBhcmE+Ci1TeW1ib2wgc3VtbWFyeSBmb3IgdGhlIGFwcGxpY2F0aW9uIGNhbGxlZCAidGVzdF9zeW01M2M4eHgsOXh4Ii4gTm90ZSB0aGUKLWVzY2FwaW5nIGlzIG5lY2Vzc2FyeSBhcyA8b3B0aW9uPmltYWdlOjwvb3B0aW9uPiB0YWtlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgotPC9wYXJhPgotPHNjcmVlbj4KLSMgb3ByZXBvcnQgLWwgLi90ZXN0L3Rlc3Rfc3ltNTNjOHh4XCw5eHgKLTwvc2NyZWVuPgotCi08cGFyYT4KLUltYWdlIHN1bW1hcmllcyBmb3IgYWxsIGJpbmFyaWVzIGluIHRoZSA8ZmlsZW5hbWU+dGVzdDwvZmlsZW5hbWU+IGRpcmVjdG9yeSwKLWV4Y2VwdGluZyA8ZmlsZW5hbWU+Ym9yaW5nLXRlc3Q8L2ZpbGVuYW1lPiA6Ci08L3BhcmE+Ci08c2NyZWVuPgotIyBvcHJlcG9ydCBpbWFnZTouL3Rlc3QvXCogaW1hZ2UtZXhjbHVkZTouL3Rlc3QvYm9yaW5nLXRlc3QKLTwvc2NyZWVuPgotCi08cGFyYT4KLURpZmZlcmVudGlhbCBwcm9maWxlIG9mIGEgYmluYXJ5IHN0b3JlZCBpbiB0d28gYXJjaGl2ZXMgOgotPC9wYXJhPgotPHNjcmVlbj4KLSMgb3ByZXBvcnQgLWwgL2Jpbi9iYXNoIHsgYXJjaGl2ZTouL29yaWcgfSB7IGFyY2hpdmU6Li9uZXcgfQotPC9zY3JlZW4+Ci0KLTxwYXJhPgotRGlmZmVyZW50aWFsIHByb2ZpbGUgb2YgYW4gYXJjaGl2ZWQgYmluYXJ5IHdpdGggdGhlIGN1cnJlbnQgc2Vzc2lvbiA6Ci08L3BhcmE+Ci08c2NyZWVuPgotIyBvcHJlcG9ydCAtbCAvYmluL2Jhc2ggeyBhcmNoaXZlOi4vb3JpZyB9IHsgfQotPC9zY3JlZW4+Ci0KLTwvc2VjdDI+IDwhLS0gcHJvZmlsZSBzcGVjIGV4YW1wbGVzIC0tPgotCi08c2VjdDIgaWQ9InByb2ZpbGUtc3BlYy1kZXRhaWxzIj4KLTx0aXRsZT5Qcm9maWxlIHNwZWNpZmljYXRpb24gcGFyYW1ldGVyczwvdGl0bGU+Ci0KLTx2YXJpYWJsZWxpc3Q+Ci0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj5hcmNoaXZlOjwvb3B0aW9uPjxlbXBoYXNpcz5hcmNoaXZlcGF0aDwvZW1waGFzaXM+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCUEgcGF0aCB0byBhbiBhcmNoaXZlIG1hZGUgd2l0aCA8Y29tbWFuZD5vcGFyY2hpdmU8L2NvbW1hbmQ+LgotCQlBYnNlbmNlIG9mIHRoaXMgdGFnLCB1bmxpa2Ugb3RoZXJzLCBtZWFucyAidGhlIGN1cnJlbnQgc3lzdGVtIiwKLQkJZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nICJhcmNoaXZlOiIuCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+c2Vzc2lvbjo8L29wdGlvbj48ZW1waGFzaXM+c2Vzc2lvbmxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQlBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHNlc3Npb24gbmFtZXMgdG8gcmVzb2x2ZSBpbi4gQWJzZW5jZSBvZiB0aGlzCi0JCXRhZywgdW5saWtlIG90aGVycywgbWVhbnMgInRoZSBjdXJyZW50IHNlc3Npb24iLCBlcXVpdmFsZW50IHRvCi0JCXNwZWNpZnlpbmcgInNlc3Npb246Y3VycmVudCIuCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+c2Vzc2lvbi1leGNsdWRlOjwvb3B0aW9uPjxlbXBoYXNpcz5zZXNzaW9ubGlzdDwvZW1waGFzaXM+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzZXNzaW9ucyB0byBleGNsdWRlLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPmltYWdlOjwvb3B0aW9uPjxlbXBoYXNpcz5pbWFnZWxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgbmFtZXMgdG8gcmVzb2x2ZS4gRWFjaCBlbnRyeSBtYXkgYmUgcmVsYXRpdmUKLSAgICAgICAgICAgICAgICBwYXRoLCA8Y29tbWFuZD5nbG9iPC9jb21tYW5kPi1zdHlsZSBuYW1lLCBvciBmdWxsIHBhdGgsIGUuZy48L3BhcmE+Ci0JCTxzY3JlZW4+b3ByZXBvcnQgJ2ltYWdlOi91c3IvYmluL29wcm9maWxlZCwqb3AqLC4vb3ByZXBvcnQnPC9zY3JlZW4+Ci0JCTwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPmltYWdlLWV4Y2x1ZGU6PC9vcHRpb24+PGVtcGhhc2lzPmltYWdlbGlzdDwvZW1waGFzaXM+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCVNhbWUgYXMgPG9wdGlvbj5pbWFnZTo8L29wdGlvbj4sIGJ1dCB0aGUgbWF0Y2hpbmcgaW1hZ2VzIGFyZSBleGNsdWRlZC4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPmxpYi1pbWFnZTo8L29wdGlvbj48ZW1waGFzaXM+aW1hZ2VsaXN0PC9lbXBoYXNpcz48L3Rlcm0+Ci0JCTxsaXN0aXRlbT48cGFyYT4KLQkJU2FtZSBhcyA8b3B0aW9uPmltYWdlOjwvb3B0aW9uPiwgYnV0IG9ubHkgZm9yIGltYWdlcyB0aGF0IGFyZSBmb3IKLQkJYSBwYXJ0aWN1bGFyIHByaW1hcnkgYmluYXJ5IGltYWdlIChuYW1lbHksIGFuIGFwcGxpY2F0aW9uKS4gVGhpcyBvbmx5Ci0JCW1ha2VzIHNlbnNlIHRvIHVzZSBpZiB5b3UncmUgdXNpbmcgPG9wdGlvbj4tLXNlcGFyYXRlPC9vcHRpb24+LgotCQlUaGlzIGluY2x1ZGVzIGtlcm5lbCBtb2R1bGVzIGFuZCB0aGUga2VybmVsIHdoZW4gdXNpbmcKLQkJPG9wdGlvbj4tLXNlcGFyYXRlPWtlcm5lbDwvb3B0aW9uPi4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPmxpYi1pbWFnZS1leGNsdWRlOjwvb3B0aW9uPjxlbXBoYXNpcz5pbWFnZWxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQlTYW1lIGFzIDxvcHRpb24+bGliLWltYWdlOjwvb3B0aW9uPiwgYnV0IHRoZSBtYXRjaGluZyBpbWFnZXMKLQkJYXJlIGV4Y2x1ZGVkLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+ZXZlbnQ6PC9vcHRpb24+PGVtcGhhc2lzPmV2ZW50bGlzdDwvZW1waGFzaXM+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCVRoZSBzeW1ib2xpYyBldmVudCBuYW1lIHRvIG1hdGNoIG9uLCBlLmcuIDxvcHRpb24+ZXZlbnQ6REFUQV9NRU1fUkVGUzwvb3B0aW9uPi4KLQkJWW91IGNhbiBwYXNzIGEgbGlzdCBvZiBldmVudHMgZm9yIHNpZGUtYnktc2lkZSBjb21wYXJpc29uIHdpdGggPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+LgotCQlXaGVuIHVzaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQsIHRoZSBldmVudCBpcyBhbHdheXMgIlRJTUVSIi4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPmNvdW50Ojwvb3B0aW9uPjxlbXBoYXNpcz5ldmVudGNvdW50bGlzdDwvZW1waGFzaXM+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCVRoZSBldmVudCBjb3VudCB0byBtYXRjaCBvbiwgZS5nLiA8b3B0aW9uPmV2ZW50OkRBVEFfTUVNX1JFRlMgY291bnQ6MzAwMDA8L29wdGlvbj4uCi0JCU5vdGUgdGhhdCB0aGlzIHZhbHVlIHJlZmVycyB0byB0aGUgc2V0dGluZyB1c2VkIGZvciA8Y29tbWFuZD5vcGNvbnRyb2w8L2NvbW1hbmQ+Ci0JCW9ubHksIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBzYW1wbGUgY291bnRzIGluIHRoZSBwcm9maWxlIGRhdGEKLQkJaXRzZWxmLgotCQlZb3UgY2FuIHBhc3MgYSBsaXN0IG9mIGV2ZW50cyBmb3Igc2lkZS1ieS1zaWRlIGNvbXBhcmlzb24gd2l0aCA8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4uCi0JCVdoZW4gdXNpbmcgdGhlIHRpbWVyIGludGVycnVwdCwgdGhlIGNvdW50IGlzIGFsd2F5cyAwIChpbmRpY2F0aW5nIGl0IGNhbm5vdCBiZSBzZXQpLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+dW5pdC1tYXNrOjwvb3B0aW9uPjxlbXBoYXNpcz5tYXNrbGlzdDwvZW1waGFzaXM+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCVRoZSB1bml0IG1hc2sgdmFsdWUgb2YgdGhlIGV2ZW50IHRvIG1hdGNoIG9uLCBlLmcuIDxvcHRpb24+dW5pdC1tYXNrOjE8L29wdGlvbj4uCi0JCVlvdSBjYW4gcGFzcyBhIGxpc3Qgb2YgZXZlbnRzIGZvciBzaWRlLWJ5LXNpZGUgY29tcGFyaXNvbiB3aXRoIDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPi4KLQkJPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPC92YXJsaXN0ZW50cnk+Ci0KLQk8dmFybGlzdGVudHJ5PgotCQk8dGVybT48b3B0aW9uPmNwdTo8L29wdGlvbj48ZW1waGFzaXM+Y3B1bGlzdDwvZW1waGFzaXM+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCU9ubHkgY29uc2lkZXIgcHJvZmlsZXMgZm9yIHRoZSBnaXZlbiBudW1iZXJlZCBDUFUgKHN0YXJ0aW5nIGZyb20gemVybykuCi0JCVRoaXMgaXMgb25seSB1c2VmdWwgd2hlbiB1c2luZyBDUFUgcHJvZmlsZSBzZXBhcmF0aW9uLgotCQk8L3BhcmE+PC9saXN0aXRlbT4KLQk8L3Zhcmxpc3RlbnRyeT4KLQotCTx2YXJsaXN0ZW50cnk+Ci0JCTx0ZXJtPjxvcHRpb24+dGdpZDo8L29wdGlvbj48ZW1waGFzaXM+cGlkbGlzdDwvZW1waGFzaXM+PC90ZXJtPgotCQk8bGlzdGl0ZW0+PHBhcmE+Ci0JCU9ubHkgY29uc2lkZXIgcHJvZmlsZXMgZm9yIHRoZSBnaXZlbiB0YXNrIGdyb3Vwcy4gVW5sZXNzIHNvbWUgcHJvZ3JhbQotCQlpcyB1c2luZyB0aHJlYWRzLCB0aGUgdGFzayBncm91cCBJRCBvZiBhIHByb2Nlc3MgaXMgdGhlIHNhbWUKLQkJYXMgaXRzIHByb2Nlc3MgSUQuIFRoaXMgb3B0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBQT1NJWAotCQlub3Rpb24gb2YgYSB0aHJlYWQgZ3JvdXAuCi0JCVRoaXMgaXMgb25seSB1c2VmdWwgd2hlbiB1c2luZyBwZXItcHJvY2VzcyBwcm9maWxlIHNlcGFyYXRpb24uCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotCi0JPHZhcmxpc3RlbnRyeT4KLQkJPHRlcm0+PG9wdGlvbj50aWQ6PC9vcHRpb24+PGVtcGhhc2lzPnRpZGxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KLQkJPGxpc3RpdGVtPjxwYXJhPgotCQlPbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gdGhyZWFkcy4gV2hlbiB1c2luZwotCQlyZWNlbnQgdGhyZWFkIGxpYnJhcmllcywgYWxsIHRocmVhZHMgaW4gYSBwcm9jZXNzIHNoYXJlIHRoZQotCQlzYW1lIHRhc2sgZ3JvdXAgSUQsIGJ1dCBoYXZlIGRpZmZlcmVudCB0aHJlYWQgSURzLiBZb3UgY2FuCi0JCXVzZSB0aGlzIG9wdGlvbiBpbiBjb21iaW5hdGlvbiB3aXRoIDxvcHRpb24+dGdpZDo8L29wdGlvbj4gdG8KLQkJcmVzdHJpY3QgdGhlIHJlc3VsdHMgdG8gcGFydGljdWxhciB0aHJlYWRzIHdpdGhpbiBhIHByb2Nlc3MuCi0JCVRoaXMgaXMgb25seSB1c2VmdWwgd2hlbiB1c2luZyBwZXItcHJvY2VzcyBwcm9maWxlIHNlcGFyYXRpb24uCi0JCTwvcGFyYT48L2xpc3RpdGVtPgotCTwvdmFybGlzdGVudHJ5PgotPC92YXJpYWJsZWxpc3Q+Ci0KLTwvc2VjdDI+Ci0KLTxzZWN0Mj4KLTx0aXRsZT5Mb2NhdGluZyBhbmQgbWFuYWdpbmcgYmluYXJ5IGltYWdlczwvdGl0bGU+Ci08cGFyYT4KLUVhY2ggc2Vzc2lvbidzIHNhbXBsZSBmaWxlcyBjYW4gYmUgZm91bmQgaW4gdGhlIDxmaWxlbmFtZT4vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KLVRoZXNlIGFyZSB1c2VkLCBhbG9uZyB3aXRoIHRoZSBiaW5hcnkgaW1hZ2UgZmlsZXMsIHRvIHByb2R1Y2UgaHVtYW4tcmVhZGFibGUgZGF0YS4KLUluIHNvbWUgY2lyY3Vtc3RhbmNlcyAoa2VybmVsIG1vZHVsZXMgaW4gYW4gaW5pdHJkLCBvciBtb2R1bGVzIG9uIDIuNiBrZXJuZWxzKSwgT1Byb2ZpbGUKLXdpbGwgbm90IGJlIGFibGUgdG8gZmluZCB0aGUgYmluYXJ5IGltYWdlcy4gQWxsIHRoZSB0b29scyBoYXZlIGFuIDxvcHRpb24+LS1pbWFnZS1wYXRoPC9vcHRpb24+Ci1vcHRpb24gdG8gd2hpY2ggeW91IGNhbiBwYXNzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWx0ZXJuYXRlIHBhdGhzIHRvIHNlYXJjaC4gRm9yIGV4YW1wbGUsCi1JIGNhbiBsZXQgT1Byb2ZpbGUgZmluZCBteSAyLjYgbW9kdWxlcyBieSB1c2luZyA8Y29tbWFuZD4tLWltYWdlLXBhdGggL2xpYi9tb2R1bGVzLzIuNi4wL2tlcm5lbC88L2NvbW1hbmQ+LgotSXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBpbWFnZXMgYXJlIGZvdW5kIHdoZW4gdXNpbmcgdGhpcwotb3B0aW9uLgotPC9wYXJhPgotPHBhcmE+Ci1Ob3RlIHRoYXQgaWYgYSBiaW5hcnkgaW1hZ2UgY2hhbmdlcyBhZnRlciB0aGUgc2FtcGxlIGZpbGUgd2FzIGNyZWF0ZWQsIHlvdSB3b24ndCBiZSBhYmxlIHRvIGdldCB1c2VmdWwKLXN5bWJvbC1iYXNlZCBkYXRhIG91dC4gVGhpcyBzaXR1YXRpb24gaXMgZGV0ZWN0ZWQgZm9yIHlvdS4gSWYgeW91IHJlcGxhY2UgYSBiaW5hcnksIHlvdSBzaG91bGQKLW1ha2Ugc3VyZSB0byBzYXZlIHRoZSBvbGQgYmluYXJ5IGlmIHlvdSBuZWVkIHRvIGRvIGNvbXBhcmF0aXZlIHByb2ZpbGVzLgotPC9wYXJhPgotCi08L3NlY3QyPgotCi08c2VjdDIgaWQ9Im5vLXJlc3VsdHMiPgotPHRpdGxlPldoYXQgdG8gZG8gd2hlbiB5b3UgZG9uJ3QgZ2V0IGFueSByZXN1bHRzPC90aXRsZT4KLTxwYXJhPgotV2hlbiBhdHRlbXB0aW5nIHRvIGdldCBvdXRwdXQsIHlvdSBtYXkgc2VlIHRoZSBlcnJvciA6Ci08L3BhcmE+Ci08c2NyZWVuPgotZXJyb3I6IG5vIHNhbXBsZSBmaWxlcyBmb3VuZDogcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHRvbyBzdHJpY3QgPwotPC9zY3JlZW4+Ci08cGFyYT4KLVdoYXQgdGhpcyBpcyBzYXlpbmcgaXMgdGhhdCB0aGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHlvdSBwYXNzZWQgaW4sCi13aGVuIG1hdGNoZWQgYWdhaW5zdCB0aGUgYXZhaWxhYmxlIHNhbXBsZSBmaWxlcywgcmVzdWx0ZWQgaW4gbm8gbWF0Y2hlcy4KLVRoZXJlIGFyZSBhIG51bWJlciBvZiByZWFzb25zIHRoaXMgbWlnaHQgaGFwcGVuOgotPC9wYXJhPgotPHZhcmlhYmxlbGlzdD4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+c3BlbGxpbmc8L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotWW91IHNwZWNpZmllZCBhIGJpbmFyeSBuYW1lLCBidXQgc3BlbHQgaXQgd3JvbmdseS4gQ2hlY2sgeW91ciBzcGVsbGluZyAhCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+cHJvZmlsZXIgd2Fzbid0IHJ1bm5pbmc8L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotTWFrZSB2ZXJ5IHN1cmUgdGhhdCBPUHJvZmlsZSB3YXMgYWN0dWFsbHkgdXAgYW5kIHJ1bm5pbmcgd2hlbiB5b3UgcmFuCi10aGUgYmluYXJ5LgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPmJpbmFyeSBkaWRuJ3QgcnVuIGxvbmcgZW5vdWdoPC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLVJlbWVtYmVyIE9Qcm9maWxlIGlzIGEgc3RhdGlzdGljYWwgcHJvZmlsZXIgLSB5b3UncmUgbm90IGd1YXJhbnRlZWQgdG8KLWdldCBzYW1wbGVzIGZvciBzaG9ydC1ydW5uaW5nIHByb2dyYW1zLiBZb3UgY2FuIGhlbHAgdGhpcyBieSB1c2luZyBhCi1sb3dlciBjb3VudCBmb3IgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIsIHNvIHRoZXJlIGFyZSBhIGxvdCBtb3JlIHNhbXBsZXMKLXRha2VuIHBlciBzZWNvbmQuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+YmluYXJ5IHNwZW50IG1vc3Qgb2YgaXRzIHRpbWUgaW4gbGlicmFyaWVzPC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLVNpbWlsYXJseSwgaWYgdGhlIGJpbmFyeSBzcGVuZHMgbGl0dGxlIHRpbWUgaW4gdGhlIG1haW4gYmluYXJ5IGltYWdlCi1pdHNlbGYsIHdpdGggbW9zdCBvZiBpdCBzcGVudCBpbiBzaGFyZWQgbGlicmFyaWVzIGl0IHVzZXMsIHlvdSBtaWdodAotbm90IHNlZSBhbnkgc2FtcGxlcyBmb3IgdGhlIGJpbmFyeSBpbWFnZSBpdHNlbGYuIFlvdSBjYW4gY2hlY2sgdGhpcwotYnkgdXNpbmcgPGNvbW1hbmQ+b3Bjb250cm9sIC0tc2VwYXJhdGU9bGliPC9jb21tYW5kPiBiZWZvcmUgdGhlCi1wcm9maWxpbmcgc2Vzc2lvbiwgc28gPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+IGFuZCBmcmllbmRzIHNob3cKLXRoZSBsaWJyYXJ5IHByb2ZpbGVzIG9uIGEgcGVyLWFwcGxpY2F0aW9uIGJhc2lzLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPnNwZWNpZmljYXRpb24gd2FzIHJlYWxseSB0b28gc3RyaWN0PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLUZvciBleGFtcGxlLCB5b3Ugc3BlY2lmaWVkIHNvbWV0aGluZyBsaWtlIDxvcHRpb24+dGdpZDozNDMzPC9vcHRpb24+LAotYnV0IG5vIHRhc2sgd2l0aCB0aGF0IGdyb3VwIElEIGV2ZXIgcmFuIHRoZSBjb2RlLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPmJpbmFyeSBkaWRuJ3QgZ2VuZXJhdGUgYW55IGV2ZW50czwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1JZiB5b3UncmUgdXNpbmcgYSBwYXJ0aWN1bGFyIGV2ZW50IGNvdW50ZXIsIGZvciBleGFtcGxlIGNvdW50aW5nIE1NWAotb3BlcmF0aW9ucywgdGhlIGNvZGUgbWlnaHQgc2ltcGx5IGhhdmUgbm90IGdlbmVyYXRlZCBhbnkgZXZlbnRzIGluIHRoZQotZmlyc3QgcGxhY2UuIFZlcmlmeSB0aGUgY29kZSB5b3UncmUgcHJvZmlsaW5nIGRvZXMgd2hhdCB5b3UgZXhwZWN0IGl0Ci10by4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT55b3UgZGlkbid0IHNwZWNpZnkga2VybmVsIG1vZHVsZSBuYW1lIGNvcnJlY3RseTwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1JZiB5b3UncmUgdXNpbmcgMi42IGtlcm5lbHMsIGFuZCB0cnlpbmcgdG8gZ2V0IHJlcG9ydHMgZm9yIGEga2VybmVsCi1tb2R1bGUsIG1ha2Ugc3VyZSB0byB1c2UgdGhlIDxvcHRpb24+LXA8L29wdGlvbj4gb3B0aW9uLCBhbmQgc3BlY2lmeSB0aGUKLW1vZHVsZSBuYW1lIDxlbXBoYXNpcz53aXRoPC9lbXBoYXNpcz4gdGhlIDxmaWxlbmFtZT4ua288L2ZpbGVuYW1lPgotZXh0ZW5zaW9uLiBDaGVjayBpZiB0aGUgbW9kdWxlIGlzIG9uZSBsb2FkZWQgZnJvbSBpbml0cmQuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTwvdmFyaWFibGVsaXN0PgotCi08L3NlY3QyPgotCi08L3NlY3QxPiA8IS0tIHByb2ZpbGUtc3BlYyAtLT4KLQotPHNlY3QxIGlkPSJvcHJlcG9ydCI+Ci08dGl0bGU+SW1hZ2Ugc3VtbWFyaWVzIGFuZCBzeW1ib2wgc3VtbWFyaWVzICg8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4pPC90aXRsZT4KLTxwYXJhPgotVGhlIDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPiB1dGlsaXR5IGlzIHRoZSBwcmltYXJ5IHV0aWxpdHkgeW91IHdpbGwgdXNlIGZvciAKLWdldHRpbmcgZm9ybWF0dGVkIGRhdGEgb3V0IG9mIE9Qcm9maWxlLiBJdCBwcm9kdWNlcyB0d28gdHlwZXMgb2YgZGF0YTogaW1hZ2Ugc3VtbWFyaWVzCi1hbmQgc3ltYm9sIHN1bW1hcmllcy4gQW4gaW1hZ2Ugc3VtbWFyeSBsaXN0cyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIGluZGl2aWR1YWwKLWJpbmFyeSBpbWFnZXMgc3VjaCBhcyBsaWJyYXJpZXMgb3IgYXBwbGljYXRpb25zLiBTeW1ib2wgc3VtbWFyaWVzIHByb3ZpZGUgcGVyLXN5bWJvbAotcHJvZmlsZSBkYXRhLiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHdlJ3JlIGdldHRpbmcgYW4gaW1hZ2Ugc3VtbWFyeSBmb3IgdGhlIHdob2xlCi1zeXN0ZW06Ci08L3BhcmE+Ci08c2NyZWVuPgotJCBvcHJlcG9ydCAtLWxvbmctZmlsZW5hbWVzCi1DUFU6IFBJSUksIHNwZWVkIDg2My4xOTUgTUh6IChlc3RpbWF0ZWQpCi1Db3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChjbG9ja3MgcHJvY2Vzc29yIGlzIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAyMzE1MAotICAgOTA1ODk4IDU5Ljc0MTUgL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvY2MxcGx1cwotICAgMjE0MzIwIDE0LjEzMzggL2Jvb3QvMi42LjAvdm1saW51eAotICAgMTAzNDUwICA2LjgyMjIgL2xpYi9pNjg2L2xpYmMtMi4zLjIuc28KLSAgICA2MDE2MCAgMy45Njc0IC91c3IvbG9jYWwvYmluL21hZHBsYXkKLSAgICAzMTc2OSAgMi4wOTUxIC91c3IvbG9jYWwvb3Byb2ZpbGUtcHAvYmluL29wcm9maWxlZAotICAgIDI2NTUwICAxLjc1MDkgL3Vzci9saWIvbGliYXJ0c2Zsb3cuc28uMS4wLjAKLSAgICAyMzkwNiAgMS41NzY1IC91c3IvYmluL2FzCi0gICAgMTg3NzAgIDEuMjM3OCAvb3Byb2ZpbGUKLSAgICAxNTUyOCAgMS4wMjQwIC91c3IvbGliL3F0LTMuMC41L2xpYi9saWJxdC1tdC5zby4zLjAuNQotICAgIDExOTc5ICAwLjc5MDAgL3Vzci9YMTFSNi9iaW4vWEZyZWU4NgotICAgIDExMzI4ICAwLjc0NzEgL2Jpbi9iYXNoCi0gICAgLi4uCi08L3NjcmVlbj4KLTxwYXJhPgotSWYgd2UgaGFkIHNwZWNpZmllZCA8b3B0aW9uPi0tc3ltYm9sczwvb3B0aW9uPiBpbiB0aGUgcHJldmlvdXMgY29tbWFuZCwgd2Ugd291bGQgaGF2ZQotZ290dGVuIGEgc3ltYm9sIHN1bW1hcnkgb2YgYWxsIHRoZSBpbWFnZXMgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBXZSBjYW4gcmVzdHJpY3QgdGhpcyB0byBvbmx5Ci1wYXJ0IG9mIHRoZSBzeXN0ZW0gcHJvZmlsZTsgZm9yIGV4YW1wbGUsCi1iZWxvdyBpcyBhIHN5bWJvbCBzdW1tYXJ5IG9mIHRoZSBPUHJvZmlsZSBkYWVtb24uIE5vdGUgdGhhdCBhcyB3ZSB1c2VkCi08Y29tbWFuZD5vcGNvbnRyb2wgLS1zZXBhcmF0ZT1rZXJuZWw8L2NvbW1hbmQ+LCBzeW1ib2xzIGZyb20gaW1hZ2VzIHRoYXQgPGNvbW1hbmQ+b3Byb2ZpbGVkPC9jb21tYW5kPgotaGFzIHVzZWQgYXJlIGFsc28gc2hvd24uCi08L3BhcmE+Ci08c2NyZWVuPgotJCBvcHJlcG9ydCAtbCBgd2hpY2ggb3Byb2ZpbGVkYCAyPi9kZXYvbnVsbCB8IG1vcmUKLUNQVTogUElJSSwgc3BlZWQgODYzLjE5NSBNSHogKGVzdGltYXRlZCkKLUNvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKGNsb2NrcyBwcm9jZXNzb3IgaXMgbm90IGhhbHRlZCkgd2l0aCBhIHVuaXQgbWFzayBvZiAweDAwIChObyB1bml0IG1hc2spIGNvdW50IDIzMTUwCi12bWEgICAgICBzYW1wbGVzICAlICAgICAgICAgICBpbWFnZSBuYW1lICAgICAgICAgICAgICAgc3ltYm9sIG5hbWUKLTA4MDRiZTEwIDE0OTcxICAgIDI4LjE5OTMgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvZGJfaW5zZXJ0Ci0wODA0YWZkYyA3MTQ0ICAgICAxMy40NTY0ICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgcG9wX2J1ZmZlcl92YWx1ZQotYzAxZGFlYTAgNjExMyAgICAgMTEuNTE0NCAgICAgdm1saW51eCAgICAgICAgICAgICAgICAgIF9fY29weV90b191c2VyX2xsCi0wODA0YjA2MCAyODE2ICAgICAgNS4zMDQyICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgb3BkX3B1dF9zYW1wbGUKLTA4MDRiNGEwIDIxNDcgICAgICA0LjA0NDEgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvcGRfcHJvY2Vzc19zYW1wbGVzCi0wODA0YWNmNCAxODU1ICAgICAgMy40OTQxICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgb3BkX3B1dF9pbWFnZV9zYW1wbGUKLTA4MDRhZDg0IDE3NjYgICAgICAzLjMyNjQgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvcGRfZmluZF9pbWFnZQotMDgwNGE1ZWMgMTA4NCAgICAgIDIuMDQxOCAgICAgb3Byb2ZpbGVkICAgICAgICAgICAgICAgIG9wZF9maW5kX21vZHVsZQotMDgwNGJhNWMgNzQxICAgICAgIDEuMzk1NyAgICAgb3Byb2ZpbGVkICAgICAgICAgICAgICAgIG9kYl9oYXNoX2FkZF9ub2RlCi0uLi4KLTwvc2NyZWVuPgotCi08cGFyYT4KLVRoZXNlIGFyZSB0aGUgdHdvIGJhc2ljIHdheXMgeW91IGFyZSBtb3N0IGxpa2VseSB0byB1c2UgcmVndWxhcmx5LCBidXQgPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+Ci1jYW4gZG8gYSBsb3QgbW9yZSB0aGFuIHRoYXQsIGFzIGRlc2NyaWJlZCBiZWxvdy4KLTwvcGFyYT4KLQotPHNlY3QyIGlkPSJvcHJlcG9ydC1tZXJnaW5nIj4KLTx0aXRsZT5NZXJnaW5nIHNlcGFyYXRlIHByb2ZpbGVzPC90aXRsZT4KLQotSWYgeW91IGhhdmUgdXNlZCBvbmUgb2YgdGhlIDxvcHRpb24+LS1zZXBhcmF0ZT08L29wdGlvbj4gb3B0aW9ucwotd2hpbHN0IHByb2ZpbGluZywgdGhlcmUgY2FuIGJlIHNldmVyYWwgc2VwYXJhdGUgcHJvZmlsZXMgZm9yCi1hIHNpbmdsZSBiaW5hcnkgaW1hZ2Ugd2l0aGluIGEgc2Vzc2lvbi4gTm9ybWFsbHkgdGhlIG91dHB1dAotd2lsbCBrZWVwIHRoZXNlIGltYWdlcyBzZXBhcmF0ZWQgKHNvLCBmb3IgZXhhbXBsZSwgdGhlIGltYWdlIHN1bW1hcnkKLW91dHB1dCBzaG93cyBsaWJyYXJ5IGltYWdlIHN1bW1hcmllcyBvbiBhIHBlci1hcHBsaWNhdGlvbiBiYXNpcywKLXdoZW4gdXNpbmcgPG9wdGlvbj4tLXNlcGFyYXRlPWxpYjwvb3B0aW9uPikuCi1Tb21ldGltZXMgaXQgY2FuIGJlIHVzZWZ1bCB0byBtZXJnZSB0aGVzZSByZXN1bHRzIGJhY2sgdG9nZXRoZXIKLWJlZm9yZSBnZXR0aW5nIHJlc3VsdHMuIFRoZSA8b3B0aW9uPi0tbWVyZ2U8L29wdGlvbj4gb3B0aW9uIGFsbG93cwoteW91IHRvIGRvIHRoYXQuCi08L3NlY3QyPgotCi08c2VjdDIgaWQ9Im9wcmVwb3J0LWNvbXBhcmlzb24iPgotPHRpdGxlPlNpZGUtYnktc2lkZSBtdWx0aXBsZSByZXN1bHRzPC90aXRsZT4KLUlmIHlvdSBoYXZlIHVzZWQgbXVsdGlwbGUgZXZlbnRzIHdoZW4gcHJvZmlsaW5nLCBieSBkZWZhdWx0IHlvdSBnZXQKLXNpZGUtYnktc2lkZSByZXN1bHRzIG9mIGVhY2ggZXZlbnQncyBzYW1wbGUgdmFsdWVzIGZyb20gPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+LgotWW91IGNhbiByZXN0cmljdCB3aGljaCBldmVudHMgdG8gbGlzdCBieSBhcHByb3ByaWF0ZSB1c2Ugb2YgdGhlCi08b3B0aW9uPmV2ZW50Ojwvb3B0aW9uPiBwcm9maWxlIHNwZWNpZmljYXRpb25zLCBldGMuCi08L3NlY3QyPgotCi08c2VjdDIgaWQ9Im9wcmVwb3J0LWNhbGxncmFwaCI+Ci08dGl0bGU+Q2FsbGdyYXBoIG91dHB1dDwvdGl0bGU+Ci08cGFyYT4KLVdoZW4gdXNpbmcgdGhlIDxvcHRpb24+b3Bjb250cm9sIC0tY2FsbGdyYXBoPC9vcHRpb24+IG9wdGlvbiwgeW91IGNhbiBzZWUgd2hhdAotZnVuY3Rpb25zIGFyZSBjYWxsaW5nIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgb3V0cHV0LiBDb25zaWRlciB0aGUKLWZvbGxvd2luZyBwcm9ncmFtOgotPC9wYXJhPgotPHNjcmVlbj4KLSNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKLSNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKLSNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwotCi0jZGVmaW5lIFNJWkUgNTAwMDAwCi0KLXN0YXRpYyBpbnQgY29tcGFyZShjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIpCi17Ci0gICAgICAgIHJldHVybiBzdHJjbXAoczEsIHMyKTsKLX0KLQotc3RhdGljIHZvaWQgcmVwZWF0KHZvaWQpCi17Ci0gICAgICAgIGludCBpOwotICAgICAgICBjaGFyICpzdHJpbmdzW1NJWkVdOwotICAgICAgICBjaGFyIHN0cltdID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgU0laRTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgc3RyaW5nc1tpXSA9IHN0cmR1cChzdHIpOwotICAgICAgICAgICAgICAgIHN0cmZyeShzdHJpbmdzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KHN0cmluZ3MsIFNJWkUsIHNpemVvZihjaGFyICopLCBjb21wYXJlKTsKLX0KLQotaW50IG1haW4oKQotewotICAgICAgICB3aGlsZSAoMSkKLSAgICAgICAgICAgICAgICByZXBlYXQoKTsKLX0KLTwvc2NyZWVuPgotPHBhcmE+Ci1XaGVuIHJ1bm5pbmcgd2l0aCB0aGUgY2FsbC1ncmFwaCBvcHRpb24sIE9Qcm9maWxlIHdpbGwKLXJlY29yZCB0aGUgZnVuY3Rpb24gc3RhY2sgZXZlcnkgdGltZSBpdCB0YWtlcyBhIHNhbXBsZS4KLTxjb21tYW5kPm9wcmVwb3J0IC0tY2FsbGdyYXBoPC9jb21tYW5kPiBvdXRwdXRzIGFuIGVudHJ5IGZvciBlYWNoCi1mdW5jdGlvbiwgd2hlcmUgZWFjaCBlbnRyeSBsb29rcyBzaW1pbGFyIHRvOgotPC9wYXJhPgotPHNjcmVlbj4KLXNhbXBsZXMgICUgICAgICAgIGltYWdlIG5hbWUgICAgICAgICAgICAgICBzeW1ib2wgbmFtZQotICAxOTcgICAgICAgMC4xNTQ4ICBjZyAgICAgICAgICAgICAgICAgICAgICAgbWFpbgotICAxMjcwMzYgICA5OS44NDUyICBjZyAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0Ci04NDU5MCAgICA0Mi41MDg0ICBsaWJjLTIuMy4yLnNvICAgICAgICAgICAgc3RyZnJ5Ci0gIDg0NTkwICAgIDY2LjQ4MzggIGxpYmMtMi4zLjIuc28gICAgICAgICAgICBzdHJmcnkgW3NlbGZdCi0gIDM5MTY5ICAgIDMwLjc4NTAgIGxpYmMtMi4zLjIuc28gICAgICAgICAgICByYW5kb21fcgotICAzNDc1ICAgICAgMi43MzEyICBsaWJjLTIuMy4yLnNvICAgICAgICAgICAgX19pNjg2LmdldF9wY190aHVuay5ieAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPC9zY3JlZW4+Ci08cGFyYT4KLUhlcmUgdGhlIG5vbi1pbmRlbnRlZCBsaW5lIGlzIHRoZSBmdW5jdGlvbiB3ZSdyZSBmb2N1c3NpbmcgdXBvbgotKDxmdW5jdGlvbj5zdHJmcnkoKTwvZnVuY3Rpb24+KS4gVGhpcwotbGluZSBpcyB0aGUgc2FtZSBhcyB5b3UnZCBnZXQgZnJvbSBhIG5vcm1hbCA8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4KLW91dHB1dC4KLTwvcGFyYT4KLTxwYXJhPgotQWJvdmUgdGhlIG5vbi1pbmRlbnRlZCBsaW5lIHdlIGZpbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGxlZCB0aGlzCi1mdW5jdGlvbiAoZm9yIGV4YW1wbGUsIDxmdW5jdGlvbj5yZXBlYXQoKTwvZnVuY3Rpb24+IGNhbGxzCi08ZnVuY3Rpb24+c3RyZnJ5KCk8L2Z1bmN0aW9uPikuIFRoZSBzYW1wbGVzIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBoZXJlCi1yZWZlciB0byB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIHRvb2sgYSBzYW1wbGUgd2hlcmUgdGhpcyBjYWxsIHdhcyBmb3VuZAotaW4gdGhlIHN0YWNrOyB0aGUgcGVyY2VudGFnZSBpcyByZWxhdGl2ZSB0byBhbGwgb3RoZXIgY2FsbGVycyBvZiB0aGUKLWZ1bmN0aW9uIHdlJ3JlIGZvY3Vzc2luZyBvbi4gTm90ZSB0aGF0IHRoZXNlIHZhbHVlcyBhcmUKLTxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBjYWxsIGNvdW50czsgdGhleSBvbmx5IHJlZmxlY3QgdGhlIGNhbGwgc3RhY2sKLWV2ZXJ5IHRpbWUgYSBzYW1wbGUgaXMgdGFrZW47IHRoYXQgaXMsIGlmIGEgY2FsbCBpcyBmb3VuZCBpbiB0aGUgc3RhY2sKLWF0IHRoZSB0aW1lIG9mIGEgc2FtcGxlLCBpdCBpcyByZWNvcmRlZCBpbiB0aGlzIGNvdW50LgotPC9wYXJhPgotPHBhcmE+Ci1CZWxvdyB0aGUgbGluZSBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBieQotPGZ1bmN0aW9uPnN0cmZyeSgpPC9mdW5jdGlvbj4gKGNhbGxlZCA8ZW1waGFzaXM+Y2FsbGVlczwvZW1waGFzaXM+KS4KLUl0J3MgY2xlYXIgaGVyZSB0aGF0IDxmdW5jdGlvbj5zdHJmcnkoKTwvZnVuY3Rpb24+IGNhbGxzCi08ZnVuY3Rpb24+cmFuZG9tX3IoKTwvZnVuY3Rpb24+LiBXZSBhbHNvIHNlZSBhIHNwZWNpYWwgZW50cnkgd2l0aCBhCi0iW3NlbGZdIiBtYXJrZXIuIFRoaXMgcmVjb3JkcyB0aGUgbm9ybWFsIHNhbXBsZXMgZm9yIHRoZSBmdW5jdGlvbiwgYnV0Ci10aGUgcGVyY2VudGFnZSBiZWNvbWVzIHJlbGF0aXZlIHRvIGFsbCBjYWxsZWVzLiBUaGlzIGFsbG93cyB5b3UgdG8KLWNvbXBhcmUgdGltZSBzcGVudCBpbiB0aGUgZnVuY3Rpb24gaXRzZWxmIGNvbXBhcmVkIHRvIGZ1bmN0aW9ucyBpdAotY2FsbHMuIE5vdGUgdGhhdCBpZiBhIGZ1bmN0aW9uIGNhbGxzIGl0c2VsZiwgdGhlbiBpdCB3aWxsIGFwcGVhciBpbiB0aGUKLWxpc3Qgb2YgY2FsbGVlcyBvZiBpdHNlbGYsIGJ1dCB3aXRob3V0IHRoZSAiW3NlbGZdIiBtYXJrZXI7IHNvIHJlY3Vyc2l2ZQotY2FsbHMgYXJlIHN0aWxsIGNsZWFybHkgc2VwYXJhYmxlLgotPC9wYXJhPgotPHBhcmE+Ci1Zb3UgbWF5IGhhdmUgbm90aWNlZCB0aGF0IHRoZSBvdXRwdXQgbGlzdHMgPGZ1bmN0aW9uPm1haW4oKTwvZnVuY3Rpb24+Ci1hcyBjYWxsaW5nIDxmdW5jdGlvbj5zdHJmcnkoKTwvZnVuY3Rpb24+LCBidXQgaXQncyBjbGVhciBmcm9tIHRoZSBzb3VyY2UKLXRoYXQgdGhpcyBkb2Vzbid0IGFjdHVhbGx5IGhhcHBlbi4gU2VlIDx4cmVmCi1saW5rZW5kPSJpbnRlcnByZXRpbmctY2FsbGdyYXBoIiAvPiBmb3IgYW4gZXhwbGFuYXRpb24uCi08L3BhcmE+Ci0KLTwvc2VjdDI+IDwhLS0gb3ByZXBvcnQtY2FsbGdyYXBoIC0tPgotCi08c2VjdDIgaWQ9Im9wcmVwb3J0LWRpZmYiPgotPHRpdGxlPkRpZmZlcmVudGlhbCBwcm9maWxlcyB3aXRoIDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPjwvdGl0bGU+Ci0KLTxwYXJhPgotT2Z0ZW4sIHdlJ2QgbGlrZSB0byBiZSBhYmxlIHRvIGNvbXBhcmUgdHdvIHByb2ZpbGVzLiBGb3IgZXhhbXBsZSwgd2hlbgotYW5hbHlzaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBhbiBhcHBsaWNhdGlvbiwgd2UnZCBsaWtlIHRvIG1ha2UgY29kZQotY2hhbmdlcyBhbmQgZXhhbWluZSB0aGUgZWZmZWN0IG9mIHRoZSBjaGFuZ2UuIFRoaXMgaXMgc3VwcG9ydGVkIGluCi08Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4gYnkgZ2l2aW5nIGEgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHRoYXQKLWlkZW50aWZpZXMgdHdvIGRpZmZlcmVudCBwcm9maWxlcy4gVGhlIGdlbmVyYWwgZm9ybSBpcyBvZjoKLTwvcGFyYT4KLTxzY3JlZW4+Ci0kIG9wcmVwb3J0ICZsdDtzaGFyZWQtc3BlYyZndDsgeyAmbHQ7Zmlyc3QtcHJvZmlsZSZndDsgfSB7ICZsdDtzZWNvbmQtcHJvZmlsZSZndDsgfQotPC9zY3JlZW4+Ci08cGFyYT4KLUZvciBlYWNoIG9mIHRoZSBwcm9maWxlcywgdGhlIHNoYXJlZCBzZWN0aW9uIGlzIHByZWZpeGVkLCBhbmQgdGhlbiB0aGUKLXNwZWNpZmljYXRpb24gaXMgYW5hbHlzZWQuIFRoZSB1c3VhbCBwYXJhbWV0ZXJzIHdvcmsgYm90aCB3aXRoaW4gdGhlCi1zaGFyZWQgc2VjdGlvbiwgYW5kIGluIHRoZSBzdWItc3BlY2lmaWNhdGlvbiB3aXRoaW4gdGhlIGN1cmx5IGJyYWNlcy4KLTwvcGFyYT4KLTxwYXJhPgotQSB0eXBpY2FsIHdheSB0byB1c2UgdGhpcyBmZWF0dXJlIGlzIHdpdGggYXJjaGl2ZXMgY3JlYXRlZCB3aXRoCi08Y29tbWFuZD5vcGFyY2hpdmU8L2NvbW1hbmQ+LiBMZXQncyBsb29rIGF0IGFuIGV4YW1wbGU6Ci08L3BhcmE+Ci08c2NyZWVuPgotJCAuL2EKLSQgb3BhcmNoaXZlIC1vIG9yaWcgLi9hCi0kIG9wY29udHJvbCAtLXJlc2V0Ci0gICMgZWRpdCBhbmQgcmVjb21waWxlIGEKLSQgLi9hCi0gICMgbm93IGNvbXBhcmUgdGhlIGN1cnJlbnQgcHJvZmlsZSBvZiBhIHdpdGggdGhlIGFyY2hpdmVkIHByb2ZpbGUKLSQgb3ByZXBvcnQgLXhsIC4vYSB7IGFyY2hpdmU6Li9vcmlnIH0geyB9Ci1DUFU6IFBJSUksIHNwZWVkIDg2My4yMzMgTUh6IChlc3RpbWF0ZWQpCi1Db3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChjbG9ja3MgcHJvY2Vzc29yIGlzIG5vdCBoYWx0ZWQpIHdpdGggYQotdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMTAwMDAwCi1zYW1wbGVzICAlICAgICAgICBkaWZmICUgICAgc3ltYm9sIG5hbWUKLTkyNDM1ICAgIDQ4LjUzNjYgICswLjQ5OTkgICBhCi01NDIyNiAgICAtLS0gICAgICAtLS0gICAgICAgYwotNDkyMjIgICAgMjUuODQ1OSAgKysrICAgICAgIGQKLTQ4Nzg3ICAgIDI1LjYxNzUgIC0yLjJlLTAxICBiCi08L3NjcmVlbj4KLTxwYXJhPgotTm90ZSB0aGF0IHdlIHNwZWNpZmllZCBhbiBlbXB0eSBzZWNvbmQgcHJvZmlsZSBpbiB0aGUgY3VybHkgYnJhY2VzLCBhcwotd2Ugd2FudGVkIHRvIHVzZSB0aGUgY3VycmVudCBzZXNzaW9uOyBhbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZAotaGF2ZSBzcGVjaWZpZWQgYW5vdGhlciBhcmNoaXZlLCBvciBhIHRnaWQgZXRjLiBXZSBzcGVjaWZpZWQgdGhlIGJpbmFyeQotPGNvbW1hbmQ+YTwvY29tbWFuZD4gaW4gdGhlIHNoYXJlZCBzZWN0aW9uLCBzbyB3ZSBtYXRjaGVkIHRoYXQgaW4gYm90aAotdGhlIHByb2ZpbGVzIHdlJ3JlIGRpZmZpbmcuCi08L3BhcmE+Ci08cGFyYT4KLUFzIGluIHRoZSBub3JtYWwgb3V0cHV0LCB0aGUgcmVzdWx0cyBhcmUgc29ydGVkIGJ5IHRoZSBudW1iZXIgb2YKLXNhbXBsZXMsIGFuZCB0aGUgcGVyY2VudGFnZSBmaWVsZCByZXByZXNlbnRzIHRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIG9mCi10aGUgc3ltYm9sJ3Mgc2FtcGxlcyBpbiB0aGUgc2Vjb25kIHByb2ZpbGUuCi08L3BhcmE+Ci08cGFyYT4KLU5vdGljZSB0aGUgbmV3IGNvbHVtbiBpbiB0aGUgb3V0cHV0LiBUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlCi1wZXJjZW50YWdlIGNoYW5nZSBvZiB0aGUgcmVsYXRpdmUgcGVyY2VudCBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlCi1zZWNvbmQgcHJvZmlsZTogcm91Z2hseSwgImhvdyBtdWNoIG1vcmUgaW1wb3J0YW50IHRoaXMgc3ltYm9sIGlzIi4KLUxvb2tpbmcgYXQgdGhlIHN5bWJvbCA8ZnVuY3Rpb24+YSgpPC9mdW5jdGlvbj4sIHdlIGNhbiBzZWUgdGhhdCBpdCB0b29rCi1yb3VnaGx5IHRoZSBzYW1lIGFtb3VudCBvZiB0aGUgdG90YWwgcHJvZmlsZSBpbiBib3RoIHRoZSBmaXJzdCBhbmQgdGhlCi1zZWNvbmQgcHJvZmlsZS4gVGhlIGZ1bmN0aW9uIDxmdW5jdGlvbj5jKCk8L2Z1bmN0aW9uPiB3YXMgbm90IGluIHRoZSBuZXcKLXByb2ZpbGUsIHNvIGhhcyBiZWVuIG1hcmtlZCB3aXRoIDxmdW5jdGlvbj4tLS08L2Z1bmN0aW9uPi4gTm90ZSB0aGF0IHRoZQotc2FtcGxlIHZhbHVlIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgZmlyc3QgcHJvZmlsZTsgc2luY2Ugd2UncmUKLWRpc3BsYXlpbmcgcmVzdWx0cyBmb3IgdGhlIHNlY29uZCBwcm9maWxlLCB3ZSBkb24ndCBsaXN0IGEgcGVyY2VudGFnZQotdmFsdWUgZm9yIGl0LCBhcyBpdCB3b3VsZCBiZSBtZWFuaW5nbGVzcy4gPGZ1bmN0aW9uPmQoKTwvZnVuY3Rpb24+IGlzCi1uZXcgaW4gdGhlIHNlY29uZCBwcm9maWxlLCBhbmQgY29uc2VxdWVudGx5IG1hcmtlZCB3aXRoCi08ZnVuY3Rpb24+KysrPC9mdW5jdGlvbj4uCi08L3BhcmE+Ci08cGFyYT4KLVdoZW4gY29tcGFyaW5nIHByb2ZpbGVzIGJldHdlZW4gZGlmZmVyZW50IGJpbmFyaWVzLCBpdCBzaG91bGQgYmUgY2xlYXIKLXRoYXQgZnVuY3Rpb25zIGNhbiBjaGFuZ2UgaW4gdGVybXMgb2YgVk1BIGFuZCBzaXplLiBUbyBhdm9pZCB0aGlzCi1wcm9ibGVtLCA8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4gY29uc2lkZXJzIGEgc3ltYm9sIHRvIGJlIHRoZSBzYW1lCi1pZiB0aGUgc3ltYm9sIG5hbWUsIGltYWdlIG5hbWUsIGFuZCBvd25pbmcgYXBwbGljYXRpb24gbmFtZSBhbGwgbWF0Y2g7Ci1hbnkgb3RoZXIgZmFjdG9ycyBhcmUgaWdub3JlZC4gTm90ZSB0aGF0IHRoZSBjaGVjayBmb3IgYXBwbGljYXRpb24gbmFtZQotbWVhbnMgdGhhdCB0cnlpbmcgdG8gY29tcGFyZSBsaWJyYXJ5IHByb2ZpbGVzIGJldHdlZW4gdHdvIGRpZmZlcmVudAotYXBwbGljYXRpb25zIHdpbGwgbm90IHdvcmsgYXMgeW91IG1pZ2h0IGV4cGVjdDogZWFjaCBzeW1ib2wgd2lsbCBiZQotY29uc2lkZXJlZCBkaWZmZXJlbnQuCi08L3BhcmE+Ci0KLTwvc2VjdDI+IDwhLS0gb3ByZXBvcnQtZGlmZiAtLT4KLQotPHNlY3QyIGlkPSJvcHJlcG9ydC1hbm9uIj4KLTx0aXRsZT5Bbm9ueW1vdXMgZXhlY3V0YWJsZSBtYXBwaW5nczwvdGl0bGU+Ci08cGFyYT4KLU1hbnkgYXBwbGljYXRpb25zLCB0eXBpY2FsbHkgb25lcyBpbnZvbHZpbmcgZHluYW1pYyBjb21waWxhdGlvbiBpbnRvCi1tYWNoaW5lIGNvZGUsIGhhdmUgZXhlY3V0YWJsZSBtYXBwaW5ncyB0aGF0IGFyZSBub3QgYmFja2VkIGJ5IGFuIEVMRgotZmlsZS4gPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+IGhhcyBiYXNpYyBzdXBwb3J0IGZvciBzaG93aW5nIHRoZQotc2FtcGxlcyB0YWtlbiBpbiB0aGVzZSByZWdpb25zOyBmb3IgZXhhbXBsZToKLTwvcGFyYT4KLTxzY3JlZW4+Ci0kIG9wcmVwb3J0IC91c3IvanJlMS41LjAvYmluL2phdmEKLUNQVTogUElJSSwgc3BlZWQgODYzLjE5NSBNSHogKGVzdGltYXRlZCkKLUNvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKGNsb2NrcyBwcm9jZXNzb3IgaXMgbm90IGhhbHRlZCkgd2l0aCBhIHVuaXQgbWFzayBvZiAweDAwIChObyB1bml0IG1hc2spIGNvdW50IDEwMDAwMAotQ1BVX0NMS19VTkhBTFQuLi58Ci0gIHNhbXBsZXN8ICAgICAgJXwKLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIDI3MzQ0IDEwMC4wMDAgamF2YQotICAgICAgICBDUFVfQ0xLX1VOSEFMVC4uLnwKLSAgICAgICAgICBzYW1wbGVzfCAgICAgICV8Ci0gICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgMjcyMzYgIDk5LjYwNSBhbm9uICh0Z2lkOjEyMTM1IHJhbmdlOjB4YjJjYjgwMDAtMHhiMmU4MDAwMCkKLSAgICAgICAgICAgICAgMTA4ICAwLjM5NDkgamF2YQotPC9zY3JlZW4+Ci08cGFyYT4KLUN1cnJlbnRseSwgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgZ2V0dGluZyBzeW1ib2wtYmFzZWQgc3VtbWFyaWVzIGZvcgotc3VjaCByZWdpb25zLiBOb3RlIHRoYXQsIHNpbmNlIHN1Y2ggbWFwcGluZ3MgYXJlIGRlcGVuZGVudCB1cG9uCi1pbmRpdmlkdWFsIGludm9jYXRpb25zIG9mIGEgYmluYXJ5LCB0aGVzZSBtYXBwaW5ncyBhcmUgYWx3YXlzIGxpc3RlZCBhcwotYSBkZXBlbmRlbnQgaW1hZ2UsIGV2ZW4gd2hlbiB1c2luZyA8b3B0aW9uPi0tc2VwYXJhdGU9bm9uZTwvb3B0aW9uPi4KLUVxdWFsbHksIHRoZSByZXN1bHRzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhlIDxvcHRpb24+LS1tZXJnZTwvb3B0aW9uPgotb3B0aW9uLgotPC9wYXJhPgotPC9zZWN0Mj4gPCEtLSBvcHJlcG9ydC1hbm9uIC0tPgotCi08c2VjdDIgaWQ9Im9wcmVwb3J0LW9wdGlvbnMiPgotPHRpdGxlPk9wdGlvbnMgZm9yIDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPjwvdGl0bGU+Ci0KLTx2YXJpYWJsZWxpc3Q+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1hY2N1bXVsYXRlZCAvIC1hPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLUFjY3VtdWxhdGUgc2FtcGxlIGFuZCBwZXJjZW50YWdlIGNvdW50cyBpbiB0aGUgc3ltYm9sIGxpc3QuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWNhbGxncmFwaCAvIC1jPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLVNob3cgY2FsbGdyYXBoIGluZm9ybWF0aW9uLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1kZWJ1Zy1pbmZvIC8gLWc8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotU2hvdyBzb3VyY2UgZmlsZSBhbmQgbGluZSBmb3IgZWFjaCBzeW1ib2wuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWRlbWFuZ2xlIC8gLUQgbm9uZXxub3JtYWx8c21hcnQ8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotbm9uZTogbm8gZGVtYW5nbGluZy4gbm9ybWFsOiB1c2UgZGVmYXVsdCBkZW1hbmdsZXIgKGRlZmF1bHQpIHNtYXJ0OiB1c2UKLXBhdHRlcm4tbWF0Y2hpbmcgdG8gbWFrZSBDKysgc3ltYm9sIGRlbWFuZ2xpbmcgbW9yZSByZWFkYWJsZS4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZGV0YWlscyAvIC1kPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLVNob3cgcGVyLWluc3RydWN0aW9uIGRldGFpbHMgZm9yIGFsbCBzZWxlY3RlZCBzeW1ib2xzLiBOb3RlIHRoYXQsIGZvcgotYmluYXJpZXMgd2l0aG91dCBzeW1ib2wgaW5mb3JtYXRpb24sIHRoZSBWTUEgdmFsdWVzIHNob3duIGFyZSByYXcgZmlsZQotb2Zmc2V0cyBmb3IgdGhlIGltYWdlIGJpbmFyeS4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kZXBlbmRlbnQgLyAteDwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1EbyBub3QgaW5jbHVkZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBpbWFnZXMgZm9yIGxpYnJhcmllcywga2VybmVsIG1vZHVsZXMKLWFuZCB0aGUga2VybmVsLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBwcm9maWxlIHNlc3Npb24KLXVzZWQgLS1zZXBhcmF0ZS4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZXhjbHVkZS1zeW1ib2xzIC8gLWUgW3N5bWJvbHNdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLUV4Y2x1ZGUgYWxsIHRoZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZ2xvYmFsLXBlcmNlbnQgLyAtJTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1NYWtlIGFsbCBwZXJjZW50YWdlcyByZWxhdGl2ZSB0byB0aGUgd2hvbGUgcHJvZmlsZS4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taGVscCAvIC0/IC8gLS11c2FnZTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1TaG93IGhlbHAgbWVzc2FnZS4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taW1hZ2UtcGF0aCAvIC1wIFtwYXRoc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBwYXRocyB0byBzZWFyY2ggZm9yIGJpbmFyaWVzLgotVGhpcyBpcyBuZWVkZWQgdG8gZmluZCBtb2R1bGVzIGluIGtlcm5lbHMgMi42IGFuZCB1cHdhcmRzLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1pbmNsdWRlLXN5bWJvbHMgLyAtaSBbc3ltYm9sc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotT25seSBpbmNsdWRlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1sb25nLWZpbGVuYW1lcyAvIC1sPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLU91dHB1dCBmdWxsIHBhdGhzIGluc3RlYWQgb2YgYmFzZW5hbWVzLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1tZXJnZSAvIC1tIFtsaWIsY3B1LHRpZCx0Z2lkLHVuaXRtYXNrLGFsbF08L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotTWVyZ2UgYW55IHByb2ZpbGVzIHNlcGFyYXRlZCBpbiBhIC0tc2VwYXJhdGUgc2Vzc2lvbi4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tbm8taGVhZGVyPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLURvbid0IG91dHB1dCBhIGhlYWRlciBkZXRhaWxpbmcgcHJvZmlsaW5nIHBhcmFtZXRlcnMuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLW91dHB1dC1maWxlIC8gLW8gW2ZpbGVdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLU91dHB1dCB0byB0aGUgZ2l2ZW4gZmlsZSBpbnN0ZWFkIG9mIHN0ZG91dC4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tcmV2ZXJzZS1zb3J0IC8gLXI8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotUmV2ZXJzZSB0aGUgc29ydCBmcm9tIHRoZSBkZWZhdWx0LgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1zaG93LWFkZHJlc3MgLyAtdzwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1TaG93IHRoZSBWTUEgYWRkcmVzcyBvZiBlYWNoIHN5bWJvbCAob2ZmIGJ5IGRlZmF1bHQpLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1zb3J0IC8gLXMgW3ZtYSxzYW1wbGUsc3ltYm9sLGRlYnVnLGltYWdlXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1Tb3J0IHRoZSBsaXN0IG9mIHN5bWJvbHMgYnksIHJlc3BlY3RpdmVseSwgc3ltYm9sIGFkZHJlc3MsCi1udW1iZXIgb2Ygc2FtcGxlcywgc3ltYm9sIG5hbWUsIGRlYnVnIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlciwKLWJpbmFyeSBpbWFnZSBmaWxlbmFtZS4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tc3ltYm9scyAvIC1sPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLUxpc3QgcGVyLXN5bWJvbCBpbmZvcm1hdGlvbiBpbnN0ZWFkIG9mIGEgYmluYXJ5IGltYWdlIHN1bW1hcnkuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXRocmVzaG9sZCAvIC10IFtwZXJjZW50YWdlXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1Pbmx5IG91dHB1dCBkYXRhIGZvciBzeW1ib2xzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gdGhlIGdpdmVuIHBlcmNlbnRhZ2UKLW9mIHRvdGFsIHNhbXBsZXMuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcmJvc2UgLyAtViBbb3B0aW9uc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcnNpb24gLyAtdjwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1TaG93IHZlcnNpb24uCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTwvdmFyaWFibGVsaXN0PgotCi08L3NlY3QyPgotCi08L3NlY3QxPiA8IS0tIG9wcmVwb3J0IC0tPgotCi08c2VjdDEgaWQ9Im9wYW5ub3RhdGUiPgotPHRpdGxlPk91dHB1dHRpbmcgYW5ub3RhdGVkIHNvdXJjZSAoPGNvbW1hbmQ+b3Bhbm5vdGF0ZTwvY29tbWFuZD4pPC90aXRsZT4KLTxwYXJhPgotVGhlIDxjb21tYW5kPm9wYW5ub3RhdGU8L2NvbW1hbmQ+IHV0aWxpdHkgZ2VuZXJhdGVzIGFubm90YXRlZCBzb3VyY2UgZmlsZXMgb3IgYXNzZW1ibHkgbGlzdGluZ3MsIG9wdGlvbmFsbHkKLW1peGVkIHdpdGggc291cmNlLgotSWYgeW91IHdhbnQgdG8gc2VlIHRoZSBzb3VyY2UgZmlsZSwgdGhlIHByb2ZpbGVkIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGhhdmUgZGVidWcgaW5mb3JtYXRpb24sIGFuZCB0aGUgc291cmNlCi1tdXN0IGJlIGF2YWlsYWJsZSB0aHJvdWdoIHRoaXMgZGVidWcgaW5mb3JtYXRpb24uIEZvciBHQ0MsIHlvdSBtdXN0IHVzZSB0aGUgPG9wdGlvbj4tZzwvb3B0aW9uPiBvcHRpb24KLXdoZW4geW91IGFyZSBjb21waWxpbmcuCi1JZiB0aGUgYmluYXJ5IGRvZXNuJ3QgY29udGFpbiBzdWZmaWNpZW50IGRlYnVnIGluZm9ybWF0aW9uLCB5b3UgY2FuIHN0aWxsCi11c2UgPGNvbW1hbmQ+b3Bhbm5vdGF0ZSA8b3B0aW9uPi0tYXNzZW1ibHk8L29wdGlvbj48L2NvbW1hbmQ+IHRvIGdldCBhbm5vdGF0ZWQgYXNzZW1ibHkuCi08L3BhcmE+Ci08cGFyYT4KLU5vdGUgdGhhdCBmb3IgdGhlIHJlYXNvbiBleHBsYWluZWQgaW4gPHhyZWYgbGlua2VuZD0iaGFyZHdhcmUtY291bnRlcnMiIC8+IHRoZSByZXN1bHRzIGNhbiBiZQotaW5hY2N1cmF0ZS4gVGhlIGRlYnVnIGluZm9ybWF0aW9uIGl0c2VsZiBjYW4gYWRkIG90aGVyIHByb2JsZW1zOyBmb3IgZXhhbXBsZSwgdGhlIGxpbmUgbnVtYmVyIGZvciBhIHN5bWJvbCBjYW4gYmUKLWluY29ycmVjdC4gQXNzZW1ibHkgaW5zdHJ1Y3Rpb25zIGNhbiBiZSByZS1vcmRlcmVkIGFuZCBtb3ZlZCBieSB0aGUgY29tcGlsZXIsIGFuZCB0aGlzIGNhbiBsZWFkIHRvCi1jcmVkaXRpbmcgc291cmNlIGxpbmVzIHdpdGggc2FtcGxlcyBub3QgcmVhbGx5ICJvd25lZCIgYnkgdGhpcyBsaW5lLiBBbHNvIHNlZQotPHhyZWYgbGlua2VuZD0iaW50ZXJwcmV0aW5nIiAvPi4KLTwvcGFyYT4KLTxwYXJhPgotWW91IGNhbiBvdXRwdXQgdGhlIGFubm90YXRpb24gdG8gb25lIHNpbmdsZSBmaWxlLCBjb250YWluaW5nIGFsbCB0aGUgc291cmNlIGZvdW5kIHVzaW5nIHRoZQotPG9wdGlvbj4tLXNvdXJjZTwvb3B0aW9uPi4gWW91IGNhbiB1c2UgdGhpcyBpbiBjb25qdW5jdGlvbiB3aXRoIDxvcHRpb24+LS1hc3NlbWJseTwvb3B0aW9uPgotdG8gZ2V0IGNvbWJpbmVkIHNvdXJjZS9hc3NlbWJseSBvdXRwdXQuCi08L3BhcmE+Ci08cGFyYT4KLVlvdSBjYW4gYWxzbyBvdXRwdXQgYSBkaXJlY3Rvcnkgb2YgYW5ub3RhdGVkIHNvdXJjZSBmaWxlcyB0aGF0IG1haW50YWlucyB0aGUgc3RydWN0dXJlIG9mCi10aGUgb3JpZ2luYWwgc291cmNlcy4gRWFjaCBsaW5lIGluIHRoZSBhbm5vdGF0ZWQgc291cmNlIGlzIHByZXBlbmRlZCB3aXRoIHRoZSBzYW1wbGVzCi1mb3IgdGhhdCBsaW5lLiBBZGRpdGlvbmFsbHksIGVhY2ggc3ltYm9sIGlzIGFubm90YXRlZCBnaXZpbmcgZGV0YWlscyBmb3IgdGhlIHN5bWJvbAotYXMgYSB3aG9sZS4gQW4gZXhhbXBsZToKLTwvcGFyYT4KLTxzY3JlZW4+Ci0kIG9wYW5ub3RhdGUgLS1zb3VyY2UgLS1vdXRwdXQtZGlyPWFubm90YXRlZCAvdXNyL2xvY2FsL29wcm9maWxlLXBwL2Jpbi9vcHJvZmlsZWQKLSQgbHMgYW5ub3RhdGVkL2hvbWUvbW96L3NyYy9vcHJvZmlsZS1wcC9kYWVtb24vCi1vcGRfY29va2llLmggIG9wZF9pbWFnZS5jICBvcGRfa2VybmVsLmMgIG9wZF9zYW1wbGVfZmlsZXMuYyAgb3Byb2ZpbGVkLmMKLTwvc2NyZWVuPgotPHBhcmE+Ci1MaW5lIG51bWJlcnMgYXJlIG1haW50YWluZWQgaW4gdGhlIHNvdXJjZSBmaWxlcywgYnV0IGVhY2ggZmlsZSBoYXMKLWEgZm9vdGVyIGFwcGVuZGVkIGRlc2NyaWJpbmcgdGhlIHByb2ZpbGluZyBkZXRhaWxzLiBUaGUgYWN0dWFsIGFubm90YXRpb24KLWxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXMgOgotPC9wYXJhPgotPHNjcmVlbj4KLS4uLgotICAgICAgICAgICAgICAgOnN0YXRpYyB1aW50NjRfdCBwb3BfYnVmZmVyX3ZhbHVlKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKLSAxMTUxMCAgMS45NjYxIDp7IC8qIHBvcF9idWZmZXJfdmFsdWUgdG90YWw6ICA4OTkwMSAxNS4zNTY2ICovCi0gICAgICAgICAgICAgICA6ICAgICAgICB1aW50NjRfdCB2YWw7Ci0gICAgICAgICAgICAgICA6Ci0gMTAyMjcgIDEuNzQ2OSA6ICAgICAgICBpZiAoIXRyYW5zLT5yZW1haW5pbmcpIHsKLSAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCVUc6IHBvcHBpbmcgZW1wdHkgYnVmZmVyICFcbiIpOwotICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICA6ICAgICAgICB9Ci0gICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAgICA6ICAgICAgICB2YWwgPSBnZXRfYnVmZmVyX3ZhbHVlKHRyYW5zLT5idWZmZXIsIDApOwotICAyMjgxICAwLjM4OTYgOiAgICAgICAgdHJhbnMtPnJlbWFpbmluZy0tOwotICAyMjk2ICAwLjM5MjIgOiAgICAgICAgdHJhbnMtPmJ1ZmZlciArPSBrZXJuZWxfcG9pbnRlcl9zaXplOwotICAgICAgICAgICAgICAgOiAgICAgICAgcmV0dXJuIHZhbDsKLSAxMDQ1NCAgMS43ODU3IDp9Ci0uLi4KLTwvc2NyZWVuPgotCi08cGFyYT4KLVRoZSBmaXJzdCBudW1iZXIgb24gZWFjaCBsaW5lIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcywgd2hpbHN0IHRoZSBzZWNvbmQgaXMKLXRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIG9mIHRvdGFsIHNhbXBsZXMuCi08L3BhcmE+Ci0KLTxzZWN0MiBpZD0ib3Bhbm5vdGF0ZS1maW5kaW5nLXNvdXJjZSI+Ci08dGl0bGU+TG9jYXRpbmcgc291cmNlIGZpbGVzPC90aXRsZT4KLTxwYXJhPgotT2YgY291cnNlLCA8Y29tbWFuZD5vcGFubm90YXRlPC9jb21tYW5kPiBuZWVkcyB0byBiZSBhYmxlIHRvIGxvY2F0ZSB0aGUgc291cmNlIGZpbGVzCi1mb3IgdGhlIGJpbmFyeSBpbWFnZShzKSBpbiBvcmRlciB0byBwcm9kdWNlIG91dHB1dC4gU29tZSBiaW5hcnkgaW1hZ2VzIGhhdmUgZGVidWcKLWluZm9ybWF0aW9uIHdoZXJlIHRoZSBnaXZlbiBzb3VyY2UgZmlsZSBwYXRocyBhcmUgcmVsYXRpdmUsIG5vdCBhYnNvbHV0ZS4gWW91IGNhbgotc3BlY2lmeSBzZWFyY2ggcGF0aHMgdG8gbG9vayBmb3IgdGhlc2UgZmlsZXMgKHNpbWlsYXIgdG8gPGNvbW1hbmQ+Z2RiPC9jb21tYW5kPidzCi08b3B0aW9uPmRpcjwvb3B0aW9uPiBjb21tYW5kKSB3aXRoIHRoZSA8b3B0aW9uPi0tc2VhcmNoLWRpcnM8L29wdGlvbj4gb3B0aW9uLgotPC9wYXJhPgotPHBhcmE+Ci1Tb21ldGltZXMgeW91IG1heSBoYXZlIGEgYmluYXJ5IGltYWdlIHdoaWNoIGdpdmVzIGFic29sdXRlIHBhdGhzIGZvciB0aGUgc291cmNlIGZpbGVzLAotYnV0IHlvdSBoYXZlIHRoZSBhY3R1YWwgc291cmNlcyBlbHNld2hlcmUgKGNvbW1vbmx5LCB5b3UndmUgaW5zdGFsbGVkIGFuIFNSUE0gZm9yCi1hIGJpbmFyeSBvbiB5b3VyIHN5c3RlbSBhbmQgeW91IHdhbnQgYW5ub3RhdGlvbiBmcm9tIGFuIGV4aXN0aW5nIHByb2ZpbGUpLiBZb3UgY2FuCi11c2UgdGhlIDxvcHRpb24+LS1iYXNlLWRpcnM8L29wdGlvbj4gb3B0aW9uIHRvIHJlZGlyZWN0IE9Qcm9maWxlIHRvIGxvb2sgc29tZXdoZXJlCi1lbHNlIGZvciBzb3VyY2UgZmlsZXMuIEZvciBleGFtcGxlLCBpbWFnaW5lIHdlIGhhdmUgYSBiaW5hcnkgZ2VuZXJhdGVkIGZyb20gYSBzb3VyY2UKLWZpbGUgdGhhdCBpcyBnaXZlbiBpbiB0aGUgZGVidWcgaW5mb3JtYXRpb24gYXMgPGZpbGVuYW1lPi90bXAvYnVpbGQvbGliZm9vL2Zvby5jPC9maWxlbmFtZT4sCi1hbmQgeW91IGhhdmUgdGhlIHNvdXJjZSB0cmVlIG1hdGNoaW5nIHRoYXQgYmluYXJ5IGluc3RhbGxlZCBpbiA8ZmlsZW5hbWU+L2hvbWUvdXNlci9saWJmb28vPC9maWxlbmFtZT4uCi1Zb3UgY2FuIHJlZGlyZWN0IE9Qcm9maWxlIHRvIGZpbmQgPGZpbGVuYW1lPmZvby5jPC9maWxlbmFtZT4gY29ycmVjdGx5IGxpa2UgdGhpcyA6Ci08L3BhcmE+Ci08c2NyZWVuPgotJCBvcGFubm90YXRlIC0tc291cmNlIC0tYmFzZS1kaXJzPS90bXAvYnVpbGQvbGliZm9vLyAtLXNlYXJjaC1kaXJzPS9ob21lL3VzZXIvbGliZm9vLyAtLW91dHB1dC1kaXI9YW5ub3RhdGVkLyAvbGliL2xpYmZvby5zbwotPC9zY3JlZW4+Ci08cGFyYT4KLVlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSAoY29tbWEtc2VwYXJhdGVkKSBwYXRocyB0byBib3RoIG9wdGlvbnMuCi08L3BhcmE+Ci08L3NlY3QyPgotCi08c2VjdDIgaWQ9Im9wYW5ub3RhdGUtZGV0YWlscyI+Ci08dGl0bGU+VXNhZ2Ugb2YgPGNvbW1hbmQ+b3Bhbm5vdGF0ZTwvY29tbWFuZD48L3RpdGxlPgotCi08dmFyaWFibGVsaXN0PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tYXNzZW1ibHkgLyAtYTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1PdXRwdXQgYW5ub3RhdGVkIGFzc2VtYmx5LiBJZiB0aGlzIGlzIGNvbWJpbmVkIHdpdGggLS1zb3VyY2UsIHRoZW4gbWl4ZWQKLXNvdXJjZSAvIGFzc2VtYmx5IGFubm90YXRpb25zIGFyZSBvdXRwdXQuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWJhc2UtZGlycyAvIC1iIFtwYXRoc10vPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLUNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhdGggcHJlZml4ZXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcG9pbnQgT1Byb2ZpbGUgdG8gYQotZGlmZmVyZW50IGxvY2F0aW9uIGZvciBzb3VyY2UgZmlsZXMgd2hlbiB0aGUgZGVidWcgaW5mb3JtYXRpb24gc3BlY2lmaWVzIGFuCi1hYnNvbHV0ZSBwYXRoIG9uIHlvdXIgc3lzdGVtIGZvciB0aGUgc291cmNlIHRoYXQgZG9lcyBub3QgZXhpc3QuIFRoZSBwcmVmaXgKLWlzIHN0cmlwcGVkIGZyb20gdGhlIGRlYnVnIHNvdXJjZSBmaWxlIHBhdGhzLCB0aGVuIHNlYXJjaGVkIGluIHRoZSBzZWFyY2ggZGlycwotc3BlY2lmaWVkIGJ5IDxvcHRpb24+LS1zZWFyY2gtZGlyczwvb3B0aW9uPi4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZGVtYW5nbGUgLyAtRCBub25lfG5vcm1hbHxzbWFydDwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1ub25lOiBubyBkZW1hbmdsaW5nLiBub3JtYWw6IHVzZSBkZWZhdWx0IGRlbWFuZ2xlciAoZGVmYXVsdCkgc21hcnQ6IHVzZQotcGF0dGVybi1tYXRjaGluZyB0byBtYWtlIEMrKyBzeW1ib2wgZGVtYW5nbGluZyBtb3JlIHJlYWRhYmxlLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRlcGVuZGVudCAvIC14PC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLURvIG5vdCBpbmNsdWRlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGltYWdlcyBmb3IgbGlicmFyaWVzLCBrZXJuZWwgbW9kdWxlcwotYW5kIHRoZSBrZXJuZWwuIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIHByb2ZpbGUgc2Vzc2lvbgotdXNlZCAtLXNlcGFyYXRlLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWZpbGUgW2ZpbGVzXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1FeGNsdWRlIGFsbCBmaWxlcyBpbiB0aGUgZ2l2ZW4gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZXhjbHVkZS1zeW1ib2xzIC8gLWUgW3N5bWJvbHNdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLUV4Y2x1ZGUgYWxsIHRoZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taGVscCAvIC0/IC8gLS11c2FnZTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1TaG93IGhlbHAgbWVzc2FnZS4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taW1hZ2UtcGF0aCAvIC1wIFtwYXRoc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBwYXRocyB0byBzZWFyY2ggZm9yIGJpbmFyaWVzLgotVGhpcyBpcyBuZWVkZWQgdG8gZmluZCBtb2R1bGVzIGluIGtlcm5lbHMgMi42IGFuZCB1cHdhcmRzLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1pbmNsdWRlLWZpbGUgW2ZpbGVzXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1Pbmx5IGluY2x1ZGUgZmlsZXMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGdsb2IgcGF0dGVybnMuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWluY2x1ZGUtc3ltYm9scyAvIC1pIFtzeW1ib2xzXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1Pbmx5IGluY2x1ZGUgc3ltYm9scyBpbiB0aGUgZ2l2ZW4gY29tbWEtc2VwYXJhdGVkIGxpc3QuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLW9iamR1bXAtcGFyYW1zIFtwYXJhbXNdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLVBhc3MgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYXMgZXh0cmEgdmFsdWVzIHdoZW4gY2FsbGluZyBvYmpkdW1wLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1vdXRwdXQtZGlyIC8gLW8gW2Rpcl08L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotT3V0cHV0IGRpcmVjdG9yeS4gVGhpcyBtYWtlcyBvcGFubm90YXRlIG91dHB1dCBvbmUgYW5ub3RhdGVkIGZpbGUgZm9yIGVhY2gKLXNvdXJjZSBmaWxlLiBUaGlzIG9wdGlvbiBjYW4ndCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggLS1hc3NlbWJseS4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tc2VhcmNoLWRpcnMgLyAtZCBbcGF0aHNdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLUNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhdGhzIHRvIHNlYXJjaCBmb3Igc291cmNlIGZpbGVzLiBUaGlzIGlzIHVzZWZ1bCB0byBmaW5kCi1zb3VyY2UgZmlsZXMgd2hlbiB0aGUgZGVidWcgaW5mb3JtYXRpb24gb25seSBjb250YWlucyByZWxhdGl2ZSBwYXRocy4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tc291cmNlIC8gLXM8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotT3V0cHV0IGFubm90YXRlZCBzb3VyY2UuIFRoaXMgcmVxdWlyZXMgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRvIGJlIGF2YWlsYWJsZQotZm9yIHRoZSBiaW5hcmllcy4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tdGhyZXNob2xkIC8gLXQgW3BlcmNlbnRhZ2VdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLU9ubHkgb3V0cHV0IGRhdGEgZm9yIHN5bWJvbHMgdGhhdCBoYXZlIG1vcmUgdGhhbiB0aGUgZ2l2ZW4gcGVyY2VudGFnZQotb2YgdG90YWwgc2FtcGxlcy4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tdmVyYm9zZSAvIC1WIFtvcHRpb25zXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1HaXZlIHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dC4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tdmVyc2lvbiAvIC12PC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLVNob3cgdmVyc2lvbi4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPC92YXJpYWJsZWxpc3Q+Ci0KLQotPC9zZWN0Mj4gPCEtLSBvcGFubm90YXRlLWRldGFpbHMgLS0+Ci0KLTwvc2VjdDE+IDwhLS0gb3Bhbm5vdGF0ZSAtLT4KLQotPHNlY3QxIGlkPSJvcGdwcm9mIj4KLTx0aXRsZT48Y29tbWFuZD5ncHJvZjwvY29tbWFuZD4tY29tcGF0aWJsZSBvdXRwdXQgKDxjb21tYW5kPm9wZ3Byb2Y8L2NvbW1hbmQ+KTwvdGl0bGU+Ci08cGFyYT4KLUlmIHlvdSdyZSBmYW1pbGlhciB3aXRoIHRoZSBvdXRwdXQgcHJvZHVjZWQgYnkgPGNvbW1hbmQ+R05VIGdwcm9mPC9jb21tYW5kPiwKLXlvdSBtYXkgZmluZCA8Y29tbWFuZD5vcGdwcm9mPC9jb21tYW5kPiB1c2VmdWwuIEl0IHRha2VzIGEgc2luZ2xlIGJpbmFyeQotYXMgYW4gYXJndW1lbnQsIGFuZCBwcm9kdWNlcyBhIDxmaWxlbmFtZT5nbW9uLm91dDwvZmlsZW5hbWU+IGZpbGUgZm9yIHVzZQotd2l0aCA8Y29tbWFuZD5ncHJvZiAtcDwvY29tbWFuZD4uIElmIGNhbGwtZ3JhcGggcHJvZmlsaW5nIGlzIGVuYWJsZWQsCi10aGVuIHRoaXMgaXMgYWxzbyBpbmNsdWRlZC4KLTwvcGFyYT4KLTxzY3JlZW4+Ci0kIG9wZ3Byb2YgYHdoaWNoIG9wcm9maWxlZGAgIyBnZW5lcmF0ZXMgZ21vbi5vdXQgZmlsZQotJCBncHJvZiAtcCBgd2hpY2ggb3Byb2ZpbGVkYCB8IGhlYWQKLUZsYXQgcHJvZmlsZToKLQotRWFjaCBzYW1wbGUgY291bnRzIGFzIDEgc2FtcGxlcy4KLSAgJSAgIGN1bXVsYXRpdmUgICBzZWxmICAgICAgICAgICAgICBzZWxmICAgICB0b3RhbAotIHRpbWUgICBzYW1wbGVzICAgc2FtcGxlcyAgICBjYWxscyAgVDEvY2FsbCAgVDEvY2FsbCAgbmFtZQotIDMzLjEzIDIwNjIzNy4wMCAyMDYyMzcuMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kYl9pbnNlcnQKLSAyMi42NyAzNDczODYuMDAgMTQxMTQ5LjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BfYnVmZmVyX3ZhbHVlCi0gIDkuNTYgNDA2ODgxLjAwIDU5NDk1LjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGRfcHV0X3NhbXBsZQotICA3LjM0IDQ1MjU5OS4wMCA0NTcxOC4wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BkX2ZpbmRfaW1hZ2UKLSAgNy4xOSA0OTczMjcuMDAgNDQ3MjguMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZF9wcm9jZXNzX3NhbXBsZXMKLTwvc2NyZWVuPgotCi08c2VjdDIgaWQ9Im9wZ3Byb2YtZGV0YWlscyI+Ci08dGl0bGU+VXNhZ2Ugb2YgPGNvbW1hbmQ+b3BncHJvZjwvY29tbWFuZD48L3RpdGxlPgotCi08dmFyaWFibGVsaXN0PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taGVscCAvIC0/IC8gLS11c2FnZTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1TaG93IGhlbHAgbWVzc2FnZS4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taW1hZ2UtcGF0aCAvIC1wIFtwYXRoc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBwYXRocyB0byBzZWFyY2ggZm9yIGJpbmFyaWVzLgotVGhpcyBpcyBuZWVkZWQgdG8gZmluZCBtb2R1bGVzIGluIGtlcm5lbHMgMi42IGFuZCB1cHdhcmRzLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1vdXRwdXQtZmlsZW5hbWUgLyAtbyBbZmlsZV08L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotT3V0cHV0IHRvIHRoZSBnaXZlbiBmaWxlIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQsIGdtb24ub3V0Ci08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXRocmVzaG9sZCAvIC10IFtwZXJjZW50YWdlXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1Pbmx5IG91dHB1dCBkYXRhIGZvciBzeW1ib2xzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gdGhlIGdpdmVuIHBlcmNlbnRhZ2UKLW9mIHRvdGFsIHNhbXBsZXMuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcmJvc2UgLyAtViBbb3B0aW9uc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcnNpb24gLyAtdjwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Ci1TaG93IHZlcnNpb24uCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTwvdmFyaWFibGVsaXN0PgotCi08L3NlY3QyPiA8IS0tIG9wZ3Byb2YtZGV0YWlscyAtLT4KLQotPC9zZWN0MT4gPCEtLSBvcGdwcm9mIC0tPgotCi08c2VjdDEgaWQ9Im9wYXJjaGl2ZSI+Ci08dGl0bGU+QXJjaGl2aW5nIG1lYXN1cmVtZW50cyAoPGNvbW1hbmQ+b3BhcmNoaXZlPC9jb21tYW5kPik8L3RpdGxlPgotPHBhcmE+Ci0JVGhlIDxjb21tYW5kPm9wYXJjaGl2ZTwvY29tbWFuZD4gdXRpbGl0eSBnZW5lcmF0ZXMgYSBkaXJlY3RvcnkgcG9wdWxhdGVkCi0Jd2l0aCBleGVjdXRhYmxlLCBkZWJ1ZywgYW5kIG9wcm9maWxlIHNhbXBsZSBmaWxlcy4gVGhpcyBkaXJlY3RvcnkgY2FuIGJlCi0JbW92ZWQgdG8gYW5vdGhlciBtYWNoaW5lIHZpYSA8Y29tbWFuZD50YXI8L2NvbW1hbmQ+IGFuZCBhbmFseXplZCB3aXRob3V0Ci0JZnVydGhlciB1c2Ugb2YgdGhlIGRhdGEgY29sbGVjdGlvbiBtYWNoaW5lLgotPC9wYXJhPgotCi08cGFyYT4KLQlUaGUgZm9sbG93aW5nIGNvbW1hbmQgd291bGQgY29sbGVjdCB0aGUgc2FtcGxlIGZpbGVzLCB0aGUgZXhlY3V0YWJsZXMKLQlhc3NvY2lhdGVkIHdpdGggdGhlIHNhbXBsZSBmaWxlcywgYW5kIHRoZSBkZWJ1Z2luZm8gZmlsZXMgYXNzb2NpYXRlZAotCXdpdGggdGhlIGV4ZWN1dGFibGVzIGFuZCBjb3B5IHRoZW0gaW50bwotCTxmaWxlbmFtZT4vdG1wL2N1cnJlbnRfZGF0YTwvZmlsZW5hbWU+OgotPC9wYXJhPgotCi08c2NyZWVuPgotIyBvcGFyY2hpdmUgLW8gL3RtcC9jdXJyZW50X2RhdGEKLTwvc2NyZWVuPgotCi08c2VjdDIgaWQ9Im9wYXJjaGl2ZS1kZXRhaWxzIj4KLTx0aXRsZT5Vc2FnZSBvZiA8Y29tbWFuZD5vcGFyY2hpdmU8L2NvbW1hbmQ+PC90aXRsZT4KLQotPHZhcmlhYmxlbGlzdD4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotU2hvdyBoZWxwIG1lc3NhZ2UuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGVwZW5kZW50IC8gLXg8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotRG8gbm90IGluY2x1ZGUgYXBwbGljYXRpb24tc3BlY2lmaWMgaW1hZ2VzIGZvciBsaWJyYXJpZXMsIGtlcm5lbCBtb2R1bGVzCi1hbmQgdGhlIGtlcm5lbC4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcHJvZmlsZSBzZXNzaW9uCi11c2VkIC0tc2VwYXJhdGUuCi08L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLTx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLUNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgcGF0aHMgdG8gc2VhcmNoIGZvciBiaW5hcmllcy4KLVRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgbW9kdWxlcyBpbiBrZXJuZWxzIDIuNiBhbmQgdXB3YXJkcy4KLTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgotPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tb3V0cHV0LWRpcmVjdG9yeSAvIC1vIFtkaXJlY3RvcnldPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLU91dHB1dCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBUaGVyZSBpcyBubyBkZWZhdWx0LiBUaGlzIG11c3QgYmUgc3BlY2lmaWVkLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS12ZXJib3NlIC8gLVYgW29wdGlvbnNdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KLUdpdmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS12ZXJzaW9uIC8gLXY8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgotU2hvdyB2ZXJzaW9uLgotPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci08L3ZhcmlhYmxlbGlzdD4KLQotPC9zZWN0Mj4gPCEtLSBvcGFyY2hpdmUtZGV0YWlscyAtLT4KLQotPC9zZWN0MT4gPCEtLSBvcGFyY2hpdmUgLS0+Ci0KLTwvY2hhcHRlcj4KLQotPGNoYXB0ZXIgaWQ9ImludGVycHJldGluZyI+Ci08dGl0bGU+SW50ZXJwcmV0aW5nIHByb2ZpbGluZyByZXN1bHRzPC90aXRsZT4KLTxwYXJhPgotVGhlIHN0YW5kYXJkIGNhdmVhdHMgb2YgcHJvZmlsaW5nIGFwcGx5IGluIGludGVycHJldGluZyB0aGUgcmVzdWx0cyBmcm9tIE9Qcm9maWxlOgotcHJvZmlsZSByZWFsaXN0aWMgc2l0dWF0aW9ucywgcHJvZmlsZSBkaWZmZXJlbnQgc2NlbmFyaW9zLCBwcm9maWxlCi1mb3IgYXMgbG9uZyBhcyBhIHRpbWUgYXMgcG9zc2libGUsIGF2b2lkIHN5c3RlbS1zcGVjaWZpYyBhcnRpZmFjdHMsIGRvbid0IHRydXN0Ci10aGUgcHJvZmlsZSBkYXRhIHRvbyBtdWNoLiBBbHNvIGJlYXIgaW4gbWluZCB0aGUgY29tbWVudHMgb24gdGhlIHBlcmZvcm1hbmNlCi1jb3VudGVycyBhYm92ZSAtIHlvdSA8ZW1waGFzaXM+Y2Fubm90PC9lbXBoYXNpcz4gcmVseSBvbiB0b3RhbGx5IGFjY3VyYXRlCi1pbnN0cnVjdGlvbi1sZXZlbCBwcm9maWxpbmcuICBIb3dldmVyLCBmb3IgYWxtb3N0IGFsbCBjaXJjdW1zdGFuY2VzIHRoZSBkYXRhCi1jYW4gYmUgdXNlZnVsLiBJZGVhbGx5IGEgdXRpbGl0eSBzdWNoIGFzIEludGVsJ3MgVlRVTkUgd291bGQgYmUgYXZhaWxhYmxlIHRvCi1hbGxvdyBjYXJlZnVsIGluc3RydWN0aW9uLWxldmVsIGFuYWx5c2lzOyBnbyBoYXNzbGUgSW50ZWwgZm9yIHRoaXMsIG5vdCBtZSA7KQotPC9wYXJhPgotPHNlY3QxIGlkPSJpcnEtbGF0ZW5jeSI+Ci08dGl0bGU+UHJvZmlsaW5nIGludGVycnVwdCBsYXRlbmN5PC90aXRsZT4KLTxwYXJhPgotVGhpcyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0aGUgbGF0ZW5jeSBvZiBkZWxpdmVyeSBvZiBwcm9maWxpbmcgaW50ZXJydXB0cwotY2FuIGltcGFjdCB0aGUgcmVsaWFiaWxpdHkgb2YgdGhlIHByb2ZpbGluZyBkYXRhLiBUaGlzIGlzIHByZXR0eSBtdWNoIGEgCi13b3JzdC1jYXNlLXNjZW5hcmlvIGV4YW1wbGU6IHRoZXNlIHByb2JsZW1zIGFyZSBmYWlybHkgcmFyZS4KLTwvcGFyYT4KLTxzY3JlZW4+Ci1kb3VibGUgZnVuKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpCi17Ci0gZG91YmxlIHJlc3VsdCA9IDA7Ci0gZm9yIChpbnQgaSA9IDAgOyBpICZsdDsgMTAwMDA7ICsraSkgewotICByZXN1bHQgKz0gYTsKLSAgcmVzdWx0ICo9IGI7Ci0gIHJlc3VsdCAvPSBjOwotIH0KLSByZXR1cm4gcmVzdWx0OwotfQotPC9zY3JlZW4+Ci08cGFyYT4KLUhlcmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gb2YgdGhlIGxvb3AgaXMgdmVyeSBjb3N0bHksIGFuZCB5b3Ugd291bGQgZXhwZWN0IHRoZSByZXN1bHQKLXJlZmxlY3RpbmcgdGhhdCAtIGJ1dCAoY3V0dGluZyB0aGUgaW5zdHJ1Y3Rpb25zIGluc2lkZSB0aGUgbG9vcCk6Ci08L3BhcmE+Ci08c2NyZWVuPgotJCBvcGFubm90YXRlIC1hIC10IDEwIC4vYS5vdXQKLQotICAgICA4OCAxNS4zOCUgOiA4MDQ4MzM3OiAgICAgICBmYWRkICAgJXN0KDMpLCVzdAotICAgICA0OCA4LjM5MSUgOiA4MDQ4MzM5OiAgICAgICBmbXVsICAgJXN0KDIpLCVzdAotICAgICA2OCAxMS44OCUgOiA4MDQ4MzNiOiAgICAgICBmZGl2ICAgJXN0KDEpLCVzdAotICAgIDM2OCA2NC4zMyUgOiA4MDQ4MzNkOiAgICAgICBpbmMgICAgJWVheAotICAgICAgICAgICAgICAgOiA4MDQ4MzNlOiAgICAgICBjbXAgICAgJDB4MjcwZiwlZWF4Ci0gICAgICAgICAgICAgICA6IDgwNDgzNDM6ICAgICAgIGpsZSAgICA4MDQ4MzM3Ci08L3NjcmVlbj4KLTxwYXJhPgotVGhlIHByb2JsZW0gY29tZXMgZnJvbSB0aGUgeDg2IGhhcmR3YXJlOyB3aGVuIHRoZSBjb3VudGVyIG92ZXJmbG93cyB0aGUgSVJRCi1pcyBhc3NlcnRlZCBidXQgdGhlIGhhcmR3YXJlIGhhcyBmZWF0dXJlcyB0aGF0IGNhbiBkZWxheSB0aGUgTk1JIGludGVycnVwdDoKLXg4NiBoYXJkd2FyZSBpcyBzeW5jaHJvbm91cyAoaS5lLiBjYW5ub3QgaW50ZXJydXB0IGR1cmluZyBhbiBpbnN0cnVjdGlvbik7Ci10aGVyZSBpcyBhbHNvIGEgbGF0ZW5jeSB3aGVuIHRoZSBJUlEgaXMgYXNzZXJ0ZWQsIGFuZCB0aGUgbXVsdGlwbGUKLWV4ZWN1dGlvbiB1bml0cyBhbmQgdGhlIG91dC1vZi1vcmRlciBtb2RlbCBvZiBtb2Rlcm4geDg2IENQVXMgYWxzbyBjYXVzZXMKLXByb2JsZW1zLiBUaGlzIGlzIHRoZSBzYW1lIGZ1bmN0aW9uLCB3aXRoIGFubm90YXRpb24gOgotPC9wYXJhPgotPHNjcmVlbj4KLSQgb3Bhbm5vdGF0ZSAtcyAtdCAxMCAuL2Eub3V0Ci0KLSAgICAgICAgICAgICAgIDpkb3VibGUgZnVuKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpCi0gICAgICAgICAgICAgICA6eyAvKiBfWjNmdW5kZGQgdG90YWw6ICAgICA1NzIgMTAwLjAlICovCi0gICAgICAgICAgICAgICA6IGRvdWJsZSByZXN1bHQgPSAwOwotICAgIDM2OCA2NC4zMyUgOiBmb3IgKGludCBpID0gMCA7IGkgJmx0OyAxMDAwMDsgKytpKSB7Ci0gICAgIDg4IDE1LjM4JSA6ICByZXN1bHQgKz0gYTsKLSAgICAgNDggOC4zOTElIDogIHJlc3VsdCAqPSBiOwotICAgICA2OCAxMS44OCUgOiAgcmVzdWx0IC89IGM7Ci0gICAgICAgICAgICAgICA6IH0KLSAgICAgICAgICAgICAgIDogcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgIDp9Ci08L3NjcmVlbj4KLTxwYXJhPgotVGhlIGNvbmNsdXNpb246IGRvbid0IHRydXN0IHNhbXBsZXMgY29taW5nIGF0IHRoZSBlbmQgb2YgYSBsb29wLAotcGFydGljdWxhcmx5IGlmIHRoZSBsYXN0IGluc3RydWN0aW9uIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgaXMgY29zdGx5LiBUaGlzCi1jYXNlIGNhbiBhbHNvIG9jY3VyIGZvciBicmFuY2hlcy4gQWx3YXlzIGJlYXIgaW4gbWluZCB0aGF0IHNhbXBsZXMKLWNhbiBiZSBkZWxheWVkIGJ5IGEgZmV3IGN5Y2xlcyBmcm9tIGl0cyByZWFsIHBvc2l0aW9uLiBUaGF0J3MgYSBoYXJkd2FyZQotcHJvYmxlbSBhbmQgT1Byb2ZpbGUgY2FuIGRvIG5vdGhpbmcgYWJvdXQgaXQuCi08L3BhcmE+Ci08L3NlY3QxPgotPHNlY3QxIGlkPSJrZXJuZWwtcHJvZmlsaW5nIj4KLTx0aXRsZT5LZXJuZWwgcHJvZmlsaW5nPC90aXRsZT4KLTxzZWN0MiBpZD0iaXJxLW1hc2tpbmciPgotPHRpdGxlPkludGVycnVwdCBtYXNraW5nPC90aXRsZT4KLTxwYXJhPgotT1Byb2ZpbGUgdXNlcyBub24tbWFza2FibGUgaW50ZXJydXB0cyAoTk1JKSBvbiB0aGUgUDYgZ2VuZXJhdGlvbiwgUGVudGl1bSA0LAotQXRobG9uIGFuZCBEdXJvbiBwcm9jZXNzb3JzLiBUaGVzZSBpbnRlcnJ1cHRzIGNhbiBvY2N1ciBldmVuIGluIHNlY3Rpb24gb2YgdGhlCi1MaW51eCB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgYWxsb3dpbmcgY29sbGVjdGlvbiBvZiBzYW1wbGVzIGluIHZpcnR1YWxseQotYWxsIGV4ZWN1dGFibGUgY29kZS4gIFRoZSBSVEMsIHRpbWVyIGludGVycnVwdCBtb2RlLCBhbmQgSXRhbml1bSAyIGNvbGxlY3Rpb24gbWVjaGFuaXNtcwotdXNlIG1hc2thYmxlIGludGVycnVwdHMuIFRodXMsIHRoZSBSVEMgYW5kIEl0YW5pdW0gMiBkYXRhIGNvbGxlY3Rpb24gbWVjaGFuaXNtIGhhdmUgInNhbXBsZQotc2hhZG93cyIsIG9yIGJsaW5kIHNwb3RzOiByZWdpb25zIHdoZXJlIG5vIHNhbXBsZXMgd2lsbCBiZSBjb2xsZWN0ZWQuIFR5cGljYWxseSwgdGhlIHNhbXBsZXMKLXdpbGwgYmUgYXR0cmlidXRlZCB0byB0aGUgY29kZSBpbW1lZGlhdGVseSBhZnRlciB0aGUgaW50ZXJydXB0cyBhcmUgcmUtZW5hYmxlZC4KLTwvcGFyYT4KLTwvc2VjdDI+Ci08c2VjdDIgaWQ9ImlkbGUiPgotPHRpdGxlPklkbGUgdGltZTwvdGl0bGU+Ci08cGFyYT4KLVlvdXIga2VybmVsIGlzIGxpa2VseSB0byBzdXBwb3J0IGhhbHRpbmcgdGhlIHByb2Nlc3NvciB3aGVuIGEgQ1BVIGlzIGlkbGUuIEFzCi10aGUgdHlwaWNhbCBoYXJkd2FyZSBldmVudHMgbGlrZSA8Y29uc3RhbnQ+Q1BVX0NMS19VTkhBTFRFRDwvY29uc3RhbnQ+IGRvIG5vdAotY291bnQgd2hlbiB0aGUgQ1BVIGlzIGhhbHRlZCwgdGhlIGtlcm5lbCBwcm9maWxlIHdpbGwgbm90IHJlZmxlY3QgdGhlIGFjdHVhbAotYW1vdW50IG9mIHRpbWUgc3BlbnQgaWRsZS4gWW91IGNhbiBjaGFuZ2UgdGhpcyBiZWhhdmlvdXIgYnkgYm9vdGluZyB3aXRoCi10aGUgPG9wdGlvbj5pZGxlPXBvbGw8L29wdGlvbj4gb3B0aW9uLCB3aGljaCB1c2VzIGEgZGlmZmVyZW50IGlkbGUgcm91dGluZS4gVGhpcwotd2lsbCBhcHBlYXIgYXMgPGZ1bmN0aW9uPnBvbGxfaWRsZSgpPC9mdW5jdGlvbj4gaW4geW91ciBrZXJuZWwgcHJvZmlsZS4KLTwvcGFyYT4KLTwvc2VjdDI+Ci08c2VjdDIgaWQ9Imtlcm5lbC1tb2R1bGVzIj4KLTx0aXRsZT5Qcm9maWxpbmcga2VybmVsIG1vZHVsZXM8L3RpdGxlPgotPHBhcmE+Ci1PUHJvZmlsZSBwcm9maWxlcyBrZXJuZWwgbW9kdWxlcyBieSBkZWZhdWx0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgcHJvYmxlbXMKLXlvdSBtYXkgaGF2ZSB3aGVuIHRyeWluZyB0byBnZXQgcmVzdWx0cy4gRmlyc3QsIHlvdSBtYXkgaGF2ZSBib290ZWQgdmlhIGFuIGluaXRyZDsKLXRoaXMgbWVhbnMgdGhhdCB0aGUgYWN0dWFsIHBhdGggZm9yIHRoZSBtb2R1bGUgYmluYXJpZXMgY2Fubm90IGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseS4KLVRvIGdldCBhcm91bmQgdGhpcywgeW91IGNhbiB1c2UgdGhlIDxvcHRpb24+LXA8L29wdGlvbj4gb3B0aW9uIHRvIHRoZSBwcm9maWxpbmcgdG9vbHMKLXRvIHNwZWNpZnkgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGtlcm5lbCBtb2R1bGVzLgotPC9wYXJhPgotPHBhcmE+Ci1JbiAyLjYsIHRoZSBpbmZvcm1hdGlvbiBvbiB3aGVyZSBrZXJuZWwgbW9kdWxlIGJpbmFyaWVzIGFyZSBsb2NhdGVkIGhhcyBiZWVuIHJlbW92ZWQuCi1UaGlzIG1lYW5zIE9Qcm9maWxlIG5lZWRzIGd1aWRpbmcgd2l0aCB0aGUgPG9wdGlvbj4tcDwvb3B0aW9uPiBvcHRpb24gdG8gZmluZCB5b3VyCi1tb2R1bGVzLiBOb3JtYWxseSwgeW91IGNhbiBqdXN0IHVzZSB5b3VyIHN0YW5kYXJkIG1vZHVsZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZvciB0aGlzLgotTm90ZSB0aGF0IGR1ZSB0byB0aGlzIHByb2JsZW0sIE9Qcm9maWxlIGNhbm5vdCBjaGVjayB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGltZXMgbWF0Y2g7Ci1pdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIG1ha2Ugc3VyZSB5b3UgZG8gbm90IG1vZGlmeSBhIGJpbmFyeSBhZnRlciBhIHByb2ZpbGUKLWhhcyBiZWVuIGNyZWF0ZWQuCi08L3BhcmE+Ci08cGFyYT4KLUlmIHlvdSBoYXZlIHJ1biA8Y29tbWFuZD5pbnNtb2Q8L2NvbW1hbmQ+IG9yIDxjb21tYW5kPm1vZHByb2JlPC9jb21tYW5kPiB0byBpbnNlcnQgYSBtb2R1bGUKLWluIGEgcGFydGljdWxhciBkaXJlY3RvcnksIGl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBzcGVjaWZ5IHRoaXMgZGlyZWN0b3J5IHdpdGggdGhlIAotPG9wdGlvbj4tcDwvb3B0aW9uPiBvcHRpb24gZmlyc3QsIHNvIHRoYXQgaXQgb3Zlci1yaWRlcyBhbiBvbGRlciBtb2R1bGUgYmluYXJ5IHRoYXQgbWlnaHQKLWV4aXN0IGluIG90aGVyIGRpcmVjdG9yaWVzIHlvdSd2ZSBzcGVjaWZpZWQgd2l0aCA8b3B0aW9uPi1wPC9vcHRpb24+LiBJdCBpcyB1cCB0byB5b3UKLXRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHZhbHVlcyBhcmUgY29ycmVjdDogMi42IGtlcm5lbHMgc2ltcGx5IGRvIG5vdCBwcm92aWRlIGVub3VnaAotaW5mb3JtYXRpb24gZm9yIE9Qcm9maWxlIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uLgotPC9wYXJhPgotPC9zZWN0Mj4KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0iaW50ZXJwcmV0aW5nLWNhbGxncmFwaCI+Ci08dGl0bGU+SW50ZXJwcmV0aW5nIGNhbGwtZ3JhcGggcHJvZmlsZXM8L3RpdGxlPgotPHBhcmE+Ci1Tb21ldGltZXMgdGhlIHJlc3VsdHMgZnJvbSBjYWxsLWdyYXBoIHByb2ZpbGVzIG1heSBiZSBkaWZmZXJlbnQgdG8gd2hhdAoteW91IGV4cGVjdCB0byBzZWUuIFRoZSBmaXJzdCB0aGluZyB0byBjaGVjayBpcyB3aGV0aGVyIHRoZSB0YXJnZXQKLWJpbmFyaWVzIHdoZXJlIGNvbXBpbGVkIHdpdGggZnJhbWUgcG9pbnRlcnMgZW5hYmxlZCAoaWYgdGhlIGJpbmFyeSB3YXMKLWNvbXBpbGVkIHVzaW5nIDxjb21tYW5kPmdjYzwvY29tbWFuZD4ncwotPG9wdGlvbj4tZm9taXQtZnJhbWUtcG9pbnRlcjwvb3B0aW9uPiBvcHRpb24sIHlvdSB3aWxsIG5vdCBnZXQKLW1lYW5pbmdmdWwgcmVzdWx0cykuIE5vdGUgdGhhdCBhcyBvZiB0aGlzIHdyaXRpbmcsIHRoZSBHQ0MgZGV2ZWxvcGVycwotcGxhbiB0byBkaXNhYmxlIGZyYW1lIHBvaW50ZXJzIGJ5IGRlZmF1bHQuIFRoZSBMaW51eCBrZXJuZWwgaXMgYnVpbHQKLXdpdGhvdXQgZnJhbWUgcG9pbnRlcnMgYnkgZGVmYXVsdDsgdGhlcmUgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB5b3UKLWNhbiB1c2UgdG8gdHVybiBpdCBvbiB1bmRlciB0aGUgIktlcm5lbCBIYWNraW5nIiBtZW51LgotPC9wYXJhPgotPHBhcmE+Ci1PZnRlbiB5b3UgbWF5IHNlZSBhIGNhbGxlciBvZiBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgYWN0dWFsbHkgZGlyZWN0bHkKLWNhbGwgdGhlIGZ1bmN0aW9uIHlvdSdyZSBsb29raW5nIGF0IChlLmcuIGlmIDxmdW5jdGlvbj5hKCk8L2Z1bmN0aW9uPgotY2FsbHMgPGZ1bmN0aW9uPmIoKTwvZnVuY3Rpb24+LCB3aGljaCBpbiB0dXJuIGNhbGxzCi08ZnVuY3Rpb24+YygpPC9mdW5jdGlvbj4sIHlvdSBtYXkgc2VlIGFuIGVudHJ5IGZvcgotPGZ1bmN0aW9uPmEoKS0+YygpPC9mdW5jdGlvbj4pLiAgV2hhdCdzIGFjdHVhbGx5IG9jY3VycmluZyBpcyB0aGF0IHdlCi1hcmUgdGFraW5nIHNhbXBsZXMgYXQgdGhlIHZlcnkgc3RhcnQgKG9yIHRoZSB2ZXJ5IGVuZCkgb2YKLTxmdW5jdGlvbj5jKCk8L2Z1bmN0aW9uPjsgYXQgdGhlc2UgZmV3IGluc3RydWN0aW9ucywgd2UgaGF2ZW4ndCB5ZXQKLWNyZWF0ZWQgdGhlIG5ldyBmdW5jdGlvbidzIGZyYW1lLCBzbyBpdCBhcHBlYXJzIGFzIGlmCi08ZnVuY3Rpb24+YSgpPC9mdW5jdGlvbj4gaXMgY2FsbGluZyBkaXJlY3RseSBpbnRvCi08ZnVuY3Rpb24+YygpPC9mdW5jdGlvbj4uIEJlIGNhcmVmdWwgbm90IHRvIGJlIG1pc2xlZCBieSB0aGVzZQotZW50cmllcy4KLTwvcGFyYT4KLTxwYXJhPgotTGlrZSB0aGUgcmVzdCBvZiBPUHJvZmlsZSwgY2FsbC1ncmFwaCBwcm9maWxpbmcgdXNlcyBhIHN0YXRpc3RpY2FsCi1hcHByb2FjaDsgdGhpcyBtZWFucyB0aGF0IHNvbWV0aW1lcyBhIGJhY2t0cmFjZSBzYW1wbGUgaXMgdHJ1bmNhdGVkLCBvcgotZXZlbiBwYXJ0aWFsbHkgd3JvbmcuIEJlYXIgdGhpcyBpbiBtaW5kIHdoZW4gZXhhbWluaW5nIHJlc3VsdHMuCi08L3BhcmE+Ci08IS0tICBGSVhNRTogd2hhdCBkbyB3ZSBuZWVkIGhlcmUgPyAtLT4KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0iZGVidWctaW5mbyI+Ci08dGl0bGU+SW5hY2N1cmFjaWVzIGluIGFubm90YXRlZCBzb3VyY2U8L3RpdGxlPgotPHNlY3QyIGlkPSJlZmZlY3Qtb2Ytb3B0aW1pemF0aW9ucyI+Ci08dGl0bGU+U2lkZSBlZmZlY3RzIG9mIG9wdGltaXphdGlvbnM8L3RpdGxlPgotPHBhcmE+Ci1UaGUgY29tcGlsZXIgY2FuIGludHJvZHVjZSBzb21lIHBpdGZhbGxzIGluIHRoZSBhbm5vdGF0ZWQgc291cmNlIG91dHB1dC4KLVRoZSBvcHRpbWl6ZXIgY2FuIG1vdmUgcGllY2VzIG9mIGNvZGUgaW4gc3VjaCBtYW5uZXIgdGhhdCB0d28gbGluZSBvZiBjb2RlcwotYXJlIGludGVybGFjZWQgKGluc3RydWN0aW9uIHNjaGVkdWxpbmcpLiBBbHNvIGRlYnVnIGluZm8gZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciAKLWNhbiBzaG93IHN0cmFuZ2UgYmVoYXZpb3IuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGZvciBjb21wbGV4IGV4cHJlc3Npb25zIGUuZy4gaW5zaWRlCi1hbiBpZiBzdGF0ZW1lbnQ6Ci08L3BhcmE+Ci08c2NyZWVuPgotCWlmIChhICZhbXA7JmFtcDsgLi4KLQkgICAgYiAmYW1wOyZhbXA7IC4uCi0JICAgIGMgJmFtcDsmYW1wOykKLTwvc2NyZWVuPgotPHBhcmE+Ci1oZXJlIHRoZSBwcm9ibGVtIGNvbWUgZnJvbSB0aGUgcG9zaXRpb24gb2YgbGluZSBudW1iZXIuIFRoZSBhdmFpbGFibGUgZGVidWcKLWluZm8gZG9lcyBub3QgZ2l2ZSBlbm91Z2ggZGV0YWlscyBmb3IgdGhlIGlmIGNvbmRpdGlvbiwgc28gYWxsIHNhbXBsZXMgYXJlCi1hY2N1bXVsYXRlZCBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIHJpZ2h0IGJyYWNlIG9mIHRoZSBleHByZXNzaW9uLiBVc2luZwotPGNvbW1hbmQ+b3Bhbm5vdGF0ZSA8b3B0aW9uPi1hPC9vcHRpb24+PC9jb21tYW5kPiBjYW4gaGVscCB0byBzaG93IHRoZSByZWFsCi1zYW1wbGVzIGF0IGFuIGFzc2VtYmx5IGxldmVsLgotPC9wYXJhPgotPC9zZWN0Mj4KLTxzZWN0MiBpZD0icHJvbG9ndWVzIj4KLTx0aXRsZT5Qcm9sb2d1ZXMgYW5kIGVwaWxvZ3VlczwvdGl0bGU+Ci08cGFyYT4KLVRoZSBjb21waWxlciBnZW5lcmFsbHkgbmVlZHMgdG8gZ2VuZXJhdGUgImdsdWUiIGNvZGUgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLCBkZXBlbmRlbnQKLW9uIHRoZSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGNhbGwgY29udmVudGlvbnMgdXNlZC4gQWRkaXRpb25hbGx5IG90aGVyIHRoaW5ncwotbmVlZCB0byBoYXBwZW4sIGxpa2Ugc3RhY2sgcG9pbnRlciBhZGp1c3RtZW50IGZvciB0aGUgbG9jYWwgdmFyaWFibGVzOyB0aGlzCi1jb2RlIGlzIGtub3duIGFzIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4gU2ltaWxhciBjb2RlIGlzIG5lZWRlZCBhdCBmdW5jdGlvbiByZXR1cm4sCi1hbmQgaXMga25vd24gYXMgdGhlIGZ1bmN0aW9uIGVwaWxvZ3VlLiBUaGlzIHdpbGwgc2hvdyB1cCBpbiBhbm5vdGF0aW9ucyBhcwotc2FtcGxlcyBhdCB0aGUgdmVyeSBzdGFydCBhbmQgZW5kIG9mIGEgZnVuY3Rpb24sIHdoZXJlIHRoZXJlIGlzIG5vIGFwcGFyZW50Ci1leGVjdXRhYmxlIGNvZGUgaW4gdGhlIHNvdXJjZS4KLTwvcGFyYT4KLTwvc2VjdDI+Ci08c2VjdDIgaWQ9ImlubGluZWQtZnVuY3Rpb24iPgotPHRpdGxlPklubGluZWQgZnVuY3Rpb25zPC90aXRsZT4KLTxwYXJhPgotWW91IG1heSBzZWUgdGhhdCBhIGZ1bmN0aW9uIGlzIGNyZWRpdGVkIHdpdGggYSBjZXJ0YWluIG51bWJlciBvZiBzYW1wbGVzLCBidXQKLXRoZSBsaXN0aW5nIGRvZXMgbm90IGFkZCB1cCB0byB0aGUgY29ycmVjdCB0b3RhbC4gVG8gcGljayBhIHJlYWwgZXhhbXBsZSA6Ci08L3BhcmE+Ci08c2NyZWVuPgotICAgICAgICAgICAgICAgOmludGVybmFsX3NrX2J1ZmZfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IHNrX2J1ZmYgKnNrYikKLSAzNTMgMi4zNDIlICAgIDp7IC8qIGludGVybmFsX3NrX2J1ZmZfYWxsb2Nfc2VjdXJpdHkgdG90YWw6IDE4ODIgMTIuNDglICovCi0gICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAgICA6ICAgICAgICBza19idWZmX3NlY3VyaXR5X3QgKnNrc2VjOwotICAxNSAwLjA5OTUlICAgOiAgICAgICAgaW50IHJjID0gMDsKLSAgICAgICAgICAgICAgIDoKLSAgMTAgMC4wNjYzMyUgIDogICAgICAgIHNrc2VjID0gc2tiLSZndDtsc21fc2VjdXJpdHk7Ci0gNDY4IDMuMTA0JSAgICA6ICAgICAgICBpZiAoc2tzZWMgJmFtcDsmYW1wOyBza3NlYy0mZ3Q7bWFnaWMgPT0gRFNJX01BR0lDKSB7Ci0gICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICAgICAgICAgOiAgICAgICAgfQotICAgICAgICAgICAgICAgOgotICAgICAgICAgICAgICAgOiAgICAgICAgc2tzZWMgPSAoc2tfYnVmZl9zZWN1cml0eV90ICopIGdldF9za19idWZmX21lbW9yeShza2IpOwotICAgMyAwLjAxOTklICAgOiAgICAgICAgaWYgKCFza3NlYykgewotICAzOCAwLjI1MjElICAgOiAgICAgICAgICAgICAgICByYyA9IC1FTk9NRU07Ci0gICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAxMCAwLjA2NjMzJSAgOiAgICAgICAgfQotICAgICAgICAgICAgICAgOiAgICAgICAgbWVtc2V0KHNrc2VjLCAwLCBzaXplb2YgKHNrX2J1ZmZfc2VjdXJpdHlfdCkpOwotICA0NCAwLjI5MTklICAgOiAgICAgICAgc2tzZWMtJmd0O21hZ2ljID0gRFNJX01BR0lDOwotICAzMiAwLjIxMjMlICAgOiAgICAgICAgc2tzZWMtJmd0O3NrYiA9IHNrYjsKLSAgNDUgMC4yOTg1JSAgIDogICAgICAgIHNrc2VjLSZndDtzaWQgPSBEU0lfU0lEX05PUk1BTDsKLSAgMzEgMC4yMDU2JSAgIDogICAgICAgIHNrYi0mZ3Q7bHNtX3NlY3VyaXR5ID0gc2tzZWM7Ci0gICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAgICA6ICAgICAgb3V0OgotICAgICAgICAgICAgICAgOgotIDE0NiAwLjk2ODUlICAgOiAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICAgICAgICAgOgotICA5OCAwLjY1MDElICAgOn0KLTwvc2NyZWVuPgotPHBhcmE+Ci1IZXJlLCB0aGUgZnVuY3Rpb24gaXMgY3JlZGl0ZWQgd2l0aCAxLDg4MiBzYW1wbGVzLCBidXQgdGhlIGFubm90YXRpb25zCi1iZWxvdyBkbyBub3QgYWNjb3VudCBmb3IgdGhpcy4gVGhpcyBpcyB1c3VhbGx5IGJlY2F1c2Ugb2YgaW5saW5lIGZ1bmN0aW9ucyAtCi10aGUgY29tcGlsZXIgbWFya3Mgc3VjaCBjb2RlIHdpdGggZGVidWcgZW50cmllcyBmb3IgdGhlIGlubGluZSBmdW5jdGlvbgotZGVmaW5pdGlvbiwgYW5kIHRoaXMgaXMgd2hlcmUgPGNvbW1hbmQ+b3Bhbm5vdGF0ZTwvY29tbWFuZD4gYW5ub3RhdGVzCi1zdWNoIHNhbXBsZXMuIEluIHRoZSBjYXNlIGFib3ZlLCA8ZnVuY3Rpb24+bWVtc2V0PC9mdW5jdGlvbj4gaXMgdGhlIG1vc3QKLWxpa2VseSBjYW5kaWRhdGUgZm9yIHRoaXMgcHJvYmxlbS4gRXhhbWluaW5nIHRoZSBtaXhlZCBzb3VyY2UvYXNzZW1ibHkKLW91dHB1dCBjYW4gaGVscCBpZGVudGlmeSBzdWNoIHJlc3VsdHMuCi08L3BhcmE+Ci08cGFyYT4KLVdoZW4gcnVubmluZyA8Y29tbWFuZD5vcGFubm90YXRlPC9jb21tYW5kPiwgeW91IG1heSBnZXQgYSB3YXJuaW5nCi0ic29tZSBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBtYXkgaGF2ZSBpbmNvcnJlY3Qgc291cmNlIGxpbmUgYXR0cmlidXRpb25zIi4KLUluIHNvbWUgcmFyZSBjYXNlcywgT1Byb2ZpbGUgaXMgbm90IGFibGUgdG8gdmVyaWZ5IHRoYXQgdGhlIGRlcml2ZWQgc291cmNlIGxpbmUKLWlzIGNvcnJlY3QgKHdoZW4gc29tZSBwYXJ0cyBvZiB0aGUgYmluYXJ5IGltYWdlIGFyZSBjb21waWxlZCB3aXRob3V0IGRlYnVnZ2luZwotaW5mb3JtYXRpb24pLiBCZSB3YXJ5IG9mIHJlc3VsdHMgaWYgdGhpcyB3YXJuaW5nIGFwcGVhcnMuCi08L3BhcmE+Ci08cGFyYT4KLUZ1cnRoZXJtb3JlLCBmb3Igc29tZSBsYW5ndWFnZXMgdGhlIGNvbXBpbGVyIGNhbiBpbXBsaWNpdGx5IGdlbmVyYXRlIGZ1bmN0aW9ucywKLXN1Y2ggYXMgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9ycy4gU3VjaCBmdW5jdGlvbnMgYXJlIGxhYmVsbGVkIGJ5IHRoZSBjb21waWxlcgotYXMgaGF2aW5nIGEgbGluZSBudW1iZXIgb2YgMCwgd2hpY2ggbWVhbnMgdGhlIHNvdXJjZSBhbm5vdGF0aW9uIGNhbiBiZSBjb25mdXNpbmcuCi08L3BhcmE+Ci08IS0tIEZJWE1FIHNvIHdoYXQgKmFjdHVhbGx5KiBoYXBwZW5zIHRvIHRob3NlIHNhbXBsZXMgPyBpZ25vcmVkID8gLS0+Ci08L3NlY3QyPgotPHNlY3QyIGlkPSJ3cm9uZy1saW5lbnItaW5mbyI+Ci08dGl0bGU+SW5hY2N1cmFjeSBpbiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbjwvdGl0bGU+Ci08cGFyYT4KLURlcGVuZGluZyBvbiB5b3VyIGNvbXBpbGVyIHlvdSBjYW4gZmFsbCBpbnRvIHRoZSBmb2xsb3dpbmcgcHJvYmxlbToKLTwvcGFyYT4KLTxzY3JlZW4+Ci1zdHJ1Y3QgYmlnX29iamVjdCB7IGludCBhWzUwMF07IH07Ci0KLWludCBtYWluKCkKLXsKLQliaWdfb2JqZWN0IGEsIGI7Ci0JZm9yIChpbnQgaSA9IDAgOyBpICE9IDEwMDAgKiAxMDAwOyArK2kpCi0JCWIgPSBhOwotCXJldHVybiAwOwotfQotCi08L3NjcmVlbj4KLTxwYXJhPgotQ29tcGlsZWQgd2l0aCA8Y29tbWFuZD5nY2M8L2NvbW1hbmQ+IDMuMC40IHRoZSBhbm5vdGF0ZWQgc291cmNlIGlzIGNsZWFybHkgaW5hY2N1cmF0ZToKLTwvcGFyYT4KLTxzY3JlZW4+Ci0gICAgICAgICAgICAgICA6aW50IG1haW4oKQotICAgICAgICAgICAgICAgOnsgIC8qIG1haW4gdG90YWw6IDc4NzEgMTAwJSAqLwotICAgICAgICAgICAgICAgOiAgICAgICAgYmlnX29iamVjdCBhLCBiOwotICAgICAgICAgICAgICAgOiAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpICE9IDEwMDAgKiAxMDAwOyArK2kpCi0gICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGIgPSBhOwotIDc4NzEgMTAwJSAgICAgOiAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICA6fQotPC9zY3JlZW4+Ci08cGFyYT4KLVRoZSBwcm9ibGVtIGhlcmUgaXMgZGlzdGluY3QgZnJvbSB0aGUgSVJRIGxhdGVuY3kgcHJvYmxlbTsgdGhlIGRlYnVnIGxpbmUgbnVtYmVyCi1pbmZvcm1hdGlvbiBpcyBub3QgcHJlY2lzZSBlbm91Z2g7IGFnYWluLCBsb29raW5nIGF0IG91dHB1dCBvZiA8Y29tbWFuZD5vcGFubm9hdGF0ZSAtYXM8L2NvbW1hbmQ+IGNhbiBoZWxwLgotPC9wYXJhPgotPHNjcmVlbj4KLSAgICAgICAgICAgICAgIDppbnQgbWFpbigpCi0gICAgICAgICAgICAgICA6ewotICAgICAgICAgICAgICAgOiAgICAgICAgYmlnX29iamVjdCBhLCBiOwotICAgICAgICAgICAgICAgOiAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpICE9IDEwMDAgKiAxMDAwOyArK2kpCi0gICAgICAgICAgICAgICA6IDgwNDg0YzA6ICAgICAgIHB1c2ggICAlZWJwCi0gICAgICAgICAgICAgICA6IDgwNDg0YzE6ICAgICAgIG1vdiAgICAlZXNwLCVlYnAKLSAgICAgICAgICAgICAgIDogODA0ODRjMzogICAgICAgc3ViICAgICQweGZhYywlZXNwCi0gICAgICAgICAgICAgICA6IDgwNDg0Yzk6ICAgICAgIHB1c2ggICAlZWRpCi0gICAgICAgICAgICAgICA6IDgwNDg0Y2E6ICAgICAgIHB1c2ggICAlZXNpCi0gICAgICAgICAgICAgICA6IDgwNDg0Y2I6ICAgICAgIHB1c2ggICAlZWJ4Ci0gICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGIgPSBhOwotICAgICAgICAgICAgICAgOiA4MDQ4NGNjOiAgICAgICBsZWEgICAgMHhmZmZmZjA2MCglZWJwKSwlZWR4Ci0gICAgICAgICAgICAgICA6IDgwNDg0ZDI6ICAgICAgIGxlYSAgICAweGZmZmZmODMwKCVlYnApLCVlYXgKLSAgICAgICAgICAgICAgIDogODA0ODRkODogICAgICAgbW92ICAgICQweGY0MjNmLCVlYngKLSAgICAgICAgICAgICAgIDogODA0ODRkZDogICAgICAgbGVhICAgIDB4MCglZXNpKSwlZXNpCi0gICAgICAgICAgICAgICA6ICAgICAgICByZXR1cm4gMDsKLSAgICAzIDAuMDM4MTElIDogODA0ODRlMDogICAgICAgbW92ICAgICVlZHgsJWVkaQotICAgICAgICAgICAgICAgOiA4MDQ4NGUyOiAgICAgICBtb3YgICAgJWVheCwlZXNpCi0gICAgMSAwLjAxMjclICA6IDgwNDg0ZTQ6ICAgICAgIGNsZAotICAgIDggMC4xMDE2JSAgOiA4MDQ4NGU1OiAgICAgICBtb3YgICAgJDB4MWY0LCVlY3gKLSA3ODUwIDk5LjczJSAgIDogODA0ODRlYTogICAgICAgcmVweiBtb3ZzbCAlZHM6KCVlc2kpLCVlczooJWVkaSkKLSAgICA5IDAuMTE0MyUgIDogODA0ODRlYzogICAgICAgZGVjICAgICVlYngKLSAgICAgICAgICAgICAgIDogODA0ODRlZDogICAgICAgam5zICAgIDgwNDg0ZTAKLSAgICAgICAgICAgICAgIDogODA0ODRlZjogICAgICAgeG9yICAgICVlYXgsJWVheAotICAgICAgICAgICAgICAgOiA4MDQ4NGYxOiAgICAgICBwb3AgICAgJWVieAotICAgICAgICAgICAgICAgOiA4MDQ4NGYyOiAgICAgICBwb3AgICAgJWVzaQotICAgICAgICAgICAgICAgOiA4MDQ4NGYzOiAgICAgICBwb3AgICAgJWVkaQotICAgICAgICAgICAgICAgOiA4MDQ4NGY0OiAgICAgICBsZWF2ZQotICAgICAgICAgICAgICAgOiA4MDQ4NGY1OiAgICAgICByZXQKLTwvc2NyZWVuPgotPHBhcmE+Ci1TbyBoZXJlIGl0J3MgY2xlYXIgdGhhdCBjb3B5aW5nIGlzIGNvcnJlY3RseSBjcmVkaXRlZCB3aXRoIG9mIGFsbCB0aGUgc2FtcGxlcywgYnV0IHRoZQotbGluZSBudW1iZXIgaW5mb3JtYXRpb24gaXMgbWlzcGxhY2VkLiA8Y29tbWFuZD5vYmpkdW1wIC1kUzwvY29tbWFuZD4gZXhwb3NlcyB0aGUKLXNhbWUgcHJvYmxlbS4gTm90ZSB0aGF0IG1haW50YWluaW5nIGFjY3VyYXRlIGRlYnVnIGluZm9ybWF0aW9uIGZvciBjb21waWxlcnMgd2hlbiBvcHRpbWl6aW5nIGlzIGRpZmZpY3VsdCwgc28gdGhpcyBwcm9ibGVtIGlzIG5vdCBzdXByaXNpbmcuCi1UaGUgcHJvYmxlbSBvZiBkZWJ1ZyBpbmZvcm1hdGlvbgotYWNjdXJhY3kgaXMgYWxzbyBkZXBlbmRlbnQgb24gdGhlIGJpbnV0aWxzIHZlcnNpb24gdXNlZDsgc29tZSBCRkQgbGlicmFyeSB2ZXJzaW9ucwotY29udGFpbiBhIHdvcmstYXJvdW5kIGZvciBrbm93biBwcm9ibGVtcyBvZiA8Y29tbWFuZD5nY2M8L2NvbW1hbmQ+LCBzb21lIG90aGVycyBkbyBub3QuIFRoaXMgaXMgdW5mb3J0dW5hdGUgYnV0IHdlIG11c3QgbGl2ZSB3aXRoIHRoYXQsCi1zaW5jZSBwcm9maWxpbmcgaXMgcG9pbnRsZXNzIHdoZW4geW91IGRpc2FibGUgb3B0aW1pc2F0aW9uICh3aGljaCB3b3VsZCBnaXZlIGJldHRlciBkZWJ1Z2dpbmcgZW50cmllcykuCi08L3BhcmE+Ci08L3NlY3QyPgotPC9zZWN0MT4KLTxzZWN0MSBpZD0ic3ltYm9sLXdpdGhvdXQtZGVidWctaW5mbyI+Ci08dGl0bGU+QXNzZW1ibHkgZnVuY3Rpb25zPC90aXRsZT4KLTxwYXJhPgotT2Z0ZW4gdGhlIGFzc2VtYmxlciBjYW5ub3QgZ2VuZXJhdGUgZGVidWcgaW5mb3JtYXRpb24gYXV0b21hdGljYWxseS4KLVRoaXMgbWVhbnMgdGhhdCB5b3UgY2Fubm90IGdldCBhIHNvdXJjZSByZXBvcnQgdW5sZXNzIAoteW91IG1hbnVhbGx5IGRlZmluZSB0aGUgbmVjY2Vzc2FyeSBkZWJ1ZyBpbmZvcm1hdGlvbjsgcmVhZCB5b3VyIGFzc2VtYmxlciBkb2N1bWVudGF0aW9uIGZvciBob3cgeW91IG1pZ2h0Ci1kbyB0aGF0LiBUaGUgb25seQotZGVidWdnaW5nIGluZm8gbmVlZGVkIGN1cnJlbnRseSBieSBPUHJvZmlsZSBpcyB0aGUgbGluZS1udW1iZXIvZmlsZW5hbWUtVk1BIGFzc29jaWF0aW9uLiBXaGVuIHByb2ZpbGluZyBhc3NlbWJseQotd2l0aG91dCBkZWJ1Z2dpbmcgaW5mbyB5b3UgY2FuIGFsd2F5cyBnZXQgcmVwb3J0IGZvciBzeW1ib2xzLCBhbmQgb3B0aW9uYWxseSBmb3IgVk1BLCB0aHJvdWdoIDxjb21tYW5kPm9wcmVwb3J0IC1sPC9jb21tYW5kPgotb3IgPGNvbW1hbmQ+b3ByZXBvcnQgLWQ8L2NvbW1hbmQ+LCBidXQgdGhpcyB3b3JrcyBvbmx5IGZvciBzeW1ib2xzIHdpdGggdGhlIHJpZ2h0IGF0dHJpYnV0ZXMuCi1Gb3IgPGNvbW1hbmQ+Z2FzPC9jb21tYW5kPiB5b3UgY2FuIGdldCB0aGlzIGJ5Ci08L3BhcmE+Ci08c2NyZWVuPgotLmdsb2JsIGZvbwotCS50eXBlCWZvbyxAZnVuY3Rpb24KLTwvc2NyZWVuPgotPHBhcmE+IAotd2hpbHN0IGZvciA8Y29tbWFuZD5uYXNtPC9jb21tYW5kPiB5b3UgbXVzdCB1c2UKLTwvcGFyYT4KLTxzY3JlZW4+Ci0JICBHTE9CQUwgZm9vOmZ1bmN0aW9uCQk7IFsxXQotPC9zY3JlZW4+Ci08cGFyYT4KLU5vdGUgdGhhdCBPUHJvZmlsZSBkb2VzIG5vdCBuZWVkIHRoZSBnbG9iYWwgYXR0cmlidXRlLCBvbmx5IHRoZSBmdW5jdGlvbiBhdHRyaWJ1dGUuCi08L3BhcmE+Ci08L3NlY3QxPgotPCEtLSAKLQotRklYTUU6IEkgY29tbWVudGVkIHRoaXMgYml0IG91dCB1bnRpbCB3ZSd2ZSB3cml0dGVuIHNvbWV0aGluZyAuLi4KLQotaW1wcm92ZSB0aGlzID8gYnV0IGxvb2sgZmlyc3Qgd2h5IHRoaXMgZmlsZSBpcyBzcGVjaWFsIAotPHNlY3QyIGlkPSJzbWFsbC1mdW5jdGlvbnMiPgotPHRpdGxlPlNtYWxsIGZ1bmN0aW9uczwvdGl0bGU+Ci08cGFyYT4KLVZlcnkgc21hbGwgZnVuY3Rpb25zIGNhbiBzaG93IHN0cmFuZ2UgYmVoYXZpb3IuIFRoZSBmaWxlIGluIHlvdXIgc291cmNlCi1kaXJlY3Rvcnkgb2YgT1Byb2ZpbGUgPGZpbGVuYW1lPiRTUkMvdGVzdC1vcHJvZmlsZS91bmRlcnN0YW5kaW5nL3B1enpsZS5jPC9maWxlbmFtZT4KLXNob3cgc3VjaCBleGFtcGxlCi08L3BhcmE+Ci08L3NlY3QyPgotLS0+IAotPHNlY3QxIGlkPSJoaWRkZW4tY29zdCI+Ci08dGl0bGU+T3RoZXIgZGlzY3JlcGFuY2llczwvdGl0bGU+Ci08cGFyYT4KLUFub3RoZXIgY2F1c2Ugb2YgYXBwYXJlbnQgcHJvYmxlbXMgaXMgdGhlIGhpZGRlbiBjb3N0IG9mIGluc3RydWN0aW9ucy4gQSB2ZXJ5Ci1jb21tb24gZXhhbXBsZSBpcyB0d28gbWVtb3J5IHJlYWRzOiBvbmUgZnJvbSBMMSBjYWNoZSBhbmQgdGhlIG90aGVyIGZyb20gbWVtb3J5OgotdGhlIHNlY29uZCBtZW1vcnkgcmVhZCBpcyBsaWtlbHkgdG8gaGF2ZSBtb3JlIHNhbXBsZXMuCi1UaGVyZSBhcmUgbWFueSBvdGhlciBjYXVzZXMgb2YgaGlkZGVuIGNvc3Qgb2YgaW5zdHJ1Y3Rpb25zLiBBIG5vbi1leGhhdXN0aXZlCi1saXN0OiBtaXMtcHJlZGljdGVkIGJyYW5jaCwgVExCIGNhY2hlIG1pc3MsIHBhcnRpYWwgcmVnaXN0ZXIgc3RhbGwsCi1wYXJ0aWFsIHJlZ2lzdGVyIGRlcGVuZGVuY2llcywgbWVtb3J5IG1pc21hdGNoIHN0YWxsLCByZS1leGVjdXRlZCC1b3BzLiBJZiB5b3Ugd2FudCB0byB3cml0ZQotcHJvZ3JhbXMgYXQgdGhlIGFzc2VtYmx5IGxldmVsLCBiZSBzdXJlIHRvIHRha2UgYSBsb29rIGF0IHRoZSBJbnRlbCBhbmQKLUFNRCBkb2N1bWVudGF0aW9uIGF0IDx1bGluayB1cmw9Imh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tLyI+aHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vPC91bGluaz4KLWFuZCA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmFtZC5jb20vcHJvZHVjdHMvY3BnL2F0aGxvbi90ZWNoZG9jcy8iPmh0dHA6Ly93d3cuYW1kLmNvbS9wcm9kdWN0cy9jcGcvYXRobG9uL3RlY2hkb2NzLzwvdWxpbms+LgotPC9wYXJhPgotPC9zZWN0MT4KLTwvY2hhcHRlcj4KLQotPGNoYXB0ZXIgaWQ9ImFjayI+Ci08dGl0bGU+QWNrbm93bGVkZ21lbnRzPC90aXRsZT4KLTxwYXJhPgotVGhhbmtzIHRvIChpbiBubyBwYXJ0aWN1bGFyIG9yZGVyKSA6IEFyamFuIHZhbiBkZSBWZW4sIFJpayB2YW4gUmllbCwgSnVhbiBRdWludGVsYSwgUGhpbGlwcGUgRWxpZSwKLVBoaWxsaXBwIFJ1bXBmLCBUaWdyYW4gQWl2YXppYW4sIEFsZXggQnJvd24sIEFsaXNkYWlyIFJhd3N0aG9ybmUsIEJvYiBNb250Z29tZXJ5LCBSYXkgQnJ5YW50LCBILkouIEx1LAotSmVmZiBFc3BlciwgV2lsbCBDb2hlbiwgR3JheWRvbiBIb2FyZSwgQ2xpZmYgV29vbGxleSwgQWxleCBUc2FyaW91bm92LCBBbCBTdG9uZSwgSmFzb24gWWVoLAotUmFuZG9scGggQ2h1bmcsIEFudG9uIEJsYW5jaGFyZCwgUmljaGFyZCBIZW5kZXJzb24sIEFuZHJpZXMgQnJvdXdlciwgQnJ5YW4gUml0dG1leWVyLAotTWF5bmFyZCBQLiBKb2huc29uLAotUmljaGFyZCBSZWljaCAocnJlaWNoQHJkcnRlY2guY29tKSwgWndhbmUgTXdhaWthbWJvLCBEYXZlIEpvbmVzLCBDaGFybGVzIEZpbHRuZXNzOyBhbmQgZmluYWxseSBQdWxwLCBmb3IgIkludHJvIi4KLTwvcGFyYT4KLTwvY2hhcHRlcj4KLQotPC9ib29rPgpkaWZmIC0tZ2l0IGEvZG9jL3NyY2RvYy9Eb3h5ZmlsZS5pbiBiL2RvYy9zcmNkb2MvRG94eWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNzZmZjQuLjAwMDAwMDAKLS0tIGEvZG9jL3NyY2RvYy9Eb3h5ZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0jIERveHlmaWxlIDEuMi4xMy0yMDAyMDIxMAotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEdlbmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QUk9KRUNUX05BTUUgICAgICAgICAgID0gQFBBQ0tBR0VACi1QUk9KRUNUX05VTUJFUiAgICAgICAgID0gQFZFUlNJT05ACi1PVVRQVVRfRElSRUNUT1JZICAgICAgID0KLU9VVFBVVF9MQU5HVUFHRSAgICAgICAgPSBFbmdsaXNoCi1FWFRSQUNUX0FMTCAgICAgICAgICAgID0gWUVTCi1FWFRSQUNUX1BSSVZBVEUgICAgICAgID0gTk8KLUVYVFJBQ1RfU1RBVElDICAgICAgICAgPSBOTwotRVhUUkFDVF9MT0NBTF9DTEFTU0VTICA9IFlFUwotSElERV9VTkRPQ19NRU1CRVJTICAgICA9IE5PCi1ISURFX1VORE9DX0NMQVNTRVMgICAgID0gTk8KLUJSSUVGX01FTUJFUl9ERVNDICAgICAgPSBZRVMKLVJFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMKLUFMV0FZU19ERVRBSUxFRF9TRUMgICAgPSBOTwotSU5MSU5FX0lOSEVSSVRFRF9NRU1CICA9IE5PCi1GVUxMX1BBVEhfTkFNRVMgICAgICAgID0gTk8KLVNUUklQX0ZST01fUEFUSCAgICAgICAgPSAKLUlOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTwotU1RSSVBfQ09ERV9DT01NRU5UUyAgICA9IE5PCi1DQVNFX1NFTlNFX05BTUVTICAgICAgID0gWUVTCi1TSE9SVF9OQU1FUyAgICAgICAgICAgID0gTk8KLUhJREVfU0NPUEVfTkFNRVMgICAgICAgPSBOTwotVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IFlFUwotU0hPV19JTkNMVURFX0ZJTEVTICAgICA9IFlFUwotSkFWQURPQ19BVVRPQlJJRUYgICAgICA9IFlFUwotSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUwotSU5MSU5FX0lORk8gICAgICAgICAgICA9IFlFUwotU09SVF9NRU1CRVJfRE9DUyAgICAgICA9IFlFUwotRElTVFJJQlVURV9HUk9VUF9ET0MgICA9IE5PCi1UQUJfU0laRSAgICAgICAgICAgICAgID0gOAotR0VORVJBVEVfVE9ET0xJU1QgICAgICA9IE5PCi1HRU5FUkFURV9URVNUTElTVCAgICAgID0gTk8KLUdFTkVSQVRFX0JVR0xJU1QgICAgICAgPSBOTwotQUxJQVNFUyAgICAgICAgICAgICAgICA9IAotRU5BQkxFRF9TRUNUSU9OUyAgICAgICA9IAotTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCi1PUFRJTUlaRV9PVVRQVVRfRk9SX0MgID0gTk8KLU9QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTwotU0hPV19VU0VEX0ZJTEVTICAgICAgICA9IFlFUwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUVVJRVQgICAgICAgICAgICAgICAgICA9IE5PCi1XQVJOSU5HUyAgICAgICAgICAgICAgID0gWUVTCi1XQVJOX0lGX1VORE9DVU1FTlRFRCAgID0gWUVTCi1XQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKLVdBUk5fTE9HRklMRSAgICAgICAgICAgPSAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JTlBVVCAgICAgICAgICAgICAgICAgID0gLi4vLi4vCi1GSUxFX1BBVFRFUk5TICAgICAgICAgID0gKi5jcHAgKi5jICouaAotUkVDVVJTSVZFICAgICAgICAgICAgICA9IFlFUwotRVhDTFVERSAgICAgICAgICAgICAgICA9IC4uLy4uL21vZHVsZQotRVhDTFVERV9TWU1MSU5LUyAgICAgICA9IE5PCi1FWENMVURFX1BBVFRFUk5TICAgICAgID0gKi5tb2MuY3BwICoubW9jLmggb3Byb2Zfc3RhcnQuYmFzZS5jcHAKLUVYQU1QTEVfUEFUSCAgICAgICAgICAgPSAKLUVYQU1QTEVfUEFUVEVSTlMgICAgICAgPSAKLUVYQU1QTEVfUkVDVVJTSVZFICAgICAgPSBOTwotSU1BR0VfUEFUSCAgICAgICAgICAgICA9IAotSU5QVVRfRklMVEVSICAgICAgICAgICA9IAotRklMVEVSX1NPVVJDRV9GSUxFUyAgICA9IE5PCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU09VUkNFX0JST1dTRVIgICAgICAgICA9IE5PCi1JTkxJTkVfU09VUkNFUyAgICAgICAgID0gTk8KLVJFRkVSRU5DRURfQllfUkVMQVRJT04gPSBZRVMKLVJFRkVSRU5DRVNfUkVMQVRJT04gICAgPSBZRVMKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGFscGhhYmV0aWNhbCBjbGFzcyBpbmRleAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUxQSEFCRVRJQ0FMX0lOREVYICAgICA9IE5PCi1DT0xTX0lOX0FMUEhBX0lOREVYICAgID0gNQotSUdOT1JFX1BSRUZJWCAgICAgICAgICA9IAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgSFRNTCBvdXRwdXQKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUdFTkVSQVRFX0hUTUwgICAgICAgICAgPSBZRVMKLUhUTUxfT1VUUFVUICAgICAgICAgICAgPSBodG1sCi1IVE1MX0ZJTEVfRVhURU5TSU9OICAgID0gLmh0bWwKLUhUTUxfSEVBREVSICAgICAgICAgICAgPSAKLUhUTUxfRk9PVEVSICAgICAgICAgICAgPSAKLUhUTUxfU1RZTEVTSEVFVCAgICAgICAgPSAKLUhUTUxfQUxJR05fTUVNQkVSUyAgICAgPSBZRVMKLUdFTkVSQVRFX0hUTUxIRUxQICAgICAgPSBOTwotR0VORVJBVEVfQ0hJICAgICAgICAgICA9IE5PCi1CSU5BUllfVE9DICAgICAgICAgICAgID0gTk8KLVRPQ19FWFBBTkQgICAgICAgICAgICAgPSBOTwotRElTQUJMRV9JTkRFWCAgICAgICAgICA9IE5PCi1FTlVNX1ZBTFVFU19QRVJfTElORSAgID0gNAotR0VORVJBVEVfVFJFRVZJRVcgICAgICA9IE5PCi1UUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUdFTkVSQVRFX0xBVEVYICAgICAgICAgPSBOTwotTEFURVhfT1VUUFVUICAgICAgICAgICA9IGxhdGV4Ci1MQVRFWF9DTURfTkFNRSAgICAgICAgID0gbGF0ZXgKLU1BS0VJTkRFWF9DTURfTkFNRSAgICAgPSBtYWtlaW5kZXgKLUNPTVBBQ1RfTEFURVggICAgICAgICAgPSBOTwotUEFQRVJfVFlQRSAgICAgICAgICAgICA9IGE0d2lkZQotRVhUUkFfUEFDS0FHRVMgICAgICAgICA9IAotTEFURVhfSEVBREVSICAgICAgICAgICA9IAotUERGX0hZUEVSTElOS1MgICAgICAgICA9IE5PCi1VU0VfUERGTEFURVggICAgICAgICAgID0gTk8KLUxBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUlRGIG91dHB1dAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotR0VORVJBVEVfUlRGICAgICAgICAgICA9IE5PCi1SVEZfT1VUUFVUICAgICAgICAgICAgID0gcnRmCi1DT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KLVJURl9IWVBFUkxJTktTICAgICAgICAgPSBOTwotUlRGX1NUWUxFU0hFRVRfRklMRSAgICA9IAotUlRGX0VYVEVOU0lPTlNfRklMRSAgICA9IAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbWFuIHBhZ2Ugb3V0cHV0Ci0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HRU5FUkFURV9NQU4gICAgICAgICAgID0gTk8KLU1BTl9PVVRQVVQgICAgICAgICAgICAgPSBtYW4KLU1BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMwotTUFOX0xJTktTICAgICAgICAgICAgICA9IE5PCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBYTUwgb3V0cHV0Ci0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQXV0b0dlbiBEZWZpbml0aW9ucyBvdXRwdXQKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUdFTkVSQVRFX0FVVE9HRU5fREVGICAgPSBOTwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJlcHJvY2Vzc29yICAgCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FTkFCTEVfUFJFUFJPQ0VTU0lORyAgID0gWUVTCi1NQUNST19FWFBBTlNJT04gICAgICAgID0gWUVTCi1FWFBBTkRfT05MWV9QUkVERUYgICAgID0gWUVTCi1TRUFSQ0hfSU5DTFVERVMgICAgICAgID0gWUVTCi1JTkNMVURFX1BBVEggICAgICAgICAgID0gCi1JTkNMVURFX0ZJTEVfUEFUVEVSTlMgID0gCi1QUkVERUZJTkVEICAgICAgICAgICAgID0gCi1FWFBBTkRfQVNfREVGSU5FRCAgICAgID0gCi1TS0lQX0ZVTkNUSU9OX01BQ1JPUyAgID0gWUVTCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbmZpZ3VyYXRpb246OmFkZHRpb25zIHJlbGF0ZWQgdG8gZXh0ZXJuYWwgcmVmZXJlbmNlcyAgIAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVEFHRklMRVMgICAgICAgICAgICAgICA9IAotR0VORVJBVEVfVEFHRklMRSAgICAgICA9IAotQUxMRVhURVJOQUxTICAgICAgICAgICA9IE5PCi1FWFRFUk5BTF9HUk9VUFMgICAgICAgID0gWUVTCi1QRVJMX1BBVEggICAgICAgICAgICAgID0gL3Vzci9iaW4vcGVybAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZG90IHRvb2wgICAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNMQVNTX0RJQUdSQU1TICAgICAgICAgPSBZRVMKLUhBVkVfRE9UICAgICAgICAgICAgICAgPSBZRVMKLUNMQVNTX0dSQVBIICAgICAgICAgICAgPSBZRVMKLUNPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKLVRFTVBMQVRFX1JFTEFUSU9OUyAgICAgPSBZRVMKLUhJREVfVU5ET0NfUkVMQVRJT05TICAgPSBZRVMKLUlOQ0xVREVfR1JBUEggICAgICAgICAgPSBZRVMKLUlOQ0xVREVEX0JZX0dSQVBIICAgICAgPSBZRVMKLUdSQVBISUNBTF9ISUVSQVJDSFkgICAgPSBZRVMKLURPVF9JTUFHRV9GT1JNQVQgICAgICAgPSBwbmcKLURPVF9QQVRIICAgICAgICAgICAgICAgPSAKLURPVEZJTEVfRElSUyAgICAgICAgICAgPSAKLU1BWF9ET1RfR1JBUEhfV0lEVEggICAgPSAxMDI0Ci1NQVhfRE9UX0dSQVBIX0hFSUdIVCAgID0gMTAyNAotR0VORVJBVEVfTEVHRU5EICAgICAgICA9IFlFUwotRE9UX0NMRUFOVVAgICAgICAgICAgICA9IFlFUwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb25maWd1cmF0aW9uOjphZGRpdGlvbnMgcmVsYXRlZCB0byB0aGUgc2VhcmNoIGVuZ2luZSAgIAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU0VBUkNIRU5HSU5FICAgICAgICAgICA9IE5PCi0jQ0dJX05BTUUgICAgICAgICAgICAgICA9IHNlYXJjaC5jZ2kKLSNDR0lfVVJMICAgICAgICAgICAgICAgID0gCi0jRE9DX1VSTCAgICAgICAgICAgICAgICA9IAotI0RPQ19BQlNQQVRIICAgICAgICAgICAgPSAKLSNCSU5fQUJTUEFUSCAgICAgICAgICAgID0gL3Vzci9sb2NhbC9iaW4vCi0jRVhUX0RPQ19QQVRIUyAgICAgICAgICA9IApkaWZmIC0tZ2l0IGEvZG9jL3NyY2RvYy9NYWtlZmlsZSBiL2RvYy9zcmNkb2MvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NDg2NjkuLjAwMDAwMDAKLS0tIGEvZG9jL3NyY2RvYy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotRE9YWUdFTj1kb3h5Z2VuCi0KLS5QSE9OWTogY2xlYW4KLQotYWxsOiBjbGVhbgotCWRveHlnZW4gRG94eWZpbGUKLQotY2xlYW46Ci0Jcm0gLXJmIGh0bWwvCmRpZmYgLS1naXQgYS9kb2MveHNsL2NhdGFsb2ctMS54bWwuaW4gYi9kb2MveHNsL2NhdGFsb2ctMS54bWwuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYjZlN2EuLjAwMDAwMDAKLS0tIGEvZG9jL3hzbC9jYXRhbG9nLTEueG1sLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLQkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci0KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLQk8bmV4dENhdGFsb2cgY2F0YWxvZz0iQFhNTF9DQVRBTE9HQCIgLz4KLQotCUBDQVRfRU5UUllfU1RBUlRACi0JPHVyaSBuYW1lPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC94aHRtbC9kb2Nib29rLnhzbCIKLQkJdXJpPSJARE9DQk9PS19ST09UQC94aHRtbC9kb2Nib29rLnhzbCIvPgotCTx1cmkgbmFtZT0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQveGh0bWwvY2h1bmsueHNsIgotCQl1cmk9IkBET0NCT09LX1JPT1RAL3hodG1sL2NodW5rLnhzbCIvPgotCUBDQVRfRU5UUllfRU5EQAotCi0JPHVyaSBuYW1lPSJ4c2wveGh0bWwtY29tbW9uLnhzbCIgdXJpPSJAdG9wX3NyY2RpckAvZG9jL3hzbC94aHRtbC1jb21tb24ueHNsIi8+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS9kb2MveHNsL3hodG1sLWNodW5rLnhzbCBiL2RvYy94c2wveGh0bWwtY2h1bmsueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzMyMGU4Li4wMDAwMDAwCi0tLSBhL2RvYy94c2wveGh0bWwtY2h1bmsueHNsCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gdmVyc2lvbj0iMS4wIj4KLTx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L3hodG1sL2NodW5rLnhzbCIvPgotPHhzbDppbXBvcnQgaHJlZj0ieGh0bWwtY29tbW9uLnhzbCIvPgotIAotPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwcm9jZXNzLWNodW5rIj4KLSAgPHhzbDpwYXJhbSBuYW1lPSJwcmV2IiBzZWxlY3Q9Ii4iLz4KLSAgPHhzbDpwYXJhbSBuYW1lPSJuZXh0IiBzZWxlY3Q9Ii4iLz4KLSAKLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpc2NodW5rIj4KLSAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2h1bmsiLz4KLSAgPC94c2w6dmFyaWFibGU+Ci0gCi0gIDx4c2w6dmFyaWFibGUgbmFtZT0iY2h1bmtmbiI+Ci0gICAgPHhzbDppZiB0ZXN0PSIkaXNjaHVuaz0nMSciPgotICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2h1bmstZmlsZW5hbWUiIHNlbGVjdD0iLiIvPgotICAgIDwveHNsOmlmPgotICA8L3hzbDp2YXJpYWJsZT4KLSAKLSAgPHhzbDppZiB0ZXN0PSIkaXNjaHVuaz0nMCciPgotICAgIDx4c2w6bWVzc2FnZT4KLSAgICAgIDx4c2w6dGV4dD5FcnJvciA8L3hzbDp0ZXh0PgotICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUoLikiLz4KLSAgICAgIDx4c2w6dGV4dD4gaXMgbm90IGEgY2h1bmshPC94c2w6dGV4dD4KLSAgICA8L3hzbDptZXNzYWdlPgotICA8L3hzbDppZj4KLSAKLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmaWxlbmFtZSI+Ci0gICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1ha2UtcmVsYXRpdmUtZmlsZW5hbWUiPgotICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IiRiYXNlLmRpciIvPgotICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJhc2UubmFtZSIgc2VsZWN0PSIkY2h1bmtmbiIvPgotICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+Ci0gIDwveHNsOnZhcmlhYmxlPgotIAotPCEtLSBGSVhNRTogdXNlIFN0cmljdCB3aGVuIHRoZSBwcm9ibGVtcyB3aXRoIHdpZHRoIG9uIHRkL3RoIGFyZQotICBzb3J0ZWQgb3V0LiBOb3QgeWV0LiAtLT4KLSAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9IndyaXRlLmNodW5rLndpdGguZG9jdHlwZSI+Ci0gICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImZpbGVuYW1lIiBzZWxlY3Q9IiRmaWxlbmFtZSIvPgotICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJpbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KLSAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJkb2N0eXBlLXB1YmxpYyI+LS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU48L3hzbDp3aXRoLXBhcmFtPgotICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImRvY3R5cGUtc3lzdGVtIj5odHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkPC94c2w6d2l0aC1wYXJhbT4KLSAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29udGVudCI+Ci0gICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2h1bmstZWxlbWVudC1jb250ZW50Ij4KLSAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InByZXYiIHNlbGVjdD0iJHByZXYiLz4KLSAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5leHQiIHNlbGVjdD0iJG5leHQiLz4KLSAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+Ci0gICAgPC94c2w6d2l0aC1wYXJhbT4KLSAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KLTwveHNsOnRlbXBsYXRlPgotIAotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvYy94c2wveGh0bWwtY29tbW9uLnhzbCBiL2RvYy94c2wveGh0bWwtY29tbW9uLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlmMmJmNy4uMDAwMDAwMAotLS0gYS9kb2MveHNsL3hodG1sLWNvbW1vbi54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gdmVyc2lvbj0iMS4wIj4KLQotPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgotPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIi8+Ci08eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiLz4KLTx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9IicnIi8+Ci0gCi08eHNsOnBhcmFtIG5hbWU9InZlcnNpb24iLz4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9Im9wcm9maWxldmVyc2lvbiI+Ci0gIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdmVyc2lvbiIvPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwhLS0gQ3VzdG9tIHRlbXBsYXRlIGZvciBwcm9ncmFtbGlzdGluZywgc2NyZWVuIGFuZCBzeW5vcHNpcyB0byBnZW5lcmF0ZSBhIGdyYXkKLSAgICAgYmFja2dyb3VuZCB0byB0aGUgaXRlbS4gLS0+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJwcm9ncmFtbGlzdGluZ3xzY3JlZW58c3lub3BzaXMiPgotICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLW51bWJlcnMiIHNlbGVjdD0iJzAnIi8+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0idmVuZG9yIiBzZWxlY3Q9InN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpIi8+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iaWQiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJvYmplY3QuaWQiLz48L3hzbDp2YXJpYWJsZT4KLSAKLSAgPHhzbDppZiB0ZXN0PSJAaWQiPgotICAgIDxhIGhyZWY9InskaWR9Ii8+Ci0gIDwveHNsOmlmPgotIAotICA8eHNsOmNob29zZT4KLSAgICA8eHNsOndoZW4gdGVzdD0iJHN1cHByZXNzLW51bWJlcnMgPSAnMCcKLSAgICAgICAgICAgICAgICAgICAgYW5kIEBsaW5lbnVtYmVyaW5nID0gJ251bWJlcmVkJwotICAgICAgICAgICAgICAgICAgICBhbmQgJHVzZS5leHRlbnNpb25zICE9ICcwJwotICAgICAgICAgICAgICAgICAgICBhbmQgJGxpbmVudW1iZXJpbmcuZXh0ZW5zaW9uICE9ICcwJyI+Ci0gICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJ0ZiI+Ci0gICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KLSAgICAgIDwveHNsOnZhcmlhYmxlPgotICAgICAgPCEtLSBDaGFuZ2UgdGhlIGNvbG9yIGJhY2tncm91bmQgY29sb3IgaW4gdGhlIGxpbmUgYmVsb3cuIC0tPgotICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KLSAgICAgIDx0cj48dGQ+Ci0gICAgICA8cHJlIGNsYXNzPSJ7bmFtZSguKX0iPgotICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibnVtYmVyLnJ0Zi5saW5lcyI+Ci0gICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJ0ZiIgc2VsZWN0PSIkcnRmIi8+Ci0gICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+Ci0gICAgICA8L3ByZT4KLSAgICAgIDwvdGQ+PC90cj48L3RhYmxlPgotICAgIDwveHNsOndoZW4+Ci0gICAgPHhzbDpvdGhlcndpc2U+Ci0gICAgICA8IS0tIENoYW5nZSB0aGUgY29sb3IgYmFja2dyb3VuZCBjb2xvciBpbiB0aGUgbGluZSBiZWxvdy4gLS0+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgotICAgICAgPHRyPjx0ZD4KLSAgICAgIDxwcmUgY2xhc3M9IntuYW1lKC4pfSI+Ci0gICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KLSAgICAgIDwvcHJlPgotICAgICAgPC90ZD48L3RyPjwvdGFibGU+Ci0gICAgPC94c2w6b3RoZXJ3aXNlPgotICA8L3hzbDpjaG9vc2U+Ci08L3hzbDp0ZW1wbGF0ZT4gCi0gCi08L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvZG9jL3hzbC94aHRtbC54c2wgYi9kb2MveHNsL3hodG1sLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEyMTdhNi4uMDAwMDAwMAotLS0gYS9kb2MveHNsL3hodG1sLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCc/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgoteG1sbnM6ZG9jPSJodHRwOi8vbndhbHNoLmNvbS94c2wvZG9jdW1lbnRhdGlvbi8xLjAiIHZlcnNpb249IjEuMCI+Ci0gCi08eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC94aHRtbC9kb2Nib29rLnhzbCIvPgotPHhzbDppbXBvcnQgaHJlZj0ieGh0bWwtY29tbW9uLnhzbCIvPgotIAotPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIGVuY29kaW5nPSJJU08tODg1OS0xIiBpbmRlbnQ9InllcyIKLWRvY3R5cGUtcHVibGljPSItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKLWRvY3R5cGUtc3lzdGVtPSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIgotLz4KLSAKLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9ldmVudHMvTWFrZWZpbGUuYW0gYi9ldmVudHMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMjcyNDQuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotZXZlbnRfZmlsZXMgPSBcCi0JYWxwaGEvZXY0L2V2ZW50cyBhbHBoYS9ldjQvdW5pdF9tYXNrcyBcCi0JYWxwaGEvZXY1L2V2ZW50cyBhbHBoYS9ldjUvdW5pdF9tYXNrcyBcCi0JYWxwaGEvZXY2Ny9ldmVudHMgYWxwaGEvZXY2Ny91bml0X21hc2tzIFwKLQlhbHBoYS9ldjYvZXZlbnRzIGFscGhhL2V2Ni91bml0X21hc2tzIFwKLQlhbHBoYS9wY2E1Ni9ldmVudHMgYWxwaGEvcGNhNTYvdW5pdF9tYXNrcyBcCi0JaTM4Ni9hdGhsb24vZXZlbnRzIGkzODYvYXRobG9uL3VuaXRfbWFza3MgXAotCWkzODYvcDQvZXZlbnRzIGkzODYvcDQtaHQvZXZlbnRzIFwKLQlpMzg2L3A0LWh0L3VuaXRfbWFza3MgaTM4Ni9wNC91bml0X21hc2tzIFwKLQlpMzg2L3BpaS9ldmVudHMgaTM4Ni9waWkvdW5pdF9tYXNrcyBcCi0JaTM4Ni9waWlpL2V2ZW50cyBpMzg2L3BpaWkvdW5pdF9tYXNrcyBcCi0JaTM4Ni9wcHJvL2V2ZW50cyBpMzg2L3Bwcm8vdW5pdF9tYXNrcyBcCi0JaTM4Ni9wNl9tb2JpbGUvZXZlbnRzIGkzODYvcDZfbW9iaWxlL3VuaXRfbWFza3MgXAotCWlhNjQvaWE2NC9ldmVudHMgaWE2NC9pYTY0L3VuaXRfbWFza3MgXAotCWlhNjQvaXRhbml1bTIvZXZlbnRzIGlhNjQvaXRhbml1bTIvdW5pdF9tYXNrcyBcCi0JaWE2NC9pdGFuaXVtL2V2ZW50cyBpYTY0L2l0YW5pdW0vdW5pdF9tYXNrcyBcCi0JcHBjNjQvcG93ZXI0L2V2ZW50cyBwcGM2NC9wb3dlcjQvZXZlbnRfbWFwcGluZ3MgcHBjNjQvcG93ZXI0L3VuaXRfbWFza3MgXAotCXBwYzY0L3Bvd2VyNS9ldmVudHMgcHBjNjQvcG93ZXI1L2V2ZW50X21hcHBpbmdzIHBwYzY0L3Bvd2VyNS91bml0X21hc2tzIFwKLQlwcGM2NC85NzAvZXZlbnRzIHBwYzY0Lzk3MC9ldmVudF9tYXBwaW5ncyBwcGM2NC85NzAvdW5pdF9tYXNrcyBcCi0JcnRjL2V2ZW50cyBydGMvdW5pdF9tYXNrcyBcCi0JeDg2LTY0L2hhbW1lci9ldmVudHMgeDg2LTY0L2hhbW1lci91bml0X21hc2tzIFwKLQlhcm0veHNjYWxlMS9ldmVudHMgYXJtL3hzY2FsZTEvdW5pdF9tYXNrcyBcCi0JYXJtL3hzY2FsZTIvZXZlbnRzIGFybS94c2NhbGUyL3VuaXRfbWFza3MgXAotCW1pcHMvMjRLL2V2ZW50cyBtaXBzLzI0Sy91bml0X21hc2tzIFwKLQltaXBzL3JtNzAwMC9ldmVudHMgbWlwcy9ybTcwMDAvdW5pdF9tYXNrcyBcCi0JbWlwcy9ybTkwMDAvZXZlbnRzIG1pcHMvcm05MDAwL3VuaXRfbWFza3MgXAotCW1pcHMvc2IxL2V2ZW50cyBtaXBzL3NiMS91bml0X21hc2tzIFwKLQltaXBzL3IxMDAwMC9ldmVudHMgbWlwcy9yMTAwMDAvdW5pdF9tYXNrcyBcCi0JbWlwcy9yMTIwMDAvZXZlbnRzIG1pcHMvcjEyMDAwL3VuaXRfbWFza3MgXAotCW1pcHMvdnI1NDMyL2V2ZW50cyBtaXBzL3ZyNTQzMi91bml0X21hc2tzIFwKLQltaXBzL3ZyNTUwMC9ldmVudHMgbWlwcy92cjU1MDAvdW5pdF9tYXNrcyBcCi0JcHBjL2U1MDAvZXZlbnRzIHBwYy9lNTAwL3VuaXRfbWFza3MKLQotaW5zdGFsbC1kYXRhLWxvY2FsOgotCWZvciBpIGluICR7ZXZlbnRfZmlsZXN9IDsgZG8gXAotCQlkaXI9YGRpcm5hbWUgJCRpYCA7IFwKLQkJbWtkaXIgLXAgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRkaXIgOyBcCi0JCSQoSU5TVEFMTF9EQVRBKSAkKHRvcF9zcmNkaXIpL2V2ZW50cy8kJGkgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRpIDsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWxvY2FsOgotCWZvciBpIGluICR7ZXZlbnRfZmlsZXN9IDsgZG8gXAotCQlkaXI9YGRpcm5hbWUgJCRpYCA7IFwKLQkJYXJjaGRpcj1gZGlybmFtZSAkJGRpcmAgOyBcCi0JCWlmIHRlc3QgLWYgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRpIDsgdGhlbiBcCi0JCQlybSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGkgOyBcCi0JCWZpOyAgXAotCQlpZiB0ZXN0IC1kICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkZGlyIDsgdGhlbiBcCi0JCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGRpciA7IFwKLQkJZmk7IFwKLQkJaWYgdGVzdCAkJGFyY2hkaXIgIT0gIi4iIC1hIC1kICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkYXJjaGRpciA7IHRoZW4gXAotCQkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRhcmNoZGlyIDsgXAotCQlmaTsgXAotCWRvbmUKLQotRVhUUkFfRElTVCA9ICQoZXZlbnRfZmlsZXMpCmRpZmYgLS1naXQgYS9ldmVudHMvTWFrZWZpbGUuaW4gYi9ldmVudHMvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZDdiYmUuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzkyICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS41IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSBASU5TVEFMTEAKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLXN1YmRpciA9IGV2ZW50cwotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1PQyA9IEBNT0NACi1NT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACi1PQkpFWFQgPSBAT0JKRVhUQAotT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKLU9QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAotT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLU9QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBPUFRfTElCUyA9IEBQT1BUX0xJQlNACi1QVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKLVFUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAotUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAotUVRfTElCID0gQFFUX0xJQkAKLVFUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACi1TVFJJUCA9IEBTVFJJUEAKLVVJQyA9IEBVSUNACi1WRVJTSU9OID0gQFZFUlNJT05ACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACi1YX0xJQlMgPSBAWF9MSUJTQAotWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1kYXRhZGlyID0gQGRhdGFkaXJACi1lbmFibGVfYWJpX0ZBTFNFID0gQGVuYWJsZV9hYmlfRkFMU0VACi1lbmFibGVfYWJpX1RSVUUgPSBAZW5hYmxlX2FiaV9UUlVFQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1oYXZlX3F0X0ZBTFNFID0gQGhhdmVfcXRfRkFMU0VACi1oYXZlX3F0X1RSVUUgPSBAaGF2ZV9xdF9UUlVFQAotaGF2ZV94c2x0cHJvY19GQUxTRSA9IEBoYXZlX3hzbHRwcm9jX0ZBTFNFQAotaGF2ZV94c2x0cHJvY19UUlVFID0gQGhhdmVfeHNsdHByb2NfVFJVRUAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWtlcm5lbF9zdXBwb3J0X0ZBTFNFID0gQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAota2VybmVsX3N1cHBvcnRfVFJVRSA9IEBrZXJuZWxfc3VwcG9ydF9UUlVFQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdG9wZGlyID0gQHRvcGRpckAKLWV2ZW50X2ZpbGVzID0gXAotCWFscGhhL2V2NC9ldmVudHMgYWxwaGEvZXY0L3VuaXRfbWFza3MgXAotCWFscGhhL2V2NS9ldmVudHMgYWxwaGEvZXY1L3VuaXRfbWFza3MgXAotCWFscGhhL2V2NjcvZXZlbnRzIGFscGhhL2V2NjcvdW5pdF9tYXNrcyBcCi0JYWxwaGEvZXY2L2V2ZW50cyBhbHBoYS9ldjYvdW5pdF9tYXNrcyBcCi0JYWxwaGEvcGNhNTYvZXZlbnRzIGFscGhhL3BjYTU2L3VuaXRfbWFza3MgXAotCWkzODYvYXRobG9uL2V2ZW50cyBpMzg2L2F0aGxvbi91bml0X21hc2tzIFwKLQlpMzg2L3A0L2V2ZW50cyBpMzg2L3A0LWh0L2V2ZW50cyBcCi0JaTM4Ni9wNC1odC91bml0X21hc2tzIGkzODYvcDQvdW5pdF9tYXNrcyBcCi0JaTM4Ni9waWkvZXZlbnRzIGkzODYvcGlpL3VuaXRfbWFza3MgXAotCWkzODYvcGlpaS9ldmVudHMgaTM4Ni9waWlpL3VuaXRfbWFza3MgXAotCWkzODYvcHByby9ldmVudHMgaTM4Ni9wcHJvL3VuaXRfbWFza3MgXAotCWkzODYvcDZfbW9iaWxlL2V2ZW50cyBpMzg2L3A2X21vYmlsZS91bml0X21hc2tzIFwKLQlpYTY0L2lhNjQvZXZlbnRzIGlhNjQvaWE2NC91bml0X21hc2tzIFwKLQlpYTY0L2l0YW5pdW0yL2V2ZW50cyBpYTY0L2l0YW5pdW0yL3VuaXRfbWFza3MgXAotCWlhNjQvaXRhbml1bS9ldmVudHMgaWE2NC9pdGFuaXVtL3VuaXRfbWFza3MgXAotCXBwYzY0L3Bvd2VyNC9ldmVudHMgcHBjNjQvcG93ZXI0L2V2ZW50X21hcHBpbmdzIHBwYzY0L3Bvd2VyNC91bml0X21hc2tzIFwKLQlwcGM2NC9wb3dlcjUvZXZlbnRzIHBwYzY0L3Bvd2VyNS9ldmVudF9tYXBwaW5ncyBwcGM2NC9wb3dlcjUvdW5pdF9tYXNrcyBcCi0JcHBjNjQvOTcwL2V2ZW50cyBwcGM2NC85NzAvZXZlbnRfbWFwcGluZ3MgcHBjNjQvOTcwL3VuaXRfbWFza3MgXAotCXJ0Yy9ldmVudHMgcnRjL3VuaXRfbWFza3MgXAotCXg4Ni02NC9oYW1tZXIvZXZlbnRzIHg4Ni02NC9oYW1tZXIvdW5pdF9tYXNrcyBcCi0JYXJtL3hzY2FsZTEvZXZlbnRzIGFybS94c2NhbGUxL3VuaXRfbWFza3MgXAotCWFybS94c2NhbGUyL2V2ZW50cyBhcm0veHNjYWxlMi91bml0X21hc2tzIFwKLQltaXBzLzI0Sy9ldmVudHMgbWlwcy8yNEsvdW5pdF9tYXNrcyBcCi0JbWlwcy9ybTcwMDAvZXZlbnRzIG1pcHMvcm03MDAwL3VuaXRfbWFza3MgXAotCW1pcHMvcm05MDAwL2V2ZW50cyBtaXBzL3JtOTAwMC91bml0X21hc2tzIFwKLQltaXBzL3NiMS9ldmVudHMgbWlwcy9zYjEvdW5pdF9tYXNrcyBcCi0JbWlwcy9yMTAwMDAvZXZlbnRzIG1pcHMvcjEwMDAwL3VuaXRfbWFza3MgXAotCW1pcHMvcjEyMDAwL2V2ZW50cyBtaXBzL3IxMjAwMC91bml0X21hc2tzIFwKLQltaXBzL3ZyNTQzMi9ldmVudHMgbWlwcy92cjU0MzIvdW5pdF9tYXNrcyBcCi0JbWlwcy92cjU1MDAvZXZlbnRzIG1pcHMvdnI1NTAwL3VuaXRfbWFza3MgXAotCXBwYy9lNTAwL2V2ZW50cyBwcGMvZTUwMC91bml0X21hc2tzCi0KLUVYVFJBX0RJU1QgPSAkKGV2ZW50X2ZpbGVzKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZXZlbnRzL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBldmVudHMvTWFrZWZpbGUKLS5QUkVDSU9VUzogTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi11bmluc3RhbGwtaW5mby1hbToKLXRhZ3M6IFRBR1MKLVRBR1M6Ci0KLWN0YWdzOiBDVEFHUwotQ1RBR1M6Ci0KLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JJChta2Rpcl9wKSAkKGRpc3RkaXIpL2FscGhhL2V2NCAkKGRpc3RkaXIpL2FscGhhL2V2NSAkKGRpc3RkaXIpL2FscGhhL2V2NiAkKGRpc3RkaXIpL2FscGhhL2V2NjcgJChkaXN0ZGlyKS9hbHBoYS9wY2E1NiAkKGRpc3RkaXIpL2FybS94c2NhbGUxICQoZGlzdGRpcikvYXJtL3hzY2FsZTIgJChkaXN0ZGlyKS9pMzg2L2F0aGxvbiAkKGRpc3RkaXIpL2kzODYvcDQgJChkaXN0ZGlyKS9pMzg2L3A0LWh0ICQoZGlzdGRpcikvaTM4Ni9wNl9tb2JpbGUgJChkaXN0ZGlyKS9pMzg2L3BpaSAkKGRpc3RkaXIpL2kzODYvcGlpaSAkKGRpc3RkaXIpL2kzODYvcHBybyAkKGRpc3RkaXIpL2lhNjQvaWE2NCAkKGRpc3RkaXIpL2lhNjQvaXRhbml1bSAkKGRpc3RkaXIpL2lhNjQvaXRhbml1bTIgJChkaXN0ZGlyKS9taXBzLzI0SyAkKGRpc3RkaXIpL21pcHMvcjEwMDAwICQoZGlzdGRpcikvbWlwcy9yMTIwMDAgJChkaXN0ZGlyKS9taXBzL3JtNzAwMCAkKGRpc3RkaXIpL21pcHMvcm05MDAwICQoZGlzdGRpcikvbWlwcy9zYjEgJChkaXN0ZGlyKS9taXBzL3ZyNTQzMiAkKGRpc3RkaXIpL21pcHMvdnI1NTAwICQoZGlzdGRpcikvcHBjL2U1MDAgJChkaXN0ZGlyKS9wcGM2NC85NzAgJChkaXN0ZGlyKS9wcGM2NC9wb3dlcjQgJChkaXN0ZGlyKS9wcGM2NC9wb3dlcjUgJChkaXN0ZGlyKS9ydGMgJChkaXN0ZGlyKS94ODYtNjQvaGFtbWVyCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYwotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbSB1bmluc3RhbGwtbG9jYWwKLQotLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gXAotCWluc3RhbGwtZGF0YS1sb2NhbCBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIFwKLQlwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbSBcCi0JdW5pbnN0YWxsLWxvY2FsCi0KLQotaW5zdGFsbC1kYXRhLWxvY2FsOgotCWZvciBpIGluICR7ZXZlbnRfZmlsZXN9IDsgZG8gXAotCQlkaXI9YGRpcm5hbWUgJCRpYCA7IFwKLQkJbWtkaXIgLXAgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRkaXIgOyBcCi0JCSQoSU5TVEFMTF9EQVRBKSAkKHRvcF9zcmNkaXIpL2V2ZW50cy8kJGkgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRpIDsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWxvY2FsOgotCWZvciBpIGluICR7ZXZlbnRfZmlsZXN9IDsgZG8gXAotCQlkaXI9YGRpcm5hbWUgJCRpYCA7IFwKLQkJYXJjaGRpcj1gZGlybmFtZSAkJGRpcmAgOyBcCi0JCWlmIHRlc3QgLWYgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRpIDsgdGhlbiBcCi0JCQlybSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGkgOyBcCi0JCWZpOyAgXAotCQlpZiB0ZXN0IC1kICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkZGlyIDsgdGhlbiBcCi0JCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGRpciA7IFwKLQkJZmk7IFwKLQkJaWYgdGVzdCAkJGFyY2hkaXIgIT0gIi4iIC1hIC1kICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkYXJjaGRpciA7IHRoZW4gXAotCQkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRhcmNoZGlyIDsgXAotCQlmaTsgXAotCWRvbmUKLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2V2ZW50cy9hbHBoYS9ldjQvZXZlbnRzIGIvZXZlbnRzL2FscGhhL2V2NC9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMTkzZDEuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2FscGhhL2V2NC9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIEFscGhhIEVWNCBldmVudHMuCi0jCi1ldmVudDoweDAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjQwOTYgbmFtZTpJU1NVRVMgOiBUb3RhbCBpc3N1ZXMgZGl2aWRlZCBieSAyCi1ldmVudDoweDAyIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjQwOTYgbmFtZTpQSVBFTElORV9EUlkgOiBOb3RoaW5nIGlzc3VlZCwgbm8gdmFsaWQgSS1zdHJlYW0gZGF0YQotZXZlbnQ6MHgwNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo0MDk2IG5hbWU6TE9BRF9JTlNOUyA6IEFsbCBsb2FkIGluc3RydWN0aW9ucwotZXZlbnQ6MHgwNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo0MDk2IG5hbWU6UElQRUxJTkVfRlJPWkVOIDogTm90aGluZyBpc3N1ZWQsIHJlc291cmNlIGNvbmZsaWN0Ci1ldmVudDoweDA4IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjQwOTYgbmFtZTpCUkFOQ0hfSU5TTlMgOiBBbGwgYnJhbmNoZXMgKGNvbmRpdGlvbmFsLCB1bmNvbmRpdGlvbmFsLCBqc3IsIGh3X3JlaSkKLWV2ZW50OjB4MGEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NDA5NiBuYW1lOkNZQ0xFUyA6IFRvdGFsIGN5Y2xlcwotZXZlbnQ6MHgwYiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo0MDk2IG5hbWU6UEFMX01PREUgOiBDeWNsZXMgd2hpbGUgaW4gUEFMY29kZSBlbnZpcm9ubWVudAotZXZlbnQ6MHgwYyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo0MDk2IG5hbWU6Tk9OX0lTU1VFUyA6IFRvdGFsIG5vbmlzc3VlcyBkaXZpZGVkIGJ5IDIKLWV2ZW50OjB4MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6RENBQ0hFX01JU1NFUyA6IFRvdGFsIEQtY2FjaGUgbWlzc2VzCi1ldmVudDoweDExIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOklDQUNIRV9NSVNTRVMgOiBUb3RhbCBJLWNhY2hlIG1pc3NlcwotZXZlbnQ6MHgxMiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpEVUFMX0lTU1VFX0NZQ0xFUyA6IEN5Y2xlcyBvZiBkdWFsIGlzc3VlCi1ldmVudDoweDEzIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkJSQU5DSF9NSVNQUkVESUNUUyA6IEJyYW5jaCBtaXNwcmVkaWN0cyAoY29uZGl0aW9uYWwsIGpzciwgaHdfcmVpKQotZXZlbnQ6MHgxNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpGUF9JTlNOUyA6IEZQIG9wZXJhdGUgaW5zdHJ1Y3Rpb25zIChub3QgYnIsIGxvYWQsIHN0b3JlKQotZXZlbnQ6MHgxNSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpJTlRFR0VSX09QRVJBVEUgOiBJbnRlZ2VyIG9wZXJhdGUgaW5zdHJ1Y3Rpb25zCi1ldmVudDoweDE2IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNUT1JFX0lOU05TIDogU3RvcmUgaW5zdHJ1Y3Rpb25zCi0jIFRoZXJlJ3MgYWxzbyBFWFRFUk5BTCwgYnkgd2hpY2ggd2UgY291bGQgbW9uaXRvciB0aGUgMjEwNjYvMjEwNjggYnVzIGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9ldmVudHMvYWxwaGEvZXY0L3VuaXRfbWFza3MgYi9ldmVudHMvYWxwaGEvZXY0L3VuaXRfbWFza3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNzdjYzguLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2FscGhhL2V2NC91bml0X21hc2tzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jIEFscGhhIEVWNCBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvYWxwaGEvZXY1L2V2ZW50cyBiL2V2ZW50cy9hbHBoYS9ldjUvZXZlbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDllMDZhLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9hbHBoYS9ldjUvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIyBBbHBoYSBFVjUgZXZlbnRzCi0jCi1ldmVudDoweDAwIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6Q1lDTEVTIDogVG90YWwgY3ljbGVzCi1ldmVudDoweDAxIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOklTU1VFUyA6IFRvdGFsIGlzc3VlcwotZXZlbnQ6MHgwMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpOT05fSVNTVUVfQ1lDTEVTIDogTm90aGluZyBpc3N1ZWQsIHBpcGVsaW5lIGZyb3plbgotZXZlbnQ6MHgwMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTUExJVF9JU1NVRV9DWUNMRVMgOiBTb21lIGJ1dCBub3QgYWxsIGlzc3VhYmxlIGluc3RydWN0aW9ucyBpc3N1ZWQKLWV2ZW50OjB4MDQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6UElQRUxJTkVfRFJZIDogTm90aGluZyBpc3N1ZWQsIHBpcGVsaW5lIGRyeQotZXZlbnQ6MHgwNSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpSRVBMQVlfVFJBUCA6IFJlcGxheSB0cmFwcyAobGR1LCB3Yi9tYWYsIGxpdG11cyB0ZXN0KQotZXZlbnQ6MHgwNiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTSU5HTEVfSVNTVUVfQ1lDTEVTIDogU2luZ2xlIGlzc3VlIGN5Y2xlcwotZXZlbnQ6MHgwNyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpEVUFMX0lTU1VFX0NZQ0xFUyA6IER1YWwgaXNzdWUgY3ljbGVzCi1ldmVudDoweDA4IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlRSSVBMRV9JU1NVRV9DWUNMRVMgOiBUcmlwbGUgaXNzdWUgY3ljbGVzCi1ldmVudDoweDA5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlFVQURfSVNTVUVfQ1lDTEVTIDogUXVhZCBpc3N1ZSBjeWNsZXMKLWV2ZW50OjB4MGEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6RkxPV19DSEFOR0UgOiBGbG93IGNoYW5nZSAobWVhbmluZyBkZXBlbmRzIG9uIGNvdW50ZXIgMikKLSMgPz8/IFRoaXMgb25lJ3MgZGVwZW5kZW50IG9uIHRoZSB2YWx1ZSBpbiBQQ1NFTDI6IElmIG1lYXN1cmluZyBQQ19NSVNQUiwKLSMgdGhpcyBpcyBqc3ItcmV0IGluc3RydWN0aW9ucywgaWYgbWVhc3VyaW5nIEJSQU5DSF9NSVNQUkVESUNUUywgdGhpcyBpcwotIyBjb25kaXRpb25hbCBicmFuY2hlcywgb3RoZXJ3aXNlIHRoaXMgaXMgYWxsIGJyYW5jaCBpbnNucywgaW5jbHVkaW5nIGh3X3JlaS4KLWV2ZW50OjB4MGIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6SU5URUdFUl9PUEVSQVRFIDogSW50ZWdlciBvcGVyYXRlIGluc3RydWN0aW9ucwotZXZlbnQ6MHgwYyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpGUF9JTlNOUyA6IEZQIG9wZXJhdGUgaW5zdHJ1Y3Rpb25zIChub3QgYnIsIGxvYWQsIHN0b3JlKQotIyBGSVhNRTogQnVnIGNhcnJpZWQgb3ZlcgotZXZlbnQ6MHgwYyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpMT0FEX0lOU05TIDogTG9hZCBpbnN0cnVjdGlvbnMKLWV2ZW50OjB4MGQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6U1RPUkVfSU5TTlMgOiBTdG9yZSBpbnN0cnVjdGlvbnMKLWV2ZW50OjB4MGUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6SUNBQ0hFX0FDQ0VTUyA6IEluc3RydWN0aW9uIGNhY2hlIGFjY2VzcwotZXZlbnQ6MHgwZiB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6RENBQ0hFX0FDQ0VTUyA6IERhdGEgY2FjaGUgYWNjZXNzCi1ldmVudDoweDEwIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkxPTkdfU1RBTExTIDogU3RhbGxzIGxvbmdlciB0aGFuIDE1IGN5Y2xlcwotZXZlbnQ6MHgxMSBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpQQ19NSVNQUiA6IFBDIG1pc3ByZWRpY3RzCi1ldmVudDoweDEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkJSQU5DSF9NSVNQUkVESUNUUyA6IEJyYW5jaCBtaXNwcmVkaWN0cwotZXZlbnQ6MHgxMyBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCi1ldmVudDoweDE0IGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOklUQl9NSVNTIDogSW5zdHJ1Y3Rpb24gVExCIG1pc3MKLWV2ZW50OjB4MTUgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6RENBQ0hFX01JU1NFUyA6IERhdGEgY2FjaGUgbWlzc2VzCi1ldmVudDoweDE2IGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkRUQl9NSVNTIDogRGF0YSBUTEIgbWlzcwotZXZlbnQ6MHgxNyBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpMT0FEU19NRVJHRUQgOiBMb2FkcyBtZXJnZWQgaW4gTUFGCi1ldmVudDoweDE4IGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkxEVV9SRVBMQVlTIDogTERVIHJlcGxheSB0cmFwcwotZXZlbnQ6MHgxOSBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpXQl9NQUZfRlVMTF9SRVBMQVlTIDogV0IvTUFGIGZ1bGwgcmVwbGF5IHRyYXBzCi1ldmVudDoweDFhIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOk1FTV9CQVJSSUVSIDogTWVtb3J5IGJhcnJpZXIgaW5zdHJ1Y3Rpb25zCi1ldmVudDoweDFiIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkxPQURfTE9DS0VEIDogTER4L0wgaW5zdHJ1Y3Rpb25zCi1ldmVudDoweDFjIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNDQUNIRV9BQ0NFU1MgOiBTLWNhY2hlIGFjY2VzcwotZXZlbnQ6MHgxZCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTQ0FDSEVfUkVBRCA6IFMtY2FjaGUgcmVhZAotZXZlbnQ6MHgxZSBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNDQUNIRV9XUklURSA6IFMtY2FjaGUgd3JpdGUKLWV2ZW50OjB4MWYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6U0NBQ0hFX1ZJQ1RJTSA6IFMtY2FjaGUgdmljdGltCi1ldmVudDoweDIwIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNDQUNIRV9NSVNTIDogUy1jYWNoZSBtaXNzCi1ldmVudDoweDIxIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNDQUNIRV9SRUFEX01JU1MgOiBTLWNhY2hlIHJlYWQgbWlzcwotZXZlbnQ6MHgyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTQ0FDSEVfV1JJVEVfTUlTUyA6IFMtY2FjaGUgd3JpdGUgbWlzcwotZXZlbnQ6MHgyMyBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTQ0FDSEVfU0hfV1JJVEUgOiBTLWNhY2hlIHNoYXJlZCB3cml0ZXMKLWV2ZW50OjB4MjQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6QkNBQ0hFX0hJVCA6IEItY2FjaGUgaGl0Ci1ldmVudDoweDI1IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkJDQUNIRV9WSUNUSU0gOiBCLWNhY2hlIHZpY3RpbQotZXZlbnQ6MHgyNiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpCQ0FDSEVfTUlTUyA6IEItY2FjaGUgbWlzcwotZXZlbnQ6MHgyNyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTWVNfUkVRIDogU3lzdGVtIHJlcXVlc3RzCi1ldmVudDoweDI4IGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNZU19JTlYgOiBTeXN0ZW0gaW52YWxpZGF0ZXMKLWV2ZW50OjB4MjkgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6U1lTX1JFQURfUkVRIDogU3lzdGVtIHJlYWQgcmVxdWVzdHMKZGlmZiAtLWdpdCBhL2V2ZW50cy9hbHBoYS9ldjUvdW5pdF9tYXNrcyBiL2V2ZW50cy9hbHBoYS9ldjUvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYyNGZhOS4uMDAwMDAwMAotLS0gYS9ldmVudHMvYWxwaGEvZXY1L3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgQWxwaGEgRVYtNSBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvYWxwaGEvZXY2L2V2ZW50cyBiL2V2ZW50cy9hbHBoYS9ldjYvZXZlbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDM5Y2VmLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9hbHBoYS9ldjYvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyBBbHBoYSBFVjYgZXZlbnRzCi0jCi1ldmVudDoweDAwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTIDogVG90YWwgY3ljbGVzCi1ldmVudDoweDAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRUQgOiBSZXRpcmVkIGluc3RydWN0aW9ucwotZXZlbnQ6MHgwMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT05EX0JSQU5DSEVTIDogUmV0aXJlZCBjb25kaXRpb25hbCBicmFuY2hlcwotZXZlbnQ6MHgwMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfTUlTUFJFRElDVFMgOiBSZXRpcmVkIGJyYW5jaCBtaXNwcmVkaWN0cwotZXZlbnQ6MHgwNCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVEJfTUlTUyA6IFJldGlyZWQgRFRCIHNpbmdsZSBtaXNzZXMgKiAyCi1ldmVudDoweDA1IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUQl9ERF9NSVNTIDogUmV0aXJlZCBEVEIgZG91YmxlIGRvdWJsZSBtaXNzZXMKLWV2ZW50OjB4MDYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRCX01JU1MgOiBSZXRpcmVkIElUQiBtaXNzZXMKLWV2ZW50OjB4MDcgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VU5BTElHTkVEX1RSQVAgOiBSZXRpcmVkIHVuYWxpZ25lZCB0cmFwcwotZXZlbnQ6MHgwOCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVBMQVlfVFJBUCA6IFJlcGxheSB0cmFwcwpkaWZmIC0tZ2l0IGEvZXZlbnRzL2FscGhhL2V2Ni91bml0X21hc2tzIGIvZXZlbnRzL2FscGhhL2V2Ni91bml0X21hc2tzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmUzOGM2Li4wMDAwMDAwCi0tLSBhL2V2ZW50cy9hbHBoYS9ldjYvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBBbHBoYSBFVi02IHBvc3NpYmxlIHVuaXQgbWFza3MKLSMKLW5hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAotCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL2V2ZW50cy9hbHBoYS9ldjY3L2V2ZW50cyBiL2V2ZW50cy9hbHBoYS9ldjY3L2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYwMzg3MS4uMDAwMDAwMAotLS0gYS9ldmVudHMvYWxwaGEvZXY2Ny9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jIEFscGhhIEVWLTY3IEV2ZW50cwotIwotZXZlbnQ6MHgwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVMgOiBUb3RhbCBjeWNsZXMKLWV2ZW50OjB4MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REVMQVlFRF9DWUNMRVMgOiBDeWNsZXMgb2YgZGVsYXllZCByZXRpcmUgcG9pbnRlciBhZHZhbmNlCi0jIEZJWE1FOiBidWcgY2FycmllZCBvdmVyCi1ldmVudDoweDAwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRCA6IFJldGlyZWQgaW5zdHJ1Y3Rpb25zCi1ldmVudDoweDAyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJDQUNIRV9NSVNTIDogQmNhY2hlIG1pc3Nlcy9sb25nIHByb2JlIGxhdGVuY3kKLWV2ZW50OjB4MDMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUJPWF9SRVBMQVkgOiBNYm94IHJlcGxheSB0cmFwcwotIyBGSVhNRTogYWxsIHRoZSBiZWxvdyB1c2VkIFBNX0NUUgotZXZlbnQ6MHgwNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTEVEXzAgOiBQQ1RSMCB0cmlnZ2VyZWQ7IHN0YWxsZWQgYmV0d2VlbiBmZXRjaCBhbmQgbWFwIHN0YWdlcwotZXZlbnQ6MHgwNSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpUQUtFTl8wIDogUENUUjAgdHJpZ2dlcmVkOyBicmFuY2ggd2FzIG5vdCBtaXNwcmVkaWN0ZWQgYW5kIHRha2VuCi1ldmVudDoweDA2IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU1BSRURJQ1RfMCA6IFBDVFIwIHRyaWdnZXJlZDsgYnJhbmNoIHdhcyBtaXNwcmVkaWN0ZWQKLWV2ZW50OjB4MDcgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRCX01JU1NfMCA6IFBDVFIwIHRyaWdnZXJlZDsgSVRCIG1pc3MKLWV2ZW50OjB4MDggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRCX01JU1NfMCA6IFBDVFIwIHRyaWdnZXJlZDsgRFRCIG1pc3MKLWV2ZW50OjB4MDkgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVQTEFZXzAgOiBQQ1RSMCB0cmlnZ2VyZWQ7IHJlcGxheSB0cmFwCi1ldmVudDoweDBhIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfU1RPUkVfMCA6IFBDVFIwIHRyaWdnZXJlZDsgbG9hZC1zdG9yZSBvcmRlciByZXBsYXkgdHJhcAotZXZlbnQ6MHgwYiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU18wIDogUENUUjAgdHJpZ2dlcmVkOyBJY2FjaGUgbWlzcwotZXZlbnQ6MHgwYyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkFMSUdORURfMCA6IFBDVFIwIHRyaWdnZXJlZDsgdW5hbGlnbmVkIGxvYWQvc3RvcmUgdHJhcAotZXZlbnQ6MHgwZCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTEVEXzEgOiBQQ1RSMSB0cmlnZ2VyZWQ7IHN0YWxsZWQgYmV0d2VlbiBmZXRjaCBhbmQgbWFwIHN0YWdlcwotZXZlbnQ6MHgwZSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpUQUtFTl8xIDogUENUUjEgdHJpZ2dlcmVkOyBicmFuY2ggd2FzIG5vdCBtaXNwcmVkaWN0ZWQgYW5kIHRha2VuCi1ldmVudDoweDBmIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU1BSRURJQ1RfMSA6IFBDVFIxIHRyaWdnZXJlZDsgYnJhbmNoIHdhcyBtaXNwcmVkaWN0ZWQKLWV2ZW50OjB4MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRCX01JU1NfMSA6IFBDVFIxIHRyaWdnZXJlZDsgSVRCIG1pc3MKLWV2ZW50OjB4MTEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRCX01JU1NfMSA6IFBDVFIxIHRyaWdnZXJlZDsgRFRCIG1pc3MKLWV2ZW50OjB4MTIgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVQTEFZXzEgOiBQQ1RSMSB0cmlnZ2VyZWQ7IHJlcGxheSB0cmFwCi1ldmVudDoweDEzIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfU1RPUkVfMSA6IFBDVFIxIHRyaWdnZXJlZDsgbG9hZC1zdG9yZSBvcmRlciByZXBsYXkgdHJhcAotZXZlbnQ6MHgxNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU18xIDogUENUUjEgdHJpZ2dlcmVkOyBJY2FjaGUgbWlzcwotZXZlbnQ6MHgxNSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkFMSUdORURfMSA6IFBDVFIxIHRyaWdnZXJlZDsgdW5hbGlnbmVkIGxvYWQvc3RvcmUgdHJhcApkaWZmIC0tZ2l0IGEvZXZlbnRzL2FscGhhL2V2NjcvdW5pdF9tYXNrcyBiL2V2ZW50cy9hbHBoYS9ldjY3L3VuaXRfbWFza3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NjFlNDkuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2FscGhhL2V2NjcvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBBbHBoYSBFVi02NyBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvYWxwaGEvcGNhNTYvZXZlbnRzIGIvZXZlbnRzL2FscGhhL3BjYTU2L2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0YmFiZS4uMDAwMDAwMAotLS0gYS9ldmVudHMvYWxwaGEvcGNhNTYvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jIFBDQS01NgotIyBGSVhNRTogbm8gZXZlbnRzID8gV2hhdCdzIGdvaW5nIG9uIGhlcmUgRmFsayA/CmRpZmYgLS1naXQgYS9ldmVudHMvYWxwaGEvcGNhNTYvdW5pdF9tYXNrcyBiL2V2ZW50cy9hbHBoYS9wY2E1Ni91bml0X21hc2tzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjgwN2I3Li4wMDAwMDAwCi0tLSBhL2V2ZW50cy9hbHBoYS9wY2E1Ni91bml0X21hc2tzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIEFscGhhIFBDQS01NiBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi0jIEZJWE1FOiBhbnkgZXZlbnRzIC4uLj8KZGlmZiAtLWdpdCBhL2V2ZW50cy9hcm0veHNjYWxlMS9ldmVudHMgYi9ldmVudHMvYXJtL3hzY2FsZTEvZXZlbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTAyMTM1Li4wMDAwMDAwCi0tLSBhL2V2ZW50cy9hcm0veHNjYWxlMS9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIFhTY2FsZSAxIGV2ZW50cwotIwotZXZlbnQ6MHgwMCBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9JRkVUQ0hfTUlTUyA6IG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaCBtaXNzZXMKLWV2ZW50OjB4MDEgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfSUZVX01FTV9TVEFMTCA6IGN5Y2xlcyBpbnN0cnVjdGlvbiBmZXRjaCBwaXBlIGlzIHN0YWxsZWQKLWV2ZW50OjB4MDIgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfREFUQV9TVEFMTCA6IGN5Y2xlcyBzdGFsbCBvY2N1cnMgZm9yIGR1ZSB0byBkYXRhIGRlcGVuZGVuY3kKLWV2ZW50OjB4MDMgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX01JU1MgOiBudW1iZXIgb2YgSVRMQiBtaXNzZXMKLWV2ZW50OjB4MDQgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVExCX01JU1MgOiBudW1iZXIgb2YgRFRMQiBtaXNzZXMKLWV2ZW50OjB4MDUgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0VYRUNVVEVEIDogYnJhbmNoIGluc3RydWN0aW9uIGV4ZWN1dGVkIHcvIG9yIHcvbyBwcm9ncmFtIGZsb3cgY2hhbmdlCi1ldmVudDoweDA2IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9NSVNTX1BSRUQgOiBicmFuY2ggbWlzcHJlZGljdGVkCi1ldmVudDoweDA3IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTl9FWEVDVVRFRCA6IGluc3RydWN0aW9uIGV4ZWN1dGVkCi1ldmVudDoweDA4IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0RDQUNIRV9GVUxMX1NUQUxMIDogY3ljbGVzIGluIHN0YWxsIGR1ZSB0byBmdWxsIGRjYWNoZQotZXZlbnQ6MHgwOSBjb3VudGVyczoxLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9GVUxMX1NUQUxMX0NOVCA6IG51bWJlciBvZiBzdGFsbHMgZHVlIHRvIGRjYWNoZSBmdWxsIGNvbmRpdGlvbgotZXZlbnQ6MHgwYSBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9BQ0NFU1MgOiBkYXRhIGNhY2hlIGFjY2VzcwotZXZlbnQ6MHgwYiBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTIDogZGF0YSBjYWNoZSBtaXNzCi1ldmVudDoweDBjIGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX1dCIDogZGF0YSBjYWNoZSB3cml0ZWJhY2ssIDEgZXZlbnQgZm9yIGV2ZXJ5IGhhbGYgY2FjaGVsaW5lCi1ldmVudDoweDBkIGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UENfQ0hBTkdFIDogbnVtYmVyIG9mIHRpbWVzIHRoZSBwcm9ncmFtIGNvdW50ZXIgd2FzIGNoYW5nZWQgd2l0aG91dCBhIG1vZGUgc3dpdGNoCi1ldmVudDoweGZlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9DWUNMRVMgOiBjbG9jayBjeWNsZXMgY291bnRlcgotIzB4MTAgdGhyb3VnaCAweDE3IERlZmluZWQgYnkgQVNTUC4gU2VlIHRoZSBJbnRlbK4gWFNjYWxlIiBjb3JlIGltcGxlbWVudGF0aW9uIG9wdGlvbiBzZWN0aW9uIG9mIHRoZSBBU1NQCi0jYXJjaGl0ZWN0dXJlIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL2V2ZW50cy9hcm0veHNjYWxlMS91bml0X21hc2tzIGIvZXZlbnRzL2FybS94c2NhbGUxL3VuaXRfbWFza3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NWViMTAuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2FybS94c2NhbGUxL3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgWFNjYWxlIDEgcG9zc2libGUgdW5pdCBtYXNrcwotIwotbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAotCTB4MDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvYXJtL3hzY2FsZTIvZXZlbnRzIGIvZXZlbnRzL2FybS94c2NhbGUyL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA4MGVmZC4uMDAwMDAwMAotLS0gYS9ldmVudHMvYXJtL3hzY2FsZTIvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBYU2NhbGUgMiBldmVudHMKLSMKLWV2ZW50OjB4MDAgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSF9NSVNTIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIG1pc3NlcwotZXZlbnQ6MHgwMSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfSUZVX01FTV9TVEFMTCA6IGN5Y2xlcyBpbnN0cnVjdGlvbiBmZXRjaCBwaXBlIGlzIHN0YWxsZWQKLWV2ZW50OjB4MDIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0RBVEFfU1RBTEwgOiBjeWNsZXMgc3RhbGwgb2NjdXJzIGZvciBkdWUgdG8gZGF0YSBkZXBlbmRlbmN5Ci1ldmVudDoweDAzIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTUyA6IG51bWJlciBvZiBJVExCIG1pc3NlcwotZXZlbnQ6MHgwNCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVExCX01JU1MgOiBudW1iZXIgb2YgRFRMQiBtaXNzZXMKLWV2ZW50OjB4MDUgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9FWEVDVVRFRCA6IGJyYW5jaCBpbnN0cnVjdGlvbiBleGVjdXRlZCB3LyBvciB3L28gcHJvZ3JhbSBmbG93IGNoYW5nZQotZXZlbnQ6MHgwNiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX01JU1NfUFJFRCA6IGJyYW5jaCBtaXNwcmVkaWN0ZWQKLWV2ZW50OjB4MDcgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTl9FWEVDVVRFRCA6IGluc3RydWN0aW9uIGV4ZWN1dGVkCi1ldmVudDoweDA4IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19EQ0FDSEVfRlVMTF9TVEFMTCA6IGN5Y2xlcyBpbiBzdGFsbCBkdWUgdG8gZnVsbCBkY2FjaGUKLWV2ZW50OjB4MDkgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX0ZVTExfU1RBTExfQ05UIDogbnVtYmVyIG9mIHN0YWxscyBkdWUgdG8gZGNhY2hlIGZ1bGwgY29uZGl0aW9uCi1ldmVudDoweDBhIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9BQ0NFU1MgOiBkYXRhIGNhY2hlIGFjY2VzcwotZXZlbnQ6MHgwYiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTUyA6IGRhdGEgY2FjaGUgbWlzcwotZXZlbnQ6MHgwYyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfV0IgOiBkYXRhIGNhY2hlIHdyaXRlYmFjaywgMSBldmVudCBmb3IgZXZlcnkgaGFsZiBjYWNoZWxpbmUKLWV2ZW50OjB4MGQgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UENfQ0hBTkdFIDogbnVtYmVyIG9mIHRpbWVzIHRoZSBwcm9ncmFtIGNvdW50ZXIgd2FzIGNoYW5nZWQgd2l0aG91dCBhIG1vZGUgc3dpdGNoCi1ldmVudDoweGZlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9DWUNMRVMgOiBjbG9jayBjeWNsZXMgY291bnRlcgotIzB4MTAgdGhyb3VnaCAweDE3IERlZmluZWQgYnkgQVNTUC4gU2VlIHRoZSBJbnRlbK4gWFNjYWxlIiBjb3JlIGltcGxlbWVudGF0aW9uIG9wdGlvbiBzZWN0aW9uIG9mIHRoZSBBU1NQCi0jYXJjaGl0ZWN0dXJlIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL2V2ZW50cy9hcm0veHNjYWxlMi91bml0X21hc2tzIGIvZXZlbnRzL2FybS94c2NhbGUyL3VuaXRfbWFza3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzN2FhYjUuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2FybS94c2NhbGUyL3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgWFNjYWxlIDIgcG9zc2libGUgdW5pdCBtYXNrcwotIwotbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAotCTB4MDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvaTM4Ni9hdGhsb24vZXZlbnRzIGIvZXZlbnRzL2kzODYvYXRobG9uL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwZjRmNy4uMDAwMDAwMAotLS0gYS9ldmVudHMvaTM4Ni9hdGhsb24vZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyBBdGhsb24gRXZlbnRzCi0jCi1ldmVudDoweDc2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpDUFVfQ0xLX1VOSEFMVEVEIDogQ3ljbGVzIG91dHNpZGUgb2YgaGFsdCBzdGF0ZQotZXZlbnQ6MHhjMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6UkVUSVJFRF9JTlNOUyA6IFJldGlyZWQgaW5zdHJ1Y3Rpb25zIChpbmNsdWRlcyBleGNlcHRpb25zLCBpbnRlcnJ1cHRzLCByZXN5bmNzKQotZXZlbnQ6MHhjMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX09QUyA6IFJldGlyZWQgT3BzCi1ldmVudDoweDgwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9GRVRDSEVTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgZmV0Y2hlcwotZXZlbnQ6MHg4MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCi1ldmVudDoweDQwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfQUNDRVNTRVMgOiBEYXRhIGNhY2hlIGFjY2Vzc2VzCi1ldmVudDoweDQxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfTUlTU0VTIDogRGF0YSBjYWNoZSBtaXNzZXMKLWV2ZW50OjB4NDIgY291bnRlcnM6MCwxLDIsMyB1bTptb2VzaSBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfUkVGSUxMU19GUk9NX0wyIDogRGF0YSBjYWNoZSByZWZpbGxzIGZyb20gTDIKLWV2ZW50OjB4NDMgY291bnRlcnM6MCwxLDIsMyB1bTptb2VzaSBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfUkVGSUxMU19GUk9NX1NZU1RFTSA6IERhdGEgY2FjaGUgcmVmaWxscyBmcm9tIHN5c3RlbQotZXZlbnQ6MHg0NCBjb3VudGVyczowLDEsMiwzIHVtOm1vZXNpIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9XUklURUJBQ0tTIDogRGF0YSBjYWNoZSB3cml0ZSBiYWNrcwotZXZlbnQ6MHhjMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0JSQU5DSEVTIDogUmV0aXJlZCBicmFuY2hlcyAoY29uZGl0aW9uYWwsIHVuY29uZGl0aW9uYWwsIGV4Y2VwdGlvbnMsIGludGVycnVwdHMpCi1ldmVudDoweGMzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfQlJBTkNIRVNfTUlTUFJFRElDVEVEIDogUmV0aXJlZCBicmFuY2hlcyBtaXNwcmVkaWN0ZWQKLWV2ZW50OjB4YzQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9UQUtFTl9CUkFOQ0hFUyA6IFJldGlyZWQgdGFrZW4gYnJhbmNoZXMKLWV2ZW50OjB4YzUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9UQUtFTl9CUkFOQ0hFU19NSVNQUkVESUNURUQgOiBSZXRpcmVkIHRha2VuIGJyYW5jaGVzIG1pc3ByZWRpY3RlZAotZXZlbnQ6MHg0NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9EVExCX01JU1NFU19MMl9EVExEX0hJVFMgOiBMMSBEVExCIG1pc3NlcyBhbmQgTDIgRFRMQiBoaXRzCi1ldmVudDoweDQ2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxX0FORF9MMl9EVExCX01JU1NFUyA6IEwxIGFuZCBMMiBEVExCIG1pc3NlcwotZXZlbnQ6MHg0NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTkVEX0RBVEFfUkVGUyA6IE1pc2FsaWduZWQgZGF0YSByZWZlcmVuY2VzCi1ldmVudDoweDg0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxX0lUTEJfTUlTU0VTX0wyX0lUTEJfSElUUyA6IEwxIElUTEIgbWlzc2VzIChhbmQgTDIgSVRMQiBoaXRzKQotZXZlbnQ6MHg4NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9BTkRfTDJfSVRMQl9NSVNTRVMgOiBMMSBhbmQgTDIgSVRMQiBtaXNzZXMKLWV2ZW50OjB4YzYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9GQVJfQ09OVFJPTF9UUkFOU0ZFUlMgOiBSZXRpcmVkIGZhciBjb250cm9sIHRyYW5zZmVycwotZXZlbnQ6MHhjNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1JFU1lOQ19CUkFOQ0hFUyA6IFJldGlyZWQgcmVzeW5jIGJyYW5jaGVzIChvbmx5IG5vbi1jb250cm9sIHRyYW5zZmVyIGJyYW5jaGVzIGNvdW50ZWQpCi1ldmVudDoweGNkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFNfTUFTS0VEIDogSW50ZXJydXB0cyBtYXNrZWQgY3ljbGVzIChJRj0wKQotZXZlbnQ6MHhjZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlJVUFRTX01BU0tFRF9QRU5ESU5HIDogSW50ZXJydXB0cyBtYXNrZWQgd2hpbGUgcGVuZGluZyBjeWNsZXMgKElOVFIgd2hpbGUgSUY9MCkKLWV2ZW50OjB4Y2YgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MTAgbmFtZTpIQVJEV0FSRV9JTlRFUlJVUFRTIDogTnVtYmVyIG9mIHRha2VuIGhhcmR3YXJlIGludGVycnVwdHMKLSMgVGhlcmUgYXJlIG90aGVyIGV2ZW50cywgYnV0IHRoZXkgd2VyZSByZW1vdmVkIGZyb20gdGhlIGFyY2hpdGVjdHVyZSBtYW51YWxzCmRpZmYgLS1naXQgYS9ldmVudHMvaTM4Ni9hdGhsb24vdW5pdF9tYXNrcyBiL2V2ZW50cy9pMzg2L2F0aGxvbi91bml0X21hc2tzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWIwZGE4Li4wMDAwMDAwCi0tLSBhL2V2ZW50cy9pMzg2L2F0aGxvbi91bml0X21hc2tzCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyBBdGhsb24gcG9zc2libGUgdW5pdCBtYXNrcwotIwotbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCi0JMHgwIE5vIHVuaXQgbWFzawotbmFtZTptb2VzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCi0JMHgxMCAoTSlvZGlmaWVkIGNhY2hlIHN0YXRlCi0JMHgwOCAoTyl3bmVyIGNhY2hlIHN0YXRlCi0JMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQotCTB4MDIgKFMpaGFyZWQgY2FjaGUgc3RhdGUKLQkweDAxIChJKW52YWxpZCBjYWNoZSBzdGF0ZQotCTB4MWYgQWxsIGNhY2hlIHN0YXRlcwpkaWZmIC0tZ2l0IGEvZXZlbnRzL2kzODYvcDQtaHQvZXZlbnRzIGIvZXZlbnRzL2kzODYvcDQtaHQvZXZlbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGM2YmM5Li4wMDAwMDAwCi0tLSBhL2V2ZW50cy9pMzg2L3A0LWh0L2V2ZW50cworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgUGVudGl1bSBJViBIeXBlclRocmVhZGluZyBldmVudHMKLSMKLSMgTk9URTogZXZlbnRzIGNhbm5vdCBjdXJyZW50bHkgYmUgMHgwMCBkdWUgdG8gZXZlbnQgYmluZGluZyBjaGVja3MgaW4KLSMgZHJpdmVyCi0jCi1ldmVudDoweDFkIGNvdW50ZXJzOjAgdW06Z2xvYmFsX3Bvd2VyX2V2ZW50cyBtaW5pbXVtOjYwMDAgbmFtZTpHTE9CQUxfUE9XRVJfRVZFTlRTIDogdGltZSBkdXJpbmcgd2hpY2ggcHJvY2Vzc29yIGlzIG5vdCBzdG9wcGVkCi1ldmVudDoweDAxIGNvdW50ZXJzOjMgdW06YnJhbmNoX3JldGlyZWQgbWluaW11bTo2MDAwIG5hbWU6QlJBTkNIX1JFVElSRUQgOiByZXRpcmVkIGJyYW5jaGVzCi1ldmVudDoweDAyIGNvdW50ZXJzOjMgdW06bWlzcHJlZF9icmFuY2hfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpNSVNQUkVEX0JSQU5DSF9SRVRJUkVEIDogcmV0aXJlZCBtaXNwcmVkaWN0ZWQgYnJhbmNoZXMKLWV2ZW50OjB4MDQgY291bnRlcnM6MCB1bTpicHVfZmV0Y2hfcmVxdWVzdCBtaW5pbXVtOjYwMDAgbmFtZTpCUFVfRkVUQ0hfUkVRVUVTVCA6IGluc3RydWN0aW9uIGZldGNoIHJlcXVlc3RzIGZyb20gdGhlIGJyYW5jaCBwcmVkaWN0IHVuaXQKLWV2ZW50OjB4MDUgY291bnRlcnM6MCB1bTppdGxiX3JlZmVyZW5jZSBtaW5pbXVtOjYwMDAgbmFtZTpJVExCX1JFRkVSRU5DRSA6IHRyYW5zbGF0aW9ucyB1c2luZyB0aGUgaW5zdHJ1Y3Rpb24gdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlcgotZXZlbnQ6MHgwNiBjb3VudGVyczoyIHVtOm1lbW9yeV9jYW5jZWwgbWluaW11bTo2MDAwIG5hbWU6TUVNT1JZX0NBTkNFTCA6IGNhbmNlbGxlZCByZXF1ZXNldHMgaW4gZGF0YSBjYWNoZSBhZGRyZXNzIGNvbnRyb2wgdW5pdAotZXZlbnQ6MHgwNyBjb3VudGVyczoyIHVtOm1lbW9yeV9jb21wbGV0ZSBtaW5pbXVtOjYwMDAgbmFtZTpNRU1PUllfQ09NUExFVEUgOiBjb21wbGV0ZWQgc3BsaXQKLWV2ZW50OjB4MDggY291bnRlcnM6MiB1bTpsb2FkX3BvcnRfcmVwbGF5IG1pbmltdW06NjAwMCBuYW1lOkxPQURfUE9SVF9SRVBMQVkgOiByZXBsYXllZCBldmVudHMgYXQgdGhlIGxvYWQgcG9ydAotZXZlbnQ6MHgwOSBjb3VudGVyczoyIHVtOnN0b3JlX3BvcnRfcmVwbGF5IG1pbmltdW06NjAwMCBuYW1lOlNUT1JFX1BPUlRfUkVQTEFZIDogcmVwbGF5ZWQgZXZlbnRzIGF0IHRoZSBzdG9yZSBwb3J0Ci1ldmVudDoweDBhIGNvdW50ZXJzOjAgdW06bW9iX2xvYWRfcmVwbGF5IG1pbmltdW06NjAwMCBuYW1lOk1PQl9MT0FEX1JFUExBWSA6IHJlcGxheWVkIGxvYWRzIGZyb20gdGhlIG1lbW9yeSBvcmRlciBidWZmZXIKLWV2ZW50OjB4MGMgY291bnRlcnM6MCB1bTpic3FfY2FjaGVfcmVmZXJlbmNlIG1pbmltdW06NjAwMCBuYW1lOkJTUV9DQUNIRV9SRUZFUkVOQ0UgOiBjYWNoZSByZWZlcmVuY2VzIHNlZW4gYnkgdGhlIGJ1cyB1bml0Ci1ldmVudDoweDEyIGNvdW50ZXJzOjMgdW06eDg3X2Fzc2lzdCBtaW5pbXVtOjYwMDAgbmFtZTpYODdfQVNTSVNUIDogcmV0aXJlZCB4ODcgaW5zdHJ1Y3Rpb25zIHdoaWNoIHJlcXVpcmVkIHNwZWNpYWwgaGFuZGxpbmcKLWV2ZW50OjB4MWMgY291bnRlcnM6MyB1bTptYWNoaW5lX2NsZWFyIG1pbmltdW06NjAwMCBuYW1lOk1BQ0hJTkVfQ0xFQVIgOiBjeWNsZXMgd2l0aCBlbnRpcmUgbWFjaGluZSBwaXBlbGluZSBjbGVhcmVkCi1ldmVudDoweDFlIGNvdW50ZXJzOjEgdW06dGNfbXNfeGZlciBtaW5pbXVtOjYwMDAgbmFtZTpUQ19NU19YRkVSIDogbnVtYmVyIG9mIHRpbWVzIHVvcHMgZGVsaXZlciBjaGFuZ2VkIGZyb20gVEMgdG8gTVMgUk9NCi1ldmVudDoweDFmIGNvdW50ZXJzOjEgdW06dW9wX3F1ZXVlX3dyaXRlcyBtaW5pbXVtOjYwMDAgbmFtZTpVT1BfUVVFVUVfV1JJVEVTIDogbnVtYmVyIG9mIHZhbGlkIHVvcHMgd3JpdHRlbiB0byB0aGUgdW9wIHF1ZXVlCi1ldmVudDoweDIzIGNvdW50ZXJzOjMgdW06aW5zdHJfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUUl9SRVRJUkVEIDogcmV0aXJlZCBpbnN0cnVjdGlvbnMKLWV2ZW50OjB4MjQgY291bnRlcnM6MyB1bTp1b3BzX3JldGlyZWQgbWluaW11bTo2MDAwIG5hbWU6VU9QU19SRVRJUkVEIDogcmV0aXJlZCB1b3BzCi1ldmVudDoweDI1IGNvdW50ZXJzOjMgdW06dW9wX3R5cGUgbWluaW11bTo2MDAwIG5hbWU6VU9QX1RZUEUgOiB0eXBlIG9mIHVvcCB0YWdnZWQgYnkgZnJvbnQtZW5kIHRhZ2dpbmcKLWV2ZW50OjB4MjYgY291bnRlcnM6MSB1bTpicmFuY2hfdHlwZSBtaW5pbXVtOjYwMDAgbmFtZTpSRVRJUkVEX01JU1BSRURfQlJBTkNIX1RZUEUgOiByZXRpcmVkIG1pc3ByZWRpY3RlZCBicmFuY2hlZCwgc2VsZWN0ZWQgYnkgdHlwZQotZXZlbnQ6MHgyNyBjb3VudGVyczoxIHVtOmJyYW5jaF90eXBlIG1pbmltdW06NjAwMCBuYW1lOlJFVElSRURfQlJBTkNIX1RZUEUgOiByZXRpcmVkIGJyYW5jaGVzLCBzZWxlY3RlZCBieSB0eXBlCmRpZmYgLS1naXQgYS9ldmVudHMvaTM4Ni9wNC1odC91bml0X21hc2tzIGIvZXZlbnRzL2kzODYvcDQtaHQvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmYzZmYS4uMDAwMDAwMAotLS0gYS9ldmVudHMvaTM4Ni9wNC1odC91bml0X21hc2tzCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotIyBQZW50aXVtIElWIEh5cGVyVGhyZWFkaW5nIHBvc3NpYmxlIHVuaXQgbWFza3MKLSMKLW5hbWU6YnJhbmNoX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwYwotCTB4MDEgYnJhbmNoIG5vdC10YWtlbiBwcmVkaWN0ZWQKLQkweDAyIGJyYW5jaCBub3QtdGFrZW4gbWlzcHJlZGljdGVkCi0JMHgwNCBicmFuY2ggdGFrZW4gcHJlZGljdGVkCi0JMHgwOCBicmFuY2ggdGFrZW4gbWlzcHJlZGljdGVkCi1uYW1lOm1pc3ByZWRfYnJhbmNoX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQotCTB4MDEgcmV0aXJlZCBpbnN0cnVjdGlvbiBpcyBub24tYm9ndXMKLSMgRklYTUU6IDAgY291bnQgbm90aGluZywgMHhmZiBjb3VudCBtb3JlIHRoYW4gMHgwMSwgZG9jcyBzYXlzIGl0J3MgYSBiaXRtYXNrOgotIyBzb21ldGhpbmcgd3JvbmcgaW4gZG9jdW1lbnRhdGlvbiA/Ci1uYW1lOmJwdV9mZXRjaF9yZXF1ZXN0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKLQkweDAxIHRyYWNlIGNhY2hlIGxvb2t1cCBtaXNzCi1uYW1lOml0bGJfcmVmZXJlbmNlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKLQkweDAxIElUTEIgaGl0Ci0JMHgwMiBJVExCIG1pc3MKLQkweDA0IHVuY2FjaGVhYmxlIElUTEIgaGl0Ci1uYW1lOm1lbW9yeV9jYW5jZWwgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwOAotCTB4MDQgcmVwbGF5ZWQgYmVjYXVzZSBubyBzdG9yZSByZXF1ZXN0IGJ1ZmZlciBhdmFpbGFibGUKLQkweDA4IGNvbmZsaWN0cyBkdWUgdG8gNjRrIGFsaWFzaW5nCi1uYW1lOm1lbW9yeV9jb21wbGV0ZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCi0JMHgwMSBsb2FkIHNwbGl0IGNvbXBsZXRlZCwgZXhjbHVkaW5nIFVDL1dDIGxvYWRzCi0JMHgwMiBhbnkgc3BsaXQgc3RvcmVzIGNvbXBsZXRlZAotCTB4MDQgdW5jYWNoZWFibGUgbG9hZCBzcGxpdCBjb21wbGV0ZWQKLQkweDA4IHVuY2FjaGVhYmxlIHN0b3JlIHNwbGl0IGNvbXBsZXRlCi1uYW1lOmxvYWRfcG9ydF9yZXBsYXkgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAyCi0JMHgwMiBzcGxpdCBsb2FkCi1uYW1lOnN0b3JlX3BvcnRfcmVwbGF5IHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMgotCTB4MDIgc3BsaXQgc3RvcmUKLW5hbWU6bW9iX2xvYWRfcmVwbGF5IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2EKLQkweDAyIHJlcGxheSBjYXVzZTogdW5rbm93biBzdG9yZSBhZGRyZXNzCi0JMHgwOCByZXBsYXkgY2F1c2U6IHVua25vd24gc3RvcmUgZGF0YQotCTB4MTAgcmVwbGF5IGNhdXNlOiBwYXJ0aWFsIG92ZXJsYXAgYmV0d2VlbiBsb2FkIGFuZCBzdG9yZQotCTB4MjAgcmVwbGF5IGNhdXNlOiBtaXNtYXRjaGVkIGxvdyA0IGJpdHMgYmV0d2VlbiBsb2FkIGFuZCBzdG9yZSBhZGRyCi1uYW1lOmJzcV9jYWNoZV9yZWZlcmVuY2UgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNzNmCi0JMHgwMSByZWFkIDJuZCBsZXZlbCBjYWNoZSBoaXQgc2hhcmVkCi0JMHgwMiByZWFkIDJuZCBsZXZlbCBjYWNoZSBoaXQgZXhjbHVzaXZlCi0JMHgwNCByZWFkIDJuZCBsZXZlbCBjYWNoZSBoaXQgbW9kaWZpZWQKLQkweDA4IHJlYWQgM3JkIGxldmVsIGNhY2hlIGhpdCBzaGFyZWQKLQkweDEwIHJlYWQgM3JkIGxldmVsIGNhY2hlIGhpdCBleGNsdXNpdmUKLQkweDIwIHJlYWQgM3JkIGxldmVsIGNhY2hlIGhpdCBtb2RpZmllZAotCTB4MTAwIHJlYWQgMm5kIGxldmVsIGNhY2hlIG1pc3MKLQkweDIwMCByZWFkIDNyZCBsZXZlbCBjYWNoZSBtaXNzCi0JMHg0MDAgd3JpdGViYWNrIGxvb2t1cCBmcm9tIERBQyBtaXNzZXMgMm5kIGxldmVsIGNhY2hlCi1uYW1lOng4N19hc3Npc3QgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxZgotCTB4MDEgaGFuZGxlIEZQIHN0YWNrIHVuZGVyZmxvdwotCTB4MDIgaGFuZGxlIEZQIHN0YWNrIG92ZXJmbG93Ci0JMHgwNCBoYW5kbGUgeDg3IG91dHB1dCBvdmVyZmxvdwotCTB4MDggaGFuZGxlIHg4NyBvdXRwdXQgdW5kZXJmbG93Ci0JMHgxMCBoYW5kbGUgeDg3IGlucHV0IGFzc2lzdAotbmFtZTptYWNoaW5lX2NsZWFyIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKLQkweDAxIGNvdW50IGEgcG9ydGlvbiBvZiBjeWNsZXMgdGhlIG1hY2hpbmUgaXMgY2xlYXJlZCBmb3IgYW55IGNhdXNlCi0JMHgwNCBjb3VudCBlYWNoIHRpbWUgdGhlIG1hY2hpbmUgaXMgY2xlYXJlZCBkdWUgdG8gbWVtb3J5IG9yZGVyaW5nIGlzc3VlcwotCTB4NDAgY291bnQgZWFjaCB0aW1lIHRoZSBtYWNoaW5lIGlzIGNsZWFyZWQgZHVlIHRvIHNlbGYgbW9kaWZ5aW5nIGNvZGUKLW5hbWU6Z2xvYmFsX3Bvd2VyX2V2ZW50cyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDEKLQkweDAxIG1hbmRhdG9yeQotbmFtZTp0Y19tc194ZmVyIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMQotCTB4MDEgY291bnQgVEMgdG8gTVMgdHJhbnNmZXJzCi1uYW1lOnVvcF9xdWV1ZV93cml0ZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNwotCTB4MDEgY291bnQgdW9wcyB3cml0dGVuIHRvIHF1ZXVlIGZyb20gVEMgYnVpbGQgbW9kZQotCTB4MDIgY291bnQgdW9wcyB3cml0dGVuIHRvIHF1ZXVlIGZyb20gVEMgZGVsaXZlciBtb2RlCi0JMHgwNCBjb3VudCB1b3BzIHdyaXR0ZW4gdG8gcXVldWUgZnJvbSBtaWNyb2NvZGUgUk9NCi1uYW1lOmluc3RyX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQotCTB4MDEgY291bnQgbm9uLWJvZ3VzIGluc3RydWN0aW9ucyB3aGljaCBhcmUgbm90IHRhZ2dlZAotCTB4MDIgY291bnQgbm9uLWJvZ3VzIGluc3RydWN0aW9ucyB3aGljaCBhcmUgdGFnZ2VkCi0JMHgwNCBjb3VudCBib2d1cyBpbnN0cnVjdGlvbnMgd2hpY2ggYXJlIG5vdCB0YWdnZWQKLQkweDA4IGNvdW50IGJvZ3VzIGluc3RydWN0aW9ucyB3aGljaCBhcmUgdGFnZ2VkCi1uYW1lOnVvcHNfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCi0JMHgwMSBjb3VudCBtYXJrZWQgdW9wcyB3aGljaCBhcmUgbm9uLWJvZ3VzCi0JMHgwMiBjb3VudCBtYXJrZWQgdW9wcyB3aGljaCBhcmUgYm9ndXMKLW5hbWU6dW9wX3R5cGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMgotCTB4MDIgY291bnQgdW9wcyB3aGljaCBhcmUgbG9hZCBvcGVyYXRpb25zCi0JMHgwNCBjb3VudCB1b3BzIHdoaWNoIGFyZSBzdG9yZSBvcGVyYXRpb25zCi1uYW1lOmJyYW5jaF90eXBlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKLQkweDAxIGNvdW50IHVuY29uZGl0aW9uYWwganVtcHMKLQkweDAyIGNvdW50IGNvbmRpdGlvbmFsIGp1bXBzCi0JMHgwNCBjb3VudCBjYWxsIGJyYW5jaGVzCi0JMHgwOCBjb3VudCByZXR1cm4gYnJhbmNoZXMKLQkweDEwIGNvdW50IGluZGlyZWN0IGp1bXBzCmRpZmYgLS1naXQgYS9ldmVudHMvaTM4Ni9wNC9ldmVudHMgYi9ldmVudHMvaTM4Ni9wNC9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NzhmZDUuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2kzODYvcDQvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyBQZW50aXVtIElWIGV2ZW50cwotIwotIyBOT1RFOiBldmVudHMgY2Fubm90IGN1cnJlbnRseSBiZSAweDAwIGR1ZSB0byBldmVudCBiaW5kaW5nIGNoZWNrcyBpbgotIyBkcml2ZXIKLSMKLWV2ZW50OjB4MWQgY291bnRlcnM6MCw0IHVtOmdsb2JhbF9wb3dlcl9ldmVudHMgbWluaW11bTozMDAwIG5hbWU6R0xPQkFMX1BPV0VSX0VWRU5UUyA6IHRpbWUgZHVyaW5nIHdoaWNoIHByb2Nlc3NvciBpcyBub3Qgc3RvcHBlZAotZXZlbnQ6MHgwMSBjb3VudGVyczozLDcgdW06YnJhbmNoX3JldGlyZWQgbWluaW11bTozMDAwIG5hbWU6QlJBTkNIX1JFVElSRUQgOiByZXRpcmVkIGJyYW5jaGVzCi1ldmVudDoweDAyIGNvdW50ZXJzOjMsNyB1bTptaXNwcmVkX2JyYW5jaF9yZXRpcmVkIG1pbmltdW06MzAwMCBuYW1lOk1JU1BSRURfQlJBTkNIX1JFVElSRUQgOiByZXRpcmVkIG1pc3ByZWRpY3RlZCBicmFuY2hlcwotZXZlbnQ6MHgwNCBjb3VudGVyczowLDQgdW06YnB1X2ZldGNoX3JlcXVlc3QgbWluaW11bTozMDAwIG5hbWU6QlBVX0ZFVENIX1JFUVVFU1QgOiBpbnN0cnVjdGlvbiBmZXRjaCByZXF1ZXN0cyBmcm9tIHRoZSBicmFuY2ggcHJlZGljdCB1bml0Ci1ldmVudDoweDA1IGNvdW50ZXJzOjAsNCB1bTppdGxiX3JlZmVyZW5jZSBtaW5pbXVtOjMwMDAgbmFtZTpJVExCX1JFRkVSRU5DRSA6IHRyYW5zbGF0aW9ucyB1c2luZyB0aGUgaW5zdHJ1Y3Rpb24gdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlcgotZXZlbnQ6MHgwNiBjb3VudGVyczoyLDYgdW06bWVtb3J5X2NhbmNlbCBtaW5pbXVtOjMwMDAgbmFtZTpNRU1PUllfQ0FOQ0VMIDogY2FuY2VsbGVkIHJlcXVlc2V0cyBpbiBkYXRhIGNhY2hlIGFkZHJlc3MgY29udHJvbCB1bml0Ci1ldmVudDoweDA3IGNvdW50ZXJzOjIsNiB1bTptZW1vcnlfY29tcGxldGUgbWluaW11bTozMDAwIG5hbWU6TUVNT1JZX0NPTVBMRVRFIDogY29tcGxldGVkIHNwbGl0Ci1ldmVudDoweDA4IGNvdW50ZXJzOjIsNiB1bTpsb2FkX3BvcnRfcmVwbGF5IG1pbmltdW06MzAwMCBuYW1lOkxPQURfUE9SVF9SRVBMQVkgOiByZXBsYXllZCBldmVudHMgYXQgdGhlIGxvYWQgcG9ydAotZXZlbnQ6MHgwOSBjb3VudGVyczoyLDYgdW06c3RvcmVfcG9ydF9yZXBsYXkgbWluaW11bTozMDAwIG5hbWU6U1RPUkVfUE9SVF9SRVBMQVkgOiByZXBsYXllZCBldmVudHMgYXQgdGhlIHN0b3JlIHBvcnQKLWV2ZW50OjB4MGEgY291bnRlcnM6MCw0IHVtOm1vYl9sb2FkX3JlcGxheSBtaW5pbXVtOjMwMDAgbmFtZTpNT0JfTE9BRF9SRVBMQVkgOiByZXBsYXllZCBsb2FkcyBmcm9tIHRoZSBtZW1vcnkgb3JkZXIgYnVmZmVyCi1ldmVudDoweDBjIGNvdW50ZXJzOjAsNCB1bTpic3FfY2FjaGVfcmVmZXJlbmNlIG1pbmltdW06MzAwMCBuYW1lOkJTUV9DQUNIRV9SRUZFUkVOQ0UgOiBjYWNoZSByZWZlcmVuY2VzIHNlZW4gYnkgdGhlIGJ1cyB1bml0Ci0jIGludGVsIGRvYyB2b2wgMyB0YWJsZSBBLTEgUDQgYW5kIHhlb24gd2l0aCBjcHVpZCBzaWduYXR1cmUgPCAweGYyNyBkb2VuJ3QgYWxsb3cgTVNSX0ZTQl9FU0NSMSBzbyBvbiBvbmx5IGNvdW50ZXIgMCBpcyBhdmFpbGFibGUKLWV2ZW50OjB4MGQgY291bnRlcnM6MCB1bTppb3EgbWluaW11bTozMDAwIG5hbWU6SU9RX0FMTE9DQVRJT04gOiBidXMgdHJhbnNhY3Rpb25zCi0jIEZJWE1FIHRoZSB1bml0IG1hc2sgYXNzb2NpYXRlZCBpcyBrbm93biB0byBnZXQgZGlmZmVyZW50IGJlaGF2aW9yIGJldHdlZW4gY3B1Ci0jIHN0ZXAgaWQsIGl0IG5lZWQgdG8gYmUgZG9jdW1lbnRlZCBpbiBQNCBldmVudHMgZG9jCi1ldmVudDoweDBlIGNvdW50ZXJzOjQgdW06aW9xIG1pbmltdW06MzAwMCBuYW1lOklPUV9BQ1RJVkVfRU5UUklFUyA6IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBJT1Egd2hpY2ggYXJlIGFjdGl2ZQotZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOmJzcSBtaW5pbXVtOjMwMDAgbmFtZTpCU1FfQUxMT0NBVElPTiA6IGFsbG9jYXRpb25zIGluIHRoZSBidXMgc2VxdWVuY2UgdW5pdAotZXZlbnQ6MHgxMiBjb3VudGVyczozLDcgdW06eDg3X2Fzc2lzdCBtaW5pbXVtOjMwMDAgbmFtZTpYODdfQVNTSVNUIDogcmV0aXJlZCB4ODcgaW5zdHJ1Y3Rpb25zIHdoaWNoIHJlcXVpcmVkIHNwZWNpYWwgaGFuZGxpbmcKLWV2ZW50OjB4MWMgY291bnRlcnM6Myw3IHVtOm1hY2hpbmVfY2xlYXIgbWluaW11bTozMDAwIG5hbWU6TUFDSElORV9DTEVBUiA6IGN5Y2xlcyB3aXRoIGVudGlyZSBtYWNoaW5lIHBpcGVsaW5lIGNsZWFyZWQKLWV2ZW50OjB4MWUgY291bnRlcnM6MSw1IHVtOnRjX21zX3hmZXIgbWluaW11bTozMDAwIG5hbWU6VENfTVNfWEZFUiA6IG51bWJlciBvZiB0aW1lcyB1b3BzIGRlbGl2ZXIgY2hhbmdlZCBmcm9tIFRDIHRvIE1TIFJPTQotZXZlbnQ6MHgxZiBjb3VudGVyczoxLDUgdW06dW9wX3F1ZXVlX3dyaXRlcyBtaW5pbXVtOjMwMDAgbmFtZTpVT1BfUVVFVUVfV1JJVEVTIDogbnVtYmVyIG9mIHZhbGlkIHVvcHMgd3JpdHRlbiB0byB0aGUgdW9wIHF1ZXVlCi1ldmVudDoweDIzIGNvdW50ZXJzOjMsNyB1bTppbnN0cl9yZXRpcmVkIG1pbmltdW06MzAwMCBuYW1lOklOU1RSX1JFVElSRUQgOiByZXRpcmVkIGluc3RydWN0aW9ucwotZXZlbnQ6MHgyNCBjb3VudGVyczozLDcgdW06dW9wc19yZXRpcmVkIG1pbmltdW06MzAwMCBuYW1lOlVPUFNfUkVUSVJFRCA6IHJldGlyZWQgdW9wcwotZXZlbnQ6MHgyNSBjb3VudGVyczozLDcgdW06dW9wX3R5cGUgbWluaW11bTozMDAwIG5hbWU6VU9QX1RZUEUgOiB0eXBlIG9mIHVvcCB0YWdnZWQgYnkgZnJvbnQtZW5kIHRhZ2dpbmcKLWV2ZW50OjB4MjYgY291bnRlcnM6MSw1IHVtOmJyYW5jaF90eXBlIG1pbmltdW06MzAwMCBuYW1lOlJFVElSRURfTUlTUFJFRF9CUkFOQ0hfVFlQRSA6IHJldGlyZWQgbWlzcHJlZGljdGVkIGJyYW5jaGVkLCBzZWxlY3RlZCBieSB0eXBlCi1ldmVudDoweDI3IGNvdW50ZXJzOjEsNSB1bTpicmFuY2hfdHlwZSBtaW5pbXVtOjMwMDAgbmFtZTpSRVRJUkVEX0JSQU5DSF9UWVBFIDogcmV0aXJlZCBicmFuY2hlcywgc2VsZWN0ZWQgYnkgdHlwZQotZXZlbnQ6MHgwMyBjb3VudGVyczoxLDUgdW06dGNfZGVsaXZlcl9tb2RlIG1pbmltdW06MzAwMCBuYW1lOlRDX0RFTElWRVJfTU9ERSA6IGR1cmF0aW9uIChpbiBjbG9jayBjeWNsZXMpIGluIHRoZSB0cmFjZSBjYWNoZSBhbmQgZGVjb2RlIGVuZ2luZQotZXZlbnQ6MHgwYiBjb3VudGVyczowLDQgdW06cGFnZV93YWxrX3R5cGUgbWluaW11bTozMDAwIG5hbWU6UEFHRV9XQUxLX1RZUEUgOiBwYWdlIHdhbGtzIGJ5IHRoZSBwYWdlIG1pc3MgaGFuZGxlcgotZXZlbnQ6MHgwZiBjb3VudGVyczowLDQgdW06ZnNiX2RhdGFfYWN0aXZpdHkgbWluaW11bTozMDAwIG5hbWU6RlNCX0RBVEFfQUNUSVZJVFkgOiBEUkRZIG9yIERCU1kgZXZlbnRzIG9uIHRoZSBmcm9udCBzaWRlIGJ1cwotZXZlbnQ6MHgxMSBjb3VudGVyczo0IHVtOmJzcSBtaW5pbXVtOjMwMDAgbmFtZTpCU1FfQUNUSVZFX0VOVFJJRVMgOiBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYnVzIHNlcXVlbmNlIHVuaXQgd2hpY2ggYXJlIGFjdGl2ZQotZXZlbnQ6MHgxMyBjb3VudGVyczoyLDYgdW06ZmxhbWVfdW9wIG1pbmltdW06MzAwMCBuYW1lOlNTRV9JTlBVVF9BU1NJU1QgOiBpbnB1dCBhc3Npc3RzIHJlcXVlc3RlZCBmb3IgU1NFIG9yIFNTRTIgb3BlcmFuZHMKLWV2ZW50OjB4MTQgY291bnRlcnM6Miw2IHVtOmZsYW1lX3VvcCBtaW5pbXVtOjMwMDAgbmFtZTpQQUNLRURfU1BfVU9QIDogcGFja2VkIHNpbmdsZSBwcmVjaXNpb24gdW9wcwotZXZlbnQ6MHgxNSBjb3VudGVyczoyLDYgdW06ZmxhbWVfdW9wIG1pbmltdW06MzAwMCBuYW1lOlBBQ0tFRF9EUF9VT1AgOiBwYWNrZWQgZG91YmxlIHByZWNpc2lvbiB1b3BzCi1ldmVudDoweDE2IGNvdW50ZXJzOjIsNiB1bTpmbGFtZV91b3AgbWluaW11bTozMDAwIG5hbWU6U0NBTEFSX1NQX1VPUCA6IHNjYWxhciBzaW5nbGUgcHJlY2lzaW9uIHVvcHMKLWV2ZW50OjB4MTcgY291bnRlcnM6Miw2IHVtOmZsYW1lX3VvcCBtaW5pbXVtOjMwMDAgbmFtZTpTQ0FMQVJfRFBfVU9QIDogc2NhbGFyIGRvdWJsZSBwcmVzaXNpb24gdW9wcwotZXZlbnQ6MHgxOCBjb3VudGVyczoyLDYgdW06ZmxhbWVfdW9wIG1pbmltdW06MzAwMCBuYW1lOjY0QklUX01NWF9VT1AgOiA2NCBiaXQgaW50ZWdlciBTSU1EIE1NWCB1b3BzCi1ldmVudDoweDE5IGNvdW50ZXJzOjIsNiB1bTpmbGFtZV91b3AgbWluaW11bTozMDAwIG5hbWU6MTI4QklUX01NWF9VT1AgOiAxMjggYml0IGludGVnZXIgU0lNRCBTU0UyIHVvcHMKLWV2ZW50OjB4MWEgY291bnRlcnM6Miw2IHVtOmZsYW1lX3VvcCBtaW5pbXVtOjMwMDAgbmFtZTpYODdfRlBfVU9QIDogeDg3IGZsb2F0aW5nIHBvaW50IHVvcHMKLWV2ZW50OjB4MWIgY291bnRlcnM6Miw2IHVtOng4N19zaW1kX21vdmVzX3VvcCBtaW5pbXVtOjMwMDAgbmFtZTpYODdfU0lNRF9NT1ZFU19VT1AgOiB4ODcgRlBVLCBNTVgsIFNTRSwgb3IgU1NFMiBsb2Fkcywgc3RvcmVzIGFuZCByZWctdG8tcmVnIG1vdmVzCmRpZmYgLS1naXQgYS9ldmVudHMvaTM4Ni9wNC91bml0X21hc2tzIGIvZXZlbnRzL2kzODYvcDQvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk0NmZkZC4uMDAwMDAwMAotLS0gYS9ldmVudHMvaTM4Ni9wNC91bml0X21hc2tzCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLSMgUGVudGl1bSBJViBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOmJyYW5jaF9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGMKLQkweDAxIGJyYW5jaCBub3QtdGFrZW4gcHJlZGljdGVkCi0JMHgwMiBicmFuY2ggbm90LXRha2VuIG1pc3ByZWRpY3RlZAotCTB4MDQgYnJhbmNoIHRha2VuIHByZWRpY3RlZAotCTB4MDggYnJhbmNoIHRha2VuIG1pc3ByZWRpY3RlZAotbmFtZTptaXNwcmVkX2JyYW5jaF9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKLQkweDAxIHJldGlyZWQgaW5zdHJ1Y3Rpb24gaXMgbm9uLWJvZ3VzCi0jIEZJWE1FOiAwIGNvdW50IG5vdGhpbmcsIDB4ZmYgY291bnQgbW9yZSB0aGFuIDB4MDEsIGRvY3Mgc2F5cyBpdCdzIGEgYml0bWFzazoKLSMgc29tZXRoaW5nIHdyb25nIGluIGRvY3VtZW50YXRpb24gPwotbmFtZTpicHVfZmV0Y2hfcmVxdWVzdCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCi0JMHgwMSB0cmFjZSBjYWNoZSBsb29rdXAgbWlzcwotbmFtZTppdGxiX3JlZmVyZW5jZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3Ci0JMHgwMSBJVExCIGhpdAotCTB4MDIgSVRMQiBtaXNzCi0JMHgwNCB1bmNhY2hlYWJsZSBJVExCIGhpdAotbmFtZTptZW1vcnlfY2FuY2VsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDgKLQkweDA0IHJlcGxheWVkIGJlY2F1c2Ugbm8gc3RvcmUgcmVxdWVzdCBidWZmZXIgYXZhaWxhYmxlCi0JMHgwOCBjb25mbGljdHMgZHVlIHRvIDY0ayBhbGlhc2luZwotbmFtZTptZW1vcnlfY29tcGxldGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMwotCTB4MDEgbG9hZCBzcGxpdCBjb21wbGV0ZWQsIGV4Y2x1ZGluZyBVQy9XQyBsb2FkcwotCTB4MDIgYW55IHNwbGl0IHN0b3JlcyBjb21wbGV0ZWQKLQkweDA0IHVuY2FjaGVhYmxlIGxvYWQgc3BsaXQgY29tcGxldGVkCi0JMHgwOCB1bmNhY2hlYWJsZSBzdG9yZSBzcGxpdCBjb21wbGV0ZQotbmFtZTpsb2FkX3BvcnRfcmVwbGF5IHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMgotCTB4MDIgc3BsaXQgbG9hZAotbmFtZTpzdG9yZV9wb3J0X3JlcGxheSB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDIKLQkweDAyIHNwbGl0IHN0b3JlCi1uYW1lOm1vYl9sb2FkX3JlcGxheSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNhCi0JMHgwMiByZXBsYXkgY2F1c2U6IHVua25vd24gc3RvcmUgYWRkcmVzcwotCTB4MDggcmVwbGF5IGNhdXNlOiB1bmtub3duIHN0b3JlIGRhdGEKLQkweDEwIHJlcGxheSBjYXVzZTogcGFydGlhbCBvdmVybGFwIGJldHdlZW4gbG9hZCBhbmQgc3RvcmUKLQkweDIwIHJlcGxheSBjYXVzZTogbWlzbWF0Y2hlZCBsb3cgNCBiaXRzIGJldHdlZW4gbG9hZCBhbmQgc3RvcmUgYWRkcgotbmFtZTpic3FfY2FjaGVfcmVmZXJlbmNlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDczZgotCTB4MDEgcmVhZCAybmQgbGV2ZWwgY2FjaGUgaGl0IHNoYXJlZAotCTB4MDIgcmVhZCAybmQgbGV2ZWwgY2FjaGUgaGl0IGV4Y2x1c2l2ZQotCTB4MDQgcmVhZCAybmQgbGV2ZWwgY2FjaGUgaGl0IG1vZGlmaWVkCi0JMHgwOCByZWFkIDNyZCBsZXZlbCBjYWNoZSBoaXQgc2hhcmVkCi0JMHgxMCByZWFkIDNyZCBsZXZlbCBjYWNoZSBoaXQgZXhjbHVzaXZlCi0JMHgyMCByZWFkIDNyZCBsZXZlbCBjYWNoZSBoaXQgbW9kaWZpZWQKLQkweDEwMCByZWFkIDJuZCBsZXZlbCBjYWNoZSBtaXNzCi0JMHgyMDAgcmVhZCAzcmQgbGV2ZWwgY2FjaGUgbWlzcwotCTB4NDAwIHdyaXRlYmFjayBsb29rdXAgZnJvbSBEQUMgbWlzc2VzIDJuZCBsZXZlbCBjYWNoZQotbmFtZTppb3EgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhlZmUxCi0JMHgwMSBidXMgcmVxdWVzdCB0eXBlIGJpdCAwCi0JMHgwMiBidXMgcmVxdWVzdCB0eXBlIGJpdCAxCi0JMHgwNCBidXMgcmVxdWVzdCB0eXBlIGJpdCAyCi0JMHgwOCBidXMgcmVxdWVzdCB0eXBlIGJpdCAzCi0JMHgxMCBidXMgcmVxdWVzdCB0eXBlIGJpdCA0Ci0JMHgyMCBjb3VudCByZWFkIGVudHJpZXMKLQkweDQwIGNvdW50IHdyaXRlIGVudHJpZXMKLQkweDgwIGNvdW50IFVDIG1lbW9yeSBhY2Nlc3MgZW50cmllcwotCTB4MTAwIGNvdW50IFdDIG1lbW9yeSBhY2Nlc3MgZW50cmllcwotCTB4MjAwIGNvdW50IHdyaXRlLXRocm91Z2ggbWVtb3J5IGFjY2VzcyBlbnRyaWVzCi0JMHg0MDAgY291bnQgd3JpdGUtcHJvdGVjdGVkIG1lbW9yeSBhY2Nlc3MgZW50cmllcwotCTB4ODAwIGNvdW50IFdCIG1lbW9yeSBhY2Nlc3MgZW50cmllcwotCTB4MjAwMCBjb3VudCBvd24gc3RvcmUgcmVxdWVzdHMKLQkweDQwMDAgY291bnQgb3RoZXIgLyBETUEgc3RvcmUgcmVxdWVzdHMKLQkweDgwMDAgY291bnQgSFcvU1cgcHJlZmV0Y2ggcmVxdWVzdHMKLW5hbWU6YnNxIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MjEKLQkweDAxIChyKWVxICh0KXlwZSAoZSluY29kaW5nLCBiaXQgMDogc2VlIG5leHQgYml0Ci0JMHgwMiBydGUgYml0IDE6IDAwPXJlYWQsIDAxPXJlYWQgaW52YWxpZGF0ZSwgMTA9d3JpdGUsIDExPXdyaXRlYmFjawotCTB4MDQgcmVxIGxlbiBiaXQgMAotCTB4MDggcmVxIGxlbiBiaXQgMQotCTB4MjAgcmVxdWVzdCB0eXBlIGlzIGlucHV0ICgwPW91dHB1dCkKLQkweDQwIHJlcXVlc3QgdHlwZSBpcyBidXMgbG9jawotCTB4ODAgcmVxdWVzdCB0eXBlIGlzIGNhY2hlYWJsZQotCTB4MTAwIHJlcXVlc3QgdHlwZSBpcyA4LWJ5dGUgY2h1bmsgc3BsaXQgYWNyb3NzIDgtYnl0ZSBib3VuZGFyeQotCTB4MjAwIHJlcXVlc3QgdHlwZSBpcyBkZW1hbmQgKDA9cHJlZmV0Y2gpCi0JMHg0MDAgcmVxdWVzdCB0eXBlIGlzIG9yZGVyZWQKLQkweDgwMCAobSllbW9yeSAodCl5cGUgKGUpbmNvZGluZywgYml0IDA6IHNlZSBuZXh0IGJpdHMKLQkweDEwMDAgbXRlIGJpdCAxOiBzZWUgbmV4dCBiaXRzCi0JMHgyMDAwIG10ZSBiaXQgMjogMDAwPVVDLCAwMDE9VVNXQywgMTAwPVdULCAxMDE9V1AsIDExMD1XQgotbmFtZTp4ODdfYXNzaXN0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKLQkweDAxIGhhbmRsZSBGUCBzdGFjayB1bmRlcmZsb3cKLQkweDAyIGhhbmRsZSBGUCBzdGFjayBvdmVyZmxvdwotCTB4MDQgaGFuZGxlIHg4NyBvdXRwdXQgb3ZlcmZsb3cKLQkweDA4IGhhbmRsZSB4ODcgb3V0cHV0IHVuZGVyZmxvdwotCTB4MTAgaGFuZGxlIHg4NyBpbnB1dCBhc3Npc3QKLW5hbWU6bWFjaGluZV9jbGVhciB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCi0JMHgwMSBjb3VudCBhIHBvcnRpb24gb2YgY3ljbGVzIHRoZSBtYWNoaW5lIGlzIGNsZWFyZWQgZm9yIGFueSBjYXVzZQotCTB4MDQgY291bnQgZWFjaCB0aW1lIHRoZSBtYWNoaW5lIGlzIGNsZWFyZWQgZHVlIHRvIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMKLQkweDQwIGNvdW50IGVhY2ggdGltZSB0aGUgbWFjaGluZSBpcyBjbGVhcmVkIGR1ZSB0byBzZWxmIG1vZGlmeWluZyBjb2RlCi1uYW1lOmdsb2JhbF9wb3dlcl9ldmVudHMgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAxCi0JMHgwMSBtYW5kYXRvcnkKLW5hbWU6dGNfbXNfeGZlciB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDEKLQkweDAxIGNvdW50IFRDIHRvIE1TIHRyYW5zZmVycwotbmFtZTp1b3BfcXVldWVfd3JpdGVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKLQkweDAxIGNvdW50IHVvcHMgd3JpdHRlbiB0byBxdWV1ZSBmcm9tIFRDIGJ1aWxkIG1vZGUKLQkweDAyIGNvdW50IHVvcHMgd3JpdHRlbiB0byBxdWV1ZSBmcm9tIFRDIGRlbGl2ZXIgbW9kZQotCTB4MDQgY291bnQgdW9wcyB3cml0dGVuIHRvIHF1ZXVlIGZyb20gbWljcm9jb2RlIFJPTQotbmFtZTppbnN0cl9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKLQkweDAxIGNvdW50IG5vbi1ib2d1cyBpbnN0cnVjdGlvbnMgd2hpY2ggYXJlIG5vdCB0YWdnZWQKLQkweDAyIGNvdW50IG5vbi1ib2d1cyBpbnN0cnVjdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZAotCTB4MDQgY291bnQgYm9ndXMgaW5zdHJ1Y3Rpb25zIHdoaWNoIGFyZSBub3QgdGFnZ2VkCi0JMHgwOCBjb3VudCBib2d1cyBpbnN0cnVjdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZAotbmFtZTp1b3BzX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQotCTB4MDEgY291bnQgbWFya2VkIHVvcHMgd2hpY2ggYXJlIG5vbi1ib2d1cwotCTB4MDIgY291bnQgbWFya2VkIHVvcHMgd2hpY2ggYXJlIGJvZ3VzCi1uYW1lOnVvcF90eXBlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDIKLQkweDAyIGNvdW50IHVvcHMgd2hpY2ggYXJlIGxvYWQgb3BlcmF0aW9ucwotCTB4MDQgY291bnQgdW9wcyB3aGljaCBhcmUgc3RvcmUgb3BlcmF0aW9ucwotbmFtZTpicmFuY2hfdHlwZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCi0JMHgwMSBjb3VudCB1bmNvbmRpdGlvbmFsIGp1bXBzCi0JMHgwMiBjb3VudCBjb25kaXRpb25hbCBqdW1wcwotCTB4MDQgY291bnQgY2FsbCBicmFuY2hlcwotCTB4MDggY291bnQgcmV0dXJuIGJyYW5jaGVzCi0JMHgxMCBjb3VudCBpbmRpcmVjdCBqdW1wcwotbmFtZTp0Y19kZWxpdmVyX21vZGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNAotCTB4MDQgcHJvY2Vzc29yIGlzIGluIGRlbGl2ZXIgbW9kZQotCTB4MjAgcHJvY2Vzc29yIGlzIGluIGJ1aWxkIG1vZGUKLW5hbWU6cGFnZV93YWxrX3R5cGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQotCTB4MDEgcGFnZSB3YWxrIGZvciBkYXRhIFRMQiBtaXNzCi0JMHgwMiBwYWdlIHdhbGsgZm9yIGluc3RydWN0aW9uIFRMQiBtaXNzCi1uYW1lOmZzYl9kYXRhX2FjdGl2aXR5IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKLQkweDAxIGNvdW50IHdoZW4gdGhpcyBwcm9jZXNzb3IgZHJpdmVzIGRhdGEgb250byBidXMKLQkweDAyIGNvdW50IHdoZW4gdGhpcyBwcm9jZXNzb3IgcmVhZHMgZGF0YSBmcm9tIGJ1cwotCTB4MDQgY291bnQgd2hlbiBkYXRhIGlzIG9uIGJ1cyBidXQgbm90IHNhbXBsZWQgYnkgdGhpcyBwcm9jZXNzb3IKLQkweDA4IGNvdW50IHdoZW4gdGhpcyBwcm9jZXNzb3IgcmVzZXJ2ZXMgYnVzIGZvciBkcml2aW5nCi0JMHgxMCBjb3VudCB3aGVuIG90aGVyIHJlc2VydmVzIGJ1cyBhbmQgdGhpcyBwcm9jZXNzb3Igd2lsbCBzYW1wbGUKLQkweDIwIGNvdW50IHdoZW4gb3RoZXIgcmVzZXJ2ZXMgYnVzIGFuZCB0aGlzIHByb2Nlc3NvciB3aWxsIG5vdCBzYW1wbGUKLW5hbWU6ZmxhbWVfdW9wIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHg4MDAwCi0JMHg4MDAwIGNvdW50IGFsbCB1b3BzIG9mIHRoaXMgdHlwZQotbmFtZTp4ODdfc2ltZF9tb3Zlc191b3AgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxOAotCTB4MDggY291bnQgYWxsIHg4NyBTSU1EIHN0b3JlL21vdmUgdW9wcwotCTB4MTAgY291bnQgYWxsIHg4NyBTSU1EIGxvYWQgdW9wcwpkaWZmIC0tZ2l0IGEvZXZlbnRzL2kzODYvcDZfbW9iaWxlL2V2ZW50cyBiL2V2ZW50cy9pMzg2L3A2X21vYmlsZS9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZGU3YmIuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2kzODYvcDZfbW9iaWxlL2V2ZW50cworKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0jIFBlbnRpdW0gTSBldmVudHMKLSMKLWV2ZW50OjB4NzkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6Q1BVX0NMS19VTkhBTFRFRCA6IGNsb2NrcyBwcm9jZXNzb3IgaXMgbm90IGhhbHRlZCwgYW5kIG5vdCBpbiBhIHRoZXJtYWwgdHJpcAotZXZlbnQ6MHg0MyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfTUVNX1JFRlMgOiBhbGwgbWVtb3J5IHJlZmVyZW5jZXMsIGNhY2hhYmxlIGFuZCBub24KLWV2ZW50OjB4NDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ1VfTElORVNfSU4gOiB0b3RhbCBsaW5lcyBhbGxvY2F0ZWQgaW4gdGhlIERDVQotZXZlbnQ6MHg0NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9NX0xJTkVTX0lOIDogbnVtYmVyIG9mIE0gc3RhdGUgbGluZXMgYWxsb2NhdGVkIGluIERDVQotZXZlbnQ6MHg0NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9NX0xJTkVTX09VVCA6IG51bWJlciBvZiBNIGxpbmVzIGV2aWN0ZWQgZnJvbSB0aGUgRENVCi1ldmVudDoweDQ4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01JU1NfT1VUU1RBTkRJTkcgOiBudW1iZXIgb2YgY3ljbGVzIHdoaWxlIERDVSBtaXNzIG91dHN0YW5kaW5nCi1ldmVudDoweDgwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSCA6IG51bWJlciBvZiBub24vY2FjaGFibGUgaW5zdHJ1Y3Rpb24gZmV0Y2hlcwotZXZlbnQ6MHg4MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9JRkVUQ0hfTUlTUyA6IG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaCBtaXNzZXMKLWV2ZW50OjB4ODUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX01JU1MgOiBudW1iZXIgb2YgSVRMQiBtaXNzZXMKLWV2ZW50OjB4ODYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfTUVNX1NUQUxMIDogY3ljbGVzIGluc3RydWN0aW9uIGZldGNoIHBpcGUgaXMgc3RhbGxlZAotZXZlbnQ6MHg4NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklMRF9TVEFMTCA6IGN5Y2xlcyBpbnN0cnVjdGlvbiBsZW5ndGggZGVjb2RlciBpcyBzdGFsbGVkCi1ldmVudDoweDI4IGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfSUZFVENIIDogbnVtYmVyIG9mIEwyIGluc3RydWN0aW9uIGZldGNoZXMKLWV2ZW50OjB4MjkgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9MRCA6IG51bWJlciBvZiBMMiBkYXRhIGxvYWRzCi1ldmVudDoweDJhIGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfU1QgOiBudW1iZXIgb2YgTDIgZGF0YSBzdG9yZXMKLWV2ZW50OjB4MjQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9MSU5FU19JTiA6IG51bWJlciBvZiBhbGxvY2F0ZWQgbGluZXMgaW4gTDIKLWV2ZW50OjB4MjYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9MSU5FU19PVVQgOiBudW1iZXIgb2YgcmVjb3ZlcmVkIGxpbmVzIGZyb20gTDIKLWV2ZW50OjB4MjUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX0lOTSA6IG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyBhbGxvY2F0ZWQgaW4gTDIKLWV2ZW50OjB4MjcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX09VVE0gOiBudW1iZXIgb2YgbW9kaWZpZWQgbGluZXMgcmVtb3ZlZCBmcm9tIEwyCi1ldmVudDoweDJlIGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfUlFTVFMgOiBudW1iZXIgb2YgTDIgcmVxdWVzdHMKLWV2ZW50OjB4MjEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9BRFMgOiBudW1iZXIgb2YgTDIgYWRkcmVzcyBzdHJvYmVzCi1ldmVudDoweDIyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfREJVU19CVVNZIDogbnVtYmVyIG9mIGN5Y2xlcyBkYXRhIGJ1cyB3YXMgYnVzeQotZXZlbnQ6MHgyMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0RCVVNfQlVTWV9SRCA6IGN5Y2xlcyBkYXRhIGJ1cyB3YXMgYnVzeSBpbiB4ZmVyIGZyb20gTDIgdG8gQ1BVCi1ldmVudDoweDYyIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfRFJEWV9DTE9DS1MgOiBudW1iZXIgb2YgY2xvY2tzIERSRFkgaXMgYXNzZXJ0ZWQKLWV2ZW50OjB4NjMgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19MT0NLX0NMT0NLUyA6IG51bWJlciBvZiBjbG9ja3MgTE9DSyBpcyBhc3NlcnRlZAotZXZlbnQ6MHg2MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19SRVFfT1VUU1RBTkRJTkcgOiBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgYnVzIHJlcXVlc3RzCi1ldmVudDoweDY1IGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9CUkQgOiBudW1iZXIgb2YgYnVyc3QgcmVhZCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjYgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1JGTyA6IG51bWJlciBvZiByZWFkIGZvciBvd25lcnNoaXAgdHJhbnNhY3Rpb25zCi1ldmVudDoweDY3IGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfV0IgOiBudW1iZXIgb2Ygd3JpdGUgYmFjayB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjggY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0lGRVRDSCA6IG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjkgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0lOVkFMIDogbnVtYmVyIG9mIGludmFsaWRhdGUgdHJhbnNhY3Rpb25zCi1ldmVudDoweDZhIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9QV1IgOiBudW1iZXIgb2YgcGFydGlhbCB3cml0ZSB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmIgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19QIDogbnVtYmVyIG9mIHBhcnRpYWwgdHJhbnNhY3Rpb25zCi1ldmVudDoweDZjIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfSU8gOiBudW1iZXIgb2YgSS9PIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2ZCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX0RFRiA6IG51bWJlciBvZiBkZWZlcnJlZCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmUgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0JVUlNUIDogbnVtYmVyIG9mIGJ1cnN0IHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg3MCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQU5ZIDogbnVtYmVyIG9mIGFsbCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmYgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX01FTSA6IG51bWJlciBvZiBtZW1vcnkgdHJhbnNhY3Rpb25zCi1ldmVudDoweDY0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0RBVEFfUkNWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyByZWNlaXZpbmcgZGF0YQotZXZlbnQ6MHg2MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19CTlJfRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEJOUiBwaW4KLWV2ZW50OjB4N2EgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfSElUX0RSViA6IGJ1cyBjeWNsZXMgdGhpcyBwcm9jZXNzb3IgaXMgZHJpdmluZyBISVQgcGluCi1ldmVudDoweDdiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0hJVE1fRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEhJVE0gcGluCi1ldmVudDoweDdlIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX1NOT09QX1NUQUxMIDogY3ljbGVzIGR1cmluZyBidXMgc25vb3Agc3RhbGwKLWV2ZW50OjB4YzEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkNPTVBfRkxPUF9SRVQgOiBudW1iZXIgb2YgY29tcHV0YXRpb25hbCBGUCBvcGVyYXRpb25zIHJldGlyZWQKLWV2ZW50OjB4MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkZMT1BTIDogbnVtYmVyIG9mIGNvbXB1dGF0aW9uYWwgRlAgb3BlcmF0aW9ucyBleGVjdXRlZAotZXZlbnQ6MHgxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9BU1NJU1QgOiBudW1iZXIgb2YgRlAgZXhjZXB0aW9ucyBoYW5kbGVkIGJ5IG1pY3JvY29kZQotZXZlbnQ6MHgxMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6TVVMIDogbnVtYmVyIG9mIG11bHRpcGxpZXMKLWV2ZW50OjB4MTMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElWIDogbnVtYmVyIG9mIGRpdmlkZXMKLWV2ZW50OjB4MTQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOkNZQ0xFU19ESVZfQlVTWSA6IGN5Y2xlcyBkaXZpZGVyIGlzIGJ1c3kKLWV2ZW50OjB4MDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRF9CTE9DS1MgOiBudW1iZXIgb2Ygc3RvcmUgYnVmZmVyIGJsb2NrcwotZXZlbnQ6MHgwNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNCX0RSQUlOUyA6IG51bWJlciBvZiBzdG9yZSBidWZmZXIgZHJhaW4gY3ljbGVzCi1ldmVudDoweDA1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTQUxJR05fTUVNX1JFRiA6IG51bWJlciBvZiBtaXNhbGlnbmVkIGRhdGEgbWVtb3J5IHJlZmVyZW5jZXMKLWV2ZW50OjB4MDcgY291bnRlcnM6MCwxIHVtOmtuaV9wcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOkVNT05fS05JX1BSRUZfRElTUEFUQ0hFRCA6IG51bWJlciBvZiBLTkkgcHJlLWZldGNoL3dlYWtseSBvcmRlcmVkIGluc25zIGRpc3BhdGNoZWQKLWV2ZW50OjB4NGIgY291bnRlcnM6MCwxIHVtOmtuaV9wcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOkVNT05fS05JX1BSRUZfTUlTUyA6IG51bWJlciBvZiBLTkkgcHJlLWZldGNoL3dlYWtseSBvcmRlcmVkIGluc25zIHRoYXQgbWlzcyBhbGwgY2FjaGVzCi1ldmVudDoweGMwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NjAwMCBuYW1lOklOU1RfUkVUSVJFRCA6IG51bWJlciBvZiBpbnN0cnVjdGlvbnMgcmV0aXJlZAotZXZlbnQ6MHhjMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpVT1BTX1JFVElSRUQgOiBudW1iZXIgb2YgVU9QcyByZXRpcmVkCi0jIEVycmF0YSAgbGlzdHMgSU5TVF9ERUNPREUgYXMgbm90IGFjY3VyYXRlLiBTZWUgMjUyNjY1MDcucGRmLgotZXZlbnQ6MHhkMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGRlY29kZWQKLWV2ZW50OjB4ZDggY291bnRlcnM6MCwxIHVtOnNzZV9zc2UyX2luc3RfcmV0aXJlZCBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX1NTRV9TU0UyX0lOU1RfUkVUSVJFRCA6IFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKLWV2ZW50OjB4ZDkgY291bnRlcnM6MCwxIHVtOnNzZV9zc2UyX2luc3RfcmV0aXJlZCBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX1NTRV9TU0UyX0NPTVBfSU5TVF9SRVRJUkVEIDogQ29tcHV0YXRpb25hbCBTU0UgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKLWV2ZW50OjB4YzggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpIV19JTlRfUlggOiBudW1iZXIgb2YgaGFyZHdhcmUgaW50ZXJydXB0cyByZWNlaXZlZAotZXZlbnQ6MHhjNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlRfTUFTS0VEIDogY3ljbGVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkCi1ldmVudDoweGM3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0lOVF9QRU5ESU5HX0FORF9NQVNLRUQgOiBjeWNsZXMgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2l0aCBwZW5kaW5nIGludGVycnVwdHMKLWV2ZW50OjB4YzQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyByZXRpcmVkCi1ldmVudDoweGM1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1JFVElSRUQgOiBudW1iZXIgb2YgbWlzcHJlZGljdGVkIGJyYW5jaGVzIHJldGlyZWQKLWV2ZW50OjB4YzkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9UQUtFTl9SRVRJUkVEIDogbnVtYmVyIG9mIHRha2VuIGJyYW5jaGVzIHJldGlyZWQKLWV2ZW50OjB4Y2EgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9NSVNTX1BSRURfVEFLRU5fUkVUIDogbnVtYmVyIG9mIHRha2VuIG1pc3ByZWRpY3Rpb25zIGJyYW5jaGVzIHJldGlyZWQKLWV2ZW50OjB4ZTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyBkZWNvZGVkCi1ldmVudDoweGUyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlRCX01JU1NFUyA6IG51bWJlciBvZiBicmFuY2hlcyB0aGF0IG1pc3MgdGhlIEJUQgotZXZlbnQ6MHhlNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX0JPR1VTIDogbnVtYmVyIG9mIGJvZ3VzIGJyYW5jaGVzCi1ldmVudDoweGU2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFDTEVBUlMgOiBudW1iZXIgb2YgdGltZXMgQkFDTEVBUiBpcyBhc3NlcnRlZAotZXZlbnQ6MHhhMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFU09VUkNFX1NUQUxMUyA6IGN5Y2xlcyBkdXJpbmcgcmVzb3VyY2UgcmVsYXRlZCBzdGFsbHMKLWV2ZW50OjB4ZDIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQVJUSUFMX1JBVF9TVEFMTFMgOiBjeWNsZXMgb3IgZXZlbnRzIGZvciBwYXJ0aWFsIHN0YWxscwotZXZlbnQ6MHgwNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFR01FTlRfUkVHX0xPQURTIDogbnVtYmVyIG9mIHNlZ21lbnQgcmVnaXN0ZXIgbG9hZHMKLWV2ZW50OjB4YjEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TU1YX1NBVF9JTlNUUl9FWEVDIDogbnVtYmVyIG9mIE1NWCBzYXR1cmF0aW5nIGluc3RydWN0aW9ucyBleGVjdXRlZAotZXZlbnQ6MHhiMiBjb3VudGVyczowLDEgdW06bW14X3VvcHMgbWluaW11bTozMDAwIG5hbWU6TU1YX1VPUFNfRVhFQyA6IG51bWJlciBvZiBNTVggVU9QUyBleGVjdXRlZAotZXZlbnQ6MHhiMyBjb3VudGVyczowLDEgdW06bW14X2luc3RyX3R5cGVfZXhlYyBtaW5pbXVtOjMwMDAgbmFtZTpNTVhfSU5TVFJfVFlQRV9FWEVDIDogbnVtYmVyIG9mIE1NWCBwYWNraW5nIGluc3RydWN0aW9ucwotZXZlbnQ6MHhjYyBjb3VudGVyczowLDEgdW06bW14X3RyYW5zIG1pbmltdW06MzAwMCBuYW1lOkZQX01NWF9UUkFOUyA6IE1NWC1mbG9hdGluZyBwb2ludCB0cmFuc2l0aW9ucwotZXZlbnQ6MHhjZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1NWF9BU1NJU1QgOiBudW1iZXIgb2YgRU1NUyBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKLWV2ZW50OjB4Y2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TU1YX0lOU1RSX1JFVCA6IG51bWJlciBvZiBNTVggaW5zdHJ1Y3Rpb25zIHJldGlyZWQKLSMKLSMgUGVudGl1bSBNIFNwZWNpZmljIGV2ZW50cyBmcm9tIEEtNwotIwotIwotIyBQb3dlciBNYW5hZ2VtZW50Ci1ldmVudDoweDU4IGNvdW50ZXJzOjAsMSB1bTpmcmVxIG1pbmltdW06MzAwMCBuYW1lOkVNT05fRVNUX1RSQU5TIDogTnVtYmVyIG9mIEVuaGFuY2VkIEludGVsIFNwZWVkU3RlcAotIyBFcnJhdGEgbGlzdHMgRU1PTl9USEVSTUFMX1RSSVAgYXMgbm90IGFjY3VyYXRlLiBTZWUgMjUyNjY1MDcucGRmLgotZXZlbnQ6MHg1OSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX1RIRVJNQUxfVFJJUCA6IER1cmF0aW9uL09jY3VycmVuY2VzIGluIHRoZXJtYWwgdHJpcAotIwotIyBCUFUKLWV2ZW50OjB4ODggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfSU5TVF9FWEVDIDogQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCAobm90IG5lY2Vzc2FyaWx5IHJldGlyZWQpCi1ldmVudDoweDg5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX01JU1NQX0VYRUMgOiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQgYXQgZXhlY3V0aW9uCi1ldmVudDoweDhhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0JBQ19NSVNTUF9FWEVDIDogQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkIGF0IEZyb250IEVuZCAoQkFDKQotZXZlbnQ6MHg4YiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9DTkRfRVhFQyA6IENvbmRpdGlvbmFsIEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKLWV2ZW50OjB4OGMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfQ05EX01JU1NQX0VYRUMgOiBDb25kaXRpb25hbCBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQKLWV2ZW50OjB4OGQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfSU5EX0VYRUMgOiBJbmRpcmVjdCBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCi1ldmVudDoweDhlIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0lORF9NSVNTUF9FWEVDIDogSW5kaXJlY3QgQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkCi1ldmVudDoweDhmIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX1JFVF9FWEVDIDogUmV0dXJuIEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKLWV2ZW50OjB4OTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfUkVUX01JU1NQX0VYRUMgOiBSZXR1cm4gQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkIGF0IEV4ZWN1dGlvbgotZXZlbnQ6MHg5MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9SRVRfQkFDX01JU1NQX0VYRUMgOlJldHVybiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQgYXQgRnJvbnQgRW5kIChCQUMpCi1ldmVudDoweDkyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0NBTExfRVhFQyA6IENBTEwgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKLWV2ZW50OjB4OTMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfQ0FMTF9NSVNTUF9FWEVDIDogQ0FMTCBpbnN0cnVjdGlvbiBleGVjdXRlZCBhbmQgbWlzcyBwcmVkaWN0ZWQKLWV2ZW50OjB4OTQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfSU5EX0NBTExfRVhFQyA6IEluZGlyZWN0IENBTEwgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKLSMKLSMgRGVjb2RlcgotZXZlbnQ6MHhjZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX1NJTURfSU5TVFJfUkVUSVJFRCA6IE51bWJlciBvZiByZXRpcmVkIE1NWCBpbnN0cnVjdGlvbnMKLWV2ZW50OjB4ZDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RU1PTl9TWU5DSF9VT1BTIDogU3luYyBtaWNyby1vcHMKLWV2ZW50OjB4ZDcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RU1PTl9TWU5DSF9VT1BTIDogVG90YWwgbnVtYmVyIG9mIG1pY3JvLW9wcwotZXZlbnQ6MHhkYSBjb3VudGVyczowLDEgdW06ZnVzZWQgbWluaW11bTozMDAwIG5hbWU6RU1PTl9GVVNFRF9VT1BTX1JFVCA6IE51bWJlciBvZiByZXRpcmVkIGZ1c2VkIG1pY3JvLW9wcwotZXZlbnQ6MHhkYiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX1VORlVTSU9OIDogTnVtYmVyIG9mIHVuZnVzaW9uIGV2ZW50cyBpbiB0aGUgUk9CLCBoYXBwZW5lZCBvbiBhIEZQIGV4Y2VwdGlvbiB0byBhIGZ1c2VkIHVPcAotIwotIyBQcmVmZXRjaGVyCi1ldmVudDoweGYwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkVNT05fUFJFRl9SUVNUU19VUCA6IE51bWJlciBvZiB1cHdhcmQgcHJlZmV0Y2hlcyBpc3N1ZWQKLWV2ZW50OjB4ZjggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RU1PTl9QUkVGX1JRU1RTX0ROIDogTnVtYmVyIG9mIGRvd253YXJkIHByZWZldGNoZXMgaXNzdWVkCmRpZmYgLS1naXQgYS9ldmVudHMvaTM4Ni9wNl9tb2JpbGUvdW5pdF9tYXNrcyBiL2V2ZW50cy9pMzg2L3A2X21vYmlsZS91bml0X21hc2tzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTA1YTJiLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9pMzg2L3A2X21vYmlsZS91bml0X21hc2tzCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyBQZW50aXVtIE0gcG9zc2libGUgdW5pdCBtYXNrcwotIwotbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCi0JMHgwIE5vIHVuaXQgbWFzawotbmFtZTptZXNpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKLQkweDA4IChNKW9kaWZpZWQgY2FjaGUgc3RhdGUKLQkweDA0IChFKXhjbHVzaXZlIGNhY2hlIHN0YXRlCi0JMHgwMiAoUyloYXJlZCBjYWNoZSBzdGF0ZQotCTB4MDEgKEkpbnZhbGlkIGNhY2hlIHN0YXRlCi0JMHgwZiBBbGwgY2FjaGUgc3RhdGVzCi0JMHgxMCBIVyBwcmVmZXRjaGVkIGxpbmUgb25seQotCTB4MjAgYWxsIHByZWZldGNoZWQgbGluZSB3L28gcmVnYXJkaW5nIG1hc2sgMHgxMC4KLW5hbWU6ZWJsIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgyMAotCTB4MDAgc2VsZi1nZW5lcmF0ZWQgdHJhbnNhY3Rpb25zCi0JMHgyMCBhbnkgdHJhbnNhY3Rpb25zCi1uYW1lOmtuaV9wcmVmZXRjaCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAotCTB4MDAgcHJlZmV0Y2ggTlRBCi0JMHgwMSBwcmVmZXRjaCBUMQotCTB4MDIgcHJlZmV0Y2ggVDIKLQkweDAzIHdlYWtseS1vcmRlcmVkIHN0b3JlcwotIyB0aGlzIGJpdG1hc2sgY2FuIHNlZW1zIHdlaXJkcyBidXQgaXMgY29ycmVjdCwgbm90ZSB0aGVyZSBpcyBubyB3YXkgdG8gb25seQotIyBjb3VudCBzY2FsYXIgU0lNRCBpbnN0cnVjdGlvbnMKLW5hbWU6c3NlX3NzZTJfaW5zdF9yZXRpcmVkIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCi0JMHgwMCBTU0UgUGFja2VkIFNpbmdsZQotCTB4MDEgU1NFIFNjYWxhci1TaW5nbGUKLQkweDAyIFNTRTIgUGFja2VkLURvdWJsZQotCTB4MDMgU1NFMiBTY2FsYXItRG91YmxlCi1uYW1lOm1teF91b3BzIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHhmCi0JMHgwZiBtYW5kYXRvcnkKLW5hbWU6bW14X2luc3RyX3R5cGVfZXhlYyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNmCi0JMHgwMSBNTVggcGFja2VkIG11bHRpcGxpZXMKLQkweDAyIE1NWCBwYWNrZWQgc2hpZnRzCi0JMHgwNCBNTVggcGFjayBvcGVyYXRpb25zCi0JMHgwOCBNTVggdW5wYWNrIG9wZXJhdGlvbnMKLQkweDEwIE1NWCBwYWNrZWQgbG9naWNhbAotCTB4MjAgTU1YIHBhY2tlZCBhcml0aG1ldGljCi0JMHgzZiBhbGwgb2YgdGhlIGFib3ZlCi1uYW1lOm1teF90cmFucyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAotCTB4MDAgTU1YLT5mbG9hdCBvcGVyYXRpb25zCi0JMHgwMSBmbG9hdC0+TU1YIG9wZXJhdGlvbnMKLW5hbWU6ZnJlcSB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAotCTB4MDAgQWxsIHRyYW5zaXRpb25zCi0JMHgwMiBPbmx5IEZyZXF1ZW5jeSB0cmFuc2l0aW9ucwotbmFtZTpmdXNlZCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAotCTB4MDAgQWxsIGZ1c2VkIG1pY3JvLW9wcwotCTB4MDEgT25seSBsb2FkK09wIG1pY3JvLW9wcwotCTB4MDIgT25seSBzdGQrc3RhIG1pY3JvLW9wcwpkaWZmIC0tZ2l0IGEvZXZlbnRzL2kzODYvcGlpL2V2ZW50cyBiL2V2ZW50cy9pMzg2L3BpaS9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YjNiZWIuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2kzODYvcGlpL2V2ZW50cworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSMgUGVudGl1bSBJSSBldmVudHMKLSMKLWV2ZW50OjB4NzkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6Q1BVX0NMS19VTkhBTFRFRCA6IGNsb2NrcyBwcm9jZXNzb3IgaXMgbm90IGhhbHRlZAotZXZlbnQ6MHg0MyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfTUVNX1JFRlMgOiBhbGwgbWVtb3J5IHJlZmVyZW5jZXMsIGNhY2hhYmxlIGFuZCBub24KLWV2ZW50OjB4NDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ1VfTElORVNfSU4gOiB0b3RhbCBsaW5lcyBhbGxvY2F0ZWQgaW4gdGhlIERDVQotZXZlbnQ6MHg0NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9NX0xJTkVTX0lOIDogbnVtYmVyIG9mIE0gc3RhdGUgbGluZXMgYWxsb2NhdGVkIGluIERDVQotZXZlbnQ6MHg0NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9NX0xJTkVTX09VVCA6IG51bWJlciBvZiBNIGxpbmVzIGV2aWN0ZWQgZnJvbSB0aGUgRENVCi1ldmVudDoweDQ4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01JU1NfT1VUU1RBTkRJTkcgOiBudW1iZXIgb2YgY3ljbGVzIHdoaWxlIERDVSBtaXNzIG91dHN0YW5kaW5nCi1ldmVudDoweDgwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSCA6IG51bWJlciBvZiBub24vY2FjaGFibGUgaW5zdHJ1Y3Rpb24gZmV0Y2hlcwotZXZlbnQ6MHg4MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9JRkVUQ0hfTUlTUyA6IG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaCBtaXNzZXMKLWV2ZW50OjB4ODUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX01JU1MgOiBudW1iZXIgb2YgSVRMQiBtaXNzZXMKLWV2ZW50OjB4ODYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfTUVNX1NUQUxMIDogY3ljbGVzIGluc3RydWN0aW9uIGZldGNoIHBpcGUgaXMgc3RhbGxlZAotZXZlbnQ6MHg4NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklMRF9TVEFMTCA6IGN5Y2xlcyBpbnN0cnVjdGlvbiBsZW5ndGggZGVjb2RlciBpcyBzdGFsbGVkCi1ldmVudDoweDI4IGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfSUZFVENIIDogbnVtYmVyIG9mIEwyIGluc3RydWN0aW9uIGZldGNoZXMKLWV2ZW50OjB4MjkgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9MRCA6IG51bWJlciBvZiBMMiBkYXRhIGxvYWRzCi1ldmVudDoweDJhIGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfU1QgOiBudW1iZXIgb2YgTDIgZGF0YSBzdG9yZXMKLWV2ZW50OjB4MjQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9MSU5FU19JTiA6IG51bWJlciBvZiBhbGxvY2F0ZWQgbGluZXMgaW4gTDIKLWV2ZW50OjB4MjYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9MSU5FU19PVVQgOiBudW1iZXIgb2YgcmVjb3ZlcmVkIGxpbmVzIGZyb20gTDIKLWV2ZW50OjB4MjUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX0lOTSA6IG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyBhbGxvY2F0ZWQgaW4gTDIKLWV2ZW50OjB4MjcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX09VVE0gOiBudW1iZXIgb2YgbW9kaWZpZWQgbGluZXMgcmVtb3ZlZCBmcm9tIEwyCi1ldmVudDoweDJlIGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfUlFTVFMgOiBudW1iZXIgb2YgTDIgcmVxdWVzdHMKLWV2ZW50OjB4MjEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9BRFMgOiBudW1iZXIgb2YgTDIgYWRkcmVzcyBzdHJvYmVzCi1ldmVudDoweDIyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfREJVU19CVVNZIDogbnVtYmVyIG9mIGN5Y2xlcyBkYXRhIGJ1cyB3YXMgYnVzeQotZXZlbnQ6MHgyMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0RCVVNfQlVTWV9SRCA6IGN5Y2xlcyBkYXRhIGJ1cyB3YXMgYnVzeSBpbiB4ZmVyIGZyb20gTDIgdG8gQ1BVCi1ldmVudDoweDYyIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfRFJEWV9DTE9DS1MgOiBudW1iZXIgb2YgY2xvY2tzIERSRFkgaXMgYXNzZXJ0ZWQKLWV2ZW50OjB4NjMgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19MT0NLX0NMT0NLUyA6IG51bWJlciBvZiBjbG9ja3MgTE9DSyBpcyBhc3NlcnRlZAotZXZlbnQ6MHg2MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19SRVFfT1VUU1RBTkRJTkcgOiBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgYnVzIHJlcXVlc3RzCi1ldmVudDoweDY1IGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9CUkQgOiBudW1iZXIgb2YgYnVyc3QgcmVhZCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjYgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1JGTyA6IG51bWJlciBvZiByZWFkIGZvciBvd25lcnNoaXAgdHJhbnNhY3Rpb25zCi1ldmVudDoweDY3IGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfV0IgOiBudW1iZXIgb2Ygd3JpdGUgYmFjayB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjggY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0lGRVRDSCA6IG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjkgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0lOVkFMIDogbnVtYmVyIG9mIGludmFsaWRhdGUgdHJhbnNhY3Rpb25zCi1ldmVudDoweDZhIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9QV1IgOiBudW1iZXIgb2YgcGFydGlhbCB3cml0ZSB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmIgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19QIDogbnVtYmVyIG9mIHBhcnRpYWwgdHJhbnNhY3Rpb25zCi1ldmVudDoweDZjIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfSU8gOiBudW1iZXIgb2YgSS9PIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2ZCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX0RFRiA6IG51bWJlciBvZiBkZWZlcnJlZCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmUgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0JVUlNUIDogbnVtYmVyIG9mIGJ1cnN0IHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg3MCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQU5ZIDogbnVtYmVyIG9mIGFsbCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmYgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX01FTSA6IG51bWJlciBvZiBtZW1vcnkgdHJhbnNhY3Rpb25zCi1ldmVudDoweDY0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0RBVEFfUkNWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyByZWNlaXZpbmcgZGF0YQotZXZlbnQ6MHg2MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19CTlJfRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEJOUiBwaW4KLWV2ZW50OjB4N2EgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfSElUX0RSViA6IGJ1cyBjeWNsZXMgdGhpcyBwcm9jZXNzb3IgaXMgZHJpdmluZyBISVQgcGluCi1ldmVudDoweDdiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0hJVE1fRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEhJVE0gcGluCi1ldmVudDoweDdlIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX1NOT09QX1NUQUxMIDogY3ljbGVzIGR1cmluZyBidXMgc25vb3Agc3RhbGwKLWV2ZW50OjB4YzEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkNPTVBfRkxPUF9SRVQgOiBudW1iZXIgb2YgY29tcHV0YXRpb25hbCBGUCBvcGVyYXRpb25zIHJldGlyZWQKLWV2ZW50OjB4MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkZMT1BTIDogbnVtYmVyIG9mIGNvbXB1dGF0aW9uYWwgRlAgb3BlcmF0aW9ucyBleGVjdXRlZAotZXZlbnQ6MHgxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9BU1NJU1QgOiBudW1iZXIgb2YgRlAgZXhjZXB0aW9ucyBoYW5kbGVkIGJ5IG1pY3JvY29kZQotZXZlbnQ6MHgxMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6TVVMIDogbnVtYmVyIG9mIG11bHRpcGxpZXMKLWV2ZW50OjB4MTMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElWIDogbnVtYmVyIG9mIGRpdmlkZXMKLWV2ZW50OjB4MTQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOkNZQ0xFU19ESVZfQlVTWSA6IGN5Y2xlcyBkaXZpZGVyIGlzIGJ1c3kKLWV2ZW50OjB4MDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRF9CTE9DS1MgOiBudW1iZXIgb2Ygc3RvcmUgYnVmZmVyIGJsb2NrcwotZXZlbnQ6MHgwNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNCX0RSQUlOUyA6IG51bWJlciBvZiBzdG9yZSBidWZmZXIgZHJhaW4gY3ljbGVzCi1ldmVudDoweDA1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTQUxJR05fTUVNX1JFRiA6IG51bWJlciBvZiBtaXNhbGlnbmVkIGRhdGEgbWVtb3J5IHJlZmVyZW5jZXMKLWV2ZW50OjB4YzAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6SU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyByZXRpcmVkCi1ldmVudDoweGMyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NjAwMCBuYW1lOlVPUFNfUkVUSVJFRCA6IG51bWJlciBvZiBVT1BzIHJldGlyZWQKLWV2ZW50OjB4ZDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6SU5TVF9ERUNPREVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyBkZWNvZGVkCi1ldmVudDoweGM4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SFdfSU5UX1JYIDogbnVtYmVyIG9mIGhhcmR3YXJlIGludGVycnVwdHMgcmVjZWl2ZWQKLWV2ZW50OjB4YzYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfSU5UX01BU0tFRCA6IGN5Y2xlcyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAotZXZlbnQ6MHhjNyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlRfUEVORElOR19BTkRfTUFTS0VEIDogY3ljbGVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHdpdGggcGVuZGluZyBpbnRlcnJ1cHRzCi1ldmVudDoweGM0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgcmV0aXJlZAotZXZlbnQ6MHhjNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX01JU1NfUFJFRF9SRVRJUkVEIDogbnVtYmVyIG9mIG1pc3ByZWRpY3RlZCBicmFuY2hlcyByZXRpcmVkCi1ldmVudDoweGM5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfVEFLRU5fUkVUSVJFRCA6IG51bWJlciBvZiB0YWtlbiBicmFuY2hlcyByZXRpcmVkCi1ldmVudDoweGNhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1RBS0VOX1JFVCA6IG51bWJlciBvZiB0YWtlbiBtaXNwcmVkaWN0aW9ucyBicmFuY2hlcyByZXRpcmVkCi1ldmVudDoweGUwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9ERUNPREVEIDogbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgZGVjb2RlZAotZXZlbnQ6MHhlMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJUQl9NSVNTRVMgOiBudW1iZXIgb2YgYnJhbmNoZXMgdGhhdCBtaXNzIHRoZSBCVEIKLWV2ZW50OjB4ZTQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9CT0dVUyA6IG51bWJlciBvZiBib2d1cyBicmFuY2hlcwotZXZlbnQ6MHhlNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBQ0xFQVJTIDogbnVtYmVyIG9mIHRpbWVzIEJBQ0xFQVIgaXMgYXNzZXJ0ZWQKLWV2ZW50OjB4YTIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVNPVVJDRV9TVEFMTFMgOiBjeWNsZXMgZHVyaW5nIHJlc291cmNlIHJlbGF0ZWQgc3RhbGxzCi1ldmVudDoweGQyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UEFSVElBTF9SQVRfU1RBTExTIDogY3ljbGVzIG9yIGV2ZW50cyBmb3IgcGFydGlhbCBzdGFsbHMKLWV2ZW50OjB4MDYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTRUdNRU5UX1JFR19MT0FEUyA6IG51bWJlciBvZiBzZWdtZW50IHJlZ2lzdGVyIGxvYWRzCi1ldmVudDoweGIwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOk1NWF9JTlNUUl9FWEVDIDogbnVtYmVyIG9mIE1NWCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKLWV2ZW50OjB4YjEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TU1YX1NBVF9JTlNUUl9FWEVDIDogbnVtYmVyIG9mIE1NWCBzYXR1cmF0aW5nIGluc3RydWN0aW9ucyBleGVjdXRlZAotZXZlbnQ6MHhiMiBjb3VudGVyczowLDEgdW06bW14X3VvcHMgbWluaW11bTozMDAwIG5hbWU6TU1YX1VPUFNfRVhFQyA6IG51bWJlciBvZiBNTVggVU9QUyBleGVjdXRlZAotZXZlbnQ6MHhiMyBjb3VudGVyczowLDEgdW06bW14X2luc3RyX3R5cGVfZXhlYyBtaW5pbXVtOjMwMDAgbmFtZTpNTVhfSU5TVFJfVFlQRV9FWEVDIDogbnVtYmVyIG9mIE1NWCBwYWNraW5nIGluc3RydWN0aW9ucwotZXZlbnQ6MHhjYyBjb3VudGVyczowLDEgdW06bW14X3RyYW5zIG1pbmltdW06MzAwMCBuYW1lOkZQX01NWF9UUkFOUyA6IE1NWC1mbG9hdGluZyBwb2ludCB0cmFuc2l0aW9ucwotZXZlbnQ6MHhjZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1NWF9BU1NJU1QgOiBudW1iZXIgb2YgRU1NUyBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKLWV2ZW50OjB4Y2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TU1YX0lOU1RSX1JFVCA6IG51bWJlciBvZiBNTVggaW5zdHJ1Y3Rpb25zIHJldGlyZWQKLWV2ZW50OjB4ZDQgY291bnRlcnM6MCwxIHVtOnNlZ19yZW5hbWUgbWluaW11bTo1MDAgbmFtZTpTRUdfUkVOQU1FX1NUQUxMUyA6IG51bWJlciBvZiBzZWdtZW50IHJlZ2lzdGVyIHJlbmFtaW5nIHN0YWxscwotZXZlbnQ6MHhkNSBjb3VudGVyczowLDEgdW06c2VnX3JlbmFtZSBtaW5pbXVtOjUwMCBuYW1lOlNFR19SRUdfUkVOQU1FUyA6IG51bWJlciBvZiBzZWdtZW50IHJlZ2lzdGVyIHJlbmFtZXMKLWV2ZW50OjB4ZDYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRfU0VHX1JFTkFNRVMgOiBudW1iZXIgb2Ygc2VnbWVudCByZWdpc3RlciByZW5hbWUgZXZlbnRzIHJldGlyZWQKZGlmZiAtLWdpdCBhL2V2ZW50cy9pMzg2L3BpaS91bml0X21hc2tzIGIvZXZlbnRzL2kzODYvcGlpL3VuaXRfbWFza3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNTU4NjcuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2kzODYvcGlpL3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIFBlbnRpdW0gSUkgcG9zc2libGUgdW5pdCBtYXNrcwotIwotbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCi0JMHgwIE5vIHVuaXQgbWFzawotbmFtZTptZXNpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKLQkweDA4IChNKW9kaWZpZWQgY2FjaGUgc3RhdGUKLQkweDA0IChFKXhjbHVzaXZlIGNhY2hlIHN0YXRlCi0JMHgwMiAoUyloYXJlZCBjYWNoZSBzdGF0ZQotCTB4MDEgKEkpbnZhbGlkIGNhY2hlIHN0YXRlCi0JMHgwZiBBbGwgY2FjaGUgc3RhdGVzCi1uYW1lOmVibCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MjAKLQkweDAwIHNlbGYtZ2VuZXJhdGVkIHRyYW5zYWN0aW9ucwotCTB4MjAgYW55IHRyYW5zYWN0aW9ucwotbmFtZTptbXhfdW9wcyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4ZgotCTB4MGYgbWFuZGF0b3J5Ci1uYW1lOm1teF9pbnN0cl90eXBlX2V4ZWMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZgotCTB4MDEgTU1YIHBhY2tlZCBtdWx0aXBsaWVzCi0JMHgwMiBNTVggcGFja2VkIHNoaWZ0cwotCTB4MDQgTU1YIHBhY2sgb3BlcmF0aW9ucwotCTB4MDggTU1YIHVucGFjayBvcGVyYXRpb25zCi0JMHgxMCBNTVggcGFja2VkIGxvZ2ljYWwKLQkweDIwIE1NWCBwYWNrZWQgYXJpdGhtZXRpYwotCTB4M2YgYWxsIG9mIHRoZSBhYm92ZQotbmFtZTptbXhfdHJhbnMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKLQkweDAwIE1NWC0+ZmxvYXQgb3BlcmF0aW9ucwotCTB4MDEgZmxvYXQtPk1NWCBvcGVyYXRpb25zCi1uYW1lOnNlZ19yZW5hbWUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmCi0JMHgxIEVTIHJlZ2lzdGVyCi0JMHgyIERTIHJlZ2lzdGVyCi0JMHg0IEZTIHJlZ2lzdGVyCi0jIElBIG1hbnVhbCBzYXlzIHRoaXMgaXMgYWN0dWFsbHkgRlMgYWdhaW4gLSBubyBtZW50aW9uIGluIGVycmF0YQotIyBidXQgdGVzdCBzaG93IHRoYXQgaXMgcmVhbGx5IGEgdHlwbyBlcnJvciBmcm9tIElBIG1hbnVhbAotCTB4OCBHUyByZWdpc3RlcgotCTB4ZiBFUywgRFMsIEZTLCBHUyByZWdpc3RlcnMKZGlmZiAtLWdpdCBhL2V2ZW50cy9pMzg2L3BpaWkvZXZlbnRzIGIvZXZlbnRzL2kzODYvcGlpaS9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YmI0MWYuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2kzODYvcGlpaS9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jIFBlbnRpdW0gSUlJIGV2ZW50cwotIwotZXZlbnQ6MHg3OSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpDUFVfQ0xLX1VOSEFMVEVEIDogY2xvY2tzIHByb2Nlc3NvciBpcyBub3QgaGFsdGVkCi1ldmVudDoweDQzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9NRU1fUkVGUyA6IGFsbCBtZW1vcnkgcmVmZXJlbmNlcywgY2FjaGFibGUgYW5kIG5vbgotZXZlbnQ6MHg0NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9MSU5FU19JTiA6IHRvdGFsIGxpbmVzIGFsbG9jYXRlZCBpbiB0aGUgRENVCi1ldmVudDoweDQ2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01fTElORVNfSU4gOiBudW1iZXIgb2YgTSBzdGF0ZSBsaW5lcyBhbGxvY2F0ZWQgaW4gRENVCi1ldmVudDoweDQ3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01fTElORVNfT1VUIDogbnVtYmVyIG9mIE0gbGluZXMgZXZpY3RlZCBmcm9tIHRoZSBEQ1UKLWV2ZW50OjB4NDggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ1VfTUlTU19PVVRTVEFORElORyA6IG51bWJlciBvZiBjeWNsZXMgd2hpbGUgRENVIG1pc3Mgb3V0c3RhbmRpbmcKLWV2ZW50OjB4ODAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSUZFVENIIDogbnVtYmVyIG9mIG5vbi9jYWNoYWJsZSBpbnN0cnVjdGlvbiBmZXRjaGVzCi1ldmVudDoweDgxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSF9NSVNTIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIG1pc3NlcwotZXZlbnQ6MHg4NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTUyA6IG51bWJlciBvZiBJVExCIG1pc3NlcwotZXZlbnQ6MHg4NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9NRU1fU1RBTEwgOiBjeWNsZXMgaW5zdHJ1Y3Rpb24gZmV0Y2ggcGlwZSBpcyBzdGFsbGVkCi1ldmVudDoweDg3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUxEX1NUQUxMIDogY3ljbGVzIGluc3RydWN0aW9uIGxlbmd0aCBkZWNvZGVyIGlzIHN0YWxsZWQKLWV2ZW50OjB4MjggY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9JRkVUQ0ggOiBudW1iZXIgb2YgTDIgaW5zdHJ1Y3Rpb24gZmV0Y2hlcwotZXZlbnQ6MHgyOSBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkwyX0xEIDogbnVtYmVyIG9mIEwyIGRhdGEgbG9hZHMKLWV2ZW50OjB4MmEgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9TVCA6IG51bWJlciBvZiBMMiBkYXRhIHN0b3JlcwotZXZlbnQ6MHgyNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX0lOIDogbnVtYmVyIG9mIGFsbG9jYXRlZCBsaW5lcyBpbiBMMgotZXZlbnQ6MHgyNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX09VVCA6IG51bWJlciBvZiByZWNvdmVyZWQgbGluZXMgZnJvbSBMMgotZXZlbnQ6MHgyNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX01fTElORVNfSU5NIDogbnVtYmVyIG9mIG1vZGlmaWVkIGxpbmVzIGFsbG9jYXRlZCBpbiBMMgotZXZlbnQ6MHgyNyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX01fTElORVNfT1VUTSA6IG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyByZW1vdmVkIGZyb20gTDIKLWV2ZW50OjB4MmUgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9SUVNUUyA6IG51bWJlciBvZiBMMiByZXF1ZXN0cwotZXZlbnQ6MHgyMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0FEUyA6IG51bWJlciBvZiBMMiBhZGRyZXNzIHN0cm9iZXMKLWV2ZW50OjB4MjIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9EQlVTX0JVU1kgOiBudW1iZXIgb2YgY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5Ci1ldmVudDoweDIzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfREJVU19CVVNZX1JEIDogY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5IGluIHhmZXIgZnJvbSBMMiB0byBDUFUKLWV2ZW50OjB4NjIgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19EUkRZX0NMT0NLUyA6IG51bWJlciBvZiBjbG9ja3MgRFJEWSBpcyBhc3NlcnRlZAotZXZlbnQ6MHg2MyBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX0xPQ0tfQ0xPQ0tTIDogbnVtYmVyIG9mIGNsb2NrcyBMT0NLIGlzIGFzc2VydGVkCi1ldmVudDoweDYwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX1JFUV9PVVRTVEFORElORyA6IG51bWJlciBvZiBvdXRzdGFuZGluZyBidXMgcmVxdWVzdHMKLWV2ZW50OjB4NjUgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0JSRCA6IG51bWJlciBvZiBidXJzdCByZWFkIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2NiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fUkZPIDogbnVtYmVyIG9mIHJlYWQgZm9yIG93bmVyc2hpcCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjcgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19XQiA6IG51bWJlciBvZiB3cml0ZSBiYWNrIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2OCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fSUZFVENIIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2OSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fSU5WQUwgOiBudW1iZXIgb2YgaW52YWxpZGF0ZSB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmEgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1BXUiA6IG51bWJlciBvZiBwYXJ0aWFsIHdyaXRlIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2YiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX1AgOiBudW1iZXIgb2YgcGFydGlhbCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmMgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19JTyA6IG51bWJlciBvZiBJL08gdHJhbnNhY3Rpb25zCi1ldmVudDoweDZkIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfREVGIDogbnVtYmVyIG9mIGRlZmVycmVkIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2ZSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQlVSU1QgOiBudW1iZXIgb2YgYnVyc3QgdHJhbnNhY3Rpb25zCi1ldmVudDoweDcwIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9BTlkgOiBudW1iZXIgb2YgYWxsIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2ZiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fTUVNIDogbnVtYmVyIG9mIG1lbW9yeSB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfREFUQV9SQ1YgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIHJlY2VpdmluZyBkYXRhCi1ldmVudDoweDYxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0JOUl9EUlYgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgQk5SIHBpbgotZXZlbnQ6MHg3YSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19ISVRfRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEhJVCBwaW4KLWV2ZW50OjB4N2IgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfSElUTV9EUlYgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgSElUTSBwaW4KLWV2ZW50OjB4N2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfU05PT1BfU1RBTEwgOiBjeWNsZXMgZHVyaW5nIGJ1cyBzbm9vcCBzdGFsbAotZXZlbnQ6MHhjMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q09NUF9GTE9QX1JFVCA6IG51bWJlciBvZiBjb21wdXRhdGlvbmFsIEZQIG9wZXJhdGlvbnMgcmV0aXJlZAotZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RkxPUFMgOiBudW1iZXIgb2YgY29tcHV0YXRpb25hbCBGUCBvcGVyYXRpb25zIGV4ZWN1dGVkCi1ldmVudDoweDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0FTU0lTVCA6IG51bWJlciBvZiBGUCBleGNlcHRpb25zIGhhbmRsZWQgYnkgbWljcm9jb2RlCi1ldmVudDoweDEyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpNVUwgOiBudW1iZXIgb2YgbXVsdGlwbGllcwotZXZlbnQ6MHgxMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVYgOiBudW1iZXIgb2YgZGl2aWRlcwotZXZlbnQ6MHgxNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6Q1lDTEVTX0RJVl9CVVNZIDogY3ljbGVzIGRpdmlkZXIgaXMgYnVzeQotZXZlbnQ6MHgwMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxEX0JMT0NLUyA6IG51bWJlciBvZiBzdG9yZSBidWZmZXIgYmxvY2tzCi1ldmVudDoweDA0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0JfRFJBSU5TIDogbnVtYmVyIG9mIHN0b3JlIGJ1ZmZlciBkcmFpbiBjeWNsZXMKLWV2ZW50OjB4MDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTl9NRU1fUkVGIDogbnVtYmVyIG9mIG1pc2FsaWduZWQgZGF0YSBtZW1vcnkgcmVmZXJlbmNlcwotZXZlbnQ6MHgwNyBjb3VudGVyczowLDEgdW06a25pX3ByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6RU1PTl9LTklfUFJFRl9ESVNQQVRDSEVEIDogbnVtYmVyIG9mIEtOSSBwcmUtZmV0Y2gvd2Vha2x5IG9yZGVyZWQgaW5zbnMgZGlzcGF0Y2hlZAotZXZlbnQ6MHg0YiBjb3VudGVyczowLDEgdW06a25pX3ByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6RU1PTl9LTklfUFJFRl9NSVNTIDogbnVtYmVyIG9mIEtOSSBwcmUtZmV0Y2gvd2Vha2x5IG9yZGVyZWQgaW5zbnMgdGhhdCBtaXNzIGFsbCBjYWNoZXMKLWV2ZW50OjB4YzAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6SU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyByZXRpcmVkCi1ldmVudDoweGMyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NjAwMCBuYW1lOlVPUFNfUkVUSVJFRCA6IG51bWJlciBvZiBVT1BzIHJldGlyZWQKLWV2ZW50OjB4ZDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6SU5TVF9ERUNPREVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyBkZWNvZGVkCi1ldmVudDoweGQ4IGNvdW50ZXJzOjAsMSB1bTprbmlfaW5zdF9yZXRpcmVkIG1pbmltdW06MzAwMCBuYW1lOkVNT05fS05JX0lOU1RfUkVUSVJFRCA6IG51bWJlciBvZiBLTkkgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKLWV2ZW50OjB4ZDkgY291bnRlcnM6MCwxIHVtOmtuaV9pbnN0X3JldGlyZWQgbWluaW11bTozMDAwIG5hbWU6RU1PTl9LTklfQ09NUF9JTlNUX1JFVCA6IG51bWJlciBvZiBLTkkgY29tcHV0YXRpb24gaW5zdHJ1Y3Rpb25zIHJldGlyZWQKLWV2ZW50OjB4YzggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpIV19JTlRfUlggOiBudW1iZXIgb2YgaGFyZHdhcmUgaW50ZXJydXB0cyByZWNlaXZlZAotZXZlbnQ6MHhjNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlRfTUFTS0VEIDogY3ljbGVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkCi1ldmVudDoweGM3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0lOVF9QRU5ESU5HX0FORF9NQVNLRUQgOiBjeWNsZXMgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2l0aCBwZW5kaW5nIGludGVycnVwdHMKLWV2ZW50OjB4YzQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyByZXRpcmVkCi1ldmVudDoweGM1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1JFVElSRUQgOiBudW1iZXIgb2YgbWlzcHJlZGljdGVkIGJyYW5jaGVzIHJldGlyZWQKLWV2ZW50OjB4YzkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9UQUtFTl9SRVRJUkVEIDogbnVtYmVyIG9mIHRha2VuIGJyYW5jaGVzIHJldGlyZWQKLWV2ZW50OjB4Y2EgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9NSVNTX1BSRURfVEFLRU5fUkVUIDogbnVtYmVyIG9mIHRha2VuIG1pc3ByZWRpY3Rpb25zIGJyYW5jaGVzIHJldGlyZWQKLWV2ZW50OjB4ZTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyBkZWNvZGVkCi1ldmVudDoweGUyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlRCX01JU1NFUyA6IG51bWJlciBvZiBicmFuY2hlcyB0aGF0IG1pc3MgdGhlIEJUQgotZXZlbnQ6MHhlNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX0JPR1VTIDogbnVtYmVyIG9mIGJvZ3VzIGJyYW5jaGVzCi1ldmVudDoweGU2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFDTEVBUlMgOiBudW1iZXIgb2YgdGltZXMgQkFDTEVBUiBpcyBhc3NlcnRlZAotZXZlbnQ6MHhhMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFU09VUkNFX1NUQUxMUyA6IGN5Y2xlcyBkdXJpbmcgcmVzb3VyY2UgcmVsYXRlZCBzdGFsbHMKLWV2ZW50OjB4ZDIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQVJUSUFMX1JBVF9TVEFMTFMgOiBjeWNsZXMgb3IgZXZlbnRzIGZvciBwYXJ0aWFsIHN0YWxscwotZXZlbnQ6MHgwNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFR01FTlRfUkVHX0xPQURTIDogbnVtYmVyIG9mIHNlZ21lbnQgcmVnaXN0ZXIgbG9hZHMKLWV2ZW50OjB4YjEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TU1YX1NBVF9JTlNUUl9FWEVDIDogbnVtYmVyIG9mIE1NWCBzYXR1cmF0aW5nIGluc3RydWN0aW9ucyBleGVjdXRlZAotZXZlbnQ6MHhiMiBjb3VudGVyczowLDEgdW06bW14X3VvcHMgbWluaW11bTozMDAwIG5hbWU6TU1YX1VPUFNfRVhFQyA6IG51bWJlciBvZiBNTVggVU9QUyBleGVjdXRlZAotZXZlbnQ6MHhiMyBjb3VudGVyczowLDEgdW06bW14X2luc3RyX3R5cGVfZXhlYyBtaW5pbXVtOjMwMDAgbmFtZTpNTVhfSU5TVFJfVFlQRV9FWEVDIDogbnVtYmVyIG9mIE1NWCBwYWNraW5nIGluc3RydWN0aW9ucwotZXZlbnQ6MHhjYyBjb3VudGVyczowLDEgdW06bW14X3RyYW5zIG1pbmltdW06MzAwMCBuYW1lOkZQX01NWF9UUkFOUyA6IE1NWC1mbG9hdGluZyBwb2ludCB0cmFuc2l0aW9ucwotZXZlbnQ6MHhjZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1NWF9BU1NJU1QgOiBudW1iZXIgb2YgRU1NUyBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKLWV2ZW50OjB4Y2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TU1YX0lOU1RSX1JFVCA6IG51bWJlciBvZiBNTVggaW5zdHJ1Y3Rpb25zIHJldGlyZWQKZGlmZiAtLWdpdCBhL2V2ZW50cy9pMzg2L3BpaWkvdW5pdF9tYXNrcyBiL2V2ZW50cy9pMzg2L3BpaWkvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZlYTk4MC4uMDAwMDAwMAotLS0gYS9ldmVudHMvaTM4Ni9waWlpL3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIFBlbnRpdW0gSUlJIHBvc3NpYmxlIHVuaXQgbWFza3MKLSMKLW5hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAotCTB4MCBObyB1bml0IG1hc2sKLW5hbWU6bWVzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCi0JMHgwOCAoTSlvZGlmaWVkIGNhY2hlIHN0YXRlCi0JMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQotCTB4MDIgKFMpaGFyZWQgY2FjaGUgc3RhdGUKLQkweDAxIChJKW52YWxpZCBjYWNoZSBzdGF0ZQotCTB4MGYgQWxsIGNhY2hlIHN0YXRlcwotbmFtZTplYmwgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDIwCi0JMHgwMCBzZWxmLWdlbmVyYXRlZCB0cmFuc2FjdGlvbnMKLQkweDIwIGFueSB0cmFuc2FjdGlvbnMKLW5hbWU6a25pX3ByZWZldGNoIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCi0JMHgwMCBwcmVmZXRjaCBOVEEKLQkweDAxIHByZWZldGNoIFQxCi0JMHgwMiBwcmVmZXRjaCBUMgotCTB4MDMgd2Vha2x5LW9yZGVyZWQgc3RvcmVzCi0jIHRoaXMgYml0bWFzayBjYW4gc2VlbXMgd2VpcmRzIGJ1dCBpcyBjb3JyZWN0LCBub3RlIHRoZXJlIGlzIG5vIHdheSB0byBvbmx5Ci0jIGNvdW50IHNjYWxhciBTSU1EIGluc3RydWN0aW9ucwotbmFtZTprbmlfaW5zdF9yZXRpcmVkIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCi0JMHgwMCBwYWNrZWQgYW5kIHNjYWxhcgotCTB4MDEgcGFja2VkCi1uYW1lOm1teF91b3BzIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHhmCi0JMHgwZiBtYW5kYXRvcnkKLW5hbWU6bW14X2luc3RyX3R5cGVfZXhlYyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNmCi0JMHgwMSBNTVggcGFja2VkIG11bHRpcGxpZXMKLQkweDAyIE1NWCBwYWNrZWQgc2hpZnRzCi0JMHgwNCBNTVggcGFjayBvcGVyYXRpb25zCi0JMHgwOCBNTVggdW5wYWNrIG9wZXJhdGlvbnMKLQkweDEwIE1NWCBwYWNrZWQgbG9naWNhbAotCTB4MjAgTU1YIHBhY2tlZCBhcml0aG1ldGljCi0JMHgzZiBhbGwgb2YgdGhlIGFib3ZlCi1uYW1lOm1teF90cmFucyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAotCTB4MDAgTU1YLT5mbG9hdCBvcGVyYXRpb25zCi0JMHgwMSBmbG9hdC0+TU1YIG9wZXJhdGlvbnMKZGlmZiAtLWdpdCBhL2V2ZW50cy9pMzg2L3Bwcm8vZXZlbnRzIGIvZXZlbnRzL2kzODYvcHByby9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxODJiYzMuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2kzODYvcHByby9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0jIFBlbnRpdW0gUHJvIGV2ZW50cwotIwotZXZlbnQ6MHg3OSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpDUFVfQ0xLX1VOSEFMVEVEIDogY2xvY2tzIHByb2Nlc3NvciBpcyBub3QgaGFsdGVkCi1ldmVudDoweDQzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9NRU1fUkVGUyA6IGFsbCBtZW1vcnkgcmVmZXJlbmNlcywgY2FjaGFibGUgYW5kIG5vbgotZXZlbnQ6MHg0NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9MSU5FU19JTiA6IHRvdGFsIGxpbmVzIGFsbG9jYXRlZCBpbiB0aGUgRENVCi1ldmVudDoweDQ2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01fTElORVNfSU4gOiBudW1iZXIgb2YgTSBzdGF0ZSBsaW5lcyBhbGxvY2F0ZWQgaW4gRENVCi1ldmVudDoweDQ3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01fTElORVNfT1VUIDogbnVtYmVyIG9mIE0gbGluZXMgZXZpY3RlZCBmcm9tIHRoZSBEQ1UKLWV2ZW50OjB4NDggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ1VfTUlTU19PVVRTVEFORElORyA6IG51bWJlciBvZiBjeWNsZXMgd2hpbGUgRENVIG1pc3Mgb3V0c3RhbmRpbmcKLWV2ZW50OjB4ODAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSUZFVENIIDogbnVtYmVyIG9mIG5vbi9jYWNoYWJsZSBpbnN0cnVjdGlvbiBmZXRjaGVzCi1ldmVudDoweDgxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSF9NSVNTIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIG1pc3NlcwotZXZlbnQ6MHg4NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTUyA6IG51bWJlciBvZiBJVExCIG1pc3NlcwotZXZlbnQ6MHg4NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9NRU1fU1RBTEwgOiBjeWNsZXMgaW5zdHJ1Y3Rpb24gZmV0Y2ggcGlwZSBpcyBzdGFsbGVkCi1ldmVudDoweDg3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUxEX1NUQUxMIDogY3ljbGVzIGluc3RydWN0aW9uIGxlbmd0aCBkZWNvZGVyIGlzIHN0YWxsZWQKLWV2ZW50OjB4MjggY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9JRkVUQ0ggOiBudW1iZXIgb2YgTDIgaW5zdHJ1Y3Rpb24gZmV0Y2hlcwotZXZlbnQ6MHgyOSBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkwyX0xEIDogbnVtYmVyIG9mIEwyIGRhdGEgbG9hZHMKLWV2ZW50OjB4MmEgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9TVCA6IG51bWJlciBvZiBMMiBkYXRhIHN0b3JlcwotZXZlbnQ6MHgyNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX0lOIDogbnVtYmVyIG9mIGFsbG9jYXRlZCBsaW5lcyBpbiBMMgotZXZlbnQ6MHgyNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX09VVCA6IG51bWJlciBvZiByZWNvdmVyZWQgbGluZXMgZnJvbSBMMgotZXZlbnQ6MHgyNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX01fTElORVNfSU5NIDogbnVtYmVyIG9mIG1vZGlmaWVkIGxpbmVzIGFsbG9jYXRlZCBpbiBMMgotZXZlbnQ6MHgyNyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX01fTElORVNfT1VUTSA6IG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyByZW1vdmVkIGZyb20gTDIKLWV2ZW50OjB4MmUgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9SUVNUUyA6IG51bWJlciBvZiBMMiByZXF1ZXN0cwotZXZlbnQ6MHgyMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0FEUyA6IG51bWJlciBvZiBMMiBhZGRyZXNzIHN0cm9iZXMKLWV2ZW50OjB4MjIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9EQlVTX0JVU1kgOiBudW1iZXIgb2YgY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5Ci1ldmVudDoweDIzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfREJVU19CVVNZX1JEIDogY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5IGluIHhmZXIgZnJvbSBMMiB0byBDUFUKLWV2ZW50OjB4NjIgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19EUkRZX0NMT0NLUyA6IG51bWJlciBvZiBjbG9ja3MgRFJEWSBpcyBhc3NlcnRlZAotZXZlbnQ6MHg2MyBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX0xPQ0tfQ0xPQ0tTIDogbnVtYmVyIG9mIGNsb2NrcyBMT0NLIGlzIGFzc2VydGVkCi1ldmVudDoweDYwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX1JFUV9PVVRTVEFORElORyA6IG51bWJlciBvZiBvdXRzdGFuZGluZyBidXMgcmVxdWVzdHMKLWV2ZW50OjB4NjUgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0JSRCA6IG51bWJlciBvZiBidXJzdCByZWFkIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2NiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fUkZPIDogbnVtYmVyIG9mIHJlYWQgZm9yIG93bmVyc2hpcCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjcgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19XQiA6IG51bWJlciBvZiB3cml0ZSBiYWNrIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2OCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fSUZFVENIIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2OSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fSU5WQUwgOiBudW1iZXIgb2YgaW52YWxpZGF0ZSB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmEgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1BXUiA6IG51bWJlciBvZiBwYXJ0aWFsIHdyaXRlIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2YiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX1AgOiBudW1iZXIgb2YgcGFydGlhbCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NmMgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19JTyA6IG51bWJlciBvZiBJL08gdHJhbnNhY3Rpb25zCi1ldmVudDoweDZkIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfREVGIDogbnVtYmVyIG9mIGRlZmVycmVkIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2ZSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQlVSU1QgOiBudW1iZXIgb2YgYnVyc3QgdHJhbnNhY3Rpb25zCi1ldmVudDoweDcwIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9BTlkgOiBudW1iZXIgb2YgYWxsIHRyYW5zYWN0aW9ucwotZXZlbnQ6MHg2ZiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fTUVNIDogbnVtYmVyIG9mIG1lbW9yeSB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4NjQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfREFUQV9SQ1YgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIHJlY2VpdmluZyBkYXRhCi1ldmVudDoweDYxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0JOUl9EUlYgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgQk5SIHBpbgotZXZlbnQ6MHg3YSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19ISVRfRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEhJVCBwaW4KLWV2ZW50OjB4N2IgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfSElUTV9EUlYgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgSElUTSBwaW4KLWV2ZW50OjB4N2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfU05PT1BfU1RBTEwgOiBjeWNsZXMgZHVyaW5nIGJ1cyBzbm9vcCBzdGFsbAotZXZlbnQ6MHhjMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q09NUF9GTE9QX1JFVCA6IG51bWJlciBvZiBjb21wdXRhdGlvbmFsIEZQIG9wZXJhdGlvbnMgcmV0aXJlZAotZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RkxPUFMgOiBudW1iZXIgb2YgY29tcHV0YXRpb25hbCBGUCBvcGVyYXRpb25zIGV4ZWN1dGVkCi1ldmVudDoweDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0FTU0lTVCA6IG51bWJlciBvZiBGUCBleGNlcHRpb25zIGhhbmRsZWQgYnkgbWljcm9jb2RlCi1ldmVudDoweDEyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpNVUwgOiBudW1iZXIgb2YgbXVsdGlwbGllcwotZXZlbnQ6MHgxMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVYgOiBudW1iZXIgb2YgZGl2aWRlcwotZXZlbnQ6MHgxNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6Q1lDTEVTX0RJVl9CVVNZIDogY3ljbGVzIGRpdmlkZXIgaXMgYnVzeQotZXZlbnQ6MHgwMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxEX0JMT0NLUyA6IG51bWJlciBvZiBzdG9yZSBidWZmZXIgYmxvY2tzCi1ldmVudDoweDA0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0JfRFJBSU5TIDogbnVtYmVyIG9mIHN0b3JlIGJ1ZmZlciBkcmFpbiBjeWNsZXMKLWV2ZW50OjB4MDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTl9NRU1fUkVGIDogbnVtYmVyIG9mIG1pc2FsaWduZWQgZGF0YSBtZW1vcnkgcmVmZXJlbmNlcwotZXZlbnQ6MHhjMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKLWV2ZW50OjB4YzIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6VU9QU19SRVRJUkVEIDogbnVtYmVyIG9mIFVPUHMgcmV0aXJlZAotZXZlbnQ6MHhkMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGRlY29kZWQKLWV2ZW50OjB4YzggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpIV19JTlRfUlggOiBudW1iZXIgb2YgaGFyZHdhcmUgaW50ZXJydXB0cyByZWNlaXZlZAotZXZlbnQ6MHhjNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlRfTUFTS0VEIDogY3ljbGVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkCi1ldmVudDoweGM3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0lOVF9QRU5ESU5HX0FORF9NQVNLRUQgOiBjeWNsZXMgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2l0aCBwZW5kaW5nIGludGVycnVwdHMKLWV2ZW50OjB4YzQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyByZXRpcmVkCi1ldmVudDoweGM1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1JFVElSRUQgOiBudW1iZXIgb2YgbWlzcHJlZGljdGVkIGJyYW5jaGVzIHJldGlyZWQKLWV2ZW50OjB4YzkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9UQUtFTl9SRVRJUkVEIDogbnVtYmVyIG9mIHRha2VuIGJyYW5jaGVzIHJldGlyZWQKLWV2ZW50OjB4Y2EgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9NSVNTX1BSRURfVEFLRU5fUkVUIDogbnVtYmVyIG9mIHRha2VuIG1pc3ByZWRpY3Rpb25zIGJyYW5jaGVzIHJldGlyZWQKLWV2ZW50OjB4ZTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyBkZWNvZGVkCi1ldmVudDoweGUyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlRCX01JU1NFUyA6IG51bWJlciBvZiBicmFuY2hlcyB0aGF0IG1pc3MgdGhlIEJUQgotZXZlbnQ6MHhlNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX0JPR1VTIDogbnVtYmVyIG9mIGJvZ3VzIGJyYW5jaGVzCi1ldmVudDoweGU2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFDTEVBUlMgOiBudW1iZXIgb2YgdGltZXMgQkFDTEVBUiBpcyBhc3NlcnRlZAotZXZlbnQ6MHhhMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFU09VUkNFX1NUQUxMUyA6IGN5Y2xlcyBkdXJpbmcgcmVzb3VyY2UgcmVsYXRlZCBzdGFsbHMKLWV2ZW50OjB4ZDIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQVJUSUFMX1JBVF9TVEFMTFMgOiBjeWNsZXMgb3IgZXZlbnRzIGZvciBwYXJ0aWFsIHN0YWxscwotZXZlbnQ6MHgwNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFR01FTlRfUkVHX0xPQURTIDogbnVtYmVyIG9mIHNlZ21lbnQgcmVnaXN0ZXIgbG9hZHMKZGlmZiAtLWdpdCBhL2V2ZW50cy9pMzg2L3Bwcm8vdW5pdF9tYXNrcyBiL2V2ZW50cy9pMzg2L3Bwcm8vdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU5YjhiNS4uMDAwMDAwMAotLS0gYS9ldmVudHMvaTM4Ni9wcHJvL3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIFBlbnRpdW0gUHJvIHBvc3NpYmxlIHVuaXQgbWFza3MKLSMKLW5hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAotCTB4MCBObyB1bml0IG1hc2sKLW5hbWU6bWVzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCi0JMHgwOCAoTSlvZGlmaWVkIGNhY2hlIHN0YXRlCi0JMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQotCTB4MDIgKFMpaGFyZWQgY2FjaGUgc3RhdGUKLQkweDAxIChJKW52YWxpZCBjYWNoZSBzdGF0ZQotCTB4MGYgQWxsIGNhY2hlIHN0YXRlcwotbmFtZTplYmwgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDIwCi0JMHgwMCBzZWxmLWdlbmVyYXRlZCB0cmFuc2FjdGlvbnMKLQkweDIwIGFueSB0cmFuc2FjdGlvbnMKZGlmZiAtLWdpdCBhL2V2ZW50cy9pYTY0L2lhNjQvZXZlbnRzIGIvZXZlbnRzL2lhNjQvaWE2NC9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZTQxZGQuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL2lhNjQvaWE2NC9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgSUEtNjQgZXZlbnRzCi1ldmVudDoweDEyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9DWUNMRVMgOiBDUFUgQ3ljbGVzCi1ldmVudDoweDA4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklBNjRfSU5TVF9SRVRJUkVEIDogSUEtNjQgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKZGlmZiAtLWdpdCBhL2V2ZW50cy9pYTY0L2lhNjQvdW5pdF9tYXNrcyBiL2V2ZW50cy9pYTY0L2lhNjQvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RkODU0YS4uMDAwMDAwMAotLS0gYS9ldmVudHMvaWE2NC9pYTY0L3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgSUEtNjQgcG9zc2libGUgdW5pdCBtYXNrcwotIwotbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCi0JMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvZXZlbnRzL2lhNjQvaXRhbml1bS9ldmVudHMgYi9ldmVudHMvaWE2NC9pdGFuaXVtL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBjZTEwZi4uMDAwMDAwMAotLS0gYS9ldmVudHMvaWE2NC9pdGFuaXVtL2V2ZW50cworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyBJQS02NCBJdGFuaXVtIDEgZXZlbnRzCi1ldmVudDoweDEyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9DWUNMRVMgOiBDUFUgQ3ljbGVzCi1ldmVudDoweDA4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUE2NF9JTlNUX1JFVElSRUQgOiBJQS02NCBJbnN0cnVjdGlvbnMgUmV0aXJlZAotZXZlbnQ6MHgxNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQTMyX0lOU1RfUkVUSVJFRCA6IElBLTMyIEluc3RydWN0aW9ucyBSZXRpcmVkCi0jIEZJWE1FOiBpdGFuaXVtIGRvYyBkZXNjcmliZSBhIGxvdCBvZiBvdGhlciBldmVudHMsIHNob3VsZCB3ZSBhZGQgdGhlbSB3L28gYW55IHRlc3RpbmcgPwpkaWZmIC0tZ2l0IGEvZXZlbnRzL2lhNjQvaXRhbml1bS91bml0X21hc2tzIGIvZXZlbnRzL2lhNjQvaXRhbml1bS91bml0X21hc2tzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTlmNzdiLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9pYTY0L2l0YW5pdW0vdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBJQS02NCBJdGFuaXVtIDEgcG9zc2libGUgdW5pdCBtYXNrcwotIwotbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCi0JMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvZXZlbnRzL2lhNjQvaXRhbml1bTIvZXZlbnRzIGIvZXZlbnRzL2lhNjQvaXRhbml1bTIvZXZlbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTc5MDIyLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9pYTY0L2l0YW5pdW0yL2V2ZW50cworKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0jIElBLTY0IEl0YW5pdW0gMiBldmVudHMKLQotIyBJQTY0XzIgQmFzaWMgRXZlbnRzLCBUYWJsZSAxMS0xCi1ldmVudDoweDEyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9DWUNMRVMgOiBDUFUgQ3ljbGVzCi1ldmVudDoweDA4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklBNjRfSU5TVF9SRVRJUkVEIDogSUEtNjQgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKLWV2ZW50OjB4NTkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOklBMzJfSU5TVF9SRVRJUkVEIDogSUEtMzIgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKLWV2ZW50OjB4MDcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUEzMl9JU0FfVFJBTlNJVElPTlMgOiBJdGFuaXVtIHRvL2Zyb20gSUEtMzIgSVNBIFRyYW5zaXRpb25zCi0KLSMgSUE2NF8yIEluc3RydWN0aW9uIERpc3BlcmFsIEV2ZW50cywgVGFibGUgMTEtMwotZXZlbnQ6MHg0OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6RElTUF9TVEFMTEVEIDogTnVtYmVyIG9mIGN5Y2xlcyBkaXNwZXJzYWwgc3RhbGxlZAotZXZlbnQ6MHg0ZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6SU5TVF9ESVNQRVJTRUQgOiBTeWxsYWJsZXMgRGlzcGVyc2VkIGZyb20gUkVOIHRvIFJFRyBzdGFnZQotZXZlbnQ6MHg0ZSBjb3VudGVyczowLDEsMiwzIHVtOnN5bGxfbm90X2Rpc3BlcnNlZCBtaW5pbXVtOjUwMDAgbmFtZTpTWUxMX05PVF9ESVNQRVJTRUQgOiBTeWxsYWJsZXMgbm90IGRpc3BlcnNlZAotZXZlbnQ6MHg0ZiBjb3VudGVyczowLDEsMiwzIHVtOnN5bGxfb3ZlcmNvdW50IG1pbmltdW06NTAwMCBuYW1lOlNZTExfT1ZFUkNPVU5UIDogU3lsbGFibGVzIG92ZXJjb3VudGVkCi0KLSMgSUE2NF8yIEluc3RydWN0aW9uIEV4ZWN1dGlvbiBFdmVudHMsIFRhYmxlIDExLTQKLWV2ZW50OjB4NTggY291bnRlcnM6MCwxLDIsMyB1bTphbGF0X2NhcGFjaXR5X21pc3MgbWluaW11bTo1MDAwIG5hbWU6QUxBVF9DQVBBQ0lUWV9NSVNTIDogQUxBVCBFbnRyeSBSZXBsYWNlZAotZXZlbnQ6MHgwNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6RlBfRkFJTEVEX0ZDSEtGIDogRmFpbGVkIGZjaGtmCi1ldmVudDoweDA1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpGUF9GQUxTRV9TSVJTVEFMTCA6IFNJUiBzdGFsbCB3aXRob3V0IGEgdHJhcAotZXZlbnQ6MHgwYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6RlBfRkxVU0hfVE9fWkVSTyA6IFJlc3VsdCBGbHVzaGVkIHRvIFplcm8KLWV2ZW50OjB4MDkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkZQX09QU19SRVRJUkVEIDogUmV0aXJlZCBGUCBvcGVyYXRpb25zCi1ldmVudDoweDAzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpGUF9UUlVFX1NJUlNUQUxMIDogU0lSIHN0YWxsIGFzc2VydGVkIGFuZCBsZWFkcyB0byBhIHRyYXAKLWV2ZW50OjB4MDggY291bnRlcnM6MCwxLDIsMyB1bTp0YWdnZWRfaW5zdF9yZXRpcmVkIG1pbmltdW06NTAwMCBuYW1lOklBNjRfVEFHR0VEX0lOU1RfUkVUSVJFRCA6IFJldGlyZWQgVGFnZ2VkIEluc3RydWN0aW9ucwotZXZlbnQ6MHg1NiBjb3VudGVyczowLDEsMiwzIHVtOmFsYXRfY2FwYWNpdHlfbWlzcyBtaW5pbXVtOjUwMDAgbmFtZTpJTlNUX0NIS0FfTERDX0FMQVQgOiBBZHZhbmNlZCBDaGVjayBMb2FkcwotZXZlbnQ6MHg1NyBjb3VudGVyczowLDEsMiwzIHVtOmFsYXRfY2FwYWNpdHlfbWlzcyBtaW5pbXVtOjUwMDAgbmFtZTpJTlNUX0ZBSUxFRF9DSEtBX0xEQ19BTEFUIDogRmFpbGVkIEFkdmFuY2VkIENoZWNrIExvYWRzCi1ldmVudDoweDU1IGNvdW50ZXJzOjAsMSwyLDMgdW06YWxhdF9jYXBhY2l0eV9taXNzIG1pbmltdW06NTAwMCBuYW1lOklOU1RfRkFJTEVEX0NIS1NfUkVUSVJFRCA6IEZhaWxlZCBTcGVjdWxhdGl2ZSBDaGVjayBMb2FkcwotIyBUbyBhdm9pZCBkdXBsaWNhdGlvbiBmcm9tIG90aGVyIHRhYmxlcyB0aGUgZm9sbG93aW5nIGV2ZW50cyBjb21tZW50ZWQgb3V0Ci0jZXZlbnQ6MHhjZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TE9BRFNfUkVUSVJFRCA6IFJldGlyZWQgTG9hZHMKLSNldmVudDoweGNlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpNSVNBTElHTkVEX0xPQURTX1JFVElSRUQgOiBSZXRpcmVkIE1pc2FsaWduZWQgTG9hZCBJbnN0cnVjdGlvbnMKLSNldmVudDoweGNmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpVQ19MT0FEU19SRVRJUkVEIDogUmV0aXJlZCBVbmNhY2hlYWJsZSBMb2FkcwotI2V2ZW50OjB4ZDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOlNUT1JFU19SRVRJUkVEIDogUmV0aXJlZCBTdG9yZXMKLSNldmVudDoweGQyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpNSVNBTElHTkVEX1NUT1JFU19SRVRJUkVEIDogUmV0aXJlZCBNaXNhbGlnbmVkIFN0b3JlIEluc3RydWN0aW9ucwotI2V2ZW50OjB4ZDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOlVDX1NUT1JFU19SRVRJUkVEIDogUmV0aXJlZCBVbmNhY2hlYWJsZSBTdG9yZXMKLWV2ZW50OjB4NTAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOk5PUFNfUkVUSVJFRCA6IFJldGlyZWQgTk9QIEluc3RydWN0aW9ucwotZXZlbnQ6MHg1MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6UFJFRElDQVRFX1NRVUFTSEVEX1JFVElSRUQgOiBJbnN0cnVjdGlvbnMgU3F1YXNoZWQgRHVlIHRvIFByZWRpY2F0ZSBPZmZgCi0KLSMgSUE2NF8yIFN0YWxsIEV2ZW50cywgVGFibGUgMTEtNgotZXZlbnQ6MHgwMCBjb3VudGVyczowLDEsMiwzIHVtOmJhY2tfZW5kX2J1YmJsZSBtaW5pbXVtOjUwMDAgbmFtZTpCQUNLX0VORF9CVUJCTEUgOiBGdWxsIHBpcGUgYnViYmxlcyBpbiBtYWluIHBpcGUKLWV2ZW50OjB4MDIgY291bnRlcnM6MCwxLDIsMyB1bTpiZV9leGVfYnViYmxlIG1pbmltdW06NTAwMCBuYW1lOkJFX0VYRV9CVUJCTEUgOiBGdWxsIHBpcGUgYnViYmxlcyBpbiBtYWluIHBpcGUgZHVlIHRvIEV4ZWN1dGlvbiB1bml0IHN0YWxscwotZXZlbnQ6MHgwNCBjb3VudGVyczowLDEsMiwzIHVtOmJlX2ZsdXNoX2J1YmJsZSBtaW5pbXVtOjUwMDAgbmFtZTpCRV9GTFVTSF9CVUJCTEUgOiBGdWxsIHBpcGUgYnViYmxlcyBpbiBtYWluIHBpcGUgZHVlIHRvIGZsdXNoZXMKLWV2ZW50OjB4Y2EgY291bnRlcnM6MCwxLDIsMyB1bTpiZV9sMWRfZnB1X2J1YmJsZSBtaW5pbXVtOjUwMDAgbmFtZTpCRV9MMURfRlBVX0JVQkJMRSA6IEZ1bGwgcGlwZSBidWJibGVzIGluIG1haW4gcGlwZSBkdWUgdG8gRlAgb3IgTDEgZGNhY2hlCi0jIFRvIGF2b2lkIGR1cGxpY2F0aW9uIGZyb20gb3RoZXIgdGFibGVzIHRoZSBmb2xsb3dpbmcgZXZlbnRzIGNvbW1lbnRlZCBvdXQKLSNldmVudDoweDcyIGNvdW50ZXJzOjAsMSwyLDMgdW06YmVfbG9zdF9id19kdWVfdG9fZmUgbWluaW11bTo1MDAwIG5hbWU6QkVfTE9TVF9CV19EVUVfVE9fRkUgOiBJbnZhbGlkIGJ1bmRsZXMgaWYgQkUgbm90IHN0YWxsZWQgZm9yIG90aGVyIHJlYXNvbnMKLWV2ZW50OjB4MDEgY291bnRlcnM6MCwxLDIsMyB1bTpiZV9yc2VfYnViYmxlIG1pbmltdW06NTAwMCBuYW1lOkJFX1JTRV9CVUJCTEUgOiBGdWxsIHBpcGUgYnViYmxlcyBpbiBtYWluIHBpcGUgZHVlIHRvIFJTRSBzdGFsbHMKLWV2ZW50OjB4NzEgY291bnRlcnM6MCwxLDIsMyB1bTpmZV9idWJibGUgbWluaW11bTo1MDAwIG5hbWU6RkVfQlVCQkxFIDogQnViYmxlcyBzZWVuIGJ5IEZFCi1ldmVudDoweDcwIGNvdW50ZXJzOjAsMSwyLDMgdW06ZmVfbG9zdCBtaW5pbXVtOjUwMDAgbmFtZTpGRV9MT1NUX0JXIDogSW52YWxpZCBidW5kbGVzIGF0IHRoZSBlbnRyYW5jZSB0byBJQgotZXZlbnQ6MHg3MyBjb3VudGVyczowLDEsMiwzIHVtOmZlX2xvc3QgbWluaW11bTo1MDAwIG5hbWU6SURFQUxfQkVfTE9TVF9CV19EVUVfVE9fRkUgOiBJbnZhbGlkIGJ1bmRsZXMgYXQgdGhlIGV4aXQgZnJvbSBJQgotCi0jIElBNjRfMiBCcmFuY2ggRXZlbnRzLCBUYWJsZSAxMS03Ci1ldmVudDoweDYxIGNvdW50ZXJzOjAsMSwyLDMgdW06YmVfYnJfbWlzcHJlZGljdF9kZXRhaWwgbWluaW11bTo1MDAwIG5hbWU6QkVfQlJfTUlTUFJFRF9ERVRBSUwgOiBCRSBicmFuY2ggbWlzcHJlZGljdGlvbiBkZXRhaWwKLWV2ZW50OjB4MTEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJSQU5DSF9FVkVOVCA6IEJyYW5jaCBFdmVudCBDYXB0dXJlZAotZXZlbnQ6MHg1YiBjb3VudGVyczowLDEsMiwzIHVtOmJyX21pc3ByZWRfZGV0YWlsIG1pbmltdW06NTAwMCBuYW1lOkJSX01JU1BSRURfREVUQUlMIDogQnJhbmNoIE1pc3ByZWRpY3QgRGV0YWlsCi1ldmVudDoweDY4IGNvdW50ZXJzOjAsMSwyLDMgdW06YnJfbWlzcHJlZGljdF9kZXRhaWwyIG1pbmltdW06NTAwMCBuYW1lOkJSX01JU1BSRURfREVUQUlMMiA6IEZFIEJyYW5jaCBNaXNwcmVkaWN0IERldGFpbCAoVW5rbm93biBwYXRoIGNvbXBvbmVudCkKLWV2ZW50OjB4NTQgY291bnRlcnM6MCwxLDIsMyB1bTpicl9wYXRoX3ByZWQgbWluaW11bTo1MDAwIG5hbWU6QlJfUEFUSF9QUkVEIDogRkUgQnJhbmNoIFBhdGggUHJlZGljdGlvbiBEZXRhaWwKLWV2ZW50OjB4NmEgY291bnRlcnM6MCwxLDIsMyB1bTpicl9wYXRoX3ByZWQyIG1pbmltdW06NTAwMCBuYW1lOkJSX1BBVEhfUFJFRDIgOiBGRSBCcmFuY2ggUGF0aCBQcmVkaWN0aW9uIERldGFpbCAoVW5rbm93biBwcmVkaWN0aW9uIGNvbXBvbmVudCkKLWV2ZW50OjB4NjMgY291bnRlcnM6MCwxLDIsMyB1bTplbmNicl9taXNwcmVkX2RldGFpbCBtaW5pbXVtOjUwMDAgbmFtZTpFTkNCUl9NSVNQUkVEX0RFVEFJTCA6IE51bWJlciBvZiBlbmNvZGVkIGJyYW5jaGVzIHJldGlyZWQKLQotIyBJQTY0XzIgTDEgSW5zdHJ1Y3Rpb24gQ2FjaGUgYW5kIFByZWZldGNoIEV2ZW50cywgVGFibGUgMTEtOAotZXZlbnQ6MHg0NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6SVNCX0JVTlBBSVJTX0lOIDogQnVuZGxlIHBhaXJzIHdyaXR0ZW4gZnJvbSBMMiBpbnRvIEZFCi1ldmVudDoweDQzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMUlfRUFSX0VWRU5UUyA6IEluc3RydWN0aW9uIEVBUiBFdmVudHMKLWV2ZW50OjB4NjYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9GRVRDSF9JU0JfSElUIDogIlwiSnVzdC1pbi10aW1lXCIgaW5zdHJ1Y3Rpb24gZmV0Y2ggaGl0dGluZyBpbiBhbmQgYmVpbmcgYnlwYXNzZWQgZnJvbSBJU0IKLWV2ZW50OjB4NjUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9GRVRDSF9SQUJfSElUIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggaGl0dGluZyBpbiBSQUIKLWV2ZW50OjB4NDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9GSUxMUyA6IEwxIEluc3RydWN0aW9uIENhY2hlIEZpbGxzCi1ldmVudDoweDQ0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMUlfUFJFRkVUQ0hFUyA6IEluc3RydWN0aW9uIFByZWZldGNoIFJlcXVlc3RzCi1ldmVudDoweDQyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JTlNUX0RFTUFORF9SRUFEUyA6IEwxIEluc3RydWN0aW9uIENhY2hlIGFuZCBJU0IgTWlzc2VzCi1ldmVudDoweDY3IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFpX3ByZWZldGNoX3N0YWxsIG1pbmltdW06NTAwMCBuYW1lOkwxSV9QUkVGRVRDSF9TVEFMTCA6IFdoeSBwcmVmZXRjaCBwaXBlbGluZSBpcyBzdGFsbGVkPwotZXZlbnQ6MHg0YiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDFJX1BVUkdFIDogTDFJVExCIHB1cmdlcyBoYW5kbGVkIGJ5IEwxSQotZXZlbnQ6MHg2OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDFJX1BWQUJfT1ZFUkZMT1cgOiBQVkFCIG92ZXJmbG93Ci1ldmVudDoweDY0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMUlfUkFCX0FMTU9TVF9GVUxMIDogSXMgUkFCIGFsbW9zdCBmdWxsPwotZXZlbnQ6MHg2MCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMUlfUkFCX0ZVTEwgOiBJcyBSQUIgZnVsbD8KLWV2ZW50OjB4NDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9SRUFEUyA6IEwxIEluc3RydWN0aW9uIENhY2hlIFJlYWQKLWV2ZW50OjB4NGEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9TTk9PUCA6IFNub29wIHJlcXVlc3RzIGhhbmRsZWQgYnkgTDFJCi1ldmVudDoweDVmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMUlfU1RSTV9QUkVGRVRDSEVTIDogTDEgSW5zdHJ1Y3Rpb24gQ2FjaGUgbGluZSBwcmVmZXRjaCByZXF1ZXN0cwotZXZlbnQ6MHg0NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfSU5TVF9QUkVGRVRDSEVTIDogSW5zdHJ1Y3Rpb24gUHJlZmV0Y2ggUmVxdWVzdHMKLQotIyBJQTY0XzIgTDEgRGF0YSBDYWNoZSBFdmVudHMsIFRhYmxlIDExLTEwCi1ldmVudDoweGM4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpEQVRBX0VBUl9FVkVOVFMgOiBEYXRhIENhY2hlIEVBUiBFdmVudHMKLSMgVG8gYXZvaWQgZHVwbGljYXRpb24gZnJvbSBvdGhlciB0YWJsZXMgdGhlIGZvbGxvd2luZyBldmVudHMgY29tbWVudGVkIG91dAotI2V2ZW50OjB4YzIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxRF9SRUFEU19TRVQwIDogTDEgRGF0YSBDYWNoZSBSZWFkcwotI2V2ZW50OjB4YzMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkRBVEFfUkVGRVJFTkNFU19TRVQwIDogRGF0YSBtZW1vcnkgcmVmZXJlbmNlcyBpc3N1ZWQgdG8gbWVtb3J5IHBpcGVsaW5lCi0jZXZlbnQ6MHhjNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDFEX1JFQURTX1NFVDEgOiBMMSBEYXRhIENhY2hlIFJlYWRzCi0jZXZlbnQ6MHhjNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6REFUQV9SRUZFUkVOQ0VTX1NFVDEgOiBEYXRhIG1lbW9yeSByZWZlcmVuY2VzIGlzc3VlZCB0byBtZW1vcnkgcGlwZWxpbmUKLSNldmVudDoweGM3IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFkX3JlYWRfbWlzc2VzIG1pbmltdW06NTAwMCBuYW1lOkwxRF9SRUFEX01JU1NFUyA6IEwxIERhdGEgQ2FjaGUgUmVhZCBNaXNzZXMKLQotIyBJQTY0XzIgTDEgRGF0YSBDYWNoZSBTZXQgMCBFdmVudHMsIFRhYmxlIDExLTExCi1ldmVudDoweGMwIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMURUTEJfVFJBTlNGRVIgOiBMMURUTEIgbWlzc2VzIHRoYXQgaGl0IGluIHRoZSBMMkRUTEIgZm9yIGFjY2Vzc2VzIGNvdW50ZWQgaW4gTDFEX1JFQURTCi1ldmVudDoweGMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMkRUTEJfTUlTU0VTIDogTDJEVExCIE1pc3NlcwotZXZlbnQ6MHhjMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDFEX1JFQURTX1NFVDAgOiBMMSBEYXRhIENhY2hlIFJlYWRzCi1ldmVudDoweGMzIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpEQVRBX1JFRkVSRU5DRVNfU0VUMCA6IERhdGEgbWVtb3J5IHJlZmVyZW5jZXMgaXNzdWVkIHRvIG1lbW9yeSBwaXBlbGluZQotCi0jIElBNjRfMiBMMSBEYXRhIENhY2hlIFNldCAxIEV2ZW50cywgVGFibGUgMTEtMTIKLWV2ZW50OjB4YzQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxRF9SRUFEU19TRVQxIDogTDEgRGF0YSBDYWNoZSBSZWFkcwotZXZlbnQ6MHhjNSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6REFUQV9SRUZFUkVOQ0VTX1NFVDEgOiBEYXRhIG1lbW9yeSByZWZlcmVuY2VzIGlzc3VlZCB0byBtZW1vcnkgcGlwZWxpbmUKLWV2ZW50OjB4YzcgY291bnRlcnM6MSB1bTpsMWRfcmVhZF9taXNzZXMgbWluaW11bTo1MDAwIG5hbWU6TDFEX1JFQURfTUlTU0VTIDogTDEgRGF0YSBDYWNoZSBSZWFkIE1pc3NlcwotCi0jIElBNjRfMiBMMSBEYXRhIENhY2hlIFNldCAyIEV2ZW50cywgVGFibGUgMTEtMTMKLWV2ZW50OjB4Y2EgY291bnRlcnM6MSB1bTpiZV9sMWRfZnB1X2J1YmJsZSBtaW5pbXVtOjUwMDAgbmFtZTpCRV9MMURfRlBVX0JVQkJMRSA6IEZ1bGwgcGlwZSBidWJibGVzIGluIG1haW4gcGlwZSBkdWUgdG8gRlAgb3IgTDEgZGNhY2hlCi0KLSMgSUE2NF8yIEwxIERhdGEgQ2FjaGUgU2V0IDMgRXZlbnRzLCBUYWJsZSAxMS0xNAotZXZlbnQ6MHhjZCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TE9BRFNfUkVUSVJFRCA6IFJldGlyZWQgTG9hZHMKLWV2ZW50OjB4Y2UgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOk1JU0FMSUdORURfTE9BRFNfUkVUSVJFRCA6IFJldGlyZWQgTWlzYWxpZ25lZCBMb2FkIEluc3RydWN0aW9ucwotZXZlbnQ6MHhjZiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6VUNfTE9BRFNfUkVUSVJFRCA6IFJldGlyZWQgVW5jYWNoZWFibGUgTG9hZHMKLQotIyBJQTY0XzIgTDEgRGF0YSBDYWNoZSBTZXQgNCBFdmVudHMsIFRhYmxlIDExLTE1Ci1ldmVudDoweGQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpTVE9SRVNfUkVUSVJFRCA6IFJldGlyZWQgU3RvcmVzCi1ldmVudDoweGQyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpNSVNBTElHTkVEX1NUT1JFU19SRVRJUkVEIDogUmV0aXJlZCBNaXNhbGlnbmVkIFN0b3JlIEluc3RydWN0aW9ucwotZXZlbnQ6MHhkMCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6VUNfU1RPUkVTX1JFVElSRUQgOiBSZXRpcmVkIFVuY2FjaGVhYmxlIFN0b3JlcwotCi0jIElBNjRfMiBMMiBVbmlmaWVkIENhY2hlIEV2ZW50cywgVGFibGUgMTEtMTYKLSMgVG8gYXZvaWQgZHVwbGljYXRpb24gZnJvbSBvdGhlciB0YWJsZXMgdGhlIGZvbGxvd2luZyBldmVudHMgY29tbWVudGVkIG91dAotI2V2ZW50OjB4YjkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX0JBRF9MSU5FU19TRUxFQ1RFRCA6IFZhbGlkIGxpbmUgcmVwbGFjZWQgd2hlbiBpbnZhbGlkIGxpbmUgaXMgYXZhaWxhYmxlCi0jZXZlbnQ6MHhiOCBjb3VudGVyczowLDEsMiwzIHVtOmwyX2J5cGFzcyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9CWVBBU1MgOiBDb3VudCBieXBhc3MKLSNldmVudDoweGIyIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfZGF0YV9yZWZlcmVuY2VzIG1pbmltdW06NTAwMCBuYW1lOkwyX0RBVEFfUkVGRVJFTkNFUyA6IERhdGEgcmVhZC93cml0ZSBhY2Nlc3MgdG8gTDIKLWV2ZW50OjB4YmYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX0ZJTExCX0ZVTEwgOiBMMkQgRmlsbCBidWZmZXIgaXMgZnVsbAotI2V2ZW50OjB4YjQgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9mb3JjZV9yZWNpcmMgbWluaW11bTo1MDAwIG5hbWU6TDJfRk9SQ0VfUkVDSVJDIDogRm9yY2VkIHJlY2lyY3VsYXRlcwotZXZlbnQ6MHhiYSBjb3VudGVyczowLDEsMiwzIHVtOnJlY2lyY19pZmV0Y2ggbWluaW11bTo1MDAwIG5hbWU6TDJfR09UX1JFQ0lSQ19JRkVUQ0ggOiBJbnN0cnVjdGlvbiBmZXRjaCByZWNpcmN1bGF0ZXMgcmVjZWl2ZWQgYnkgTDJECi0jZXZlbnQ6MHhiNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfR09UX1JFQ0lSQ19PWlFfQUNDIDogQ291bnRzIG51bWJlciBvZiBPWlEgYWNjZXNzZXMgcmVjaXJjdWxhdGVkIGJhY2sgdG8gTDFECi0jZXZlbnQ6MHhhMSBjb3VudGVyczowLDEsMiwzIHVtOmwyX2lmZXRfY2FuY2VscyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JRkVUX0NBTkNFTFMgOiBJbnN0cnVjdGlvbiBmZXRjaCBjYW5jZWxzIGJ5IHRoZSBMMi4KLSNldmVudDoweGE1IGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfaWZldF9jYW5jZWxzIG1pbmltdW06NTAwMCBuYW1lOkwyX0lGRVRfQ0FOQ0VMUyA6IEluc3RydWN0aW9uIGZldGNoIGNhbmNlbHMgYnkgdGhlIEwyLgotI2V2ZW50OjB4YTkgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9pZmV0X2NhbmNlbHMgbWluaW11bTo1MDAwIG5hbWU6TDJfSUZFVF9DQU5DRUxTIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggY2FuY2VscyBieSB0aGUgTDIuCi0jZXZlbnQ6MHhhZCBjb3VudGVyczowLDEsMiwzIHVtOmwyX2lmZXRfY2FuY2VscyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JRkVUX0NBTkNFTFMgOiBJbnN0cnVjdGlvbiBmZXRjaCBjYW5jZWxzIGJ5IHRoZSBMMi4KLWV2ZW50OjB4YjkgY291bnRlcnM6MCwxLDIsMyB1bTpyZWNpcmNfaWZldGNoIG1pbmltdW06NTAwMCBuYW1lOkwyX0lTU1VFRF9SRUNJUkNfSUZFVENIIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggcmVjaXJjdWxhdGVzIGlzc3VlZCBieSBMMkQKLSNldmVudDoweGI1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JU1NVRURfUkVDSVJDX09aUV9BQ0MgOiBDb3VudCBudW1iZXIgb2YgdGltZXMgYSByZWNpcmN1bGF0ZSBpc3N1ZSB3YXMgYXR0ZW1wdGVkIGFuZCBub3QgcHJlZW1wdGVkCi0jZXZlbnQ6MHhiMCBjb3VudGVyczowLDEsMiwzIHVtOmwyX2wzX2FjY2Vzc19jYW5jZWwgbWluaW11bTo1MDAwIG5hbWU6TDJfTDNBQ0NFU1NfQ0FOQ0VMIDogQ2FuY2VsZWQgTDMgYWNjZXNzZXMKLWV2ZW50OjB4Y2IgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX01JU1NFUyA6IEwyIE1pc3NlcwotZXZlbnQ6MHhiOCBjb3VudGVyczowLDEsMiwzIHVtOmwyX29wc19pc3N1ZWQgbWluaW11bTo1MDAwIG5hbWU6TDJfT1BTX0lTU1VFRCA6IERpZmZlcmVudCBvcGVyYXRpb25zIGlzc3VlZCBieSBMMkQKLSNldmVudDoweGJkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWkRCX0ZVTEwgOiBMMkQgT1pRIGlzIGZ1bGwKLSNldmVudDoweGEyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQUNRVUlSRSA6IENsb2NrcyB3aXRoIGFjcXVpcmUgb3JkZXJpbmcgYXR0cmlidXRlIGV4aXN0ZWQgaW4gTDIgT1pRCi0jZXZlbnQ6MHhhNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotI2V2ZW50OjB4YWEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX09aUV9BQ1FVSVJFIDogQ2xvY2tzIHdpdGggYWNxdWlyZSBvcmRlcmluZyBhdHRyaWJ1dGUgZXhpc3RlZCBpbiBMMiBPWlEKLSNldmVudDoweGFlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQUNRVUlSRSA6IENsb2NrcyB3aXRoIGFjcXVpcmUgb3JkZXJpbmcgYXR0cmlidXRlIGV4aXN0ZWQgaW4gTDIgT1pRCi0jZXZlbnQ6MHhhMCBjb3VudGVyczowLDEsMiwzIHVtOmwyX296cV9jYW5jZWxzMCBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQ0FOQ0VMUzAgOiBMMiBPWlEgY2FuY2VscwotI2V2ZW50OjB4YWMgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9venFfY2FuY2VsczEgbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0NBTkNFTFMxIDogTDIgT1pRIGNhbmNlbHMKLSNldmVudDoweGE4IGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfb3pxX2NhbmNlbHMyIG1pbmltdW06NTAwMCBuYW1lOkwyX09aUV9DQU5DRUxTMiA6IEwyIE9aUSBjYW5jZWxzCi0jZXZlbnQ6MHhiYyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0ZVTEwgOiBMMkQgT1pRIGlzIGZ1bGwKLSNldmVudDoweGEzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfUkVMRUFTRSA6IENsb2NrcyB3aXRoIHJlbGVhc2Ugb3JkZXJpbmcgYXR0cmlidXRlIGV4aXN0ZWQgaW4gTDIgT1pRCi0jZXZlbnQ6MHhhNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotI2V2ZW50OjB4YWIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX09aUV9SRUxFQVNFIDogQ2xvY2tzIHdpdGggcmVsZWFzZSBvcmRlcmluZyBhdHRyaWJ1dGUgZXhpc3RlZCBpbiBMMiBPWlEKLSNldmVudDoweGFmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfUkVMRUFTRSA6IENsb2NrcyB3aXRoIHJlbGVhc2Ugb3JkZXJpbmcgYXR0cmlidXRlIGV4aXN0ZWQgaW4gTDIgT1pRCi0jZXZlbnQ6MHhiMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfUkVGRVJFTkNFUyA6IFJlcXVlc3RzIG1hZGUgZnJvbSBMMgotI2V2ZW50OjB4YmEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX1NUT1JFX0hJVF9TSEFSRUQgOiBTdG9yZSBoaXQgYSBzaGFyZWQgbGluZQotI2V2ZW50OjB4YjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX1NZTlRIX1BST0JFIDogU3ludGhlc2l6ZWQgUHJvYmUKLSNldmVudDoweGJlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9WSUNUSU1CX0ZVTEwgOiBMMkQgdmljdGltIGJ1ZmZlciBpcyBmdWxsCi0KLSMgSUE2NF8yIEwyIENhY2hlIEV2ZW50cyBTZXQgMCwgVGFibGUgMTEtMTgKLSMgRklYTUUgYWxsIHNvcnRzIG9mIHJlc3RyaWN0aW9ucyBvbiBob3cgdGhlc2UgY2FuIGJlIGNvbWJpbmVkCi1ldmVudDoweGExIGNvdW50ZXJzOjAgdW06bDJfaWZldF9jYW5jZWxzIG1pbmltdW06NTAwMCBuYW1lOkwyX0lGRVRfQ0FOQ0VMUyA6IEluc3RydWN0aW9uIGZldGNoIGNhbmNlbHMgYnkgdGhlIEwyLgotZXZlbnQ6MHhhNSBjb3VudGVyczowIHVtOmwyX2lmZXRfY2FuY2VscyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JRkVUX0NBTkNFTFMgOiBJbnN0cnVjdGlvbiBmZXRjaCBjYW5jZWxzIGJ5IHRoZSBMMi4KLWV2ZW50OjB4YTkgY291bnRlcnM6MCB1bTpsMl9pZmV0X2NhbmNlbHMgbWluaW11bTo1MDAwIG5hbWU6TDJfSUZFVF9DQU5DRUxTIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggY2FuY2VscyBieSB0aGUgTDIuCi1ldmVudDoweGFkIGNvdW50ZXJzOjAgdW06bDJfaWZldF9jYW5jZWxzIG1pbmltdW06NTAwMCBuYW1lOkwyX0lGRVRfQ0FOQ0VMUyA6IEluc3RydWN0aW9uIGZldGNoIGNhbmNlbHMgYnkgdGhlIEwyLgotZXZlbnQ6MHhhMiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotZXZlbnQ6MHhhNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotZXZlbnQ6MHhhYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotZXZlbnQ6MHhhZSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotZXZlbnQ6MHhhMCBjb3VudGVyczowIHVtOmwyX296cV9jYW5jZWxzMCBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQ0FOQ0VMUzAgOiBMMiBPWlEgY2FuY2VscwotZXZlbnQ6MHhhYyBjb3VudGVyczowIHVtOmwyX296cV9jYW5jZWxzMSBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQ0FOQ0VMUzEgOiBMMiBPWlEgY2FuY2VscwotZXZlbnQ6MHhhOCBjb3VudGVyczowIHVtOmwyX296cV9jYW5jZWxzMiBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQ0FOQ0VMUzIgOiBMMiBPWlEgY2FuY2VscwotZXZlbnQ6MHhhMyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotZXZlbnQ6MHhhNyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotZXZlbnQ6MHhhYiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotZXZlbnQ6MHhhZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQotCi0jIElBNjRfMiBMMiBDYWNoZSBFdmVudHMgU2V0IDEsIFRhYmxlIDExLTE5Ci0jIG1hbnVhbCBzdGF0ZXMgdGhhdCBMMl9MM0FDQ0VTU19DQU5DRUwgbXVzdCBiZSBtZWFzdXJlZCBpbiBQTUQ0LgotIyBGSVhNRSBEb24ndCBoYXZlIGFueSB3YXkgb2YgZW5mb3JjaW5nIHRoZSBjb25zdHJhaW50cwotIyBzbyBvbmx5IGwyX2wzX2FjY2Vzc19jYW5jZWwgYWxsb3dlZC4KLWV2ZW50OjB4YjAgY291bnRlcnM6MCB1bTpsMl9sM19hY2Nlc3NfY2FuY2VsIG1pbmltdW06NTAwMCBuYW1lOkwyX0wzQUNDRVNTX0NBTkNFTCA6IENhbmNlbGVkIEwzIGFjY2Vzc2VzCi0jZXZlbnQ6MHhiMiBjb3VudGVyczowLDEsMiwzIHVtOmwyX2RhdGFfcmVmZXJlbmNlcyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9EQVRBX1JFRkVSRU5DRVMgOiBEYXRhIHJlYWQvd3JpdGUgYWNjZXNzIHRvIEwyCi0jZXZlbnQ6MHhiMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfUkVGRVJFTkNFUyA6IFJlcXVlc3RzIG1hZGUgZnJvbSBMMgotCi0jIElBNjRfMiBMMiBDYWNoZSBFdmVudHMgU2V0IDIsIFRhYmxlIDExLTIwCi0jIG1hbnVhbCBzdGF0ZXMgdGhhdCBMMl9GT1JDRV9SRUNJUkMgbXVzdCBiZSBtZWFzdXJlZCBpbiBQTUQ0LgotIyBGSVhNRSBEb24ndCBoYXZlIGFueXdheSBvZiBlbmZvcmNpbmcgdGhlcyBjb25zdHJhaW50Ci0jIHNvIG9ubHkgTDJfRk9SQ0VfUkVDSVJDIGFsbG93ZWQuCi1ldmVudDoweGI0IGNvdW50ZXJzOjAgdW06bDJfZm9yY2VfcmVjaXJjIG1pbmltdW06NTAwMCBuYW1lOkwyX0ZPUkNFX1JFQ0lSQyA6IEZvcmNlZCByZWNpcmN1bGF0ZXMKLSNldmVudDoweGI1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JU1NVRURfUkVDSVJDX09aUV9BQ0MgOiBDb3VudCBudW1iZXIgb2YgdGltZXMgYSByZWNpcmN1bGF0ZSBpc3N1ZSB3YXMgYXR0ZW1wdGVkIGFuZCBub3QgcHJlZW1wdGVkCi0jZXZlbnQ6MHhiNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfR09UX1JFQ0lSQ19PWlFfQUNDIDogQ291bnRzIG51bWJlciBvZiBPWlEgYWNjZXNzZXMgcmVjaXJjdWxhdGVkIGJhY2sgdG8gTDFECi0jZXZlbnQ6MHhiNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfU1lOVEhfUFJPQkUgOiBTeW50aGVzaXplZCBQcm9iZQotCi0jIElBNjRfMiBMMiBDYWNoZSBFdmVudHMgU2V0IDMsIFRhYmxlIDExLTIxCi0jIFRoZSBtYW51YWwgc3RhdGVzIHRoYXQgYWxsIGV2ZW50cyBpbiB0aGlzIHNldCBzaGFyZSB0aGUgc2FtZSB1bWFzay4KLWV2ZW50OjB4YjkgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX0JBRF9MSU5FU19TRUxFQ1RFRCA6IFZhbGlkIGxpbmUgcmVwbGFjZWQgd2hlbiBpbnZhbGlkIGxpbmUgaXMgYXZhaWxhYmxlCi1ldmVudDoweGI4IGNvdW50ZXJzOjAgdW06bDJfYnlwYXNzIG1pbmltdW06NTAwMCBuYW1lOkwyX0JZUEFTUyA6IENvdW50IGJ5cGFzcwotZXZlbnQ6MHhiYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfU1RPUkVfSElUX1NIQVJFRCA6IFN0b3JlIGhpdCBhIHNoYXJlZCBsaW5lCi0KLSMgSUE2NF8yIEwyIENhY2hlIEV2ZW50cyBTZXQgNCwgVGFibGUgMTEtMjIKLSMgVGhlIG1hbnVhbCBzdGF0ZXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVlZHMgdG8gYmUgaW4gcG1kNCBhbmQgdGhlc2UgZXZlbnRzCi0jIHNoYXJlIHRoZSBzYW1lIHVtYXNrLgotZXZlbnQ6MHhiYSBjb3VudGVyczowIHVtOnJlY2lyY19pZmV0Y2ggbWluaW11bTo1MDAwIG5hbWU6TDJfR09UX1JFQ0lSQ19JRkVUQ0ggOiBJbnN0cnVjdGlvbiBmZXRjaCByZWNpcmN1bGF0ZXMgcmVjZWl2ZWQgYnkgTDJECi1ldmVudDoweGI5IGNvdW50ZXJzOjAgdW06cmVjaXJjX2lmZXRjaCBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JU1NVRURfUkVDSVJDX0lGRVRDSCA6IEluc3RydWN0aW9uIGZldGNoIHJlY2lyY3VsYXRlcyBpc3N1ZWQgYnkgTDJECi1ldmVudDoweGI4IGNvdW50ZXJzOjAgdW06bDJfb3BzX2lzc3VlZCBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PUFNfSVNTVUVEIDogRGlmZmVyZW50IG9wZXJhdGlvbnMgaXNzdWVkIGJ5IEwyRAotCi0jIElBNjRfMiBMMiBDYWNoZSBFdmVudHMgU2V0IDUsIFRhYmxlIDExLTIzCi0jIG1hbnVhbCBzdGF0ZXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVlZHMgdG8gYmUgaW4gcG1kNCBhbmQKLSMgICAgICAgdGhlc2UgZXZlbnRzIHNoYXJlIHRoZSBzYW1lIHVtYXNrCi1ldmVudDoweGJjIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfRlVMTCA6IEwyRCBPWlEgaXMgZnVsbAotZXZlbnQ6MHhiZCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pEQl9GVUxMIDogTDJEIE9aUSBpcyBmdWxsCi1ldmVudDoweGJlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9WSUNUSU1CX0ZVTEwgOiBMMkQgdmljdGltIGJ1ZmZlciBpcyBmdWxsCi1ldmVudDoweGJmIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9GSUxMQl9GVUxMIDogTDJEIEZpbGwgYnVmZmVyIGlzIGZ1bGwKLQotIyBJQTY0XzIgTDMgQ2FjaGUgRXZlbnRzLCBUYWJsZSAxMS0yNAotZXZlbnQ6MHhkZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDNfTElORVNfUkVQTEFDRUQgOiBDYWNoZSBMaW5lcyBSZXBsYWNlZAotZXZlbnQ6MHhkYyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDNfTUlTU0VTIDogTDMgTWlzc2VzCi1ldmVudDoweGRiIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMM19SRUZFUkVOQ0VTIDogTDMgUmVmZXJlbmNlcwotZXZlbnQ6MHhkZCBjb3VudGVyczowLDEsMiwzIHVtOmwzX3JlYWRzIG1pbmltdW06NTAwMCBuYW1lOkwzX1JFQURTIDogTDMgUmVhZHMKLWV2ZW50OjB4ZGUgY291bnRlcnM6MCwxLDIsMyB1bTpsM193cml0ZXMgbWluaW11bTo1MDAwIG5hbWU6TDNfV1JJVEVTIDogTDMgV3JpdGVzCi0KLSMgSUE2NF8yIFN5c3RlbSBFdmVudHMsIFRhYmxlIDExLTI2Ci1ldmVudDoweDEzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpDUFVfQ1BMX0NIQU5HRVMgOiBQcml2aWxlZ2UgTGV2ZWwgQ2hhbmdlcwotZXZlbnQ6MHg1MiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6REFUQV9ERUJVR19SRUdJU1RFUl9GQVVMVCA6IEZhdWx0IGR1ZSB0byBkYXRhIGRlYnVnIHJlZy4gTWF0Y2ggdG8gbG9hZC9zdG9yZSBpbnN0cnVjdGlvbgotZXZlbnQ6MHhjNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6REFUQV9ERUJVR19SRUdJU1RFUl9NQVRDSEVTIDogRGF0YSBkZWJ1ZyByZWdpc3RlciBtYXRjaGVzIGRhdGEgYWRkcmVzcyBvZiBtZW1vcnkgcmVmZXJlbmNlCi1ldmVudDoweDllIGNvdW50ZXJzOjAsMSwyLDMgdW06ZXh0ZXJuX2RwX3BpbnNfMF90b18zIG1pbmltdW06NTAwMCBuYW1lOkVYVEVSTl9EUF9QSU5TXzBfVE9fMyA6IERQIHBpbnMgMC0zIGFzc2VydGVkCi1ldmVudDoweDlmIGNvdW50ZXJzOjAsMSwyLDMgdW06ZXh0ZXJuX2RwX3BpbnNfNF90b181IG1pbmltdW06NTAwMCBuYW1lOkVYVEVSTl9EUF9QSU5TXzRfVE9fNSA6IERQIHBpbnMgNC01IGFzc2VydGVkCi1ldmVudDoweDUzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpTRVJJQUxJWkFUSU9OX0VWRU5UUyA6IE51bWJlciBvZiBzcmx6LkkgaW5zdHJ1Y3Rpb25zCi0KLSMgSUE2NF8yIFRMQiBFdmVudHMsIFRhYmxlIDExLTI4Ci1ldmVudDoweGM5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpEVExCX0lOU0VSVFNfSFBXIDogSGFyZHdhcmUgUGFnZSBXYWxrZXIgSW5zdGFsbHMgdG8gRFRMQiIKLWV2ZW50OjB4MmMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9JTlNFUlRTX0hQV19SRVRJUkVEIDogVkhQVCBlbnRyaWVzIGluc2VydGVkIGludG8gRFRMQiBieSBIVyBQVwotZXZlbnQ6MHgyZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpIUFdfREFUQV9SRUZFUkVOQ0VTIDogRGF0YSBtZW1vcnkgcmVmZXJlbmNlcyB0byBWSFBUCi0jZXZlbnQ6MHhjMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJEVExCX01JU1NFUyA6IEwyRFRMQiBNaXNzZXMKLWV2ZW50OjB4NDggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSVRMQl9JTlNFUlRTX0hQVyA6IEwxSVRMQiBIYXJkd2FyZSBQYWdlIFdhbGtlciBJbnNlcnRzCi1ldmVudDoweDQ3IGNvdW50ZXJzOjAsMSwyLDMgdW06aXRsYl9taXNzZXNfZmV0Y2ggbWluaW11bTo1MDAwIG5hbWU6SVRMQl9NSVNTRVNfRkVUQ0ggOiBJVExCIE1pc3NlcyBEZW1hbmQgRmV0Y2gKLSNldmVudDoweGMwIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMURUTEJfVFJBTlNGRVIgOiBMMURUTEIgbWlzc2VzIHRoYXQgaGl0IGluIHRoZSBMMkRUTEIgZm9yIGFjY2Vzc2VzIGNvdW50ZWQgaW4gTDFEX1JFQURTCi0KLSMgSUE2NF8yIFN5c3RlbSBCdXMgRXZlbnRzLCBUYWJsZSAxMS0zMAotZXZlbnQ6MHg4NyBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfQUxMIDogQnVzIFRyYW5zYWN0aW9ucwotZXZlbnQ6MHg5YyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6QlVTX0JSUV9MSVZFX1JFUV9ISSA6IEJSUSBMaXZlIFJlcXVlc3RzICh0d28gbW9zdC1zaWduaWZpY2FudC1iaXQgb2YgdGhlIDUtYml0IG91dHN0YW5kaW5nIEJSUSByZXF1ZXN0IGNvdW50KQotZXZlbnQ6MHg5YiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6QlVTX0JSUV9MSVZFX1JFUV9MTyA6IEJSUSBMaXZlIFJlcXVlc3RzICh0aHJlZSBsZWFzdC1zaWduaWZpY2FudC1iaXQgb2YgdGhlIDUtYml0IG91dHN0YW5kaW5nIEJSUSByZXF1ZXN0IGNvdW50Ci1ldmVudDoweDlkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfQlJRX1JFUV9JTlNFUlRFRCA6IEJSUSBSZXF1ZXN0cyBJbnNlcnRlZAotZXZlbnQ6MHg4OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6QlVTX0RBVEFfQ1lDTEUgOiBWYWxpZCBkYXRhIGN5Y2xlIG9uIHRoZSBCdXMKLWV2ZW50OjB4ODQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19ISVRNIDogQnVzIEhpdCBNb2RpZmllZCBMaW5lIFRyYW5zYWN0aW9ucwotZXZlbnQ6MHg5MCBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfSU8gOiBJQS0zMiBDb21wYXRpYmxlIElPIEJ1cyBUcmFuc2FjdGlvbnMKLWV2ZW50OjB4OTggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19JT1FfTElWRV9SRVFfSEkgOiBJbm9yZGVyIEJ1cyBRdWV1ZSBSZXF1ZXN0cyAodHdvIG1vc3Qtc2lnbmlmaWNhbnQtYml0IG9mIHRoZSA0LWJpdCBvdXRzdGFuZGluZyBJT1EgcmVxdWVzdCBjb3VudCkKLWV2ZW50OjB4OTcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19JT1FfTElWRV9SRVFfTE8gOiBJbm9yZGVyIEJ1cyBRdWV1ZSBSZXF1ZXN0cyAodHdvIGxlYXN0LXNpZ25pZmljYW50LWJpdCBvZiB0aGUgNC1iaXQgb3V0c3RhbmRpbmcgSU9RIHJlcXVlc3QgY291bnQpCi1ldmVudDoweDkzIGNvdW50ZXJzOjAsMSwyLDMgdW06YnVzX2xvY2sgbWluaW11bTo1MDAwIG5hbWU6QlVTX0xPQ0sgOiBJQS0zMiBDb21wYXRpYmxlIEJ1cyBMb2NrIFRyYW5zYWN0aW9ucwotZXZlbnQ6MHg4ZSBjb3VudGVyczowLDEsMiwzIHVtOmJ1c19iYWNrc25wX3JlcSBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfQkFDS1NOUF9SRVEgOiBCdXMgQmFjayBTbm9vcCBSZXF1ZXN0cwotZXZlbnQ6MHg4YSBjb3VudGVyczowLDEsMiwzIHVtOmJ1c19tZW1vcnkgbWluaW11bTo1MDAwIG5hbWU6QlVTX01FTU9SWSA6IEJ1cyBNZW1vcnkgVHJhbnNhY3Rpb25zCi1ldmVudDoweDhiIGNvdW50ZXJzOjAsMSwyLDMgdW06YnVzX21lbV9yZWFkIG1pbmltdW06NTAwMCBuYW1lOkJVU19NRU1fUkVBRCA6IEZ1bGwgQ2FjaGUgbGluZSBEL0kgbWVtb3J5IFJELCBSRCBpbnZhbGlkYXRlLCBhbmQgQlJJTAotZXZlbnQ6MHg5NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6QlVTX01FTV9SRUFEX09VVF9ISSA6IE91dHN0YW5kaW5nIG1lbW9yeSBSRCB0cmFuc2FjdGlvbnMKLWV2ZW50OjB4OTUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19NRU1fUkVBRF9PVVRfTE8gOiBPdXRzdGFuZGluZyBtZW1vcnkgUkQgdHJhbnNhY3Rpb25zCi1ldmVudDoweDlhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfT09RX0xJVkVfUkVRX0hJIDogT3V0LW9mLW9yZGVyIEJ1cyBRdWV1ZSBSZXF1ZXN0cyAodHdvIG1vc3Qtc2lnbmlmaWNhbnQtYml0IG9mIHRoZSA0LWJpdCBvdXRzdGFuZGluZyBPT1EgcmVxdWVzdCBjb3VudCkKLWV2ZW50OjB4OTkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19PT1FfTElWRV9SRVFfTE8gOiBPdXQtb2Ytb3JkZXIgQnVzIFF1ZXVlIFJlcXVlc3RzICh0aHJlZSBsZWFzdC1zaWduaWZpY2FudC1iaXQgb2YgdGhlIDQtYml0IG91dHN0YW5kaW5nIE9PUSByZXF1ZXN0IGNvdW50KQotZXZlbnQ6MHg4YyBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfUkRfREFUQSA6IEJ1cyBSZWFkIERhdGEgVHJhbnNhY3Rpb25zCi1ldmVudDoweDgwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfUkRfSElUIDogQnVzIFJlYWQgSGl0IENsZWFuIE5vbi1sb2NhbCBDYWNoZSBUcmFuc2FjdGlvbnMKLWV2ZW50OjB4ODEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19SRF9ISVRNIDogQnVzIFJlYWQgSGl0IE1vZGlmaWVkIE5vbi1sb2NhbCBDYWNoZSBUcmFuc2FjdGlvbnMKLWV2ZW50OjB4ODMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19SRF9JTlZBTF9BTExfSElUTSA6IEJ1cyBCSUwgb3IgQlJJTCBUcmFuc2FjdGlvbiBSZXN1bHRzIGluIEhJVE0KLWV2ZW50OjB4ODIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19SRF9JTlZBTF9ISVRNIDogQnVzIEJJTCBUcmFuc2FjdGlvbiBSZXN1bHRzIGluIEhJVE0KLWV2ZW50OjB4OTEgY291bnRlcnM6MCwxLDIsMyB1bTpidXMgbWluaW11bTo1MDAwIG5hbWU6QlVTX1JEX0lPIDogSUEtMzIgQ29tcGF0aWJsZSBJTyBSZWFkIFRyYW5zYWN0aW9ucwotZXZlbnQ6MHg4ZCBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfUkRfUFJUTCA6IEJ1cyBSZWFkIFBhcnRpYWwgVHJhbnNhY3Rpb25zCi1ldmVudDoweDk2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfU05PT1BRX1JFUSA6IEJ1cyBTbm9vcCBRdWV1ZSBSZXF1ZXN0cwotZXZlbnQ6MHg4NiBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfU05PT1BTIDogQnVzIFNub29wcyBUb3RhbAotZXZlbnQ6MHg4NSBjb3VudGVyczowLDEsMiwzIHVtOmJ1c19zbm9vcCBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfU05PT1BTX0hJVE0gOiBCdXMgU25vb3BzIEhJVCBNb2RpZmllZCBDYWNoZSBMaW5lCi1ldmVudDoweDhmIGNvdW50ZXJzOjAsMSwyLDMgdW06YnVzX3Nub29wIG1pbmltdW06NTAwMCBuYW1lOkJVU19TTk9PUF9TVEFMTF9DWUNMRVMgOiBCdXMgU25vb3AgU3RhbGwgQ3ljbGVzIChmcm9tIGFueSBhZ2VudCkKLWV2ZW50OjB4OTIgY291bnRlcnM6MCwxLDIsMyB1bTpidXNfd3Jfd2IgbWluaW11bTo1MDAwIG5hbWU6QlVTX1dSX1dCIDogQnVzIFdyaXRlIEJhY2sgVHJhbnNhY3Rpb25zCi1ldmVudDoweDg5IGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX3JlYWRfY3VycmVudCBtaW5pbXVtOjUwMDAgbmFtZTpNRU1fUkVBRF9DVVJSRU5UIDogQ3VycmVudCBNZW0gUmVhZCBUcmFuc2FjdGlvbnMgT24gQnVzCi0KLSMgUlNFIEV2ZW50cywgVGFibGUgMTEtMzQKLWV2ZW50OjB4MmIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UlNFX0NVUlJFTlRfUkVHU18yX1RPXzAgOiBDdXJyZW50IFJTRSByZWdpc3RlcnMKLWV2ZW50OjB4MmEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UlNFX0NVUlJFTlRfUkVHU181X1RPXzMgOiBDdXJyZW50IFJTRSByZWdpc3RlcnMKLWV2ZW50OjB4MjYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UlNFX0NVUlJFTlRfUkVHU182IDogQ3VycmVudCBSU0UgcmVnaXN0ZXJzCi1ldmVudDoweDI5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJTRV9ESVJUWV9SRUdTXzJfVE9fMCA6IERpcnR5IFJTRSByZWdpc3RlcnMKLWV2ZW50OjB4MjggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UlNFX0RJUlRZX1JFR1NfNV9UT18zIDogRGlydHkgUlNFIHJlZ2lzdGVycwotZXZlbnQ6MHgyNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSU0VfRElSVFlfUkVHU182IDogRGlydHkgUlNFIHJlZ2lzdGVycwotZXZlbnQ6MHgzMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSU0VfRVZFTlRfUkVUSVJFRCA6IFJldGlyZWQgUlNFIG9wZXJhdGlvbnMKLWV2ZW50OjB4MjAgY291bnRlcnM6MCwxLDIsMyB1bTpyc2VfcmVmZXJlbmNlc19yZXRpcmVkIG1pbmltdW06NTAwIG5hbWU6UlNFX1JFRkVSRU5DRVNfUkVUSVJFRCA6IFJTRSBBY2Nlc3NlcwotCi0jIElBNjQgUGVyZm9ybWFuY2UgTW9uaXRvcnMgT3JkZXJlZCBieSBDb2RlLCBUYWJsZSAxMS0zNgotZXZlbnQ6MHhiYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6VEFHR0VEX0wyX0RBVEFfUkVUVVJOX1BPUiA6IFRhZ2dlZCBMMiBEYXRhIFJldHVybiBQb3J0cyAwLzEKZGlmZiAtLWdpdCBhL2V2ZW50cy9pYTY0L2l0YW5pdW0yL3VuaXRfbWFza3MgYi9ldmVudHMvaWE2NC9pdGFuaXVtMi91bml0X21hc2tzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzc0ZjVkLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9pYTY0L2l0YW5pdW0yL3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NjUgKzAsMCBAQAotIyBJQS02NCBJdGFuaXVtIDIgcG9zc2libGUgdW5pdCBtYXNrcwotIwotIyBUaGUgaW5mb3JtYXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgZW50cmllcyBmb3IgdGhlIEl0YW5pdW0gMgotIyBjYW1lIGZyb20gSW50ZWwgSXRhbml1bSAyIFByb2Nlc3NvciBSZWZlcmVuY2UgTWFudWFsIEZvcgotIyBTb2Z0d2FyZSBEZXZlbG9wbWVudCBhbmQgT3B0aW1pemF0aW9uLCBKdW5lIDIwMDIsIERvY3VtZW50Ci0jIG51bWJlciAyNTExMTAtMDAxLgotCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS0zNywgMTEtNzIKLW5hbWU6YWxhdF9jYXBhY2l0eV9taXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKLQkweDEgSU5UCi0JMHgyIEZQCi0JMHgzIEFMTAotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtMzgKLW5hbWU6YmFja19lbmRfYnViYmxlIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAotCTB4MCBBTEwKLQkweDEgRkUKLQkweDIgTDFEX0ZQVV9SU0UKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTM5Ci1uYW1lOmJlX2JyX21pc3ByZWRpY3RfZGV0YWlsIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAotCTB4MCBBTlkKLQkweDEgU1RHCi0JMHgyIFJPVAotCTB4MyBQRlMKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTQwCi1uYW1lOmJlX2V4ZV9idWJibGUgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAwCi0JMHgwIEFMTAotCTB4MSBHUkFMTAotCTB4MiBGUkFMTAotCTB4MyBQUgotCTB4NCBBUkNSCi0JMHg1IEdSQ1IKLQkweDYgQ0FOQ0VMCi0JMHg3IEJBTktfU1dJVENICi0JMHg4IEFSQ1JfUFJfQ0FOQ0VMX0JBTksKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTQxCi1uYW1lOmJlX2ZsdXNoX2J1YmJsZSB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDAKLQkweDAgQUxMCi0JMHgxIEJSVQotCTB4MiBYUE4KLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTQyCi1uYW1lOmJlX2wxZF9mcHVfYnViYmxlIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAotCTB4MCBBTEwKLQkweDEgRlBVCi0JMHgyIEwxRAotCTB4MyBMMURfRlVMTFNUQlVGCi0JMHg0IEwxRF9EQ1VSRUNJUgotCTB4NSBMMURfSFBXCi0JMHg3IEwxRF9GSUxMQ09ORgotCTB4OCBMMURfRENTCi0JMHg5IEwxRF9MMkJQUkVTUwotCTB4YSBMMURfVExCCi0JMHhiIEwxRF9MRENPTkYKLQkweGMgTDFEX0xEQ0hLCi0JMHhkIEwxRF9OQVQKLQkweGUgTDFEX1NUQlVGUkVDSVIKLQkweGYgTDFEX05BVENPTkYKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTQzCi0jIEZJWE1FOiBldmVudHMgdXNpbmcgdGhpcyBpcyBjb21tZW50ZWQgb3V0IGluIGV2ZW50cwotI25hbWU6YmVfbG9zdF9id19kdWVfdG9fZmUgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAwCi0jCTB4MCBBTEwKLSMJMHgxIEZFRkxVU0gKLSMJMHg0IFVOUkVBQ0hFRAotIwkweDUgSUJGVUxMCi0jCTB4NiBJTUlTUwotIwkweDcgVExCTUlTUwotIwkweDggRklMTF9SRUNJUkMKLSMJMHg5IEJJCi0jCTB4YSBCUlEKLSMJMHhiIFBMUAotIwkweGMgQlJfSUxPQ0sKLSMJMHhkIEJVQkJMRQotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNDQKLW5hbWU6YmVfcnNlX2J1YmJsZSB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDAKLQkweDAgQUxMCi0JMHgxIEJBTktfU1dJVENICi0JMHgyIEFSX0RFUAotCTB4MyBPVkVSRkxPVwotCTB4NCBVTkRFUkZMT1cKLQkweDUgTE9BRFJTCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS00NQotbmFtZTpicl9taXNwcmVkX2RldGFpbCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDAKLQkweDAgQUxMLkFMTF9QUkVECi0JMHgxIEFMTC5DT1JSRUNUX1BSRUQKLQkweDIgQUxMLldST05HX1BBVEgKLQkweDMgQUxMLldST05HX1RBUkdFVAotCTB4NCBJUFJFTC5BTExfUFJFRAotCTB4NSBJUFJFTC5DT1JSRUNUX1BSRUQKLQkweDYgSVBSRUwuV1JPTkdfUEFUSAotCTB4NyBJUFJFTC5XUk9OR19UQVJHRVQKLQkweDggUkVUVVJOLkFMTF9QUkVECi0JMHg5IFJFVFVSTi5DT1JSRUNUX1BSRUQKLQkweGEgUkVUVVJOLldST05HX1BBVEgKLQkweGIgUkVUVVJOLldST05HX1RBUkdFVAotCTB4YyBOUkVUSU5ELkFMTF9QUkVECi0JMHhkIE5SRVRJTkQuQ09SUkVDVF9QUkVECi0JMHhlIE5SRVRJTkQuV1JPTkdfUEFUSAotCTB4ZiBOUkVUSU5ELldST05HX1RBUkdFVAotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNDYKLW5hbWU6YnJfbWlzcHJlZGljdF9kZXRhaWwyIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAotCTB4MCBBTEwuQUxMX1VOS05PV05fUFJFRAotCTB4MSBBTEwuVUtOT1dOX1BBVEhfQ09SUkVDVF9QUkVECi0JMHgyIEFMTC5VS05PV05fUEFUSF9XUk9OR19QQVRICi0JMHg0IElQUkVMLkFMTF9VTktOT1dOX1BSRUQKLQkweDUgSVBSRUwuVU5LTk9XTl9QQVRIX0NPUlJFQ1RfUFJFRAotCTB4NiBJUFJFTC5VTktOT1dOX1BBVEhfV1JPTkdfUEFUSAotCTB4OCBSRVRVUk4uQUxMX1VOS05PV05fUFJFRAotCTB4OSBSRVRVUk4uVU5LTk9XTl9QQVRIX0NPUlJFQ1RfUFJFRAotCTB4YSBSRVRVUk4uVU5LTk9XTl9QQVRIX1dST05HX1BBVEgKLQkweGMgTlJFVElORC5BTExfVU5LTk9XTl9QUkVECi0JMHhkIE5SRVRJTkQuVU5LTk9XTl9QQVRIX0NPUlJFQ1RfUFJFRAotCTB4ZSBOUkVUSU5ELlVOS05PV05fUEFUSF9XUk9OR19QQVRICi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS00NwotbmFtZTpicl9wYXRoX3ByZWQgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAwCi0JMHgwIEFMTC5NSVNQUkVEX05PVFRBS0VOCi0JMHgxIEFMTC5NSVNQUkVEX1RBS0VOCi0JMHgyIEFMTC5PS1BSRURfTk9UVEFLRU4KLQkweDMgQUxMLk9LUFJFRF9UQUtFTgotCTB4NCBJUFJFTC5NSVNQUkVEX05PVFRBS0VOCi0JMHg1IElQUkVMLk1JU1BSRURfVEFLRU4KLQkweDYgSVBSRUwuT0tQUkVEX05PVFRBS0VOCi0JMHg3IElQUkVMLk9LUFJFRF9UQUtFTgotCTB4OCBSRVRVUk4uTUlTUFJFRF9OT1RUQUtFTgotCTB4OSBSRVRVUk4uTUlTUFJFRF9UQUtFTgotCTB4YSBSRVRVUk4uT0tQUkVEX05PVFRBS0VOCi0JMHhiIFJFVFVSTi5PS1BSRURfVEFLRU4KLQkweGMgTlJFVElORC5NSVNQUkVEX05PVFRBS0VOCi0JMHhkIE5SRVRJTkQuTUlTUFJFRF9UQUtFTgotCTB4ZSBOUkVUSU5ELk9LUFJFRF9OT1RUQUtFTgotCTB4ZiBOUkVUSU5ELk9LUFJFRF9UQUtFTgotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNDgKLW5hbWU6YnJfcGF0aF9wcmVkMiB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDAKLQkweDAgQUxMLlVOS05PV05QUkVEX05PVFRBS0VOCi0JMHgxIEFMTC5VTktOT1dOUFJFRF9UQUtFTgotCTB4NCBJUFJFTC5VTktOT1dOUFJFRF9OT1RUQUtFTgotCTB4NSBJUFJFTC5VTktOT1dOUFJFRF9fVEFLRU4KLQkweDggUkVUVVJOLlVOS05PV05QUkVEX05PVFRBS0VOCi0JMHg5IFJFVFVSTi5VTktOT1dOUFJFRF9UQUtFTgotCTB4YyBOUkVUSU5ELlVOS05PV05QUkVEX05PVFRBS0VOCi0JMHhkIE5SRVRJTkQuVU5LTk9XTlBSRURfVEFLRU4KLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTQ5LCAxMS01MSwgMTEtNTUsIDExLTU2LCAxMS01NywgMTEtNTgKLW5hbWU6YnVzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMwotCTB4MSBJTwotCTB4MiBTRUxGCi0JMHgzIEFOWQotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNTAgIGIwMDAxCi1uYW1lOmJ1c19iYWNrc25wX3JlcSB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDEKLQkweDEgMHgwCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS01MgotbmFtZTpidXNfbG9jayB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDMKLQkweDIgU0VMRgotCTB4MyBBTlkKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTUzCi1uYW1lOmJ1c19tZW1vcnkgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDBmCi0JMHg1IEVRXzEyOEJZVEVJTwotCTB4NiBFUV8xMjhCWVRFX1NFTEYKLQkweDcgRVFfMTI4QllURV9BTlkKLQkweDkgTFRfMTI4QllURUlPCi0JMHhhIExUXzEyOEJZVEVfU0VMRgotCTB4YiBMVF8xMjhCWVRFX0FOWQotCTB4ZCBBTEwgSU8KLQkweGUgQUxMIFNFTEYKLQkweGYgQUxMIEFOWQotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNTQKLW5hbWU6YnVzX21lbV9yZWFkIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwZgotCTB4MSBCSUwgSU8KLQkweDIgQklMIFNFTEYKLQkweDMgQklMIEFOWQotCTB4NSBCUkwgSU8KLQkweDYgQlJMIFNFTEYKLQkweDcgQlJMX0FOWQotCTB4OSBCUklMIElPCi0JMHhhIEJSSUwgU0VMRgotCTB4YiBCUklMIEFOWQotCTB4ZCBBTEwgSU8KLQkweGUgQUxMIFNFTEYKLQkweGYgQUxMIEFOWQotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNTksIDExLTYwCi1uYW1lOmJ1c19zbm9vcCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDMKLQkweDIgU0VMRgotCTB4MyBBTlkKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTYxCi1uYW1lOmJ1c193cl93YiB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MGYKLQkweDUgRVFfMTI4QllURSBJTwotCTB4NiBFUV8xMjhCWVRFIFNFTEYKLQkweDcgRVFfMTI4QllURSBBTlkKLQkweGEgQ0NBU1RPVVQgU0VMRgotCTB4YiBDQ0FTVE9VVCBBTlkKLQkweGQgQUxMIElPCi0JMHhlIEFMTCBTRUxGCi0JMHhmIEFMTCBBTlkKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTYyCi1uYW1lOmVuY2JyX21pc3ByZWRfZGV0YWlsIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCi0JMHgwIEFMTC5BTExfUFJFRAotCTB4MSBBTEwuQ09SUkVDVF9QUkVECi0JMHgyIEFMTC5XUk9OR19QQVRICi0JMHgzIEFMTC5XUk9OR19UQVJHRVQKLQkweDggT1ZFUlNVQi5BTExfUFJFRAotCTB4OSBPVkVSU1VCLkNPUlJFQ1RfUFJFRAotCTB4YSBPVkVSU1VCLkNPUlJFQ1RfUFJFRAotCTB4YiBPVkVSU1VCLldST05HUEFUSAotCTB4YyBBTEwyLkFMTF9QUkVECi0JMHhkIEFMTDIuQ09SUkVDVF9QUkVECi0JMHhlIEFMTDIuV1JPTkdfUEFUSAotCTB4ZiBBTEwyLldST05HX1RBUkdFVAotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNjMKLW5hbWU6ZXh0ZXJuX2RwX3BpbnNfMF90b18zIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZgotCTB4MSBQSU4wCi0JMHgyIFBJTjEKLQkweDQgUElOMgotCTB4OCBQSU4zCi0JMHhmIEFMTAotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNjQKLW5hbWU6ZXh0ZXJuX2RwX3BpbnNfNF90b181IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKLQkweDEgUElONAotCTB4MiBQSU41Ci0JMHhmIEFMTAotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNjUKLW5hbWU6ZmVfYnViYmxlIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCi0JMHgwIEFMTAotCTB4MSBGRUZMVVNICi0JMHgzIEdST1VQMQotCTB4NCBHUk9VUDIKLQkweDUgSUJGVUxMCi0JMHg2IElNSVNTCi0JMHg3IFRMQk1JU1MKLQkweDggRklMTF9SRUNJUkMKLQkweDkgQlJBTkNICi0JMHhhIEdST1VQMwotCTB4YiBBTExCVVRfRkVGTFVTSF9CVUJCTEUKLQkweGMgQUxMQlVUX0lCRlVMTAotCTB4ZCBCVUJCTEUKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTY2LCAxMS02OSovCi1uYW1lOmZlX2xvc3QgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKLQkweDAgQUxMCi0JMHgxIEZFRkxVU0gKLQkweDQgVU5SRUFDSEVECi0JMHg1IElCRlVMTAotCTB4NiBJTUlTUwotCTB4NyBUTEJNSVNTCi0JMHg4IEZJTExfUkVDSVJDCi0JMHg5IEJJCi0JMHhhIEJSUQotCTB4YiBQTFAKLQkweGMgQlJfSUxPQ0sKLQkweGQgQlVCQkxFCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS02NywgMTEtNzksIDExLTg2LCAxMS05MCwgMTEtOTIgYjAwMDAgCi0jIEZJWE1FOiBldmVudHMgdXNpbmcgdGhpcyBpcyBjb21tZW50ZWQgb3V0IGluIGV2ZW50cwotI25hbWU6dGhpcyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MCAKLSMJMHgwIFRISVMKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTY4Ci1uYW1lOnRhZ2dlZF9pbnN0X3JldGlyZWQgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAgCi0JMHgwIElCUlAwX1BNQjgKLQkweDEgSUJSUDFfUE1COQotCTB4MiBJQlJQMl9QTUM4Ci0JMHgzIElCUlAzX1BNQzkKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTczCi1uYW1lOml0bGJfbWlzc2VzX2ZldGNoIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgzCi0JMHgxIEwxSVRMQgotCTB4MiBMMklUTEIKLQkweDMgQUxMCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS03NAotbmFtZTpsMWRfcmVhZF9taXNzZXMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKLQkweDAgQUxMCi0JMHgxIFJTRV9GSUxMCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS03NQotbmFtZTpsMWlfcHJlZmV0Y2hfc3RhbGwgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDMKLQkweDIgRkxPVwotCTB4MyBBTEwKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTc2LCAxMS05MSBiMDAwMAotIyBGSVhNRTogZXZlbnRzIHVzaW5nIHRoaXMgaXMgY29tbWVudGVkIG91dCBpbiBldmVudHMKLSNuYW1lOmwyX2xpbmVzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCi0jCTB4MCBBTlkKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTc3Ci1uYW1lOmwyX2J5cGFzcyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAotCTB4MCBMMl9EQVRBMQotCTB4MSBMMl9EQVRBMgotCTB4MiBMM19EQVRBMQotCTB4NCBMMl9JTlNUMQotCTB4NSBMMl9JTlNUMgotCTB4NiBMM19JTlNUMQotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtNzgKLSMgRklYTUU6IGV2ZW50cyB1c2luZyB0aGlzIGlzIGNvbW1lbnRlZCBvdXQgaW4gZXZlbnRzCi0jbmFtZTpsMl9kYXRhX3JlZmVyZW5jZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzCi0jCTB4MSBMMl9EQVRBX1JFQURTCi0jCTB4MiBMMl9EQVRBX1dSSVRFUwotIwkweDMgTDJfQUxMCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS04MAotbmFtZTpsMl9mb3JjZV9yZWNpcmMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKLQkweDAgQU5ZCi0JMHgxIFNNQ19ISVQKLQkweDIgTDFXCi0JMHg0IFRBR19OT1RPSwotCTB4NSBUUkFOX1BSRUYKLQkweDYgU05QX09SX0wzIAotCTB4OCBWSUNfUEVORAotCTB4OSBGSUxMX0hJVAotCTB4YSBJUEZfTUlTUwotCTB4YiBWSUNfQlVGX0ZVTEwKLQkweGMgT1pRX01JU1MKLQkweGQgU0FNRV9JTkRFWAotCTB4ZSBGUkNfUkVDSVJDCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS04MSwgMTEtODMgYjEwMDAKLW5hbWU6cmVjaXJjX2lmZXRjaCB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4OAotCTB4OCBkZWZhdWx0OjB4MH0gfSB9OwotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtODIKLW5hbWU6bDJfaWZldF9jYW5jZWxzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCi0JMHgwIEFOWQotCTB4MiBCWVBBU1MKLQkweDQgRElETlRfUkVDSVIKLQkweDUgUkVDSVJDX09WRVJfU1VCCi0JMHg2IFNUX0ZJTExfV0IKLQkweDcgREFUQV9SRAotCTB4OCBQUkVFTVBUCi0JMHhjIENIR19QUklPCi0JMHhkIElGRVRDSF9CWVAKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTg0Ci1uYW1lOmwyX2wzX2FjY2Vzc19jYW5jZWwgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDkKLQkweDEgU1BFQ19MM19CWVAKLQkweDIgRklMTERfRlVMTAotCTB4NSBVQ19CTE9DS0VECi0JMHg2IElOVl9MM19CWVAKLQkweDggRUJMX1JFSkVDVAotCTB4OSBBTlkKLQkweGEgREZFVENICi0JMHhiIElGRVRDSAotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtODUKLW5hbWU6bDJfb3BzX2lzc3VlZCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4OAotCTB4OCBJTlRfTE9BRAotCTB4OSBGUF9MT0FECi0JMHhhIFJNVwotCTB4YiBTVE9SRQotCTB4YyBOU1RfTkxECi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS04NwotbmFtZTpsMl9venFfY2FuY2VsczAgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKLQkweDAgQU5ZCi0JMHgxIExBVEVfU1BFQ19CWVAKLQkweDIgTEFURV9SRUxFQVNFCi0JMHgzIExBVEVfQUNRVUlSRQotCTB4NCBMQVRFX0JZUF9FRkZSRUxFQVNFCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS04OAotbmFtZTpsMl9venFfY2FuY2VsczEgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDEKLQkweDAgUkVMCi0JMHgxIEJBTktfQ09ORgotCTB4MiBMMkRfU1RfTUFUCi0JMHg0IFNZTkMKLQkweDUgSFBXX0lGRVRDSF9DT05GCi0JMHg2IENBTkNfTDJNX1NUCi0JMHg3IEwxX0ZJTExfQ09ORgotCTB4OCBTVF9GSUxMX0NPTkYKLQkweDkgQ0NWCi0JMHhhIFNFTQotCTB4YiBMMk1fU1RfTUFUCi0JMHhjIE1GQQotCTB4ZCBMMkFfU1RfTUFUCi0JMHhlIEwxREZfTDJNCi0JMHhmIEVDQwotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtODkKLW5hbWU6bDJfb3pxX2NhbmNlbHMyIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCi0JMHgwIFJFQ0lSQ19PVkVSX1NVQgotCTB4MSBDQU5DX0wyQ19TVAotCTB4MiBMMkNfU1RfTUFUCi0JMHgzIFNDUlVCCi0JMHg0IEFDUQotCTB4NSBSRUFEX1dCX0NPTkYKLQkweDYgT1pfREFUQV9DT05GCi0JMHg4IEwyRklMTF9TVF9DT05GCi0JMHg5IERJRE5UX1JFQ0lSQwotCTB4YSBXRUlSRAotCTB4YyBPVkVSX1NVQgotCTB4ZCBDQU5DX0wyRF9TVAotCTB4ZiBEX0lGRVQKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTkzCi1uYW1lOmwzX3JlYWRzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgzCi0JMHgxIERJTlNUX0ZFVENILkhJVAotCTB4MiBESU5TVF9GRVRDSC5NSVNTCi0JMHgzIERJTlNUX0ZFVENILkFMTAotCTB4NSBJTlNUX0ZFVENILkhJVAotCTB4NiBJTlNUX0ZFVENILk1JU1MKLQkweDcgSU5TVF9GRVRDSC5BTEwKLQkweDkgREFUQV9SRUFELkhJVAotCTB4YSBEQVRBX1JFQUQuTUlTUwotCTB4YiBEQVRBX1JFQUQuQUxMCi0JMHhkIEFMTC5ISVQKLQkweGUgQUxMLk1JU1MKLQkweGYgQUxMLkFMTAotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtOTQKLW5hbWU6bDNfd3JpdGVzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHg3Ci0JMHg1IERBVEFfV1JJVEUuSElUCi0JMHg2IERBVEFfV1JJVEUuTUlTUwotCTB4NyBEQVRBX1dSSVRFLkFMTAotCTB4OSBMMl9XQi5ISVQKLQkweGEgTDJfV0IuTUlTUwotCTB4YiBMMl9XQi5BTEwKLQkweGQgQUxMLkhJVAotCTB4ZSBBTEwuTUlTUwotCTB4ZiBBTEwuQUxMCi0KLSMgQ1BVX0lBNjRfMiBUYWJsZSAxMS05NQotbmFtZTptZW1fcmVhZF9jdXJyZW50IHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgzCi0JMHgxIElPCi0JMHgzIEFOWQotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtOTYKLW5hbWU6cnNlX3JlZmVyZW5jZXNfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDMKLQkweDEgTE9BRAotCTB4MiBTVE9SRQotCTB4MyBBTEwKLQotIyBDUFVfSUE2NF8yIFRhYmxlIDExLTk3IGJpdG1hc2sKLW5hbWU6c3lsbF9ub3RfZGlzcGVyc2VkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZgotCTB4MSBFWFBMCi0JMHgyIElNUEwKLQkweDQgRkUKLQkweDggTUxJCi0JMHhmIEFMTAotCi0jIENQVV9JQTY0XzIgVGFibGUgMTEtOTgKLW5hbWU6c3lsbF9vdmVyY291bnQgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDMKLQkweDEgRVhQTAotCTB4MiBJTVBMCi0JMHgzIEFMTApkaWZmIC0tZ2l0IGEvZXZlbnRzL21pcHMvMjRLL2V2ZW50cyBiL2V2ZW50cy9taXBzLzI0Sy9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NWQ0NTguLjAwMDAwMDAKLS0tIGEvZXZlbnRzL21pcHMvMjRLL2V2ZW50cworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLSMKLSMgTUlQUyAyNEsKLSMKLSMgQXMgc3RhbmRhcmQgdGhlIENQVSBzdXBwb3J0cyAyIHBlcmZvcm1hbmNlIGNvdW50ZXJzLiAgRXZlbnQgMCwgMSwgMTEsIDIyLAotIyBhcmUgYXZhaWxhYmxlIG9uIGJvdGggY291bnRlcnM7IGV2ZW50cyAxMiwgMTMsIDI0IC0gNjMgYXJlIHJlc2VydmVkOwotIyB0aGUgcmVtYWluaW5nIGFyZSBjb3VudGVyLXNwZWNpZmljLgotIwotZXZlbnQ6MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IEN5Y2xlcwotZXZlbnQ6MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OUyA6IEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjExIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1MgOiBEYXRhIGNhY2hlIG1pc3NlcwotZXZlbnQ6MjIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9NSVNTRVMgOiBMMiBjYWNoZSBtaXNzZXMKLQotIwotIyBFdmVudHMgc3BlY2lmaWMgdG8gY291bnRlciAwCi0jCi1ldmVudDoyIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX0xBVU5DSEVEIDogQnJhbmNoIGluc3RydWN0aW9ucyBsYXVuY2hlZCAod2hldGhlciBjb21wbGV0ZWQgb3IgbWlzcHJlZGljdGVkKQotZXZlbnQ6MyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKUl8zMV9MQVVOQ0hFRCA6IGpyIHIzMSAocmV0dXJuKSBpbnN0cnVjdGlvbnMgbGF1bmNoZWQgKHdoZXRoZXIgY29tcGxldGVkIG9yIG1pc3ByZWRpY3RlZCkKLWV2ZW50OjQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlJfTk9OXzMxX0xBVU5DSEVEIDoganIgKG5vdCByMzEpIGlzc3Vlcywgd2hpY2ggY29zdCB0aGUgc2FtZSBhcyBhIG1pc3ByZWRpY3QuCi1ldmVudDo1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfQUNDRVNTRVMgOiBJbnN0cnVjdGlvbiBtaWNyby1UTEIgYWNjZXNzZXMKLWV2ZW50OjYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9BQ0NFU1NFUyA6IERhdGEgbWljcm8tVExCIGFjY2Vzc2VzCi1ldmVudDo3IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpUTEJfREFUQV9BQ0NFU1NFUyA6IEpvaW50IFRMQiBpbnN0cnVjdGlvbiBhY2Nlc3NlcwotZXZlbnQ6OCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX0lOU1RSVUNUSU9OX0FDQ0VTU0VTIDogSm9pbnQgVExCIGRhdGEgKG5vbi1pbnN0cnVjdGlvbikgYWNjZXNzZXMKLWV2ZW50OjkgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfQUNDRVNTRVMgOiBJbnN0cnVjdGlvbiBjYWNoZSBhY2Nlc3NlcwotZXZlbnQ6MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX0FDQ0VTU0VTIDogRGF0YSBjYWNoZSBhY2Nlc3NlcwotZXZlbnQ6MTQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URUdFUl9JTlNOU19DT01QTEVURUQgOiBJbnRlZ2VyIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjE1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURTX0NPTVBMRVRFRCA6IExvYWRzIGNvbXBsZXRlZCAoaW5jbHVkaW5nIEZQKQotZXZlbnQ6MTYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Sl9KQUxfSU5TTlNfQ09NUExFVEVEIDogai9qYWwgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MTcgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Tk9QU19DT01QTEVURUQgOiBuby1vcHMgY29tcGxldGVkLCBpZSBpbnN0cnVjdGlvbnMgd3JpdGluZyAkMAotZXZlbnQ6MTggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RBTExTIDogU3RhbGxzCi1ldmVudDoxOSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ19DT01QTEVURUQgOiBzYyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQUkVGRVRDSF9DT01QTEVURUQgOiBQcmVmZXRjaCBpbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoyMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ0FDSEVfV1JJVEVCQUNLUyA6IEwyIGNhY2hlIHdyaXRlYmFja3MKLWV2ZW50OjIzIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYQ0VQVElPTlNfVEFLRU4gOiBFeGNlcHRpb25zIHRha2VuCi1ldmVudDoyNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDQUNIRV9GSVhVUFMgOiBgYGNhY2hlIGZpeHVwJycgZXZlbnRzIChzcGVjaWZpYyB0byB0aGUgMjRLIGZhbWlseSBtaWNyb2FyY2hpdGVjdHVyZSkuCi0KLSMKLSMgRXZlbnRzIHNwZWNpZmljIHRvIGNvdW50ZXIgMQotIwotZXZlbnQ6MiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfTUlTU1BSRURJQ1RTIDogQnJhbmNoIG1pc3ByZWRpY3Rpb25zCi1ldmVudDozIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpSXzMxX01JU1NQUkVESUNUUyA6IGpyIHIzMSAocmV0dXJuKSBtaXNwcmVkaWN0aW9ucwotZXZlbnQ6NSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX01JU1NFUyA6IEluc3RydWN0aW9uIG1pY3JvLVRMQiBtaXNzZXMKLWV2ZW50OjYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9NSVNTRVMgOiBEYXRhIG1pY3JvLVRMQiBtaXNzZXMKLWV2ZW50OjcgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9JTlNOX01JU1NFUyA6IEpvaW50IFRMQiBpbnN0cnVjdGlvbiBtaXNzZXMKLWV2ZW50OjggY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9EQVRBX01JU1NFUyA6IEpvaW50IFRMQiBkYXRhIChub24taW5zdHJ1Y3Rpb24pIG1pc3NlcwotZXZlbnQ6OSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCi1ldmVudDoxMCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfV1JJVEVCQUNLUyA6IERhdGEgY2FjaGUgd3JpdGViYWNrcwotZXZlbnQ6MTQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBVX0lOU05TX05PTl9MT0FEX1NUT1JFX0NPTVBMRVRFRCA6IEZQVSBpbnN0cnVjdGlvbnMgY29tcGxldGVkIChub3QgaW5jbHVkaW5nIGxvYWRzL3N0b3JlcykKLWV2ZW50OjE1IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFU19DT01QTEVURUQgOiBTdG9yZXMgY29tcGxldGVkIChpbmNsdWRpbmcgRlApCi1ldmVudDoxNiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVBTMTZfSU5TVFJVQ1RJT05TX0NPTVBMRVRFRCA6IE1JUFMxNiBpbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoxNyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFR0VSX01VTF9ESVZfQ09NUExFVEVEIDogaW50ZWdlciBtdWx0aXBseS9kaXZpZGUgdW5pdCBpbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoxOCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVBMQVlfVFJBUFNfTk9UX1VUTEIgOiBgYHJlcGxheSB0cmFwcycnIChvdGhlciB0aGFuIG1pY3JvLVRMQiByZWxhdGVkKQotZXZlbnQ6MTkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NfQ09NUExFVEVfQlVUX0ZBSUxFRCA6IHNjIGluc3RydWN0aW9ucyBjb21wbGV0ZWQsIGJ1dCBzdG9yZSBmYWlsZWQgKGJlY2F1c2UgdGhlIGxpbmsgYml0IGhhZCBiZWVuIGNsZWFyZWQpLgotZXZlbnQ6MjAgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1VQRVJGTFVPVVNfSU5TVFJVQ1RJT05TIDogYGBzdXBlcmZsdW91cycnIHByZWZldGNoIGluc3RydWN0aW9ucyAoZGF0YSB3YXMgYWxyZWFkeSBpbiBjYWNoZSkuCi1ldmVudDoyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ0FDSEVfQUNDRVNTRVMgOiBMMiBjYWNoZSBhY2Nlc3NlcwpkaWZmIC0tZ2l0IGEvZXZlbnRzL21pcHMvMjRLL3VuaXRfbWFza3MgYi9ldmVudHMvbWlwcy8yNEsvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBkMDI4YS4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy8yNEsvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNSVBTIDI0SyBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvbWlwcy9yMTAwMDAvZXZlbnRzIGIvZXZlbnRzL21pcHMvcjEwMDAwL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM3Y2MwNi4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy9yMTAwMDAvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIwotIyBSMTAwMDAgZXZlbnRzCi0jCi0jIFRoZSBzYW1lIGV2ZW50IG51bWJlcnMgbWVhbiBkaWZmZXJlbnQgdGhpbmdzIG9uIHRoZSB0d28gY291bnRlcnMKLSMKLWV2ZW50OjB4MDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVMgOiBDeWNsZXMKLWV2ZW50OjB4MDEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05TX0lTU1VFRCA6IEluc3RydWN0aW9ucyBpc3N1ZWQKLWV2ZW50OjB4MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05TX0dSQURVQVRFRCA6IEluc3RydWN0aW9ucyBncmFkdWF0ZWQKLWV2ZW50OjB4MDIgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9QUkVGRVRDX1NZTkNfQ0FDSEVPUF9JU1NVRUQgOiBMb2FkIC8gcHJlZmV0Y2ggLyBzeW5jIC8gQ2FjaGVPcCBpc3N1ZWQKLWV2ZW50OjB4MDIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9QUkVGRVRDX1NZTkNfQ0FDSEVPUF9HUkFEVUFURUQgOiBMb2FkIC8gcHJlZmV0Y2ggLyBzeW5jIC8gQ2FjaGVPcCBncmFkdWF0ZWQKLWV2ZW50OjB4MDMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVTX0lTU1VFRCA6IFN0b3JlcyBpc3N1ZWQKLWV2ZW50OjB4MDMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVTX0dSQURVQVRFRCA6IFN0b3JlcyBncmFkdWF0ZWQKLWV2ZW50OjB4MDQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfQ09ORF9JU1NVRUQgOiBTdG9yZSBjb25kaXRpb25hbCBpc3N1ZWQKLWV2ZW50OjB4MDQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfQ09ORF9HUkFEVUFURUQgOiBTdG9yZSBjb25kaXRpb25hbCBncmFkdWF0ZWQKLWV2ZW50OjB4MDUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RkFJTEVEX1NUT1JFX0NPTkRJVElPTkFMIDogRmFpbGVkIHN0b3JlIGNvbmRpdGlvbmFsCi1ldmVudDoweDA1IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0lOU1RSVUNUT05fR1JBRFVBVEVEIDogRmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZAotZXZlbnQ6MHgwNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19SRVNPTFZFRCA6IEJyYW5jaGVzIHJlc29sdmVkCi1ldmVudDoweDA2IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlFVQURXT1JEU19XQl9GUk9NX1BSSU1BUllfRENBQ0hFIDogUXVhZHdvcmRzIHdyaXR0ZW4gYmFjayBmcm9tIHByaW1hcnkgZGF0YSBjYWNoZQotZXZlbnQ6MHgwNyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpRVUFEV09SRFNfV0JfRlJPTV9TQ0FDSEUgOiBRdWFkd29yZHMgd3JpdHRlbiBiYWNrIGZyb20gc2Vjb25kYXJ5IGNhY2hlCi1ldmVudDoweDA3IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlRMQl9SRUZJTExfRVhDRVBUSU9OUyA6IFRMQiByZWZpbGwgZXhjZXB0aW9ucwotZXZlbnQ6MHgwOCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT1JSRUNUQUJMRV9FQ0NfRVJST1JTX1NDQUNIRSA6IENvcnJlY3RhYmxlIEVDQyBlcnJvcnMgb24gc2Vjb25kYXJ5IGNhY2hlIGRhdGEKLWV2ZW50OjB4MDggY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfTUlTUFJFRElDVEVEIDogQnJhbmNoZXMgbWlzcHJlZGljdGVkCi1ldmVudDoweDA5IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX01JU1NFUyA6IEluc3RydWN0aW9uIGNhY2hlIG1pc3NlcwotZXZlbnQ6MHgwOSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ0FDSEVfTE9BRF9TVE9SRV9DQUNIRU9QX09QRVJBVElPTlMgOiBTZWNvbmRhcnkgY2FjaGUgbG9hZCAvIHN0b3JlIGFuZCBjYWNoZS1vcHMgb3BlcmF0aW9ucwotZXZlbnQ6MHgwYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ0FDSEVfTUlTU0VTX0lOU1RSVUNUSU9OIDogU2Vjb25kYXJ5IGNhY2hlIG1pc3NlcyAoaW5zdHJ1Y3Rpb24pCi1ldmVudDoweDBhIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9NSVNTRVNfREFUQSA6IFNlY29uZGFyeSBjYWNoZSBtaXNzZXMgKGRhdGEpCi1ldmVudDoweDBiIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9XQVlfTUlTUFJFRElDVEVEX0lOU04gOiBTZWNvbmRhcnkgY2FjaGUgd2F5IG1pc3ByZWRpY3RlZCAoaW5zdHJ1Y3Rpb24pCi1ldmVudDoweDBiIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9XQVlfTUlTUFJFRElDVEVEX0RBVEEgOiBTZWNvbmRhcnkgY2FjaGUgd2F5IG1pc3ByZWRpY3RlZCAoZGF0YSkKLWV2ZW50OjB4MGMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RVhURVJOQUxfSU5URVJWRU5USU9OX1JRIDogRXh0ZXJuYWwgaW50ZXJ2ZW50aW9uIHJlcXVlc3RzCi1ldmVudDoweDBjIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYVEVSTkFMX0lOVEVSVkVOVElPTl9SUV9ISVRTX1NDQUNIRSA6IEV4dGVybmFsIGludGVydmVudGlvbiByZXF1ZXN0IGlzIGRldGVybWluZWQgdG8gaGF2ZSBoaXQgaW4gc2Vjb25kYXJ5IGNhY2hlCi1ldmVudDoweDBkIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYVEVSTkFMX0lOVkFMSURBVEVfUlEgOiBFeHRlcm5hbCBpbnZhbGlkYXRlIHJlcXVlc3RzCi1ldmVudDoweDBkIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYVEVSTkFMX0lOVkFMSURBVEVfUlFfSElUU19TQ0FDSEUgOiBFeHRlcm5hbCBpbnZhbGlkYXRlIHJlcXVlc3QgaXMgZGV0ZXJtaW5lZCB0byBoYXZlIGhpdCBpbiBzZWNvbmRhcnkgY2FjaGUKLWV2ZW50OjB4MGUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlVOQ1RJT05BTF9VTklUX0NPTVBMRVRJT05fQ1lDTEVTIDogRnVuY3Rpb25hbCB1bml0IGNvbXBsZXRpb24gY3ljbGVzCi1ldmVudDoweDBlIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFU19PUl9TVE9SRV9QUkVGX1RPX0NMRUFORVhDTFVTSVZFX1NDQUNIRV9CTE9DS1MgOiBTdG9yZXMgb3IgcHJlZmV0Y2hlcyB3aXRoIHN0b3JlIGhpbnQgdG8gQ2xlYW5FeGNsdXNpdmUgc2Vjb25kYXJ5IGNhY2hlIGJsb2NrcwotZXZlbnQ6MHgwZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9HUkFEVUFURUQgOiBJbnN0cnVjdGlvbnMgZ3JhZHVhdGVkCi1ldmVudDoweDBmIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFU19PUl9TVE9SRV9QUkVGX1RPX1NIRF9TQ0FDSEVfQkxPQ0tTIDogU3RvcmVzIG9yIHByZWZldGNoZXMgd2l0aCBzdG9yZSBoaW50IHRvIFNoYXJlZCBzZWNvbmRhcnkgY2FjaGUgYmxvY2tzCmRpZmYgLS1naXQgYS9ldmVudHMvbWlwcy9yMTAwMDAvdW5pdF9tYXNrcyBiL2V2ZW50cy9taXBzL3IxMDAwMC91bml0X21hc2tzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWI3ZDgzLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9taXBzL3IxMDAwMC91bml0X21hc2tzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jCi0jIE1JUFMgUjEwMDAwIHBvc3NpYmxlIHVuaXQgbWFza3MKLSMKLW5hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAotCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL2V2ZW50cy9taXBzL3IxMjAwMC9ldmVudHMgYi9ldmVudHMvbWlwcy9yMTIwMDAvZXZlbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yzg1MzBhLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9taXBzL3IxMjAwMC9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jCi0jIFIxMjAwMCBldmVudHMKLSMKLWV2ZW50OjAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTIDogQ3ljbGVzCi1ldmVudDoxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRFQ09ERURfSU5TVFJVQ1RJT05TIDogRGVjb2RlZCBpbnN0cnVjdGlvbnMKLWV2ZW50OjIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REVDT0RFRF9MT0FEUyA6IERlY29kZWQgbG9hZHMKLWV2ZW50OjMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REVDT0RFRF9TVE9SRVMgOiBEZWNvZGVkIHN0b3JlcwotZXZlbnQ6NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNTX1RBQkxFX09DQ1VQQU5DWSA6IE1pc3MgSGFuZGxpbmcgVGFibGUgT2NjdXBhbmN5Ci1ldmVudDo1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZBSUxFRF9TVE9SRV9DT05ESVRJT05BTCA6IEZhaWxlZCBzdG9yZSBjb25kaXRpb25hbAotZXZlbnQ6NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVNPTFZFRF9CUkFOQ0hfQ09ORElUSU9OQUwgOiBSZXNvbHZlZCBjb25kaXRpb25hbCBicmFuY2hlcwotZXZlbnQ6NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpRVUFEV09SUkRTX1dSSVRFQkFDS19GUk9NX1NDIDogUXVhZHdvcmRzIHdyaXR0ZW4gYmFjayBmcm9tIHNlY29uZGFyeSBjYWNoZQotZXZlbnQ6OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT1JSRUNUQUJMRV9FQ0NfRVJST1JTIDogQ29ycmVjdGFibGUgRUNDIGVycm9ycyBvbiBzZWNvbmRhcnkgY2FjaGUgZGF0YQotZXZlbnQ6OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCi1ldmVudDoxMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9TRUNPTkRBUllfQ0FDSEVfTUlTU0VTIDogU2Vjb25kYXJ5IGNhY2hlIG1pc3NlcyAoaW5zdHJ1Y3Rpb24pCi1ldmVudDoxMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTRUNPTkRBUllfQ0FDSEVfV0FZX01JU1NQUkVESUNURUQgOiBTZWNvbmRhcnkgY2FjaGUgd2F5IG1pc3ByZWRpY3RlZCAoaW5zdHJ1Y3Rpb24pCi1ldmVudDoxMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlZFTlRJT05fUkVRVUVTVFMgOiBFeHRlcm5hbCBpbnRlcnZlbnRpb24gcmVxdWVzdHMKLWV2ZW50OjEzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYVEVSTkFMX1JFUVVFU1RTIDogRXh0ZXJuYWwgaW52YWxpZGF0ZSByZXF1ZXN0cwotCi1ldmVudDoxNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTlNfR1JBRFVBVEVEIDogSW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZAotZXZlbnQ6MTYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UFJFRkVUQ0hfSU5TVFJVQ1RJT05TX0VYRUNVVEVEIDogRXhlY3V0ZWQgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zCi1ldmVudDoxNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQUkVGRVRDSF9NSVNTRVNfSU5fRENBQ0hFIDogUHJpbWFyeSBkYXRhIGNhY2hlIG1pc3NlcyBieSBwcmVmZXRjaCBpbnN0cnVjdGlvbnMKLWV2ZW50OjE4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdSQURVQVRFRF9MT0FEUyA6IEdyYWR1YXRlZCBsb2FkcwotZXZlbnQ6MTkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6R1JBRFVBVEVEX1NUT1JFUyA6IEdyYWR1YXRlZCBzdG9yZXMKLWV2ZW50OjIwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdSQURVQVRFRF9TVE9SRV9DT05ESVRJT05BTFMgOiBHcmFkdWF0ZWQgc3RvcmUgY29uZGl0aW9uYWxzCi1ldmVudDoyMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHUkFEVUFURURfRlBfSU5TVFJVQ1RJT05TIDogR3JhZHVhdGVkIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucwotZXZlbnQ6MjIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UVVBRFdPUkRTIDogUXVhZHdvcmRzIHdyaXR0ZW4gYmFjayBmcm9tIHByaW1hcnkgZGF0YSBjYWNoZQotZXZlbnQ6MjMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VExCX01JU1NFUyA6IFRMQiBtaXNzZXMKLWV2ZW50OjI0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU1BSRURJQ1RFRF9CUkFOQ0hFUyA6IE1pc3ByZWRpY3RlZCBicmFuY2hlcwotZXZlbnQ6MjUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1NFUyA6IFByaW1hcnkgZGF0YSBjYWNoZSBtaXNzZXMKLWV2ZW50OjI2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9NSVNTRVMgOiBTZWNvbmRhcnkgY2FjaGUgbWlzc2VzIChkYXRhKQotZXZlbnQ6MjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NBQ0hFX1dBWV9NSVNQUkVESUNUSU9OIDogTWlzcHJlZGljdGlvbiBmcm9tIHNjYWNoZSB3YXkgcHJlZGljdGlvbiB0YWJsZSAoZGF0YSkKLWV2ZW50OjI4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUQVRFX09GX1NDQUNIRV9JTlRFUlZFTlRJT05fSElUIDogU3RhdGUgb2YgZXh0ZXJuYWwgaW50ZXJ2ZW50aW9uIGhpdCBpbiBzZWNvbmRhcnkgY2FjaGUKLWV2ZW50OjI5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUQVRFX09GX0VYVEVSTkFMX0lOVkFMSURBVElPTl9ISVQgOiBTdGF0ZSBvZiBleHRlcm5hbCBpbnZhbGlkYXRpb24gaGl0cyBpbiBzZWNvbmRhcnkgY2FjaGUKLWV2ZW50OjMwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFX1BSRUZFVENIX0VYQ0xVU0lWRV9UT19DTEVBTl9TQ19CTE9DSyA6IFN0b3JlL3ByZWZldGNoIGV4Y2x1c2l2ZSB0byBjbGVhbiBibG9jayBpbiBzZWNvbmRhcnkgY2FjaGUKLWV2ZW50OjMxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFX1BSRUZFVENIX0VYQ0xVU0lWRV9TSEFSRURfU0NfQkxPQ0sgOiBTdG9yZS9wcmVmZXRjaCBleGNsdXNpdmUgdG8gc2hhcmVkIGJsb2NrIGluIHNlY29uZGFyeQpkaWZmIC0tZ2l0IGEvZXZlbnRzL21pcHMvcjEyMDAwL3VuaXRfbWFza3MgYi9ldmVudHMvbWlwcy9yMTIwMDAvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjODI1MC4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy9yMTIwMDAvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIwotIyBNSVBTIFIxMjAwMCBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi0jIFdlIGRvbid0IHN1cHBvcnQgdGhlIFIxMjAwMCBjb25kaXRpb25hbCBjb3VudCBmZWF0dXJlIHlldC4KLSMKLW5hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAotCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL2V2ZW50cy9taXBzL3JtNzAwMC9ldmVudHMgYi9ldmVudHMvbWlwcy9ybTcwMDAvZXZlbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmNkZTdhLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9taXBzL3JtNzAwMC9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jCi0jIFJNNzAwMCBldmVudHMKLSMKLWV2ZW50OjB4MDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVMgOiBDbG9jayBjeWNsZXMKLWV2ZW50OjB4MDEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTlNfSVNTVUVEIDogVG90YWwgaW5zdHJ1Y3Rpb25zIGlzc3VlZAotZXZlbnQ6MHgwMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0lOU1RSVUNUSU9OU19JU1NVRUQgOiBGbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMgaXNzdWVkCi1ldmVudDoweDAzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URUdFUl9JTlNUUlVDVElPTlNfSVNTVUVEIDogSW50ZWdlciBpbnN0cnVjdGlvbnMgaXNzdWVkCi1ldmVudDoweDA0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9JTlNUUlVDVElPTlNfSVNTVUVEIDogTG9hZCBpbnN0cnVjdGlvbnMgaXNzdWVkCi1ldmVudDoweDA1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfSU5TVFJVQ1RJT05TX0lTU1VFRCA6IFN0b3JlIGluc3RydWN0aW9ucyBpc3N1ZWQKLWV2ZW50OjB4MDYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVUFMX0lTU1VFRF9QQUlSUyA6IER1YWwgaXNzdWVkIHBhaXJzCi1ldmVudDoweDA3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIX1BSRUZFVENIRVMgOiBCcmFuY2ggcHJlZmV0Y2hlcwotZXZlbnQ6MHgwOCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYVEVSTkFMX0NBQ0hFX01JU1NFUyA6IEV4dGVybmFsIENhY2hlIE1pc3NlcwotZXZlbnQ6MHgwOSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUQUxMX0NZQ0xFUyA6IFN0YWxsIGN5Y2xlcwotZXZlbnQ6MHgwYSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9NSVNTRVMgOiBTZWNvbmRhcnkgY2FjaGUgbWlzc2VzCi1ldmVudDoweDBiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NFUyA6IEluc3RydWN0aW9uIGNhY2hlIG1pc3NlcwotZXZlbnQ6MHgwYyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTRVMgOiBEYXRhIGNhY2hlIG1pc3NlcwotZXZlbnQ6MHgwZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfTUlTU0VTIDogRGF0YSBUTEIgbWlzc2VzCi1ldmVudDoweDBlIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTRVMgOiBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCi1ldmVudDoweDBmIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9JTlNUUlVDVElPTl9NSVNTRVMgOiBKb2ludCBUTEIgaW5zdHJ1Y3Rpb24gbWlzc2VzCi1ldmVudDoweDEwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9EQVRBX01JU1NFUyA6IEpvaW50IFRMQiBkYXRhIG1pc3NlcwotZXZlbnQ6MHgxMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX1RBS0VOIDogQnJhbmNoZXMgdGFrZW4KLWV2ZW50OjB4MTIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19JU1NVRUQgOiBCcmFuY2hlcyBpc3N1ZWQKLWV2ZW50OjB4MTMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ0FDSEVfV1JJVEVCQUNLUyA6IFNlY29uZGFyeSBjYWNoZSB3cml0ZWJhY2tzCi1ldmVudDoweDE0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UENBQ0hFX1dSSVRFQkFDS1MgOiBQcmltYXJ5IGNhY2hlIHdyaXRlYmFja3MKLWV2ZW50OjB4MTUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU19TVEFMTF9DWUNMRVMgOiBEY2FjaGUgbWlzcyBzdGFsbCBjeWNsZXMgKGN5Y2xlcyB3aGVyZSBib3RoIGNhY2hlIG1pc3MgdG9rZW5zIHRha2VuIGFuZCBhIHRoaXJkIHRyeSBpcyByZXF1ZXN0ZWQpCi1ldmVudDoweDE2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVfTUlTU0VTIDogQ2FjaGUgbWlzc2VzCi1ldmVudDoweDE3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBfRVhDRVBUSU9OX1NUQUxMX0NZQ0xFUyA6IEZQIHBvc3NpYmxlIGV4Y2VwdGlvbiBjeWNsZXMKLWV2ZW50OjB4MTggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTTElQX0NZQ0xFU19EVUVfTVVMVElQTElFUl9CVVNZIDogU2xpcCBDeWNsZXMgZHVlIHRvIG11bHRpcGxpZXIgYnVzeQotZXZlbnQ6MHgxOSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNPUDBfU0xJUF9DWUNMRVMgOiBDb3Byb2Nlc3NvciAwIHNsaXAgY3ljbGVzCi1ldmVudDoweDFhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0xJUF9DWUNMRVNfUEVORElOR19OT05fQkxLSU5HX0xPQUQgOiBTbGlwIGN5Y2xlcyBkdWUgdG8gcGVuZGluZyBub24tYmxvY2tpbmcgbG9hZHMKLWV2ZW50OjB4MWMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpXUklURV9CVUZGRVJfRlVMTF9TVEFMTF9DWUNMRVMgOiBXcml0ZSBidWZmZXIgZnVsbCBzdGFsbCBjeWNsZXMKLWV2ZW50OjB4MWQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDQUNIRV9JTlNUUlVDVElPTl9TVEFMTF9DWUNMRVMgOiBDYWNoZSBpbnN0cnVjdGlvbiBzdGFsbCBjeWNsZXMKLWV2ZW50OjB4MWUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNVUxUSVBMSUVSX1NUQUxMX0NZQ0xFUyA6IE11bHRpcGxpZXIgc3RhbGwgY3ljbGVzCi1ldmVudDoweDFmIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RBTExfQ1lDTEVTX1BFTkRJTkdfTk9OX0JMS0lOR19MT0FEIDogU3RhbGwgY3ljbGVzIGR1ZSB0byBwZW5kaW5nIG5vbi1ibG9ja2luZyBsb2FkcyAtIHN0YWxsIHN0YXJ0IG9mIGV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvZXZlbnRzL21pcHMvcm03MDAwL3VuaXRfbWFza3MgYi9ldmVudHMvbWlwcy9ybTcwMDAvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IxMWI3Yy4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy9ybTcwMDAvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNSVBTIFJNNzAwMCBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvbWlwcy9ybTkwMDAvZXZlbnRzIGIvZXZlbnRzL21pcHMvcm05MDAwL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFkODQ5MS4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy9ybTkwMDAvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIwotIyBSTTkwMDAgZXZlbnRzCi0jCi1ldmVudDoweDAwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTIDogUHJvY2Vzc29yIGNsb2NrIGN5Y2xlcwotZXZlbnQ6MHgwMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OU19JU1NVRUQgOiBJbnN0cnVjdGlvbnMgaXNzdWVkCi1ldmVudDoweDAyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBfSU5TVFJVQ1RJT05TX0lTU1VFRCA6IEZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBpc3N1ZWQKLWV2ZW50OjB4MDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRfSU5TVFJVQ1RJT05TX0lTU1VFRCA6IEludGVnZXIgaW5zdHJ1Y3Rpb25zIGlzc3VlZAotZXZlbnQ6MHgwNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfSU5TVFJVQ1RJT05TX0lTU1VFRCA6IExvYWQgaW5zdHJ1Y3Rpb25zIGlzc3VlZAotZXZlbnQ6MHgwNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFX0lOU1RSVUNUSU9OU19JU1NVRUQgOiBTdG9yZSBpbnN0cnVjdGlvbnMgaXNzdWVkCi1ldmVudDoweDA2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05TX0RVQUxfSVNTVUVEIDogRHVhbC1pc3N1ZWQgaW5zdHJ1Y3Rpb24gcGFpcnMKLWV2ZW50OjB4MDcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfTUlTU1BSRURJQ1RTIDogQnJhbmNoIG1pc3ByZWRpY3Rpb25zCi1ldmVudDoweDA5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RBTExfQ1lDTEVTIDogU3RhbGwgY3ljbGVzCi1ldmVudDoweDBhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfTUlTU0VTIDogTDIgY2FjaGUgbWlzc2VzCi1ldmVudDoweDBiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NFUyA6IEljYWNoZSBtaXNzZXMKLWV2ZW50OjB4MGMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU0VTIDogRGNhY2hlIG1pc3NlcwotZXZlbnQ6MHgwZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfTUlTU0VTIDogRGF0YSBUTEIgbWlzc2VzCi1ldmVudDoweDBlIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTRVMgOiBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCi1ldmVudDoweDBmIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9JTlNUUlVDVElPTl9NSVNTRVMgOiBKb2ludCBUTEIgaW5zdHJ1Y3Rpb24gbWlzc2VzCi1ldmVudDoweDEwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9EQVRBX01JU1NFUyA6IEpvaW50IFRMQiBkYXRhIG1pc3NlcwotZXZlbnQ6MHgxMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX1RBS0VOIDogQnJhbmNoZXMgdGFrZW4KLWV2ZW50OjB4MTIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19JU1NVRUQgOiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGlzc3VlZAotZXZlbnQ6MHgxMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX1dSSVRFQkFDS1MgOiBMMiBjYWNoZSB3cml0ZWJhY2tzCi1ldmVudDoweDE0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX1dSSVRFQkFDS1MgOiBEY2FjaGUgd3JpdGViYWNrcwotZXZlbnQ6MHgxNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTX1NUQUxMX0NZQ0xFUyA6IERjYWNoZS1taXNzIHN0YWxsIGN5Y2xlcwotZXZlbnQ6MHgxNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX1JFTUlTU0VTIDogQ2FjaGUgcmVtaXNzZXMKLWV2ZW50OjB4MTcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9QT1NTSUJMRV9FWENFUFRJT05fQ1lDTEVTIDogRmxvYXRpbmctcG9pbnQgcG9zc2libGUgZXhjZXB0aW9uIGN5Y2xlcwotZXZlbnQ6MHgxOCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1VTFRJUExJRVJfQlVTWV9TTElQX0NZQ0xFUyA6IFNsaXAgY3ljbGVzIGR1ZSB0byBidXN5IG11bHRpcGxpZXIKLWV2ZW50OjB4MTkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT1AwX1NMSVBfQ1lDTEVTIDogQ28tcHJvY2Vzc29yIDAgc2xpcCBjeWNsZXMKLWV2ZW50OjB4MWEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpOT05CTE9DS0lOR19MT0FEX1NMSVBfQ1lDTEVTIDogU2xpcCBjeWNsZXMgZHVlIHRvIHBlbmRpbmcgbm9uLWJsb2NraW5nIGxvYWRzCi1ldmVudDoweDFiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6V1JJVEVfQlVGRkVSX0ZVTExfU1RBTExfQ1lDTEVTIDogU3RhbGwgY3ljbGVzIGR1ZSB0byBhIGZ1bGwgd3JpdGUgYnVmZmVyCi1ldmVudDoweDFjIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVfSU5TTl9TVEFMTF9DWUNMRVMgOiBTdGFsbCBjeWNsZXMgZHVlIHRvIGNhY2hlIGluc3RydWN0aW9ucwotZXZlbnQ6MHgxZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PTkJMT0NLSU5HX0xPQURfUEVORElOR19FWENFUFRJT05fU1RBTExfQ1lDTEVTIDogU3RhbGwgY3ljbGVzIGR1ZSB0byBwZW5kaW5nIG5vbi1ibG9ja2luZyBsb2FkcyAtIHN0YWxsIHN0YXJ0IG9mIGV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvZXZlbnRzL21pcHMvcm05MDAwL3VuaXRfbWFza3MgYi9ldmVudHMvbWlwcy9ybTkwMDAvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNiYTlkYS4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy9ybTkwMDAvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNSVBTIFJNOTAwMCBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvbWlwcy9zYjEvZXZlbnRzIGIvZXZlbnRzL21pcHMvc2IxL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlZTAxMy4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy9zYjEvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotIwotIyBTaWJ5dGUgU0IxIGV2ZW50cwotIwotCi1ldmVudDoxNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVMgOkVsYXBzZWQgY3ljbGVzCi0KLSMgRXhlY3V0aW9uIENvdW50cyBhbmQgSW5zdHJ1Y3Rpb24gU2xvdHRpbmcKLWV2ZW50OjQwIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NVRV9MMCA6SXNzdWUgdG8gTDAKLWV2ZW50OjQxIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NVRV9MMSA6SXNzdWUgdG8gTDAKLWV2ZW50OjQyIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NVRV9FMCA6SXNzdWUgdG8gRTAKLWV2ZW50OjQzIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NVRV9FMSA6SXNzdWUgdG8gRTEKLQotIyBFeHBsYWluaW5nIFN1Yi1QZWFrIFBlcmZvcm1hbmNlOiBQaXBlbGluZSBUcmFwcwotZXZlbnQ6NDcgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSF9NSVNTUFJFRElDVFMgOkJyYW5jaCBtaXNwcmVkaWN0cwotZXZlbnQ6MjkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUJPWF9SRVBMQVkgOk1CT1ggcmVwbGF5Ci1ldmVudDoyOCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0ZJRk8gOkRDRklGTwotZXZlbnQ6MzAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9ERVBFTkRFTkNZX1JFUExBWSA6RGF0YSBkZXBlbmRlbmN5IHJlcGxheQotZXZlbnQ6MjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX0ZJTExfUkVQTEFZIDpEY2FjaGUgZmlsbCByZXBsYXkKLWV2ZW50OjMxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFOWV9SRVBMQVkgOkFueSByZXBsYXkgZXhjZXB0IG1pc3ByZWRpY3QKLQotCi0jIEV4cGxhaW5pbmcgU3ViLVBlYWsgUGVyZm9ybWFuY2U6IHN0YXRpYyBhbmQgZHluYW1pYyBzdGFsbHMKLWV2ZW50OjMyIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNQVhfSVNTVUUgOk1heCBpc3N1ZQotZXZlbnQ6MzMgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PX1ZBTElEX0lOU04gOk5vIHZhbGlkIGluc3RyIHRvIGlzc3VlCi1ldmVudDozNCBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09OU1VNRVJfV0FJVElOR19GT1JfTE9BRCA6bG9hZCBjb25zdW1lciB3YWl0aW5nIGZvciBkZmlsbAotZXZlbnQ6MzUgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PVF9EQVRBX1JFQURZIDpOb3QgZGF0YSByZWFkeQotZXZlbnQ6MzYgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFU09VUkNFX0NPTlNUUkFJTlQgOlJlc291cmNlIChMMC8xIEUwLzEpIGNvbnN0cmFpbnQKLWV2ZW50OjM3IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NVRV9DT05GTElDVF9EVUVfSU1JU1MgOmlzc3VlIGNvbmZsaWN0IGR1ZSB0byBpbWlzcyB1c2luZyBMUzAKLWV2ZW50OjM4IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NVRV9DT05GTElDVF9EVUVfREZJTEwgOmlzc3VlIGNvbmZsaWN0IGR1ZSB0byBkZmlsbCB1c2luZyBMUzAvMQotCi0jIEdyb3VwaW5nIENvLWlzc3VlZCBJbnN0cnVjdGlvbnMKLWV2ZW50OjM5IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNOX1NUQUdFNCA6T25lIG9yIG1vcmUgaW5zdHJ1Y3Rpb25zIHN1cnZpdmVzIHN0YWdlIDQKLQotIyBCcmFuY2ggaW5mb3JtYXRpb24KLWV2ZW50OjQ0IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfU1RBR0U0IDpCcmFuY2ggc3Vydml2ZWQgc3RhZ2UgNAotZXZlbnQ6NDUgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSF9SRUFMTFlfVEFLRU4gOkNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcmVhbGx5IHRha2VuCi1ldmVudDo0NiBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIX1BSRURJQ1RFRF9UQUtFTiA6UHJlZGljdGVkIHRha2VuIGNvbmRpdGlvbmFsIGJyYW5jaAotCi0jIENhY2hlIGFjY2VzcwotZXZlbnQ6MSBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UlFfTEVOR1RIIDpSZWFkIHF1ZXVlIGxlbmd0aAotZXZlbnQ6MiBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VU5DQUNIRURfUlFfTEVOR1RIIDpOdW1iZXIgb2YgdmFsaWQgdW5jYWNoZWQgZW50cmllcyBpbiByZWFkIHF1ZXVlCi1ldmVudDozIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfUkVBRF9NSVNTIDpEY2FjaGUgcmVhZCByZXN1bHRzIGluIGEgbWlzcwotCi1ldmVudDoxMCBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX0ZJTExFRF9TSERfTk9OQ19FWEMgOkRjYWNoZSBpcyBmaWxsZWQgKHNoYXJlZCwgbm9uYywgZXhjbHVzaXZlKQotZXZlbnQ6MTEgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9GSUxMX1NIQVJFRF9MSU5FIDpEY2FjaGUgaXMgZmlsbGVkIHdpdGggc2hhcmVkIGxpbmUKLWV2ZW50OjEyIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfUkVBRF9NSVNTIDpEY2FjaGUgcmVhZCByZXN1bHRzIGluIGEgbWlzcwotZXZlbnQ6MTUgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldSSVRFQkFDS19SRVRVUk5TIDpOdW1iZXIgb2YgaW5zdHJ1Y3Rpb24gcmV0dXJucwotZXZlbnQ6MTMgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlZJQ1RJTV9XUklURUJBQ0sgOkEgd3JpdGViYWNrIG9jY3VycyBkdWUgdG8gcmVwbGFjZW1lbnQKLWV2ZW50OjcgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVQR1JBREVfU0hBUkVEX1RPX0VYQ0xVU0lWRSA6QSBsaW5lIGlzIHVwZ3JhZGVkIGZyb20gc2hhcmVkIHRvIGV4Y2x1c2l2ZQotZXZlbnQ6NiBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TERfU1RfSElUU19QUkVGRVRDSF9JTl9RVUVVRSA6TG9hZC9zdG9yZSBoaXRzIHByZWZldGNoIGluIHJlYWQgcXVldWUKLWV2ZW50OjUgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBSRUZFVENIX0hJVFNfQ0FDSEVfT1JfUkVBRF9RIDpQcmVmZXRjaCBoaXRzIGluIGNhY2hlIG9yIHJlYWQgcXVldWUKLWV2ZW50OjQgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfSElUU19SRUFEX1EgOlJlYWQgaGl0cyBpbiByZWFkIHF1ZXVlCi0KLSMgQklVCi0KLWV2ZW50OjE3IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSVVfU1RBTExTX09OX1pCX0FERFJfQlVTIDpCSVUgc3RhbGxzIG9uIFpCIGFkZHIgYnVzCi1ldmVudDoxOCBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QklVX1NUQUxMU19PTl9aQl9EQVRBX0JVUyA6QklVIHN0YWxscyBvbiBaQiBkYXRhIGJ1cwotZXZlbnQ6MTkgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfUlFfU0VOVF9UT19BQlVTIDpSZXF1ZXN0cyBzZW50IHRvIFpCIEFidXMKLWV2ZW50OjIwIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRUFEX1JRX05PUFNfU0VOVF9UT19BQlVTIDpSZWFkIHJlcXVlc3RzIGFuZCBOT1BzIHNlbnQgdG8gWkIgQWJ1cwotZXZlbnQ6MjEgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfUlFfU0VOVF9UT19BQlVTIDpSZWFkIHJlcXVlc3RzIHNlbnQgdG8gWkIgQWJ1cwotZXZlbnQ6MTQgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1CT1hfUlFfV0hFTl9CSVVfQlVTWSA6TUJPWCByZXF1ZXN0cyB0byBCSVUgd2hlbiBCSVUgYnVzeQotCi0jIE11bHRpcHJvY2Vzc29yCi1ldmVudDoyNiBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfQ09ORF9GQUlMRUQgOkZhaWxlZCBzdG9yZSBjb25kaXRpb25hbAotZXZlbnQ6MjIgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNOT09QX1JRX0hJVFMgOlNub29wIHJlcXVlc3QgaGl0cyBhbnl3aGVyZQotZXZlbnQ6MjMgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNOT09QX0FERFJfUV9GVUxMIDpTbm9vcCBhZGRyZXNzIHF1ZXVlIGlzIGZ1bGwKLWV2ZW50OjI0IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSX1JFU1BfT1RIRVJfQ09SRSA6UmVhZCByZXNwb25zZSBjb21lcyBmcm9tIHRoZSBvdGhlciBjb3JlCi1ldmVudDoyNSBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Ul9SRVNQX09USEVSX0NPUkVfRF9NT0QgOlJlYWQgcmVzcG9uc2UgY29tZXMgZnJvbSB0aGUgb3RoZXIgY29yZSB3aXRoIERfTU9EIHNldAotCi0jIEluc3RydWN0aW9uIENvdW50cwotZXZlbnQ6OCBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9TVVJWSVZFRF9TVEFHRTQgOkxvYWQgc3Vydml2ZWQgc3RhZ2UgNAotZXZlbnQ6OSBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfU1VSVklWRURfU1RBR0U0ICA6U3RvcmUgc3Vydml2ZWQgc3RhZ2UgNAotZXZlbnQ6MCBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTl9TVVJWSVZFRF9TVEFHRTcgOkluc3RydWN0aW9uIHN1cnZpdmVkIHN0YWdlIDcKZGlmZiAtLWdpdCBhL2V2ZW50cy9taXBzL3NiMS91bml0X21hc2tzIGIvZXZlbnRzL21pcHMvc2IxL3VuaXRfbWFza3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZDQxZmIuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL21pcHMvc2IxL3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMKLSMgU2lieXRlIFNCMSBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvbWlwcy92cjU0MzIvZXZlbnRzIGIvZXZlbnRzL21pcHMvdnI1NDMyL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI4NTg1ZC4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy92cjU0MzIvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotIwotIyBWUjU0MzIgZXZlbnRzCi0jCi1ldmVudDowIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTIDogUHJvY2Vzc29yIGN5Y2xlcyAoUENsb2NrKQotZXZlbnQ6MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OU19FWEVDVVRFRCA6IChJbnN0cnVjdGlvbnMgZXhlY3V0ZWQpLzIgYW5kIHRydW5jYXRlZAotZXZlbnQ6MiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfUFJFRl9DQUNIRV9JTlNUUlVDVElPTlMgOiBMb2FkLCBwcmVmZXRjaC9DYWNoZU9wcyBleGVjdXRpb24gKG5vIHN5bmMpCi1ldmVudDozIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVTIDogU3RvcmUgZXhlY3V0aW9uCi1ldmVudDo0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVMgOiBCcmFuY2ggZXhlY3V0aW9uIChubyBqdW1wcyBvciBqdW1wIHJlZ2lzdGVycykKLWV2ZW50OjUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9JTlNUUlVDVElPTlMgOiAoRlAgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uKSAvIDIgYW5kIHRydW5jYXRlZCBleGNsdWRpbmcgY3AxIGxvYWRzIGFuZCBzdG9yZXMKLWV2ZW50OjYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpET1VCTEVXT1JEU19GTFVTSEVEIDogRG91Ymxld29yZHMgZmx1c2hlZCB0byBtYWluIG1lbW9yeSAobm8gdW5jYWNoZWQgc3RvcmVzKQotZXZlbnQ6NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpUTEJfUkVGSUxMUyA6IEpUTEIgcmVmaWxscwotZXZlbnQ6OCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTRVMgOiBEYXRhIGNhY2hlIG1pc3NlcyAobm8gSS1jYWNoZSBtaXNzZXMpCi1ldmVudDo5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NFUyA6IEluc3RydWN0aW9uIGNhY2hlIG1pc3NlcyAobm8gRC1jYWNoZSBtaXNzZXMpCi1ldmVudDoxMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX01JU1BSRURJQ1RFRCA6IEJyYW5jaGVzIG1pc3ByZWRpY3RlZApkaWZmIC0tZ2l0IGEvZXZlbnRzL21pcHMvdnI1NDMyL3VuaXRfbWFza3MgYi9ldmVudHMvbWlwcy92cjU0MzIvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzOWQxMi4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy92cjU0MzIvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNSVBTIFZSNTQzMiBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvbWlwcy92cjU1MDAvZXZlbnRzIGIvZXZlbnRzL21pcHMvdnI1NTAwL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg4ZjYwNC4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy92cjU1MDAvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIwotIyBWUjU1MDAsIFZSNTUzMiBhbmQgVlI3NzAxIGV2ZW50cwotIwotIyBWZXJ5IHNpbWlsYXIgdG8gd2hhdCB0aGUgVlI1NDMyIHByb3ZpZGVzLgotIwotZXZlbnQ6MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IFByb2Nlc3NvciBjbG9jayBjeWNsZXMKLWV2ZW50OjEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTlNfRVhFQ1VURUQgOiBJbnN0cnVjdGlvbnMgZXhlY3V0ZWQKLWV2ZW50OjIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX1BSRUZfQ0FDSEVfSU5TVFJVQ1RJT05TIDogRXhlY3V0aW9uIG9mIGxvYWQvcHJlZmV0Y2gvY2FjaGUgaW5zdHJ1Y3Rpb24KLWV2ZW50OjMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRVMgOiBFeGVjdXRpb24gb2Ygc3RvcmUgaW5zdHJ1Y3Rpb24KLWV2ZW50OjQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFUyA6IEV4ZWN1dGlvbiBvZiBicmFuY2ggaW5zdHJ1Y3Rpb24KLWV2ZW50OjUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9JTlNUUlVDVElPTlMgOiBFeGVjdXRpb24gb2YgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb24KLWV2ZW50OjYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpET1VCTEVXT1JEU19GTFVTSEVEIDogRG91Ymxld29yZCBmbHVzaCB0byBtYWluIG1lbW9yeQotZXZlbnQ6NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpUTEJfUkVGSUxMUyA6IFRMQiByZWZpbGwKLWV2ZW50OjggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU0VTIDogRGF0YSBjYWNoZSBtaXNzCi1ldmVudDo5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NFUyA6IEluc3RydWN0aW9uIGNhY2hlIG1pc3MKLWV2ZW50OjEwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfTUlTUFJFRElDVEVEIDogQnJhbmNoIHByZWRpY3Rpb24gbWlzcwpkaWZmIC0tZ2l0IGEvZXZlbnRzL21pcHMvdnI1NTAwL3VuaXRfbWFza3MgYi9ldmVudHMvbWlwcy92cjU1MDAvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY2OWE3YS4uMDAwMDAwMAotLS0gYS9ldmVudHMvbWlwcy92cjU1MDAvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNSVBTIFZSNTUwMCBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvcHBjL2U1MDAvZXZlbnRzIGIvZXZlbnRzL3BwYy9lNTAwL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFkM2Q3Yy4uMDAwMDAwMAotLS0gYS9ldmVudHMvcHBjL2U1MDAvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotIyBlNTAwIEV2ZW50cwotIwotZXZlbnQ6MHgxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpDUFVfQ0xLIDogQ3ljbGVzCi1ldmVudDoweDIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkNPTVBMRVRFRF9JTlNOUyA6IENvbXBsZXRlZCBJbnN0cnVjdGlvbnMgKDAsIDEsIG9yIDIgcGVyIGN5Y2xlKQotZXZlbnQ6MHgzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNPTVBMRVRFRF9PUFMgOiBDb21wbGV0ZWQgTWljcm8tb3BzIChjb3VudHMgMiBmb3IgbG9hZC9zdG9yZSB3L3VwZGF0ZSkKLWV2ZW50OjB4NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9GRVRDSEVTIDogSW5zdHJ1Y3Rpb24gZmV0Y2hlcwotZXZlbnQ6MHg1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRFQ09ERURfT1BTIDogTWljcm8tb3BzIGRlY29kZWQKLWV2ZW50OjB4OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT01QTEVURURfQlJBTkNIRVMgOiBCcmFuY2ggSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHg5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNPTVBMRVRFRF9MT0FEX09QUyA6IExvYWQgbWljcm8tb3BzIGNvbXBsZXRlZAotZXZlbnQ6MHhhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNPTVBMRVRFRF9TVE9SRV9PUFMgOiBTdG9yZSBtaWNyby1vcHMgY29tcGxldGVkCi1ldmVudDoweGIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09NUExFVElPTl9SRURJUkVDVFMgOiBOdW1iZXIgb2YgY29tcGxldGlvbiBidWZmZXIgcmVkaXJlY3RzCi1ldmVudDoweGMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfRklOSVNIRUQgOiBCcmFuY2hlcyBmaW5pc2hlZAotZXZlbnQ6MHhkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlRBS0VOX0JSQU5DSEVTX0ZJTklTSEVEIDogVGFrZW4gYnJhbmNoZXMgZmluaXNoZWQKLWV2ZW50OjB4ZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSUZGRURfQlJBTkNIRVNfRklOSVNIRUQgOiBCaWZmZWQgYnJhbmNoZXMgZmluaXNoZWQKLWV2ZW50OjB4ZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19NSVNQUkVESUNURUQgOiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIG1pc3ByZWRpY3RlZCBkdWUgdG8gZGlyZWN0aW9uLCB0YXJnZXQsIG9yIElBQiBwcmVkaWN0aW9uCi1ldmVudDoweDEwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX01JU1BSRURJQ1RFRF9ESVJFQ1RJT04gOiBCcmFuY2hlcyBtaXNwcmVkaWN0ZWQgZHVlIHRvIGRpcmVjdGlvbiBwcmVkaWN0aW9uCi1ldmVudDoweDExIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJUQl9ISVRTIDogQnJhbmNoZXMgdGhhdCBoaXQgaW4gdGhlIEJUQiwgb3IgbWlzc2VkIGJ1dCBhcmUgbm90IHRha2VuCi1ldmVudDoweDEyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRFQ09ERV9TVEFMTEVEIDogQ3ljbGVzIHRoZSBpbnN0cnVjdGlvbiBidWZmZXIgd2FzIG5vdCBlbXB0eSwgYnV0IDAgaW5zdHJ1Y3Rpb25zIGRlY29kZWQKLWV2ZW50OjB4MTMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVNTVUVfU1RBTExFRCA6IEN5Y2xlcyB0aGUgaXNzdWUgYnVmZmVyIGlzIG5vdCBlbXB0eSBidXQgMCBpbnN0cnVjdGlvbnMgaXNzdWVkIAotZXZlbnQ6MHgxNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfSVNTVUVfU1RBTExFRCA6IEN5Y2xlcyB0aGUgYnJhbmNoIGJ1ZmZlciBpcyBub3QgZW1wdHkgYnV0IDAgaW5zdHJ1Y3Rpb25zIGlzc3VlZCAKLWV2ZW50OjB4MTUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1JTMF9TQ0hFRFVMRV9TVEFMTEVEIDogQ3ljbGVzIFNSUzAgaXMgbm90IGVtcHR5IGJ1dCAwIGluc3RydWN0aW9ucyBzY2hlZHVsZWQgCi1ldmVudDoweDE2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNSUzFfU0NIRURVTEVfU1RBTExFRCA6IEN5Y2xlcyBTUlMxIGlzIG5vdCBlbXB0eSBidXQgMCBpbnN0cnVjdGlvbnMgc2NoZWR1bGVkIAotZXZlbnQ6MHgxNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpWUlNfU0NIRURVTEVfU1RBTExFRCA6IEN5Y2xlcyBWUlMgaXMgbm90IGVtcHR5IGJ1dCAwIGluc3RydWN0aW9ucyBzY2hlZHVsZWQgCi1ldmVudDoweDE4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxSU19TQ0hFRFVMRV9TVEFMTEVEIDogQ3ljbGVzIExSUyBpcyBub3QgZW1wdHkgYnV0IDAgaW5zdHJ1Y3Rpb25zIHNjaGVkdWxlZCAKLWV2ZW50OjB4MTkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJTX1NDSEVEVUxFX1NUQUxMRUQgOiBDeWNsZXMgQlJTIGlzIG5vdCBlbXB0eSBidXQgMCBpbnN0cnVjdGlvbnMgc2NoZWR1bGVkIExvYWQvU3RvcmUsIERhdGEgQ2FjaGUsIGFuZCBkTEZCIEV2ZW50cyAKLWV2ZW50OjB4MWEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VE9UQUxfVFJBTlNMQVRFRCA6IFRvdGFsIExkc3QgbWljcm9vcHMgdHJhbnNsYXRlZC4gCi1ldmVudDoweDFiIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2YgY2FjaGVhYmxlIEwqIG9yIEVWTCogbWljcm9vcHMgdHJhbnNsYXRlZC4gKFRoaXMgaW5jbHVkZXMgbWljcm9vcHMgZnJvbSBsb2FkLW11bHRpcGxlLCBsb2FkLXVwZGF0ZSwgYW5kIGxvYWQtY29udGV4dCBpbnN0cnVjdGlvbnMuKSAKLWV2ZW50OjB4MWMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2YgY2FjaGVhYmxlIFNUKiBvciBFVlNUKiBtaWNyb29wcyB0cmFuc2xhdGVkLiAoVGhpcyBpbmNsdWRlcyBtaWNyb29wcyBmcm9tIHN0b3JlLW11bHRpcGxlLCBzdG9yZS11cGRhdGUsIGFuZCBzYXZlLWNvbnRleHQgaW5zdHJ1Y3Rpb25zLikgCi1ldmVudDoweDFkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlRPVUNIRVNfVFJBTlNMQVRFRCA6IE51bWJlciBvZiBjYWNoZWFibGUgRENCVCBhbmQgRENCVFNUIGluc3RydWN0aW9ucyB0cmFuc2xhdGVkIChMMSBvbmx5KSAoRG9lc27VdCBjb3VudCB0b3VjaGVzIHRoYXQgYXJlIGNvbnZlcnRlZCB0byBub3BzIGkuZS4gZXhjZXB0aW9ucywgbm9uY2FjaGVhYmxlLCBoaWQwW25vcHRpXSBiaXQgaXMgc2V0LikgCi1ldmVudDoweDFlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFT1BTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2YgZGNiYSwgZGNiZiwgZGNic3QsIGFuZCBkY2J6IGluc3RydWN0aW9ucyB0cmFuc2xhdGVkIChlNTAwIHRyYXBzIG9uIGRjYmkpIAotZXZlbnQ6MHgxZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDQUNIRUlOSElCSVRFRF9BQ0NFU1NFU19UUkFOU0xBVEVEIDogTnVtYmVyIG9mIGNhY2hlIGluaGliaXRlZCBhY2Nlc3NlcyB0cmFuc2xhdGVkIAotZXZlbnQ6MHgyMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHVUFSREVEX0xPQURTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2YgZ3VhcmRlZCBsb2FkcyB0cmFuc2xhdGVkIAotZXZlbnQ6MHgyMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpXUklURVRIUk9VR0hfU1RPUkVTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2Ygd3JpdGUtdGhyb3VnaCBzdG9yZXMgdHJhbnNsYXRlZCAKLWV2ZW50OjB4MjIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTQUxJR05FRF9BQ0NFU1NFU19UUkFOU0xBVEVEIDogTnVtYmVyIG9mIG1pc2FsaWduZWQgbG9hZCBvciBzdG9yZSBhY2Nlc3NlcyB0cmFuc2xhdGVkLiAKLWV2ZW50OjB4MjMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VE9UQUxfQUxMT0NBVEVEX0RMRkIgOiBUb3RhbCBhbGxvY2F0ZWQgdG8gZExGQgotZXZlbnQ6MHgyNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEU19UUkFOU0xBVEVEX0FMTE9DQVRFRF9ETEZCIDogTG9hZHMgdHJhbnNsYXRlZCBhbmQgYWxsb2NhdGVkIHRvIGRMRkIgKEFwcGxpZXMgdG8gc2FtZSBjbGFzcyBvZiBpbnN0cnVjdGlvbnMgYXMgbG9hZHMgdHJhbnNsYXRlZC4pIAotZXZlbnQ6MHgyNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRVNfQ09NUExFVEVEX0FMTE9DQVRFRF9ETEZCIDogU3RvcmVzIGNvbXBsZXRlZCBhbmQgYWxsb2NhdGVkIHRvIGRMRkIgKEFwcGxpZXMgdG8gc2FtZSBjbGFzcyBvZiBpbnN0cnVjdGlvbnMgYXMgc3RvcmVzIHRyYW5zbGF0ZWQuKSAKLWV2ZW50OjB4MjYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VE9VQ0hFU19UUkFOU0xBVEVEX0FMTE9DQVRFRF9ETEZCIDogVG91Y2hlcyB0cmFuc2xhdGVkIGFuZCBhbGxvY2F0ZWQgdG8gZExGQiAoQXBwbGllcyB0byBzYW1lIGNsYXNzIG9mIGluc3RydWN0aW9ucyBhcyB0b3VjaGVzIHRyYW5zbGF0ZWQuKSAKLWV2ZW50OjB4MjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVTX0NPTVBMRVRFRCA6IE51bWJlciBvZiBjYWNoZWFibGUgU1QqIG9yIEVWU1QqIG1pY3Jvb3BzIGNvbXBsZXRlZC4gKEFwcGxpZXMgdG8gdGhlIHNhbWUgY2xhc3Mgb2YgaW5zdHJ1Y3Rpb25zIGFzIHN0b3JlcyB0cmFuc2xhdGVkLikgCi1ldmVudDoweDI4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRMMV9MT0NLUyA6IE51bWJlciBvZiBjYWNoZSBsaW5lcyBsb2NrZWQgaW4gdGhlIGRMMS4gKENvdW50cyBhIGxvY2sgZXZlbiBpZiBhbiBvdmVybG9jayBjb25kaXRpb24gaXMgZW5jb3VudGVyZWQuKSAKLWV2ZW50OjB4MjkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REwxX1JFTE9BRFMgOiBUaGlzIGlzIGhpc3RvcmljYWxseSB1c2VkIHRvIGRldGVybWluZSBkY2FjaGUgbWlzcyByYXRlIChhbG9uZyB3aXRoIGxvYWRzL3N0b3JlcyBjb21wbGV0ZWQpLiBUaGlzIGNvdW50cyBkTDEgcmVsb2FkcyBmb3IgYW55IHJlYXNvbi4gCi1ldmVudDoweDJhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRMMV9DQVNUT1VUUyA6IGRMMSBjYXN0b3V0cy4gRG9lcyBub3QgY291bnQgY2FzdG91dHMgZHVlIHRvIERDQkYuIAotZXZlbnQ6MHgyYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERVRFQ1RFRF9SRVBMQVlTIDogVGltZXMgZGV0ZWN0ZWQgcmVwbGF5IGNvbmRpdGlvbiAtIExvYWQgbWlzcyB3aXRoIGRMRkIgZnVsbC4gCi1ldmVudDoweDJjIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfTUlTU19RVUVVRV9GVUxMX1JFUExBWVMgOiBMb2FkIG1pc3Mgd2l0aCBsb2FkIHF1ZXVlIGZ1bGwuIAotZXZlbnQ6MHgyZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX0dVQVJERURfTUlTU19OT1RfTEFTVF9SRVBMQVlTIDogTG9hZCBndWFyZGVkIG1pc3Mgd2hlbiB0aGUgbG9hZCBpcyBub3QgeWV0IGF0IHRoZSBib3R0b20gb2YgdGhlIGNvbXBsZXRpb24gYnVmZmVyLgotZXZlbnQ6MHgyZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9UUkFOU0xBVEVEX1FVRVVFX0ZVTExfUkVQTEFZUyA6IFRyYW5zbGF0ZSBhIHN0b3JlIHdoZW4gdGhlIFN0USBpcyBmdWxsLgotZXZlbnQ6MHgyZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBRERSRVNTX0NPTExJU0lPTl9SRVBMQVlTIDogQWRkcmVzcyBjb2xsaXNpb24uCi1ldmVudDoweDMwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRNTVVfTUlTU19SRVBMQVlTIDogRE1NVV9NSVNTX1JFUExBWVMgOiBETU1VIG1pc3MuCi1ldmVudDoweDMxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRNTVVfQlVTWV9SRVBMQVlTIDogRE1NVV9CVVNZX1JFUExBWVMgOiBETU1VIGJ1c3kuCi1ldmVudDoweDMyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFQ09ORF9QQVJUX01JU0FMSUdORURfQUZURVJfTUlTU19SRVBMQVlTIDogU2Vjb25kIHBhcnQgb2YgbWlzYWxpZ25lZCBhY2Nlc3Mgd2hlbiBmaXJzdCBwYXJ0IG1pc3NlZCBpbiBjYWNoZS4KLWV2ZW50OjB4MzMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9NSVNTX0RMRkJfRlVMTF9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gTG9hZCBtaXNzIHdpdGggZExGQiBmdWxsLgotZXZlbnQ6MHgzNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX01JU1NfUVVFVUVfRlVMTF9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gTG9hZCBtaXNzIHdpdGggbG9hZCBxdWV1ZSBmdWxsLgotZXZlbnQ6MHgzNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX0dVQVJERURfTUlTU19OT1RfTEFTVF9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gTG9hZCBndWFyZGVkIG1pc3Mgd2hlbiB0aGUgbG9hZCBpcyBub3QgeWV0IGF0IHRoZSBib3R0b20gb2YgdGhlIGNvbXBsZXRpb24gYnVmZmVyLgotZXZlbnQ6MHgzNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9UUkFOU0xBVEVEX1FVRVVFX0ZVTExfQ1lDTEVTIDogQ3ljbGVzIHN0YWxsZWQgb24gcmVwbGF5IGNvbmRpdGlvbiAtIFRyYW5zbGF0ZSBhIHN0b3JlIHdoZW4gdGhlIFN0USBpcyBmdWxsLgotZXZlbnQ6MHgzNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBRERSRVNTX0NPTExJU0lPTl9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gQWRkcmVzcyBjb2xsaXNpb24uCi1ldmVudDoweDM4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRNTVVfTUlTU19DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gRE1NVSBtaXNzLgotZXZlbnQ6MHgzOSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpETU1VX0JVU1lfQ1lDTEVTIDogQ3ljbGVzIHN0YWxsZWQgb24gcmVwbGF5IGNvbmRpdGlvbiAtIERNTVUgYnVzeS4KLWV2ZW50OjB4M2EgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0VDT05EX1BBUlRfTUlTQUxJR05FRF9BRlRFUl9NSVNTX0NZQ0xFUyA6IEN5Y2xlcyBzdGFsbGVkIG9uIHJlcGxheSBjb25kaXRpb24gLSBTZWNvbmQgcGFydCBvZiBtaXNhbGlnbmVkIGFjY2VzcyB3aGVuIGZpcnN0IHBhcnQgbWlzc2VkIGluIGNhY2hlLgotZXZlbnQ6MHgzYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTDFfTE9DS1MgOiBOdW1iZXIgb2YgY2FjaGUgbGluZXMgbG9ja2VkIGluIHRoZSBpTDEuIChDb3VudHMgYSBsb2NrIGV2ZW4gaWYgYW4gb3ZlcmxvY2sgY29uZGl0aW9uIGlzIGVuY291bnRlcmVkLikgCi1ldmVudDoweDNjIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklMMV9GRVRDSF9SRUxPQURTIDogVGhpcyBpcyBoaXN0b3JpY2FsbHkgdXNlZCB0byBkZXRlcm1pbmUgaWNhY2hlIG1pc3MgcmF0ZSAoYWxvbmcgd2l0aCBpbnN0cnVjdGlvbnMgY29tcGxldGVkKSBSZWxvYWRzIGR1ZSB0byBkZW1hbmQgZmV0Y2guIAotZXZlbnQ6MHgzZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGRVRDSEVTIDogQ291bnRzIHRoZSBudW1iZXIgb2YgZmV0Y2hlcyB0aGF0IHdyaXRlIGF0IGxlYXN0IG9uZSBpbnN0cnVjdGlvbiB0byB0aGUgaW5zdHJ1Y3Rpb24gYnVmZmVyLiAoV2l0aCBpbnN0cnVjdGlvbiBmZXRjaGVkLCBjYW4gdXNlZCB0byBjb21wdXRlIGluc3RydWN0aW9ucy1wZXItZmV0Y2gpIAotZXZlbnQ6MHgzZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTU1VX1RMQjRLX1JFTE9BRFMgOiBpTU1VIFRMQjRLIHJlbG9hZHMKLWV2ZW50OjB4M2YgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU1NVV9WU1BfUkVMT0FEUyA6IGlNTVUgVlNQIHJlbG9hZHMKLWV2ZW50OjB4NDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RE1NVV9UTEI0S19SRUxPQURTIDogZE1NVSBUTEI0SyByZWxvYWRzCi1ldmVudDoweDQxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRNTVVfVlNQX1JFTE9BRFMgOiBkTU1VIFZTUCByZWxvYWRzCi1ldmVudDoweDQyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyTU1VX01JU1NFUyA6IENvdW50cyBpVExCL2RUTEIgZXJyb3IgaW50ZXJydXB0IAotZXZlbnQ6MHg0MyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSVVfTUFTVEVSX1JFUVVFU1RTIDogTnVtYmVyIG9mIG1hc3RlciB0cmFuc2FjdGlvbnMuIChOdW1iZXIgb2YgbWFzdGVyIFRTcy4pIAotZXZlbnQ6MHg0NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSVVfTUFTVEVSX0lfUkVRVUVTVFMgOiBOdW1iZXIgb2YgbWFzdGVyIEktU2lkZSB0cmFuc2FjdGlvbnMuIChOdW1iZXIgb2YgbWFzdGVyIEktU2lkZSBUU3MuKSAKLWV2ZW50OjB4NDUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QklVX01BU1RFUl9EX1JFUVVFU1RTIDogTnVtYmVyIG9mIG1hc3RlciBELVNpZGUgdHJhbnNhY3Rpb25zLiAoTnVtYmVyIG9mIG1hc3RlciBELVNpZGUgVFNzLikgCi1ldmVudDoweDQ2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJVV9NQVNURVJfRF9DQVNUT1VUX1JFUVVFU1RTIDogTnVtYmVyIG9mIG1hc3RlciBELVNpZGUgbm9uLXByb2dyYW0tZGVtYW5kIGNhc3RvdXQgdHJhbnNhY3Rpb25zLiBUaGlzIGNvdW50cyByZXBsYWNlbWVudCBwdXNoZXMgYW5kIHNub29wIHB1c2hlcy4gVGhpcyBkb2VzIG5vdCBjb3VudCBEQ0JGIGNhc3RvdXRzLiAoTnVtYmVyIG9mIG1hc3RlciBELXNpZGUgbm9uLXByb2dyYW0tZGVtYW5kIGNhc3RvdXQgVFNzLikgCi1ldmVudDoweDQ3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJVV9NQVNURVJfUkVUUklFUyA6IE51bWJlciBvZiB0cmFuc2FjdGlvbnMgd2hpY2ggd2VyZSBpbml0aWF0ZWQgYnkgdGhpcyBwcm9jZXNzb3Igd2hpY2ggd2VyZSByZXRyaWVkIG9uIHRoZSBCSVUgaW50ZXJmYWNlLiAoTnVtYmVyIG9mIG1hc3RlciBBUlRSWXMuKSAKLWV2ZW50OjB4NDggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U05PT1BfUkVRVUVTVFMgOiBOdW1iZXIgb2YgZXh0ZXJuYWxseSBnZW5lcmF0ZWQgc25vb3AgcmVxdWVzdHMuIChDb3VudHMgc25vb3AgVFNzLikgCi1ldmVudDoweDQ5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNOT09QX0hJVFMgOiBOdW1iZXIgb2Ygc25vb3AgaGl0cyBvbiBhbGwgRC1zaWRlIHJlc291cmNlcyByZWdhcmRsZXNzIG9mIHRoZSBjYWNoZSBzdGF0ZSAobW9kaWZpZWQsIGV4Y2x1c2l2ZSwgb3Igc2hhcmVkKSAKLWV2ZW50OjB4NGEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U05PT1BfUFVTSEVTIDogTnVtYmVyIG9mIHNub29wIHB1c2hlcyBmcm9tIGFsbCBELXNpZGUgcmVzb3VyY2VzLiAoQ291bnRzIHNub29wIEFSVFJZL1dPUHMuKSAKLWV2ZW50OjB4NGIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U05PT1BfUkVUUklFUyA6IE51bWJlciBvZiBzbm9vcCByZXF1ZXN0cyByZXRyaWVkLiAoQ291bnRzIHNub29wIEFSVFJZcy4pIAotZXZlbnQ6MHg1MiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTUMwX09WRVJGTE9XIDogQ291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgUE1DMFszMl0gdHJhbnNpdGlvbmVkIGZyb20gMSB0byAwLiAKLWV2ZW50OjB4NTMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UE1DMV9PVkVSRkxPVyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIFBNQzFbMzJdIHRyYW5zaXRpb25lZCBmcm9tIDEgdG8gMC4gCi1ldmVudDoweDU0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBNQzJfT1ZFUkZMT1cgOiBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBQTUMyWzMyXSB0cmFuc2l0aW9uZWQgZnJvbSAxIHRvIDAuIAotZXZlbnQ6MHg1NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTUMzX09WRVJGTE9XIDogQ291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgUE1DM1szMl0gdHJhbnNpdGlvbmVkIGZyb20gMSB0byAwLgotZXZlbnQ6MHg1NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlJVUFRTIDogTnVtYmVyIG9mIGludGVycnVwdHMgdGFrZW4KLWV2ZW50OjB4NTcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RVhURVJOQUxfSU5URVJSVVBUUyA6IE51bWJlciBvZiBleHRlcm5hbCBpbnB1dCBpbnRlcnJ1cHRzIHRha2VuCi1ldmVudDoweDU4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNSSVRJQ0FMX0lOVEVSUlVQVFMgOiBOdW1iZXIgb2YgY3JpdGljYWwgaW5wdXQgaW50ZXJydXB0cyB0YWtlbgotZXZlbnQ6MHg1OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ19UUkFQX0lOVEVSUlVQVFMgOiBOdW1iZXIgb2Ygc3lzdGVtIGNhbGwgYW5kIHRyYXAgaW50ZXJydXB0cwpkaWZmIC0tZ2l0IGEvZXZlbnRzL3BwYy9lNTAwL3VuaXRfbWFza3MgYi9ldmVudHMvcHBjL2U1MDAvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk1YzY1My4uMDAwMDAwMAotLS0gYS9ldmVudHMvcHBjL2U1MDAvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBlNTAwIHBvc3NpYmxlIHVuaXQgbWFza3MKLSMKLW5hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAotCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL2V2ZW50cy9wcGM2NC85NzAvZXZlbnRfbWFwcGluZ3MgYi9ldmVudHMvcHBjNjQvOTcwL2V2ZW50X21hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjlhMzgzLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9wcGM2NC85NzAvZXZlbnRfbWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotZXZlbnQ6MHgxIG1tY3IwOjB4MDQwMEM1MUUgbW1jcjE6MHgwMDAwMDAwMDBBNDZGMThDIG1tY3JhOjB4MDAwMDIwMDAKLQotI0dyb3VwIDAgcG1fc2xpY2UwCi1ldmVudDoweDEwIG1tY3IwOjB4MDQwMEM1MUUgbW1jcjE6MHgwMDAwMDAwMDBBNDZGMThDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MTEgbW1jcjA6MHgwNDAwQzUxRSBtbWNyMToweDAwMDAwMDAwMEE0NkYxOEMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgxMyBtbWNyMDoweDA0MDBDNTFFIG1tY3IxOjB4MDAwMDAwMDAwQTQ2RjE4QyBtbWNyYToweDAwMDAyMDAwCi0KLSNHcm91cCAyIHBtX2Jhc2ljCi1ldmVudDoweDE4IG1tY3IwOjB4MDQwMEM5MUUgbW1jcjE6MHg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MTkgbW1jcjA6MHgwNDAwQzkxRSBtbWNyMToweDQwMDMwMDEwMDVGMDkwMDAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgxYSBtbWNyMDoweDA0MDBDOTFFIG1tY3IxOjB4NDAwMzAwMTAwNUYwOTAwMCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDFiIG1tY3IwOjB4MDQwMEM5MUUgbW1jcjE6MHg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MWMgbW1jcjA6MHgwNDAwQzkxRSBtbWNyMToweDQwMDMwMDEwMDVGMDkwMDAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgxZCBtbWNyMDoweDA0MDBDOTFFIG1tY3IxOjB4NDAwMzAwMTAwNUYwOTAwMCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDFlIG1tY3IwOjB4MDQwMEM5MUUgbW1jcjE6MHg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjB4MDAwMDIwMDAKLQotI0dyb3VwIDMgcG1fbHN1Ci1ldmVudDoweDIwIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDBGMDAwMDdBNDAwMDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MjEgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMEYwMDAwN0E0MDAwMDAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgyMiBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwRjAwMDA3QTQwMDAwMCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDIzIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDBGMDAwMDdBNDAwMDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MjQgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMEYwMDAwN0E0MDAwMDAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgyNSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwRjAwMDA3QTQwMDAwMCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDI2IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDBGMDAwMDdBNDAwMDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MjcgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMEYwMDAwN0E0MDAwMDAgbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgNCBwbV9mcHVsCi1ldmVudDoweDA4IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDAwMDAwMDAwMUUwNDgwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MDkgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgwYSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwMDAwMDAwMDFFMDQ4MCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDBiIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDAwMDAwMDAwMUUwNDgwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MGMgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgwZCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwMDAwMDAwMDFFMDQ4MCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDBlIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDAwMDAwMDAwMUUwNDgwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4b2YgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgMTUgTFNVIExvYWQgRXZlbnRzCi1ldmVudDoweDI4IG1tY3IwOjB4MDQwMEQwMjggbW1jcjE6MHgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MjkgbW1jcjA6MHgwNDAwRDAyOCBtbWNyMToweDAwMEYwMDAwODUxRTk5NTggbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgyYSBtbWNyMDoweDA0MDBEMDI4IG1tY3IxOjB4MDAwRjAwMDA4NTFFOTk1OCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDJiIG1tY3IwOjB4MDQwMEQwMjggbW1jcjE6MHgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MmMgbW1jcjA6MHgwNDAwRDAyOCBtbWNyMToweDAwMEYwMDAwODUxRTk5NTggbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgyZCBtbWNyMDoweDA0MDBEMDI4IG1tY3IxOjB4MDAwRjAwMDA4NTFFOTk1OCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDJlIG1tY3IwOjB4MDQwMEQwMjggbW1jcjE6MHgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MmYgbW1jcjA6MHgwNDAwRDAyOCBtbWNyMToweDAwMEYwMDAwODUxRTk5NTggbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgMTYgU3RvcmUgRXZlbnRzCi1ldmVudDoweDMwIG1tY3IwOjB4MDQwMEQxMkEgbW1jcjE6MHgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MzEgbW1jcjA6MHgwNDAwRDEyQSBtbWNyMToweDAwMEYwMDAwOEQ1RTk5REMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgzMiBtbWNyMDoweDA0MDBEMTJBIG1tY3IxOjB4MDAwRjAwMDA4RDVFOTlEQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDMzIG1tY3IwOjB4MDQwMEQxMkEgbW1jcjE6MHgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MzQgbW1jcjA6MHgwNDAwRDEyQSBtbWNyMToweDAwMEYwMDAwOEQ1RTk5REMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgzNSBtbWNyMDoweDA0MDBEMTJBIG1tY3IxOjB4MDAwRjAwMDA4RDVFOTlEQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDM2IG1tY3IwOjB4MDQwMEQxMkEgbW1jcjE6MHgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4MzcgbW1jcjA6MHgwNDAwRDEyQSBtbWNyMToweDAwMEYwMDAwOEQ1RTk5REMgbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgMTcgU3RvcmUgRXZlbnRzIDIKLWV2ZW50OjB4MzggbW1jcjA6MHgwNDAwRDgzOCBtbWNyMToweDAwMDNDMEQwOEQ3NkY0QkMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgzOSBtbWNyMDoweDA0MDBEODM4IG1tY3IxOjB4MDAwM0MwRDA4RDc2RjRCQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDNhIG1tY3IwOjB4MDQwMEQ4MzggbW1jcjE6MHgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4M2IgbW1jcjA6MHgwNDAwRDgzOCBtbWNyMToweDAwMDNDMEQwOEQ3NkY0QkMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgzYyBtbWNyMDoweDA0MDBEODM4IG1tY3IxOjB4MDAwM0MwRDA4RDc2RjRCQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDNkIG1tY3IwOjB4MDQwMEQ4MzggbW1jcjE6MHgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4M2UgbW1jcjA6MHgwNDAwRDgzOCBtbWNyMToweDAwMDNDMEQwOEQ3NkY0QkMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHgzZiBtbWNyMDoweDA0MDBEODM4IG1tY3IxOjB4MDAwM0MwRDA4RDc2RjRCQyBtbWNyYToweDAwMDAyMDAwCi0KLSNHcm91cCAxOCAgSW5mb3JtYXRpb24gb24gdGhlIExvYWQgU3RvcmUgVW5pdAotZXZlbnQ6MHg0MCBtbWNyMDoweDA0MDBEMjJDIG1tY3IxOjB4MDAwODMwMDQ3QkQyRkUzQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDQxIG1tY3IwOjB4MDQwMEQyMkMgbW1jcjE6MHgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NDIgbW1jcjA6MHgwNDAwRDIyQyBtbWNyMToweDAwMDgzMDA0N0JEMkZFM0MgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg0MyBtbWNyMDoweDA0MDBEMjJDIG1tY3IxOjB4MDAwODMwMDQ3QkQyRkUzQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDQ0IG1tY3IwOjB4MDQwMEQyMkMgbW1jcjE6MHgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NDUgbW1jcjA6MHgwNDAwRDIyQyBtbWNyMToweDAwMDgzMDA0N0JEMkZFM0MgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg0NiBtbWNyMDoweDA0MDBEMjJDIG1tY3IxOjB4MDAwODMwMDQ3QkQyRkUzQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDQ3IG1tY3IwOjB4MDQwMEQyMkMgbW1jcjE6MHgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjB4MDAwMDIwMDAKLQotI0dyb3VwIDIxICBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgTDEgYW5kIFRMQgotZXZlbnQ6MHg0OCBtbWNyMDoweDA0MDBENDIwIG1tY3IxOjB4MDAwQjAwMDAwNERFOTAwMCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDQ5IG1tY3IwOjB4MDQwMEQ0MjAgbW1jcjE6MHgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NGEgbW1jcjA6MHgwNDAwRDQyMCBtbWNyMToweDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg0YiBtbWNyMDoweDA0MDBENDIwIG1tY3IxOjB4MDAwQjAwMDAwNERFOTAwMCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDRjIG1tY3IwOjB4MDQwMEQ0MjAgbW1jcjE6MHgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NGQgbW1jcjA6MHgwNDAwRDQyMCBtbWNyMToweDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg0ZSBtbWNyMDoweDA0MDBENDIwIG1tY3IxOjB4MDAwQjAwMDAwNERFOTAwMCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDRmIG1tY3IwOjB4MDQwMEQ0MjAgbW1jcjE6MHgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjB4MDAwMDIwMDAKLQotI0dyb3VwIDIyIEhwbWNvdW50IGdyb3VwIGZvciBMMSBhbmQgVExCIGJlaGF2aW9yCi1ldmVudDoweDUwIG1tY3IwOjB4MDQwMEQ0MDQgbW1jcjE6MHgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NTEgbW1jcjA6MHgwNDAwRDQwNCBtbWNyMToweDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg1MiBtbWNyMDoweDA0MDBENDA0IG1tY3IxOjB4MDAwQjAwMDAwNERFOTAwMCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDUzIG1tY3IwOjB4MDQwMEQ0MDQgbW1jcjE6MHgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NTQgbW1jcjA6MHgwNDAwRDQwNCBtbWNyMToweDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg1NSBtbWNyMDoweDA0MDBENDA0IG1tY3IxOjB4MDAwQjAwMDAwNERFOTAwMCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDU2IG1tY3IwOjB4MDQwMEQ0MDQgbW1jcjE6MHgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NTcgbW1jcjA6MHgwNDAwRDQwNCBtbWNyMToweDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgMjQgTDEgbWlzcyBhbmQgYnJhbmNoIG1pc3NwcmVkaWN0Ci1ldmVudDoweDU4IG1tY3IwOjB4MDQwMEM5MUUgbW1jcjE6MHg4MDAzQzAxRDA2MzZGQ0U4IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NTkgbW1jcjA6MHgwNDAwQzkxRSBtbWNyMToweDgwMDNDMDFEMDYzNkZDRTggbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg1YSBtbWNyMDoweDA0MDBDOTFFIG1tY3IxOjB4ODAwM0MwMUQwNjM2RkNFOCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDViIG1tY3IwOjB4MDQwMEM5MUUgbW1jcjE6MHg4MDAzQzAxRDA2MzZGQ0U4IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NWMgbW1jcjA6MHgwNDAwQzkxRSBtbWNyMToweDgwMDNDMDFEMDYzNkZDRTggbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg1ZCBtbWNyMDoweDA0MDBDOTFFIG1tY3IxOjB4ODAwM0MwMUQwNjM2RkNFOCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDVlIG1tY3IwOjB4MDQwMEM5MUUgbW1jcjE6MHg4MDAzQzAxRDA2MzZGQ0U4IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4NWYgbW1jcjA6MHgwNDAwQzkxRSBtbWNyMToweDgwMDNDMDFEMDYzNkZDRTggbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgMjYgU0xCIGFuZCBicmFuY2ggbWlzLXByZWRpY3QgYW5hbHlzaXMKLWV2ZW50OjB4ODAgbW1jcjA6MHgwNDAwQzUyQSBtbWNyMToweDgwMDgwMDBCQzY2MkY0RTggbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg4MSBtbWNyMDoweDA0MDBDNTJBIG1tY3IxOjB4ODAwODAwMEJDNjYyRjRFOCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDgyIG1tY3IwOjB4MDQwMEM1MkEgbW1jcjE6MHg4MDA4MDAwQkM2NjJGNEU4IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4ODMgbW1jcjA6MHgwNDAwQzUyQSBtbWNyMToweDgwMDgwMDBCQzY2MkY0RTggbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg4NCBtbWNyMDoweDA0MDBDNTJBIG1tY3IxOjB4ODAwODAwMEJDNjYyRjRFOCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDg1IG1tY3IwOjB4MDQwMEM1MkEgbW1jcjE6MHg4MDA4MDAwQkM2NjJGNEU4IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4ODYgbW1jcjA6MHgwNDAwQzUyQSBtbWNyMToweDgwMDgwMDBCQzY2MkY0RTggbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg4NyBtbWNyMDoweDA0MDBDNTJBIG1tY3IxOjB4ODAwODAwMEJDNjYyRjRFOCBtbWNyYToweDAwMDAyMDAwCi0KLSNHcm91cCAyNyBEYXRhIHNvdXJjZSBhbmQgTE1RCi1ldmVudDoweDg4IG1tY3IwOjB4MDQwMEM3MTIgbW1jcjE6MHgwMDAwMzAwRTNCQ0U3Rjc0IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4ODkgbW1jcjA6MHgwNDAwQzcxMiBtbWNyMToweDAwMDAzMDBFM0JDRTdGNzQgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg4YSBtbWNyMDoweDA0MDBDNzEyIG1tY3IxOjB4MDAwMDMwMEUzQkNFN0Y3NCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDhiIG1tY3IwOjB4MDQwMEM3MTIgbW1jcjE6MHgwMDAwMzAwRTNCQ0U3Rjc0IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4OGMgbW1jcjA6MHgwNDAwQzcxMiBtbWNyMToweDAwMDAzMDBFM0JDRTdGNzQgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg4ZCBtbWNyMDoweDA0MDBDNzEyIG1tY3IxOjB4MDAwMDMwMEUzQkNFN0Y3NCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDhlIG1tY3IwOjB4MDQwMEM3MTIgbW1jcjE6MHgwMDAwMzAwRTNCQ0U3Rjc0IG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4OGYgbW1jcjA6MHgwNDAwQzcxMiBtbWNyMToweDAwMDAzMDBFM0JDRTdGNzQgbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgMjggVExCIGFuZCBMUlEgcGx1cyBkYXRhIHByZWZldGNoCi1ldmVudDoweDkwIG1tY3IwOjB4MDQwMEQ0MjAgbW1jcjE6MHgwMDA4RTAzQzRCRkRBQ0VDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4OTEgbW1jcjA6MHgwNDAwRDQyMCBtbWNyMToweDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg5MiBtbWNyMDoweDA0MDBENDIwIG1tY3IxOjB4MDAwOEUwM0M0QkZEQUNFQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDkzIG1tY3IwOjB4MDQwMEQ0MjAgbW1jcjE6MHgwMDA4RTAzQzRCRkRBQ0VDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4OTQgbW1jcjA6MHgwNDAwRDQyMCBtbWNyMToweDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg5NSBtbWNyMDoweDA0MDBENDIwIG1tY3IxOjB4MDAwOEUwM0M0QkZEQUNFQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDk2IG1tY3IwOjB4MDQwMEQ0MjAgbW1jcjE6MHgwMDA4RTAzQzRCRkRBQ0VDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4OTcgbW1jcjA6MHgwNDAwRDQyMCBtbWNyMToweDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgMjkgSW5zdHJ1Y3Rpb24gc291cmNlIGFuZCB0YWJsZXdhbGsKLWV2ZW50OjB4OTggbW1jcjA6MHgwNDAwQzYwQyBtbWNyMToweDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg5OSBtbWNyMDoweDA0MDBDNjBDIG1tY3IxOjB4ODAwQjAwQzAyMjZFRjFEQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDlhIG1tY3IwOjB4MDQwMEM2MEMgbW1jcjE6MHg4MDBCMDBDMDIyNkVGMURDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4OWIgbW1jcjA6MHgwNDAwQzYwQyBtbWNyMToweDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg5YyBtbWNyMDoweDA0MDBDNjBDIG1tY3IxOjB4ODAwQjAwQzAyMjZFRjFEQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweDlkIG1tY3IwOjB4MDQwMEM2MEMgbW1jcjE6MHg4MDBCMDBDMDIyNkVGMURDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4OWUgbW1jcjA6MHgwNDAwQzYwQyBtbWNyMToweDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHg5ZiBtbWNyMDoweDA0MDBDNjBDIG1tY3IxOjB4ODAwQjAwQzAyMjZFRjFEQyBtbWNyYToweDAwMDAyMDAwCi0KLSNHcm91cCAzMCBTeW5jIGFuZCBTUlEKLWV2ZW50OjB4YTAgbW1jcjA6MHgwNDAwREQzMiBtbWNyMToweDAwMDNFMEMxMDc1Mjk3ODAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHhhMSBtbWNyMDoweDA0MDBERDMyIG1tY3IxOjB4MDAwM0UwQzEwNzUyOTc4MCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweGEyIG1tY3IwOjB4MDQwMEREMzIgbW1jcjE6MHgwMDAzRTBDMTA3NTI5NzgwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4YTMgbW1jcjA6MHgwNDAwREQzMiBtbWNyMToweDAwMDNFMEMxMDc1Mjk3ODAgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHhhNCBtbWNyMDoweDA0MDBERDMyIG1tY3IxOjB4MDAwM0UwQzEwNzUyOTc4MCBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweGE1IG1tY3IwOjB4MDQwMEREMzIgbW1jcjE6MHgwMDAzRTBDMTA3NTI5NzgwIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4YTYgbW1jcjA6MHgwNDAwREQzMiBtbWNyMToweDAwMDNFMEMxMDc1Mjk3ODAgbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgMzEgSUVSQVQKLWV2ZW50OjB4YTggbW1jcjA6MHgwNDAwQ0QzRSBtbWNyMToweDgwMDAwMEMwNEJEMkY0QkMgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHhhOSBtbWNyMDoweDA0MDBDRDNFIG1tY3IxOjB4ODAwMDAwQzA0QkQyRjRCQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweGFhIG1tY3IwOjB4MDQwMENEM0UgbW1jcjE6MHg4MDAwMDBDMDRCRDJGNEJDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4YWIgbW1jcjA6MHgwNDAwQ0QzRSBtbWNyMToweDgwMDAwMEMwNEJEMkY0QkMgbW1jcmE6MHgwMDAwMjAwMAotCi0jR3JvdXAgMzIgREVSQVQKLWV2ZW50OjB4YjAgbW1jcjA6MHgwNDAwQzQzNiBtbWNyMToweDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHhiMSBtbWNyMDoweDA0MDBDNDM2IG1tY3IxOjB4MTAwQjcwNTJFMjc0MDAzQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweGIyIG1tY3IwOjB4MDQwMEM0MzYgbW1jcjE6MHgxMDBCNzA1MkUyNzQwMDNDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4YjMgbW1jcjA6MHgwNDAwQzQzNiBtbWNyMToweDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHhiNCBtbWNyMDoweDA0MDBDNDM2IG1tY3IxOjB4MTAwQjcwNTJFMjc0MDAzQyBtbWNyYToweDAwMDAyMDAwCi1ldmVudDoweGI1IG1tY3IwOjB4MDQwMEM0MzYgbW1jcjE6MHgxMDBCNzA1MkUyNzQwMDNDIG1tY3JhOjB4MDAwMDIwMDAKLWV2ZW50OjB4YjYgbW1jcjA6MHgwNDAwQzQzNiBtbWNyMToweDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MHgwMDAwMjAwMAotZXZlbnQ6MHhiNyBtbWNyMDoweDA0MDBDNDM2IG1tY3IxOjB4MTAwQjcwNTJFMjc0MDAzQyBtbWNyYToweDAwMDAyMDAwCi0KLSNHcm91cCAzMyBJbmZvIG9uIG1hcmtlZCBpbnN0cnVjdGlvbnMKLWV2ZW50OjB4NjAgbW1jcjA6MHgwNDAwQzAwNiBtbWNyMToweDAwMDA4MDgwNzkwODUyQTQgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg2MSBtbWNyMDoweDA0MDBDMDA2IG1tY3IxOjB4MDAwMDgwODA3OTA4NTJBNCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDYyIG1tY3IwOjB4MDQwMEMwMDYgbW1jcjE6MHgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NjMgbW1jcjA6MHgwNDAwQzAwNiBtbWNyMToweDAwMDA4MDgwNzkwODUyQTQgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg2NCBtbWNyMDoweDA0MDBDMDA2IG1tY3IxOjB4MDAwMDgwODA3OTA4NTJBNCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDY1IG1tY3IwOjB4MDQwMEMwMDYgbW1jcjE6MHgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NjYgbW1jcjA6MHgwNDAwQzAwNiBtbWNyMToweDAwMDA4MDgwNzkwODUyQTQgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg2NyBtbWNyMDoweDA0MDBDMDA2IG1tY3IxOjB4MDAwMDgwODA3OTA4NTJBNCBtbWNyYToweDAwMDAyMDAxCi0KLSNHcm91cCAzNCBNYXJrZWQgU3RvcmVzIFByb2Nlc3NpbmcgRmxvdwotZXZlbnQ6MHg2OCBtbWNyMDoweDA0MDBDMzFFIG1tY3IxOjB4MDAyMDMwMDQxOTBBM0YyNCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDY5IG1tY3IwOjB4MDQwMEMzMUUgbW1jcjE6MHgwMDIwMzAwNDE5MEEzRjI0IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NmEgbW1jcjA6MHgwNDAwQzMxRSBtbWNyMToweDAwMjAzMDA0MTkwQTNGMjQgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg2YiBtbWNyMDoweDA0MDBDMzFFIG1tY3IxOjB4MDAyMDMwMDQxOTBBM0YyNCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDZjIG1tY3IwOjB4MDQwMEMzMUUgbW1jcjE6MHgwMDIwMzAwNDE5MEEzRjI0IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NmQgbW1jcjA6MHgwNDAwQzMxRSBtbWNyMToweDAwMjAzMDA0MTkwQTNGMjQgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg2ZSBtbWNyMDoweDA0MDBDMzFFIG1tY3IxOjB4MDAyMDMwMDQxOTBBM0YyNCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDZmIG1tY3IwOjB4MDQwMEMzMUUgbW1jcjE6MHgwMDIwMzAwNDE5MEEzRjI0IG1tY3JhOjB4MDAwMDIwMDEKLQotI0dyb3VwIDM1IExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzCi1ldmVudDoweDcwIG1tY3IwOjB4MDQwMERCMzQgbW1jcjE6MHgwMDAyODBDMDhENUU5ODUwIG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NzEgbW1jcjA6MHgwNDAwREIzNCBtbWNyMToweDAwMDI4MEMwOEQ1RTk4NTAgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg3MiBtbWNyMDoweDA0MDBEQjM0IG1tY3IxOjB4MDAwMjgwQzA4RDVFOTg1MCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDczIG1tY3IwOjB4MDQwMERCMzQgbW1jcjE6MHgwMDAyODBDMDhENUU5ODUwIG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NzQgbW1jcjA6MHgwNDAwREIzNCBtbWNyMToweDAwMDI4MEMwOEQ1RTk4NTAgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg3NSBtbWNyMDoweDA0MDBEQjM0IG1tY3IxOjB4MDAwMjgwQzA4RDVFOTg1MCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDc2IG1tY3IwOjB4MDQwMERCMzQgbW1jcjE6MHgwMDAyODBDMDhENUU5ODUwIG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NzcgbW1jcjA6MHgwNDAwREIzNCBtbWNyMToweDAwMDI4MEMwOEQ1RTk4NTAgbW1jcmE6MHgwMDAwMjAwMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotI0dyb3VwIDM2IExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzIDIKLWV2ZW50OjB4NzggbW1jcjA6MHgwNDAwRDgzOCBtbWNyMToweDAwMDI4MEMwOTU5RTk5REMgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg3OSBtbWNyMDoweDA0MDBEODM4IG1tY3IxOjB4MDAwMjgwQzA5NTlFOTlEQyBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDdhIG1tY3IwOjB4MDQwMEQ4MzggbW1jcjE6MHgwMDAyODBDMDk1OUU5OURDIG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4N2IgbW1jcjA6MHgwNDAwRDgzOCBtbWNyMToweDAwMDI4MEMwOTU5RTk5REMgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg3YyBtbWNyMDoweDA0MDBEODM4IG1tY3IxOjB4MDAwMjgwQzA5NTlFOTlEQyBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDdkIG1tY3IwOjB4MDQwMEQ4MzggbW1jcjE6MHgwMDAyODBDMDk1OUU5OURDIG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4N2UgbW1jcjA6MHgwNDAwRDgzOCBtbWNyMToweDAwMDI4MEMwOTU5RTk5REMgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg3ZiBtbWNyMDoweDA0MDBEODM4IG1tY3IxOjB4MDAwMjgwQzA5NTlFOTlEQyBtbWNyYToweDAwMDAyMDAxCi0KZGlmZiAtLWdpdCBhL2V2ZW50cy9wcGM2NC85NzAvZXZlbnRzIGIvZXZlbnRzL3BwYzY0Lzk3MC9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNTYzYjUuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL3BwYzY0Lzk3MC9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotIyBwcGM2NCBQT1dFUlBDOTcwIGV2ZW50cwotIwotIyAgV2l0aGluIGVhY2ggZ3JvdXAgdGhlIGV2ZW50IG5hbWVzIG11c3QgYmUgdW5pcXVlLiAgRWFjaCBldmVudCBpbiBhIGdyb3VwIGlzCi0jICBhc3NpZ25lZCB0byBhIHVuaXF1ZSBjb3VudGVyLiAgVGhlIGdyb3VwcyBhcmUgZnJvbSB0aGUgZ3JvdXBzIGRlZmluZWQgaW4gdGhlCi0jICBQb3dlclBDOTcwIG1hbnVhbC4KLSMKLSMgIE9ubHkgZXZlbnRzIHdpdGhpbiB0aGUgc2FtZSBncm91cCBjYW4gYmUgc2VsZWN0ZWQgc2ltdWx0YW5lb3VzbHkKLSMgIEVhY2ggZXZlbnQgaXMgZ2l2ZW4gYSB1bmlxdWUgZXZlbnQgbnVtYmVyLiAgVGhlIGV2ZW50IG51bWJlciBpcyB1c2VkIGJ5IHRoZQotIyAgT3Byb2ZpbGUgY29kZSB0byByZXNvbHZlIGV2ZW50IG5hbWVzIGZvciB0aGUgcG9zdHByb2Nlc3NpbmcuICBUaGlzIGlzIGRvbmUKLSMgIHRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgT3Byb2ZpbGUgY29kZS4gIFRoZSBldmVudCAKLSMgIG51bWJlciBmb3JtYXQgZ3JvdXBfbnVtIGZvbGxvd2VkIGJ5IHRoZSBjb3VudGVyIG51bWJlciBmb3IgdGhlIGV2ZW50IHdpdGhpbgotIyAgdGhlIGdyb3VwLiAgVGhlIGV2ZW50IG51bWJlciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwIGhleC4KLQotI0dyb3VwIERlZmF1bHQKLWV2ZW50OjB4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkNZQ0xFUyA6IFByb2Nlc3NvciBDeWNsZXMKLQotI0dyb3VwIDAgcG1fc2xpY2UwCi1ldmVudDoweDEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxIDogKEdyb3VwIDEgcG1fc2xpY2UwKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2gKLWV2ZW50OjB4MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMSA6IChHcm91cCAxIHBtX3NsaWNlMCkgUHJvY2Vzc29yIEN5Y2xlcwotZXZlbnQ6MHgxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxIDogKEdyb3VwIDEgcG1fc2xpY2UwKSBOdW1iZXIgb2YgZWxpZ2libGUgaW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkCi0KLSNHcm91cCAyIHBtX2Jhc2ljCi1ldmVudDoweDE4IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIgOiAoR3JvdXAgMiBwbV9iYXNpYykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHgxOSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyIDogKEdyb3VwIDIgcG1fYmFzaWMpIFByb2Nlc3NvciBjeWNsZXMKLWV2ZW50OjB4MWEgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfMV9HUlAyIDogKEdyb3VwIDIgcG1fYmFzaWMpIFRvdGFsIERMMSBsb2FkIHJlZmVyZW5jZXMgdGhhdCBtaXNzIHRoZSBETDEKLWV2ZW50OjB4MWIgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX0lOVl9MMl9HUlAyIDogKEdyb3VwIDIgcG1fYmFzaWMpIEEgRGNhY2hlIGludmFsaWRhdGVkIHdhcyByZWNlaXZlZCBmcm9tIHRoZSBMMiBiZWNhdXNlIGEgbGluZSBpbiBMMiB3YXMgY2FzdG91dAotZXZlbnQ6MHgxYyBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDIgOiAoR3JvdXAgMiBwbV9iYXNpYykgVGhlIElTVSBzZW5kcyB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBkaXNwYXRjaGVkCi1ldmVudDoweDFkIGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMiA6IChHcm91cCAyIHBtX2Jhc2ljKSBUb3RhbCBETDEgc3RvcmUgcmVmZXJlbmNlcwotZXZlbnQ6MHgxZSBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDIgOiAoR3JvdXAgMiBwbV9iYXNpYykgVG90YWwgREwxIGxvYWQgcmVmZXJlbmNlcwotCi0jR3JvdXAgMyBwbV9sc3UKLWV2ZW50OjB4MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9VTERfR1JQMyA6IChHcm91cCAzIHBtX2xzdSkgQSBsb2FkIHdhcyBmbHVzaGVkIGJlY2F1c2UgaXQgd2FzIHVuYWxpZ25lZCAoY3Jvc3NlZCBhIDY0Ynl0ZSBib3VuZGFyeSwgb3IgMzIgYnl0ZSBpZiBpdCBtaXNzZWQgdGhlIEwxKQotZXZlbnQ6MHgyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1VTVF9HUlAzIDogKEdyb3VwIDMgcG1fbHN1KSBBIHN0b3JlIHdhcyBmbHVzaGVkIGJlY2F1c2UgaXQgd2FzIHVuYWxpZ25lZAotZXZlbnQ6MHgyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzIDogKEdyb3VwIDMgcG1fbHN1KSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMgOiAoR3JvdXAgMyBwbV9sc3UpIE51bWJlciBvZiBFbGlnaWJsZSBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQKLWV2ZW50OjB4MjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9TUlFfR1JQMyA6IChHcm91cCAzIHBtX2xzdSkgU3RvcmUgZmx1c2hlZCBiZWNhdXNlIHlvdW5nZXIgbG9hZCBoaXRzIGFuZCBvbGRlciBzdG9yZSBhbHJlYWR5IGluIFNSUSBvciBpbiB0aGUgc2FtZSBncm91cAotZXZlbnQ6MHgyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0xSUV9HUlAzIDogKEdyb3VwIDMgcG1fbHN1KSBMb2FkIGZsdXNoZWQgYmVjYXVzZSB5b3VuZ2VyIGxvYWQgZXhlY3V0ZWQgYmVmb3JlIG9sZGVyIHN0b3JlIGV4ZWN1dGVkIHdoZXJlIGRhdGEgb3ZlcmxhcHBlZDsgT1IgdHdvIGxvYWRzIGV4ZWN1dGVkIG91dCBvZiBvcmRlciB3aXRoIGJ5dGUgb3ZlcmxhcCBhbmQgYSBzbm9vcCBpbiBiZXR3ZWVuLgotZXZlbnQ6MHgyNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDMgOiAoR3JvdXAgMyBwbV9sc3UpIFRvdGFsIERMMSBzdG9yZSByZWZlcmVuY2VzCi1ldmVudDoweDI3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMyA6IChHcm91cCAzIHBtX2xzdSkgVG90YWwgREwxIGxvYWQgcmVmZXJlbmNlcwotCi0jR3JvdXAgNCBwbV9mcHVsCi1ldmVudDoweDA4IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkRJVl9HUlA0IDogKEdSUDQgcG1fZnB1bCkgQWN0aXZlIGZvciBvbmUgY3ljbGUgYXQgZW5kIG9mIG1pY3JvY29kZSBleGVjdXRlZCB3aGVuIEZQVSBpcyBleGVjdXRpbmcgZGl2aWRlIGluc3RydWN0aW9uOyBlLmcuIGZkaXYsIGZkaXZzLgotZXZlbnQ6MHgwOSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNQV9HUlA0IDogKEdSUDQgcG1fZnB1bCkgQWN0aXZlIGZvciBvbmUgY3ljbGUgd2hlbiBGUFUgaXMgZXhlY3V0aW5nIG11bHRpcGx5LWFkZCBraW5kIG9mIGluc3RydWN0aW9uOyBlLmcuIGZtYWRkKiwgZm5tc3ViKiwgd2hlcmUgWFlaKiBtZWFucyBYWVosIFhZWnMuCi1ldmVudDoweDBhIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkVTVF9HUlA0IDogKEdSUDQgcG1fZnB1bCkgQWN0aXZlIGZvciBvbmUgY3ljbGUgd2hlbiBleGVjdXRpbmcgb25lIG9mIHRoZSBlc3RpbWF0ZSBpbnN0cnVjdGlvbnM7IGUuZy4gZnJlcyouCi1ldmVudDoweDBiIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDQgOiAoR1JQNCBwbV9mcHVsKSBGUFUgZmluaXNoZWQsIHByb2R1Y2VkIGEgcmVzdWx0LiBUaGlzIG9ubHkgaW5kaWNhdGVzIGZpbmlzaCwgbm90IGNvbXBsZXRpb24uCi1ldmVudDoweDBjIGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQgOiAoR1JQNCBwbV9mcHVsKSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDBkIGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlNRUlRfR1JQNCA6IChHUlA0IHBtX2ZwdWwpIEFjdGl2ZSBmb3Igb25lIGN5Y2xlIGF0IGVuZCBvZiBtaWNyb2NvZGUgZXhlY3V0ZWQgd2hlbiBGUFUgaXMgZXhlY3V0aW5nIGEgc3F1YXJlIHJvb3QgaW5zdHJ1Y3Rpb247IGUuZy4gZnNxcnQqLgotZXZlbnQ6MHgwZSBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0IDogKEdSUDQgcG1fZnB1bCkgTnVtYmVyIG9mIEVsaWdpYmxlIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4gCi1ldmVudDoweDBmIGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1PVl9GRVNUX0dSUDQgOiAoR1JQNCBwbV9mcHVsKSBBY3RpdmUgZm9yIG9uZSBjeWNsZSB3aGVuIGV4ZWN1dGluZyBhIG1vdmUga2luZCBvZiBpbnN0cnVjdGlvbiBvciBvbmUgb2YgdGhlIGVzdGltYXRlIGluc3RydWN0aW9uczsgZS5nLiBmbXIqIG9yIGZyZXMqLgotCi0jR3JvdXAgMTUgTFNVIExvYWQgRXZlbnRzCi1ldmVudDoweDI4IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0ZMVVNIX1VMRF9HUlAxNSA6IChHUlAxNSBMU1UgbG9hZCBldmVudHMpIEEgbG9hZCB3YXMgZmx1c2hlZCBmcm9tIHVuaXQgMCBiZWNhdXNlIGl0IHdhcyB1bmFsaWduZWQuCi1ldmVudDoweDI5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX1VMRF9HUlAxNSA6IChHUlAxNSBMU1UgbG9hZCBldmVudHMpIEEgbG9hZCB3YXMgZmx1c2hlZCBmcm9tIHVuaXQgMSBiZWNhdXNlIGl0IHdhcyB1bmFsaWduZWQuCi1ldmVudDoweDJhIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfTFNVMF9HUlAxNSA6IChHUlAxNSBMU1UgbG9hZCBldmVudHMpIExTVTAgTDEgRGNhY2hlIGxvYWQgcmVmZXJlbmNlIGV4ZWN1Y3RlZCBvbiB1aW50IDAKLWV2ZW50OjB4MmIgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9MU1UxX0dSUDE1IDogKEdSUDE1IExTVSBsb2FkIGV2ZW50cykgTFNVMSBMMSBEY2FjaGUgbG9hZCByZWZlcmVuY2UgZXhlY3VjdGVkIG9uIHVpbnQgMAotZXZlbnQ6MHgyYyBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNSA6IChHUlAxNSBMU1UgbG9hZCBldmVudHMpIFByb2Nlc3NvciBjeWNsZXMKLWV2ZW50OjB4MmQgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTUgOiAoR1JQMTUgTFNVIGxvYWQgZXZlbnRzKSBOdW1iZXIgb2YgZWxlZ2libGUgaW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkCi1ldmVudDoweDJlIGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0xTVTBfR1JQMTUgOiAoR1JQMTUgTFNVIGxvYWQgZXZlbnRzKSBBIGxvYWQgZXhlY3V0aW5nIG9uIHVuaXQgMCBtaXNzZWQgdGhlIEQgY2FjaGUKLWV2ZW50OjB4MmYgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfTFNVMV9HUlAxNSA6IChHUlAxNSBMU1UgbG9hZCBldmVudHMpIEEgbG9hZCBleGVjdXRpbmcgb24gdW5pdCAxIG1pc3NlZCB0aGUgRCBjYWNoZQotCi0jR3JvdXAgMTYgTFNVIFN0b3JlIEV2ZW50cwotZXZlbnQ6MHgzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9VU1RfR1JQMTYgOiAoR1JQMTYgTFNVIHN0b3JlIGV2ZW50cykgQSBzdG9yZSB3YXMgZmx1c2hlZCBmcm9tIHVuaXQgMCBiZWNhdXNlIGl0IHdhcyB1bmFsaWduZWQgKGNyb3NzZWQgNEsgYm91bmRhcnkpCi1ldmVudDoweDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX1VTVF9HUlAxNiA6IChHUlAxNiBMU1Ugc3RvcmUgZXZlbnRzKSBBIHN0b3JlIHdhcyBmbHVzaGVkIGZyb20gdW5pdCAxIGJlY2F1c2UgaXQgd2FzIHVuYWxpZ25lZCAoY3Jvc3NlZCA0SyBib3VuZGFyeSkKLWV2ZW50OjB4MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9MU1UwX0dSUDE2IDogKEdSUDE2IExTVSBzdG9yZSBldmVudHMpIEFuIEwxIEQgY2FjaGUgc3RvcmUgZXhlY3V0ZWQgb24gdW5pdCAwCi1ldmVudDoweDMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfTFNVMV9HUlAxNiA6IChHUlAxNiBMU1Ugc3RvcmUgZXZlbnRzKSBBbiBMMSBEIGNhY2hlIHN0b3JlIGV4ZWN1dGVkIG9uIHVuaXQgMQotZXZlbnQ6MHgzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNiA6IChHUlAxNiBMU1Ugc3RvcmUgZXZlbnRzKSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2IDogKEdSUDE2IExTVSBzdG9yZSBldmVudHMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4MzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQMTYgOiAoR1JQMTYgTFNVIHN0b3JlIGV2ZW50cykgTDEgRGNhY2hlIHN0b3JlIG1pc3NlZCB0aGUgRCBjYWNoZQotZXZlbnQ6MHgzNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfSU5WX0wyX0dSUDE2IDogKEdSUDE2IExTVSBzdG9yZSBldmVudHMpIEFuIEwxIERjYWNoZSBlbnRyeSBpbnZhbGlkYXRlZCBmcm9tIHRoZSBMMiBiZWNhdXNlIEwyIGxpbmUgd2FzIGNhc3Qgb3V0Ci0KLSNHcm91cCAxNyBMU1UgU3RvcmUgRXZlbnRzIDIKLWV2ZW50OjB4MzggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfU1JRX1NURldEX0dSUDE3IDogKEdSUDE3IExTVSBzdG9yZSBldmVudHMgMikgRGF0YSBmcm9tIGEgc3RvcmUgaW5zdHJ1Y3Rpb24gd2FzIGZvcndhcmRlZCB0byBhIGxvYWQgb24gdW5pdCAwCi1ldmVudDoweDM5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1NSUV9TVEZXRF9HUlAxNyA6IChHUlAxNyBMU1Ugc3RvcmUgZXZlbnRzIDIpIERhdGEgZnJvbSBhIHN0b3JlIGluc3RydWN0aW9uIHdhcyBmb3J3YXJkZWQgdG8gYSBsb2FkIG9uIHVuaXQgMQotZXZlbnQ6MHgzYSBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0xTVTBfR1JQMTcgOiAoR1JQMTcgTFNVIHN0b3JlIGV2ZW50cyAyKSBMMSBEY2FjaGUgc3RvcmUgZXhlY3V0ZWQgb24gdW5pdCAwCi1ldmVudDoweDNiIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfTFNVMV9HUlAxNyA6IChHUlAxNyBMU1Ugc3RvcmUgZXZlbnRzIDIpIEwxIERjYWNoZSBzdG9yZSBleGVjdXRlZCBvbiB1bml0IDEKLWV2ZW50OjB4M2MgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQMTcgOiAoR1JQMTcgTFNVIHN0b3JlIGV2ZW50cyAyKSBMMSBEY2FjaGUgc3RvcmUgbWlzc2VkIHRoZSBEIGNhY2hlCi1ldmVudDoweDNkIGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE3IDogKEdSUDE3IExTVSBzdG9yZSBldmVudHMgMikgUHJvY2Vzc29yIEN5Y2xlcwotZXZlbnQ6MHgzZSBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNyA6IChHUlAxNyBMU1Ugc3RvcmUgZXZlbnRzIDIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4M2YgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTcgOiAoR1JQMTcgTFNVIHN0b3JlIGV2ZW50cyAyKSBQcm9jZXNzb3IgQ3ljbGVzCi0KLSNHcm91cCAxOCBJbmZvcm1hdGlvbiBvbiB0aGUgTG9hZCBTdG9yZSBVbml0Ci1ldmVudDoweDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0RFUkFUX01JU1NfR1JQMTggOiAoR1JQMTggSW5mbyBvbiBsb2FkIHN0b3JlIHVuaXQpIERhdGEgcmVxdWVzdCBmcm9tIExTVSB1bml0IDAgbWlzc2VkIEVSQVQgY2F1c2luZyBFUkFUIHJlbG9hZAotZXZlbnQ6MHg0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9ERVJBVF9NSVNTX0dSUDE4IDogKEdSUDE4IEluZm8gb24gbG9hZCBzdG9yZSB1bml0KSBEYXRhIHJlcXVlc3QgZnJvbSBMU1UgdW5pdCAxIG1pc3NlZCBFUkFUIGNhdXNpbmcgRVJBVCByZWxvYWQKLWV2ZW50OjB4NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTggOiAoR1JQMTggSW5mbyBvbiBsb2FkIHN0b3JlIHVuaXQpIFByb2Nlc3NvciBDeWNsZXMKLWV2ZW50OjB4NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTggOiAoR1JQMTggSW5mbyBvbiBsb2FkIHN0b3JlIHVuaXQpIFByb2Nlc3NvciBDeWNsZXMKLWV2ZW50OjB4NDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTggOiAoR1JQMTggSW5mbyBvbiBsb2FkIHN0b3JlIHVuaXQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4NDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTggOiAoR1JQMTggSW5mbyBvbiBsb2FkIHN0b3JlIHVuaXQpIFByb2Nlc3NvciBDeWNsZXMKLWV2ZW50OjB4NDYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX0RDQUNIRV9SRUxPQURfVkFMSURfR1JQMTggOiAoR1JQMTggSW5mbyBvbiBsb2FkIHN0b3JlIHVuaXQpIEwxIHJlbG9hZCBkYXRhIHNvdXJjZSB2YWxpZAotZXZlbnQ6MHg0NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxOCA6IChHUlAxOCBJbmZvIG9uIGxvYWQgc3RvcmUgdW5pdCkgUHJvY2Vzc29yIEN5Y2xlcwotCi0jR3JvdXAgMjEgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEwxIGFuZCBUTEIKLWV2ZW50OjB4NDggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU19HUlAyMSA6IChHUlAyMSBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgTDEgYW5kIFRMQikgVExCIG1pc3MgZm9yIERhdGEgcmVxdWVzdCBvY2N1cnJlZC4gIFJlcXVlc3QgbWF5IGJlIHJldHJpZWQgdW50aWwgaW5zdCBpcyBpbiBuZXh0IGNvbXBsZXRlIGdyb3VwIGNhdXNpbmcgbXVsdGlwbGUgVExCIG1pc3NlcyBmb3IgdGhlIHNhbWUgaW5zdC4KLWV2ZW50OjB4NDkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lUTEJfTUlTU19HUlAyMSA6IChHUlAyMSBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgTDEgYW5kIFRMQikgQSBUTEIgbWlzcyBmb3IgYW4gaW5zdHJ1Y3Rpb24gRmV0Y2ggaGFzIG9jY3VycmVkCi1ldmVudDoweDRhIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDIxIDogKEdSUDIxIFBFIEJlbmNobWFya2VyIGdyb3VwIGZvciBMMSBhbmQgVExCKSBMMSByZWZlcmVuY2UgdGhhdCBtaXNzZXMgdGhlIEwxIERjYWNoZQotZXZlbnQ6MHg0YiBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlAyMSA6IChHUlAyMSBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgTDEgYW5kIFRMQikgTDEgRCBjYWNoZSBzdG9yZSB0aGF0IG1pc3NlcyB0aGUgY2FjaGUKLWV2ZW50OjB4NGMgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjEgOiAoR1JQMjEgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEwxIGFuZCBUTEIpIFByb2Nlc3NvciBjeWNsZXMKLWV2ZW50OjB4NGQgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjEgOiAoR1JQMjEgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEwxIGFuZCBUTEIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4NGUgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAyMSA6IChHUlAyMSBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgTDEgYW5kIFRMQikgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCi1ldmVudDoweDRmIGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMjEgOiAoR1JQMjEgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEwxIGFuZCBUTEIpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCi0KLSNHcm91cCAyMiBIcG1jb3VudCBncm91cCBmb3IgTDEgYW5kIFRMQiBiZWhhdmlvcgotZXZlbnQ6MHg1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDIyIDogKEdSUDIyIEhwbWNvdW50IGdyb3VwIGZvciBMMSBhbmQgVExCIGJlaGF2aW9yKSBBIFRMQiBtaXNzIGZvciBkYXRhLCByZXF1ZXN0IG1heSBiZSByZXRyaWVkIHVudGlsIHRoZSBpbnN0cnVjdGlvbiBpcyBpbiB0aGUgbmV4dCBjb21wbGV0ZSBncm91cC4gIFRoaXMgbWF5IGNhdXNlIG11bHRpcGxlIFRMQiBtaXNzZXMgZm9yIHRoZSBzYW1lIGluc3RydWN0aW9uLgotZXZlbnQ6MHg1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TUlFfRU1QVFlfQ1lDX0dSUDIyIDogKEdSUDIyIEhwbWNvdW50IGdyb3VwIGZvciBMMSBhbmQgVExCIGJlaGF2aW9yKSBDeWNsZXMgTE1RIGFuZCBTUlEgZW1wdHkKLWV2ZW50OjB4NTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMjIgOiAoR1JQMjIgSHBtY291bnQgZ3JvdXAgZm9yIEwxIGFuZCBUTEIgYmVoYXZpb3IpIEwxIEQgY2FjaGUgbG9hZCBtaXNzCi1ldmVudDoweDUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDIyIDogKEdSUDIyIEhwbWNvdW50IGdyb3VwIGZvciBMMSBhbmQgVExCIGJlaGF2aW9yKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3MKLWV2ZW50OjB4NTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjIgOiAoR1JQMjIgSHBtY291bnQgZ3JvdXAgZm9yIEwxIGFuZCBUTEIgYmVoYXZpb3IpIHByb2Nlc3NvciBjeWNsZXMKLWV2ZW50OjB4NTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjIgOiAoR1JQMjIgSHBtY291bnQgZ3JvdXAgZm9yIEwxIGFuZCBUTEIgYmVoYXZpb3IpIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4NTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAyMiA6IChHUlAyMiBIcG1jb3VudCBncm91cCBmb3IgTDEgYW5kIFRMQiBiZWhhdmlvcikgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCi1ldmVudDoweDU3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMjIgOiAoR1JQMjIgSHBtY291bnQgZ3JvdXAgZm9yIEwxIGFuZCBUTEIgYmVoYXZpb3IpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCi0KLSNHcm91cCAyNCBMMSBtaXNzIGFuZCBicmFuY2ggbWlzcHJlZGljdAotZXZlbnQ6MHg1OCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNCA6IChHUlAyNCBMMSBtaXNzIGFuZCBicmFuY2ggbWlzcHJlZGljdCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZCAKLWV2ZW50OjB4NTkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjQgOiAoR1JQMjQgTDEgbWlzcyBhbmQgYnJhbmNoIG1pc3ByZWRpY3QpIFByb2Nlc3NvciBDeWNsZXMKLWV2ZW50OjB4NWEgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMjQgOiAoR1JQMjQgTDEgbWlzcyBhbmQgYnJhbmNoIG1pc3ByZWRpY3QpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKLWV2ZW50OjB4NWIgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlAyNCA6IChHUlAyNCBMMSBtaXNzIGFuZCBicmFuY2ggbWlzcHJlZGljdCkgQnJhbmNoZXMgaXNzdWVkCi1ldmVudDoweDVjIGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDI0IDogKEdSUDI0IEwxIG1pc3MgYW5kIGJyYW5jaCBtaXNwcmVkaWN0KSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcwotZXZlbnQ6MHg1ZCBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyNCA6IChHUlAyNCBMMSBtaXNzIGFuZCBicmFuY2ggbWlzcHJlZGljdCkgUHJvY2Vzc29yIEN5Y2xlcwotZXZlbnQ6MHg1ZSBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfQ1JfR1JQMjQgOiAoR1JQMjQgTDEgbWlzcyBhbmQgYnJhbmNoIG1pc3ByZWRpY3QpIEJyYW5jaCBtaXNwcmVkaWN0aW9uIGR1ZSB0byBDUiBiaXQgc2V0dGluZwotZXZlbnQ6MHg1ZiBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfVEFfR1JQMjQgOiAoR1JQMjQgTDEgbWlzcyBhbmQgYnJhbmNoIG1pc3ByZWRpY3QpIEJyYW5jaCBtaXNwcmVkaXRpb25zIGR1ZSB0byB0YXJnZXQgYWRkcmVzcyAKLQotI0dyb3VwIDI2IFNMQiBhbmQgYnJhbmNoIG1pc3ByZWRpY3QgYW5hbHlzaXMKLWV2ZW50OjB4ODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI2IDogKEdSUDI2IFNMQiBhbmQgYnJhbmNoIG1pc3ByZWRpY3QgYW5hbHlzaXMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaAotZXZlbnQ6MHg4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFNMQl9NSVNTX0dSUDI2IDogKEdSUDI2IFNMQiBhbmQgYnJhbmNoIG1pc3ByZWRpY3QgYW5hbHlzaXMpIFNMQiBtaXNzIGZvciBhIGRhdGEgcmVxdWVzdC4gU0xCIG1pc3NlcyB0cmFwIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRvIHJlc29sdmUuCi1ldmVudDoweDgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9JU1NVRURfR1JQMjYgOiAoR1JQMjYgU0xCIGFuZCBicmFuY2ggbWlzcHJlZGljdCBhbmFseXNpcykgQXNzZXJ0ZWQgd2hlbiBJU1UgaXNzdWVzIGEgYnJhbmNoIGluc3RydWN0aW9uLgotZXZlbnQ6MHg4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfQ1JfR1JQMjYgOiAoR1JQMjYgU0xCIGFuZCBicmFuY2ggbWlzcHJlZGljdCBhbmFseXNpcykgQXNzZXJ0ZWQgd2hlbiB0aGUgYnJhbmNoIGV4ZWN1dGlvbiB1bml0IGRldGVjdHMgYSBicmFuY2ggbWlzcHJlZGljdCBiZWNhdXNlIHRoZSBDUiB2YWx1ZSBpcyBvcHBvc2l0ZSBvZiB0aGUgcHJlZGljdGVkIHZhbHVlLgotZXZlbnQ6MHg4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVNMQl9NSVNTX0dSUDI2IDogKEdSUDI2IFNMQiBhbmQgYnJhbmNoIG1pc3ByZWRpY3QgYW5hbHlzaXMpIFNMQiBtaXNzIGZvciBhbiBpbnN0cnVjdGlvbiBmZXRjaCBhcyBvY2N1cnJlZAotZXZlbnQ6MHg4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyNiA6IChHUlAyNiBTTEIgYW5kIGJyYW5jaCBtaXNwcmVkaWN0IGFuYWx5c2lzKSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDg2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI2IDogKEdSUDI2IFNMQiBhbmQgYnJhbmNoIG1pc3ByZWRpY3QgYW5hbHlzaXMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4ODcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX1RBX0dSUDI2IDogKEdSUDI2IFNMQiBhbmQgYnJhbmNoIG1pc3ByZWRpY3QgYW5hbHlzaXMpIEFzc2VydGVkIHdoZW4gdGhlIGJyYW5jaCBleGVjdXRpb24gdW5pdCBkZXRlY3RzIGFuIGluY29ycmVjdCB0YXJnZXQgYWRkcmVzcyBwcmVkaWN0aW9uLgotCi0jR3JvdXAgMjcgRGF0YSBzb3VyY2UgYW5kIExNUQotZXZlbnQ6MHg4OCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDI3IDogKEdSUDI3IERhdGEgc291cmNlIGFuZCBMTVEpIERMMSB3YXMgcmVsb2FkZWQgZnJvbSB0aGUgbG9jYWwgTDIgZHVlIHRvIGEgZGVtYW5kIGxvYWQKLWV2ZW50OjB4ODkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjcgOiAoR1JQMjcgRGF0YSBzb3VyY2UgYW5kIExNUSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHg4YSBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX01FTV9HUlAyNyA6IChHUlAyNyBEYXRhIHNvdXJjZSBhbmQgTE1RKSBEYXRhIGxvYWRlZCBmcm9tIG1lbW9yeQotZXZlbnQ6MHg4YiBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyNyA6IChHUlAyNyBEYXRhIHNvdXJjZSBhbmQgTE1RKSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDhjIGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI1X1NIUl9HUlAyNyA6IChHUlAyNyBEYXRhIHNvdXJjZSBhbmQgTE1RKSBETDEgcmVsb2FkZWQgd2l0aCBzaGFyZWQgKFQgb3IgU0wpIGRhdGEgZnJvbSBMMiBvZiBhIGNoaXAgb24gdGhpcyBNQ00gZHVlIHRvIGRlbWFuZCBsb2FkCi1ldmVudDoweDhkIGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI1X01PRF9HUlAyNyA6IChHUlAyNyBEYXRhIHNvdXJjZSBhbmQgTE1RKSBETDEgcmVsb2FkZWQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIEwyIG9mIGEgY2hpcCBvbiB0aGlzIE1DTSBkdWUgdG8gYSBkZW1hbmQgbG9hZAotZXZlbnQ6MHg4ZSBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9BTExPQ19HUlAyNyA6IChHUlAyNyBEYXRhIHNvdXJjZSBhbmQgTE1RKSBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIExNUSB3YXMgYWxsb2NhdGVkCi1ldmVudDoweDhmIGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1MwX1ZBTElEX0dSUDI3IDogKEdSUDI3IERhdGEgc291cmNlIGFuZCBMTVEpIEFzc2VydGVkIGV2ZXJ5IGN5Y2xlIHdoZW4gZmlyc3QgZW50cnkgaW4gTE1RIGlzIHZhbGlkLiBMTVEgaGFkIGVpZ2h0IGVudHJpZXMgYWxsb2NhdGVkIEZJRk8uCi0KLSNHcm91cCAyOCBUTEIgYW5kIExSUSBwbHVzIGRhdGEgcHJlZmV0Y2gKLWV2ZW50OjB4OTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU19HUlAyOCA6IChHUlAyOCBUTEIgYW5kIExSUSBwbHVzIGRhdGEgcHJlZmV0Y2gpIFRMQiBtaXNzIGZvciBkYXRhIHJlcXVlc3QuIFJlcXVlc3QgbWF5IGJlIHJldHJpZWQsIHJlc3VsdGluZyBpbiBtdWx0aXBsZSBUTEIgbWlzc2VzIGZvciBzYW1lIGluc3RydWN0aW9uLgotZXZlbnQ6MHg5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVRMQl9NSVNTX0dSUDI4IDogKEdSUDI4IFRMQiBhbmQgTFJRIHBsdXMgZGF0YSBwcmVmZXRjaCkgVExCIG1pc3MgZm9yIGFuIEluc3RydWN0aW9uIEZldGNoIGhhcyBvY2N1cnJlZAotZXZlbnQ6MHg5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyOCA6IChHUlAyOCBUTEIgYW5kIExSUSBwbHVzIGRhdGEgcHJlZmV0Y2gpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjggOiAoR1JQMjggVExCIGFuZCBMUlEgcGx1cyBkYXRhIHByZWZldGNoKSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTFJRX1MwX0FMTE9DX0dSUDI4IDogKEdSUDI4IFRMQiBhbmQgTFJRIHBsdXMgZGF0YSBwcmVmZXRjaCkgTFJRIHNsb3QgemVybyB3YXMgYWxsb2NhdGVkCi1ldmVudDoweDk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTFJRX1MwX1ZBTElEX0dSUDI4IDogKEdSUDI4IFRMQiBhbmQgTFJRIHBsdXMgZGF0YSBwcmVmZXRjaCkgQXNzZXJ0ZWQgZXZlcnkgY3ljbGUgdGhhdCBMb2FkIFJlcXVlc3QgUXVldWUgc2xvdCB6ZXJvIGlzIHZhbGlkLiBTUlEgaXMgMzIgZW50cmllcyBsb25nIGFuZCBpcyBhbGxvY2F0ZWQgcm91bmQtcm9iaW4uCi1ldmVudDoweDk2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9QUkVGX0dSUDI4IDogKEdSUDI4IFRMQiBhbmQgTFJRIHBsdXMgZGF0YSBwcmVmZXRjaCkgQSByZXF1ZXN0IHRvIHByZWZldGNoIGRhdGEgaW50byB0aGUgTDEgd2FzIG1hZGUKLWV2ZW50OjB4OTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1BSRUZfR1JQMjggOiAoR1JQMjggVExCIGFuZCBMUlEgcGx1cyBkYXRhIHByZWZldGNoKSBBIHJlcXVlc3QgdG8gcHJlZmV0Y2ggZGF0YSBpbnRvIEwyIHdhcyBtYWRlCi0KLSNHcm91cCAyOSBJbnN0cnVjdGlvbiBzb3VyY2UgYW5kIHRhYmxld2FsawotZXZlbnQ6MHg5OCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyX0dSUDI5IDogKEdSUDI5IEluc3RydWN0aW9uIHNvdXJjZSBhbmQgdGFibGV3YWxrKSBJbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCBmcm9tIEwyLiBGZXRjaCBHcm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMuCi1ldmVudDoweDk5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTUVNX0dSUDI5IDogKEdSUDI5IEluc3RydWN0aW9uIHNvdXJjZSBhbmQgdGFibGV3YWxrKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gbWVtb3J5Ci1ldmVudDoweDlhIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSFZfQ1lDX0dSUDI5IDogKEdSUDI5IEluc3RydWN0aW9uIHNvdXJjZSBhbmQgdGFibGV3YWxrKSBDeWNsZXMgd2hlbiB0aGUgcHJvY2Vzc29yIGlzIGV4ZWN1dGluZyBpbiBIeXBlcnZpc29yIChNU1JbSFZdID0gMSBhbmQgTVNSW1BSXT0wKQotZXZlbnQ6MHg5YiBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyOSA6IChHUlAyOSBJbnN0cnVjdGlvbiBzb3VyY2UgYW5kIHRhYmxld2FsaykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHg5YyBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9UQUJMRVdBTEtfQ1lDX0dSUDI5IDogKEdSUDI5IEluc3RydWN0aW9uIHNvdXJjZSBhbmQgdGFibGV3YWxrKSBBc3NlcnRlZCBldmVyeSBjeWNsZSB3aGVuIGEgdGFibGV3YWxrIGlzIGFjdGl2ZSwgZHVyaW5nIHdoaWNoLCBhbnkgcmVxdWVzdCBhdHRlbXB0aW5nIHRvIGFjY2VzcyB0aGUgVExCIHdpbGwgYmUgcmVqZWN0ZWQgYW5kIHJldHJpZWQuCi1ldmVudDoweDlkIGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI5IDogKEdSUDI5IEluc3RydWN0aW9uIHNvdXJjZSBhbmQgdGFibGV3YWxrKSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDllIGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfQ01QTF9HUlAyOSA6IChHUlAyOSBJbnN0cnVjdGlvbiBzb3VyY2UgYW5kIHRhYmxld2FsaykgQSBncm91cCBjb21wbGV0ZWQuIE1pY3JvY29kZWQgaW5zdHJ1Y3Rpb25zIHRoYXQgc3BhbiBtdWx0aXBsZSBncm91cHMgd2lsbCBnZW5lcmF0ZSB0aGlzIGV2ZW50IG9uY2UgcGVyIGdyb3VwLgotZXZlbnQ6MHg5ZiBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfSU5WX0wyX0dSUDI5IDogKEdSUDI5IEluc3RydWN0aW9uIHNvdXJjZSBhbmQgdGFibGV3YWxrKSBBIGRjYWNoZSBpbnZhbGlkYXRlZCB3YXMgcmVjZWl2ZWQgZnJvbSB0aGUgTDIgYmVjYXVzZSBhIGxpbmUgaW4gTDIgd2FzIGNhc3RvdXQuCi0KLSNHcm91cCAzMCBTeW5jIGFuZCBTUlEKLWV2ZW50OjB4YTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfUzBfQUxMT0NfR1JQMzAgOiAoR1JQMzAgU3luYyBhbmQgU1JRKSBTUlEgU2xvdCB6ZXJvIHdhcyBhbGxvY2F0ZWQKLWV2ZW50OjB4YTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfUzBfVkFMSURfR1JQMzAgOiAoR1JQMzAgU3luYyBhbmQgU1JRKSBBc3NlcnRlZCBldmVyeSBjeWNsZSB0aGF0IHRoZSBTdG9yZSBSZXF1ZXN0IFF1ZXVlIHNsb3QgemVybyBpcyB2YWxpZC4gU1JRIGlzIDMyIGVudHJpZXMgbG9uZyBhbmQgaXMgYWxsb2NhdGVkIHJvdW5kLXJvYmluLgotZXZlbnQ6MHhhMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAzMCA6IChHUlAzMCBTeW5jIGFuZCBTUlEpIFRvdGFsIERMMSBsb2FkIHJlZmVyZW5jZXMgdGhhdCBtaXNzIHRoZSBETDEKLWV2ZW50OjB4YTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfU1lOQ19DWUNfR1JQMzAgOiAoR1JQMzAgU3luYyBhbmQgU1JRKSBBc3NlcnRlZCBldmVyeSBjeWNsZSB3aGVuIGEgc3luYyBpcyBpbiB0aGUgU1JRLgotZXZlbnQ6MHhhNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzMCA6IChHUlAzMCBTeW5jIGFuZCBTUlEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4YTUgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzAgOiAoR1JQMzAgU3luYyBhbmQgU1JRKSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweGE2IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMzAgOiAoR1JQMzAgU3luYyBhbmQgU1JRKSBUb3RhbCBETDEgTG9hZCByZWZlcmVuY2VzCi0KLSNHcm91cCAzMSBJRVJBVAotZXZlbnQ6MHhhOCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wxX0dSUDMxIDogKEdSUDMxIElFUkFUKSBJbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCBmcm9tIEwxLiBGZXRjaCBHcm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMuCi1ldmVudDoweGE5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JRVJBVF9YTEFURV9XUl9HUlAzMSA6IChHUlAzMSBJRVJBVCkgQXNzZXJ0ZWQgZWFjaCB0aW1lIHRoZSBJLUVSQVQgaXMgd3JpdHRlbiwgaW5kaWNhdGluZyB0aGF0IGFuIEVSQVQgbWlzcyBoYXMgYmVlbiBzZXJ2aWNlZC4KLWV2ZW50OjB4YWEgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzEgOiAoR1JQMzEgSUVSQVQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4YWIgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzEgOiAoR1JQMzEgSUVSQVQpIFByb2Nlc3NvciBjeWNsZXMKLQotI0dyb3VwIDMyIERFUkFUCi1ldmVudDoweGIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRU1QVFlfQ1lDX0dSUDMyIDogKEdSUDMyIERFUkFUKSBUaGUgR2xvYmFsIENvbXBsZXRpb24gVGFibGUgaXMgY29tcGxldGVseSBlbXB0eQotZXZlbnQ6MHhiMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfVkFMSURfR1JQMzIgOiAoR1JQMzIgREVSQVQpIERpc3BhdGNoIGhhcyBiZWVuIGF0dGVtcHRlZCBmb3IgYSB2YWxpZCBncm91cC4KLWV2ZW50OjB4YjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX0RDQUNIRV9SRUxPQURfVkFMSURfR1JQMzIgOiAoR1JQMzIgREVSQVQpIFRoZSBkYXRhIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyB2YWxpZAotZXZlbnQ6MHhiMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzMiA6IChHUlAzMiBERVJBVCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHhiNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDMyIDogKEdSUDMyIERFUkFUKSBUaGUgSVNVIHNlbmRzIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQuCi1ldmVudDoweGI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19HUlAzMiA6IChHUlAzMiBERVJBVCkgVG90YWwgRC1FUkFUIE1pc3NlcyAoVW5pdCAwICsgVW5pdCAxKS4gUmVxdWVzdHMgYXJlIHJldHJpZWQgYW5kIG1heSByZXN1bHQgaW4gbXVsdGlwbGUgZXJhdCBtaXNzZXMgZm9yIHRoZSBzYW1lIGluc3RydWN0aW9uLgotZXZlbnQ6MHhiNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDMyIDogKEdSUDMyIERFUkFUKSBUb3RhbCBETDEgU3RvcmUgcmVmZXJlbmNlcwotZXZlbnQ6MHhiNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMiA6IChHUlAzMiBERVJBVCkgUHJvY2Vzc29yIGN5Y2xlcwotCi0jR3JvdXAgMzMgSW5mbyBvbiBtYXJrZWQgaW5zdHJ1Y3Rpb25zCi1ldmVudDoweDYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19MMV9HUlAzMyA6IChHUlAzMyBJbmZvIG9uIG1hcmtlZCBpbnN0cnVjdGlvbnMpIE1hcmtlZCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCi1ldmVudDoweDYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJFU0hPTERfVElNRU9fR1JQMzMgOiAoR1JQMzMgSW5mbyBvbiBtYXJrZWQgaW5zdHJ1Y3Rpb25zKSBUaHJlc2hvbGQgdGltZXIgZXhwaXJlZAotZXZlbnQ6MHg2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMyA6IChHUlAzMyBJbmZvIG9uIG1hcmtlZCBpbnN0cnVjdGlvbnMpIFByb2Nlc3NvciBjeWNsZXMKLWV2ZW50OjB4NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfQ01QTF9HUlAzMyA6IChHUlAzMyBJbmZvIG9uIG1hcmtlZCBpbnN0cnVjdGlvbnMpIE1hcmtlZCBncm91cCBjb21wbGV0ZWQKLWV2ZW50OjB4NjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9NUktfR1JQMzMgOiAoR1JQMzMgSW5mbyBvbiBtYXJrZWQgaW5zdHJ1Y3Rpb25zKSBBIG1hcmtlZCBncm91cCB3YXMgc2FtcGxlZCBpbiBJRFUKLWV2ZW50OjB4NjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfSVNTVUVEX0dSUDMzIDogKEdSUDMzIEluZm8gb24gbWFya2VkIGluc3RydWN0aW9ucykgQSBtYXJrZWQgZ3JvdXAgd2FzIGlzc3VlZAotZXZlbnQ6MHg2NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9JTlNUX0ZJTl9HUlAzMyA6IChHUlAzMyBJbmZvIG9uIG1hcmtlZCBpbnN0cnVjdGlvbnMpIEEgbWFya2VkIGluc3RydWN0aW9uIGZpbmlzaGVkCi1ldmVudDoweDY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMzIDogKEdSUDMzIEluZm8gb24gbWFya2VkIGluc3RydWN0aW9ucykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotCi0jR3JvdXAgMzQgTWFya2VkIFN0b3JlcyBQcm9jZXNzaW5nIEZsb3cKLWV2ZW50OjB4NjggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9DTVBMX0dSUDM0IDogKEdSUDM0IE1hcmtlZCBTdG9yZXMgUHJvY2Vzc2luZyBGbG93KSBNYXJrZWQgc3RvcmUgaW5zdHJ1Y3Rpb24gY29tcGxldGVkIChkYXRhIGhvbWUpCi1ldmVudDoweDY5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDM0IDogKEdSUDM0IE1hcmtlZCBTdG9yZXMgUHJvY2Vzc2luZyBGbG93KSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDZhIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfQ01QTF9JTlRfR1JQMzQgOiAoR1JQMzQgTWFya2VkIFN0b3JlcyBQcm9jZXNzaW5nIEZsb3cpIE1hcmtlZCBzdG9yZSBjb21wbGV0ZWQgd2l0aCBpbnRlcnZlbnRpb24KLWV2ZW50OjB4NmIgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfQ01QTF9HUlAzNCA6IChHUlAzNCBNYXJrZWQgU3RvcmVzIFByb2Nlc3NpbmcgRmxvdykgTWFya2VkIGdyb3VwIGNvbXBsZXRlZAotZXZlbnQ6MHg2YyBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9USU1FMF9HUlAzNCA6IChHUlAzNCBNYXJrZWQgU3RvcmVzIFByb2Nlc3NpbmcgRmxvdykgTWFya2VkIGdyb3VwIGNvbXBsZXRpb24gdGltZW91dAotZXZlbnQ6MHg2ZCBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0dQU19HUlAzNCA6IChHUlAzNCBNYXJrZWQgU3RvcmVzIFByb2Nlc3NpbmcgRmxvdykgTWFya2VkIHN0b3JlIHNlbnQgdG8gR1BTCi1ldmVudDoweDZlIGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX1NSUV9JTlNUX1ZBTElEX0dSUDM0IDogKEdSUDM0IE1hcmtlZCBTdG9yZXMgUHJvY2Vzc2luZyBGbG93KSBNYXJrZWQgaW5zdHJ1Y3Rpb24gdmFsaWQgaW4gU1JRCi1ldmVudDoweDZmIGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDM0IDogKEdSUDM0IE1hcmtlZCBTdG9yZXMgUHJvY2Vzc2luZyBGbG93KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCi0KLSNHcm91cCAzNSBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50cwotZXZlbnQ6MHg3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX01JU1NfTDFfR1JQMzUgOiAoR1JQMzUgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMpIE1hcmtlZCBMMSBEIGNhY2FoZSBzdG9yZSBtaXNzZXMKLWV2ZW50OjB4NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTVJfUkVMT0FEX0dSUDM1IDogKEdSUDM1IExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzKSBBIERMMSByZWxvYWQgb2NjdXJlZCBkdWUgdG8gYSBtYXJrZWQgbG9hZAotZXZlbnQ6MHg3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTBfRkxVU0hfVVNUX0dSUDM1IDogKEdSUDM1IExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzKSBBIG1hcmtlZCBzdG9yZSB3YXMgZmx1c2hlZCBmcm9tIHVuaXQgMCBiZWNhdXNlIGl0IHdhcyB1bmFsaWduZWQKLWV2ZW50OjB4NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UxX0ZMVVNIX1VTVF9HUlAzNSA6IChHUlAzNSBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50cykgQSBtYXJrZWQgc3RvcmUgd2FzIGZsdXNoZWQgZnJvbSB1bml0IDEgYmVjYXVzZSBpdCB3YXMgdW5hbGlnbmVkCi1ldmVudDoweDc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDM1IDogKEdSUDM1IExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzKSBwcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDM1IDogKEdSUDM1IExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoweDc2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMF9GTFVTSF9VTERfR1JQMzUgOiAoR1JQMzUgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMpIE1hcmtlZCBsb2FkIHdhcyBmbHVzaGVkIGZyb20gdW5pdCAwIGJlY2F1c2UgaXQgd2FzIHVuYWxpZ25lZCAoY3Jvc3NlZCBhIDY0Ynl0ZSBib3VuZGVyeSBvciAzMiBieXRlIGlmIGl0IG1pc3NlZCB0aGUgTDEKLWV2ZW50OjB4NzcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UxX0ZMVVNIX1VMRF9HUlAzNSA6IChHUlAzNSBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50cykgTWFya2VkIGxvYWQgd2FzIGZsdXNoZWQgZnJvbSB1bml0IDEgYmVjYXVzZSBpdCB3YXMgdW5hbGlnbmVkIChjcm9zc2VkIGEgNjRieXRlIGJvdW5kZXJ5IG9yIDMyIGJ5dGUgaWYgaXQgbWlzc2VkIHRoZSBMMQotCi0jR3JvdXAgMzYgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMgMgotZXZlbnQ6MHg3OCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xEX01JU1NfTDFfTFNVMF9HUlAzNiA6IChHUlAzNiBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50czIpIE1hcmtlZCBsb2FkIGV4ZWN1dGluZyBvbiB1bml0IDAgbWlzc2VkIHRoZSBkY2FjaGUKLWV2ZW50OjB4NzkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MRF9NSVNTX0wxX0xTVTFfR1JQMzYgOiAoR1JQMzYgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMyKSBNYXJrZWQgbG9hZCBleGVjdXRpbmcgb24gdW5pdCAxIG1pc3NlZCB0aGUgZGNhY2hlCi1ldmVudDoweDdhIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMF9GTFVTSF9MUlFfR1JQMzYgOiAoR1JQMzYgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMyKSBNYXJrZWQgbG9hZCB3YXMgZmx1c2hlZCBieSB1bml0IDAgYmVjYXVzZSBhIHlvdW5nZXIgbG9hZCBleGVjdXRlZCBiZWZvcmUgYW4gb2xkZXIgc3RvcmUgZXhlY3V0ZWQgYW5kIHRoZXkgaGFkIG92ZXJsYXBwaW5nIGRhdGEgT1IgdHdvIGxvYWRzIGV4ZWN1dGVkIG91dCBvZiBvcmRlciBhbmQgdGhleSBoYXZlIGJ5dGUgb3ZlcmxhcCBhbmQgdGhlcmUgd2FzIGEgc25vb3AgaW4gYmV0d2VlbiB0byBhbiBvdmVybGFwcGVkIGJ5dGUKLWV2ZW50OjB4N2IgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UxX0ZMVVNIX0xSUV9HUlAzNiA6IChHUlAzNiBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50czIpIE1hcmtlZCBsb2FkIHdhcyBmbHVzaGVkIGJ5IHVuaXQgMSBiZWNhdXNlIGEgeW91bmdlciBsb2FkIGV4ZWN1dGVkIGJlZm9yZSBhbiBvbGRlciBzdG9yZSBleGVjdXRlZCBhbmQgdGhleSBoYWQgb3ZlcmxhcHBpbmcgZGF0YSBPUiB0d28gbG9hZHMgZXhlY3V0ZWQgb3V0IG9mIG9yZGVyIGFuZCB0aGV5IGhhdmUgYnl0ZSBvdmVybGFwIGFuZCB0aGVyZSB3YXMgYSBzbm9vcCBpbiBiZXR3ZWVuIHRvIGFuIG92ZXJsYXBwZWQgYnl0ZQotZXZlbnQ6MHg3YyBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzNiA6IChHUlAzNiBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50czIpIFByb2Nlc3NvciBjeWNsZXMKLWV2ZW50OjB4N2QgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzYgOiAoR1JQMzYgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoweDdlIGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMF9GTFVTSF9TUlFfR1JQMzYgOiAoR1JQMzYgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMyKSBBIG1hcmtlZCBzdG9yZSB3YXMgZmx1c2hlZCBiZWNhdXNlIHlvdW5nZXIgbG9hZCBoaXRzIGFuZCBvbGRlciBzdG9yZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIFNSUSBvciBpbiB0aGUgc2FtZSBncm91cAotZXZlbnQ6MHg3ZiBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfRkxVU0hfU1JRX0dSUDM2IDogKEdSUDM2IExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzMikgQSBtYXJrZWQgc3RvcmUgd2FzIGZsdXNoZWQgYmVjYXVzZSB5b3VuZ2VyIGxvYWQgaGl0cyBhbmQgb2xkZXIgc3RvcmUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBTUlEgb3IgaW4gdGhlIHNhbWUgZ3JvdXAKLQotCmRpZmYgLS1naXQgYS9ldmVudHMvcHBjNjQvOTcwL3VuaXRfbWFza3MgYi9ldmVudHMvcHBjNjQvOTcwL3VuaXRfbWFza3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYWJkY2EuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL3BwYzY0Lzk3MC91bml0X21hc2tzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jIHBwYzY0IDk3MCBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkJIDB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL2V2ZW50cy9wcGM2NC9wb3dlcjQvZXZlbnRfbWFwcGluZ3MgYi9ldmVudHMvcHBjNjQvcG93ZXI0L2V2ZW50X21hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGVmMGI2Li4wMDAwMDAwCi0tLSBhL2V2ZW50cy9wcGM2NC9wb3dlcjQvZXZlbnRfbWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0jR3JvdXAgRGVmYXVsdAotZXZlbnQ6MHgxIG1tY3IwOjB4MDAwMDBEMEUgbW1jcjE6MHgwMDAwMDAwMDRBNTY3NUFDIG1tY3JhOjB4MDAwMjIwMDEKLSAgICAgICAgICAgCi0jR3JvdXAgMSBwbV9zbGljZTAKLWV2ZW50OjB4MTAgbW1jcjA6MHgwMDAwMEQwRSBtbWNyMToweDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MHgwMDAyMjAwMSAKLWV2ZW50OjB4MTEgbW1jcjA6MHgwMDAwMEQwRSBtbWNyMToweDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MHgwMDAyMjAwMQotZXZlbnQ6MHgxMyBtbWNyMDoweDAwMDAwRDBFIG1tY3IxOjB4MDAwMDAwMDA0QTU2NzVBQyBtbWNyYToweDAwMDIyMDAxCi0gICAgICAgICAgIAotI0dyb3VwIDIgcG1fYmFzaWMKLWV2ZW50OjB4MjAgbW1jcjA6MHgwMDAwMDkwRSBtbWNyMToweDEwMDM0MDAwNDVGMjk0MjAgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHgyMSBtbWNyMDoweDAwMDAwOTBFIG1tY3IxOjB4MTAwMzQwMDA0NUYyOTQyMCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDIyIG1tY3IwOjB4MDAwMDA5MEUgbW1jcjE6MHgxMDAzNDAwMDQ1RjI5NDIwIG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4MjMgbW1jcjA6MHgwMDAwMDkwRSBtbWNyMToweDEwMDM0MDAwNDVGMjk0MjAgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHgyNCBtbWNyMDoweDAwMDAwOTBFIG1tY3IxOjB4MTAwMzQwMDA0NUYyOTQyMCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDI1IG1tY3IwOjB4MDAwMDA5MEUgbW1jcjE6MHgxMDAzNDAwMDQ1RjI5NDIwIG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4MjYgbW1jcjA6MHgwMDAwMDkwRSBtbWNyMToweDEwMDM0MDAwNDVGMjk0MjAgbW1jcmE6MHgwMDAwMjAwMSAgICAgICAgICAgCi0gICAgICAgICAgIAotI0dyb3VwIDMgcG1fbHNvdXJjZQotZXZlbnQ6MHgzMCBtbWNyMDoweDAwMDAwRTFDIG1tY3IxOjB4MDAxMEMwMDA3MzlDRTczOCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDMxIG1tY3IwOjB4MDAwMDBFMUMgbW1jcjE6MHgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4MzIgbW1jcjA6MHgwMDAwMEUxQyBtbWNyMToweDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHgzMyBtbWNyMDoweDAwMDAwRTFDIG1tY3IxOjB4MDAxMEMwMDA3MzlDRTczOCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDM0IG1tY3IwOjB4MDAwMDBFMUMgbW1jcjE6MHgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4MzUgbW1jcjA6MHgwMDAwMEUxQyBtbWNyMToweDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHgzNiBtbWNyMDoweDAwMDAwRTFDIG1tY3IxOjB4MDAxMEMwMDA3MzlDRTczOCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDM3IG1tY3IwOjB4MDAwMDBFMUMgbW1jcjE6MHgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjB4MDAwMDIwMDEKLSAgICAgICAgICAgCi0jR3JvdXAgNCBwbV9sc291cmNlMgotZXZlbnQ6MHg0MCBtbWNyMDoweDAwMDAwOTM4IG1tY3IxOjB4MDAxMEMwMDAzQjlDRTczOCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDQxIG1tY3IwOjB4MDAwMDA5MzggbW1jcjE6MHgwMDEwQzAwMDNCOUNFNzM4IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NDIgbW1jcjA6MHgwMDAwMDkzOCBtbWNyMToweDAwMTBDMDAwM0I5Q0U3MzggbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg0MyBtbWNyMDoweDAwMDAwOTM4IG1tY3IxOjB4MDAxMEMwMDAzQjlDRTczOCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDQ0IG1tY3IwOjB4MDAwMDA5MzggbW1jcjE6MHgwMDEwQzAwMDNCOUNFNzM4IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NDUgbW1jcjA6MHgwMDAwMDkzOCBtbWNyMToweDAwMTBDMDAwM0I5Q0U3MzggbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg0NiBtbWNyMDoweDAwMDAwOTM4IG1tY3IxOjB4MDAxMEMwMDAzQjlDRTczOCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDQ3IG1tY3IwOjB4MDAwMDA5MzggbW1jcjE6MHgwMDEwQzAwMDNCOUNFNzM4IG1tY3JhOjB4MDAwMDIwMDEKLSAgICAgICAgICAgCi0jR3JvdXAgNSBwbV9sc291cmNlMwotZXZlbnQ6MHg1MCBtbWNyMDoweDAwMDAwRTFDIG1tY3IxOjB4MDAxMEMwMDA3M0I4NzcyNCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDUxIG1tY3IwOjB4MDAwMDBFMUMgbW1jcjE6MHgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NTIgbW1jcjA6MHgwMDAwMEUxQyBtbWNyMToweDAwMTBDMDAwNzNCODc3MjQgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg1MyBtbWNyMDoweDAwMDAwRTFDIG1tY3IxOjB4MDAxMEMwMDA3M0I4NzcyNCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDU0IG1tY3IwOjB4MDAwMDBFMUMgbW1jcjE6MHgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjB4MDAwMDIwMDEKLWV2ZW50OjB4NTUgbW1jcjA6MHgwMDAwMEUxQyBtbWNyMToweDAwMTBDMDAwNzNCODc3MjQgbW1jcmE6MHgwMDAwMjAwMQotZXZlbnQ6MHg1NiBtbWNyMDoweDAwMDAwRTFDIG1tY3IxOjB4MDAxMEMwMDA3M0I4NzcyNCBtbWNyYToweDAwMDAyMDAxCi1ldmVudDoweDU3IG1tY3IwOjB4MDAwMDBFMUMgbW1jcjE6MHgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjB4MDAwMDIwMDEKLSAgICAgICAgICAgCi0jR3JvdXAgNiBwbV9pc291cmNlCi1ldmVudDoweDYwIG1tY3IwOjB4MDAwMDBGMUUgbW1jcjE6MHg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjB4MDAwMDIyMDEKLWV2ZW50OjB4NjEgbW1jcjA6MHgwMDAwMEYxRSBtbWNyMToweDgwMDAwMDAwN0JERUY3QkMgbW1jcmE6MHgwMDAwMjIwMQotZXZlbnQ6MHg2MiBtbWNyMDoweDAwMDAwRjFFIG1tY3IxOjB4ODAwMDAwMDA3QkRFRjdCQyBtbWNyYToweDAwMDAyMjAxCi1ldmVudDoweDYzIG1tY3IwOjB4MDAwMDBGMUUgbW1jcjE6MHg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjB4MDAwMDIyMDEKLWV2ZW50OjB4NjQgbW1jcjA6MHgwMDAwMEYxRSBtbWNyMToweDgwMDAwMDAwN0JERUY3QkMgbW1jcmE6MHgwMDAwMjIwMQotZXZlbnQ6MHg2NSBtbWNyMDoweDAwMDAwRjFFIG1tY3IxOjB4ODAwMDAwMDA3QkRFRjdCQyBtbWNyYToweDAwMDAyMjAxCi1ldmVudDoweDY2IG1tY3IwOjB4MDAwMDBGMUUgbW1jcjE6MHg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjB4MDAwMDIyMDEKLWV2ZW50OjB4NjcgbW1jcjA6MHgwMDAwMEYxRSBtbWNyMToweDgwMDAwMDAwN0JERUY3QkMgbW1jcmE6MHgwMDAwMjIwMQotICAgICAgICAgICAKLSNHcm91cCA3IHBtX2lzb3VyY2UyCi1ldmVudDoweDcwIG1tY3IwOjB4MDAwMDA5MEUgbW1jcjE6MHg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjB4MDAwMDIyMDEKLWV2ZW50OjB4NzEgbW1jcjA6MHgwMDAwMDkwRSBtbWNyMToweDgwMDAwMDAwN0JERUY3QkMgbW1jcmE6MHgwMDAwMjIwMQotZXZlbnQ6MHg3MiBtbWNyMDoweDAwMDAwOTBFIG1tY3IxOjB4ODAwMDAwMDA3QkRFRjdCQyBtbWNyYToweDAwMDAyMjAxCi1ldmVudDoweDczIG1tY3IwOjB4MDAwMDA5MEUgbW1jcjE6MHg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjB4MDAwMDIyMDEKLWV2ZW50OjB4NzQgbW1jcjA6MHgwMDAwMDkwRSBtbWNyMToweDgwMDAwMDAwN0JERUY3QkMgbW1jcmE6MHgwMDAwMjIwMQotZXZlbnQ6MHg3NSBtbWNyMDoweDAwMDAwOTBFIG1tY3IxOjB4ODAwMDAwMDA3QkRFRjdCQyBtbWNyYToweDAwMDAyMjAxCi1ldmVudDoweDc2IG1tY3IwOjB4MDAwMDA5MEUgbW1jcjE6MHg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjB4MDAwMDIyMDEKLWV2ZW50OjB4NzcgbW1jcjA6MHgwMDAwMDkwRSBtbWNyMToweDgwMDAwMDAwN0JERUY3QkMgbW1jcmE6MHgwMDAwMjIwMQotICAgICAgICAgICAKLSNHcm91cCA4IHBtX2lzb3VyY2UzCi1ldmVudDoweDgwIG1tY3IwOjB4MDAwMDBGMUUgbW1jcjE6MHg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjB4MDAwMDIyMDEKLWV2ZW50OjB4ODEgbW1jcjA6MHgwMDAwMEYxRSBtbWNyMToweDgwMDAwMDAwN0JERUYzQTQgbW1jcmE6MHgwMDAwMjIwMQotZXZlbnQ6MHg4MiBtbWNyMDoweDAwMDAwRjFFIG1tY3IxOjB4ODAwMDAwMDA3QkRFRjNBNCBtbWNyYToweDAwMDAyMjAxCi1ldmVudDoweDgzIG1tY3IwOjB4MDAwMDBGMUUgbW1jcjE6MHg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjB4MDAwMDIyMDEKLWV2ZW50OjB4ODQgbW1jcjA6MHgwMDAwMEYxRSBtbWNyMToweDgwMDAwMDAwN0JERUYzQTQgbW1jcmE6MHgwMDAwMjIwMQotZXZlbnQ6MHg4NSBtbWNyMDoweDAwMDAwRjFFIG1tY3IxOjB4ODAwMDAwMDA3QkRFRjNBNCBtbWNyYToweDAwMDAyMjAxCi1ldmVudDoweDg2IG1tY3IwOjB4MDAwMDBGMUUgbW1jcjE6MHg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjB4MDAwMDIyMDEKLWV2ZW50OjB4ODcgbW1jcjA6MHgwMDAwMEYxRSBtbWNyMToweDgwMDAwMDAwN0JERUYzQTQgbW1jcmE6MHgwMDAwMjIwMQpkaWZmIC0tZ2l0IGEvZXZlbnRzL3BwYzY0L3Bvd2VyNC9ldmVudHMgYi9ldmVudHMvcHBjNjQvcG93ZXI0L2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBkMDFiZi4uMDAwMDAwMAotLS0gYS9ldmVudHMvcHBjNjQvcG93ZXI0L2V2ZW50cworKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLSMgcHBjNjQgUE9XRVI0IGV2ZW50cwotIwotIyAgV2l0aGluIGVhY2ggZ3JvdXAgdGhlIGV2ZW50IG5hbWVzIG11c3QgYmUgdW5pcXVlLiAgRWFjaCBldmVudCBpbiBhIGdyb3VwIGlzCi0jICBhc3NpZ25lZCB0byBhIHVuaXF1ZSBjb3VudGVyLiAgVGhlIGdyb3VwcyBhcmUgZnJvbSB0aGUgZ3JvdXBzIGRlZmluZWQgaW4gdGhlCi0jICBwb3dlciA0IG1hbnVhbC4KLSMKLSMgIE9ubHkgZXZlbnRzIHdpdGhpbiB0aGUgc2FtZSBncm91cCBjYW4gYmUgc2VsZWN0ZWQgc2ltdWx0YW5lb3VzbHkKLSMgIEVhY2ggZXZlbnQgaXMgZ2l2ZW4gYSB1bmlxdWUgZXZlbnQgbnVtYmVyLiAgVGhlIGV2ZW50IG51bWJlciBpcyB1c2VkIGJ5IHRoZQotIyAgT3Byb2ZpbGUgY29kZSB0byByZXNvbHZlIGV2ZW50IG5hbWVzIGZvciB0aGUgcG9zdHByb2Nlc3NpbmcuICBUaGlzIGlzIGRvbmUKLSMgIHRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgT3Byb2ZpbGUgY29kZS4gIFRoZSBldmVudCAKLSMgIG51bWJlciBmb3JtYXQgZ3JvdXBfbnVtIGZvbGxvd2VkIGJ5IHRoZSBjb3VudGVyIG51bWJlciBmb3IgdGhlIGV2ZW50IHdpdGhpbgotIyAgdGhlIGdyb3VwLiAgVGhlIGV2ZW50IG51bWJlciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LgotCi0jR3JvdXAgRGVmYXVsdAotZXZlbnQ6MHgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6Q1lDTEVTIDogUHJvY2Vzc29yIEN5Y2xlcwotCi0jR3JvdXAgMSBwbV9zbGljZTAKLWV2ZW50OjB4MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaAotZXZlbnQ6MHgxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxIDogKEdyb3VwIDEgcG1fc2xpY2UwKSBQcm9jZXNzb3IgQ3ljbGVzCi1ldmVudDoweDEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIE51bWJlciBvZiBlbGlnaWJsZSBpbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQKLQotI0dyb3VwIDIgcG1fYmFzaWMKLWV2ZW50OjB4MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMiA6IChHcm91cCAyIHBtX2Jhc2ljKSBJbnN0cnVjaXRvbnMgY29tcGxldGVkCi1ldmVudDoweDIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIgOiAoR3JvdXAgMiBwbV9iYXNpYykgUHJvY2Vzc29yIGN5Y2xlcwotZXZlbnQ6MHgyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6UE1fTERfTUlTU18xX0dSUDIgOiAoR3JvdXAgMiBwbV9iYXNpYykgVG90YWwgREwxIGxvYWQgcmVmZXJlbmNlcyB0aGF0IG1pc3MgdGhlIERMMQotZXZlbnQ6MHgyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6UE1fRENfSU5WX0wyX0dSUDIgOiAoR3JvdXAgMiBwbV9iYXNpYykgQSBEY2FjaGUgaW52YWxpZGF0ZWQgd2FzIHJlY2VpdmVkIGZyb20gdGhlIEwyIGJlY2F1c2UgYSBsaW5lIGluIEwyIHdhcyBjYXN0b3V0Ci1ldmVudDoweDI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMiA6IChHcm91cCAyIHBtX2Jhc2ljKSBUaGUgSVNVIHNlbmRzIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKLWV2ZW50OjB4MjUgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAyIDogKEdyb3VwIDIgcG1fYmFzaWMpIFRvdGFsIERMMSBzdG9yZSByZWZlcmVuY2VzCi1ldmVudDoweDI2IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMiA6IChHcm91cCAyIHBtX2Jhc2ljKSBUb3RhbCBETDEgbG9hZCByZWZlcmVuY2VzCi0KLSNHcm91cCAzIHBtX2xzb3VyY2UKLWV2ZW50OjB4MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MM19HUlAzIDogKEdyb3VwIDMgcG1fbHNvdXJjZSkgRGF0YSBsb2FkZWQgZnJvbSBMMyBkdWUgdG8gYSBkZW1hbmQgbG9hZAotZXZlbnQ6MHgzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX01FTV9HUlAzIDogKEdyb3VwIDMgcG1fbHNvdXJjZSkgRGF0YSBsb2FkZWQgZnJvbSBNRU0gZHVlIHRvIGEgZGVtYW5kIGxvYWQKLWV2ZW50OjB4MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMy41X0dSUDMgOiAoR3JvdXAgMyBwbV9sc291cmNlKSBEYXRhIGxvYWRlZCBmcm9tIEwzIG9mIGFub3RoZXIgTUNNIGR1ZSB0byBhIGRlbWFuZCBsb2FkCi1ldmVudDoweDMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJfR1JQMyA6IChHcm91cCAzIHBtX2xzb3VyY2UpIERhdGEgbG9hZGVkIGZyb20gTDIgZHVlIHRvIGEgZGVtYW5kIGxvYWQKLWV2ZW50OjB4MzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfU0hSX0dSUDMgOiAoR3JvdXAgMyBwbV9sc291cmNlKSBEYXRhIHJlbG9hZGVkIHdpdGggc2hhcmVkIChUKSBkYXRhIGZyb20gdGhlIEwyIG9mIGEgY2hpcCBvbiB0aGlzIE1DTSBkdWUgdG8gYSBkZW1hbmQgbG9hZAotZXZlbnQ6MHgzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNzVfU0hSX0dSUDMgOiAoR3JvdXAgMyBwbV9sc291cmNlKSBEYXRhIHJlbG9hZGVkIHdpdGggc2hhcmVkIChUKSBkYXRhIGZyb20gdGhlIGFub3RoZXIgTUNNIGR1ZSB0byBhIGRlbWFuZCBsb2FkCi1ldmVudDoweDM2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI3NV9NT0RfR1JQMyA6IChHcm91cCAzIHBtX2xzb3VyY2UpIERhdGEgcmVsb2FkZWQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIHRoZSBhbm90aGVyIE1DTSBkdWUgdG8gYSBkZW1hbmQgbG9hZAotZXZlbnQ6MHgzNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9NT0RfR1JQMyA6IChHcm91cCAzIHBtX2xzb3VyY2UpIERhdGEgcmVsb2FkZWQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIHRoZSBMMiBvZiBhIGNoaXAgb24gdGhpcyBNQ00gZHVlIHRvIGEgZGVtYW5kIGxvYWQKLQotI0dyb3VwIDQgcG1fbHNvdXJjZTIKLWV2ZW50OjB4NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNCA6IChHcm91cCA0IHBtX2xzb3VyY2UyKSBOdW1iZXIgb2YgRWxpZ2libGUgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkCi1ldmVudDoweDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9EQ0FDSEVfUkVMT0FEX1ZBTElEX0dSUDQgOiAoR3JvdXAgNCBwbV9sc291cmNlMikgVGhlIGRhdGEgc291cmNlIGluZm9ybWF0aW9uIGlzIHZhbGlkCi1ldmVudDoweDQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9sc291cmNlMikgUHJvY2Vzc29yIEN5Y2xlcwotZXZlbnQ6MHg0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDQgOiAoR3JvdXAgNCBwbV9sc291cmNlMikgREwxIHdhcyByZWxvYWRlZCBmcm9tIHRoZSBsb2NhbCBMMiBkdWUgdG8gYSBkZW1hbmQgbG9hZAotZXZlbnQ6MHg0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9TSF9HUlA0IDogKEdyb3VwIDQgcG1fbHNvdXJjZTIpIERhdGEgcmVsb2FkZWQgd2l0aCBzaGFyZWQgKFQpIGRhdGEgZnJvbSB0aGUgTDIgb2YgYSBjaGlwIG9uIHRoaXMgTUNNIGR1ZSB0byBhIGRlbWFuZCBsb2FkCi1ldmVudDoweDQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI3NV9TSFJfR1JQNCA6IChHcm91cCA0IHBtX2xzb3VyY2UyKSBEYXRhIHJlbG9hZGVkIHdpdGggc2hhcmVkIChUKSBkYXRhIGZyb20gdGhlIGFub3RoZXIgTUNNIGR1ZSB0byBhIGRlbWFuZCBsb2FkCi1ldmVudDoweDQ2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI3NV9NT0RfR1JQNCA6IChHcm91cCA0IHBtX2xzb3VyY2UyKSBEYXRhIHJlbG9hZGVkIHdpdGggbW9kaWZpZWQgKE0pIGRhdGEgZnJvbSB0aGUgYW5vdGhlciBNQ00gZHVlIHRvIGEgZGVtYW5kIGxvYWQKLWV2ZW50OjB4NDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfTU9EX0dSUDQgOiAoR3JvdXAgNCBwbV9sc291cmNlMikgRGF0YSByZWxvYWRlZCB3aXRoIG1vZGlmaWVkIChNKSBkYXRhIGZyb20gdGhlIEwyIG9mIGEgY2hpcCBvbiB0aGlzIE1DTSBkdWUgdG8gYSBkZW1hbmQgbG9hZAotCi0jR3JvdXAgNSBwbV9sc291cmNlMwotZXZlbnQ6MHg1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0dSUDUgOiAoR3JvdXAgNSBwbV9sc291cmNlMykgRGF0YSBsb2FkZWQgZnJvbSBMMwotZXZlbnQ6MHg1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX01FTV9HUlA1IDogKEdyb3VwIDUgcG1fbHNvdXJjZTMpIERhdGEgbG9hZGVkIGZyb20gbWVtb3J5Ci1ldmVudDoweDUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X0dSUDUgOiAoR3JvdXAgNSBwbV9sc291cmNlMykgRGF0YSBsb2FkZWQgZnJvbSBMMyBvZiBhbm90aGVyIE1DTQotZXZlbnQ6MHg1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDUgOiAoR3JvdXAgNSBwbV9sc291cmNlMykgRGF0YSBsb2FkZWQgZnJvbSBMMgotZXZlbnQ6MHg1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfRENBQ0hFX1JFTE9BRF9HUlA1IDogKEdyb3VwIDUgcG1fbHNvdXJjZTMpIEwxIHJlbG9hZGVkIGRhdGEgc291cmNlIHZhbGlkCi1ldmVudDoweDU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDUgOiAoR3JvdXAgNSBwbV9sc291cmNlMykgUHJvY2Vzc29yIEN5Y2xlcwotZXZlbnQ6MHg1NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNzVfTU9EX0dSUDUgOiAoR3JvdXAgNSBwbV9sc291cmNlMykgRGF0YSBsb2FkZWQgZnJvbSBMMiBvZiBhbm90aGVyIE1DTQotZXZlbnQ6MHg1NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA1IDogKEdyb3VwIDUgcG1fbHNvdXJjZTMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLQotI0dyb3VwIDYgcG1faXNvdXJjZQotZXZlbnQ6MHg2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX01FTV9HUlA2IDogKEdyb3VwIDYgcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIG1lbW9yeQotZXZlbnQ6MHg2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyNV9MMjc1X0dSUDYgOiAoR3JvdXAgNiBwbV9pc291cmNlKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDIgb2YgYW5vdGhlciBjaGlwCi1ldmVudDoweDYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDJfR1JQNiA6IChHcm91cCA2IHBtX2lzb3VyY2UpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gTDIKLWV2ZW50OjB4NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzVfR1JQNiA6IChHcm91cCA2IHBtX2lzb3VyY2UpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gTDMgb2YgYW5vdGhlciBtb2R1bGUKLWV2ZW50OjB4NjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MM19HUlA2IDogKEdyb3VwIDYgcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBMMwotZXZlbnQ6MHg2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wxX0dSUDYgOiAoR3JvdXAgNiBwbV9pc291cmNlKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIEwxCi1ldmVudDoweDY2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fUFJFRl9HUlA2IDogKEdyb3VwIDYgcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBwcmVmZXRjaAotZXZlbnQ6MHg2NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfRkVUQ0hfR1JQNiA6IChHcm91cCA2IHBtX2lzb3VyY2UpIE5vIGluc3RydWN0aW9ucyBmZXRjaGVkCi0KLSNHcm91cCA3IHBtX2lzb3VyY2UyCi1ldmVudDoweDcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDcgOiAoR3JvdXAgNyBwbV9pc291cmNlKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoweDcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9pc291cmNlKSBQcm9jZXNzb3IgY3ljbGVzCi1ldmVudDoweDcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDJfR1JQNyA6IChHcm91cCA3IHBtX2lzb3VyY2UpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gTDIKLWV2ZW50OjB4NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzVfR1JQNyA6IChHcm91cCA3IHBtX2lzb3VyY2UpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gTDMgb2YgYW5vdGhlciBtb2R1bGUKLWV2ZW50OjB4NzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MM19HUlA3IDogKEdyb3VwIDcgcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBMMwotZXZlbnQ6MHg3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wxX0dSUDcgOiAoR3JvdXAgNyBwbV9pc291cmNlKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIEwxCi1ldmVudDoweDc2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fUFJFRl9HUlA3IDogKEdyb3VwIDcgcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBwcmVmZXRjaAotZXZlbnQ6MHg3NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfRkVUQ0hfR1JQNyA6IChHcm91cCA3IHBtX2lzb3VyY2UpIE5vIGluc3RydWN0aW9ucyBmZXRjaGVkCi0KLSNHcm91cCA4IHBtX2lzb3VyY2UzCi1ldmVudDoweDgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTUVNX0dSUDggOiAoR3JvdXAgOCBwbV9pc291cmNlKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gbWVtb3J5Ci1ldmVudDoweDgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI1X0wyNzVfR1JQOCA6IChHcm91cCA4IHBtX2lzb3VyY2UpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMiBvZiBhbm90aGVyIGNoaXAKLWV2ZW50OjB4ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMl9HUlA4IDogKEdyb3VwIDggcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBMMgotZXZlbnQ6MHg4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzNV9HUlA4IDogKEdyb3VwIDggcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBMMyBvZiBhbm90aGVyIG1vZHVsZQotZXZlbnQ6MHg4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzX0dSUDggOiAoR3JvdXAgOCBwbV9pc291cmNlKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIEwzCi1ldmVudDoweDg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDFfR1JQOCA6IChHcm91cCA4IHBtX2lzb3VyY2UpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gTDEKLWV2ZW50OjB4ODYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2lzb3VyY2UpIFByb2Nlc3NvciBjeWNsZXMKLWV2ZW50OjB4ODcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQOCA6IChHcm91cCA4IHBtX2lzb3VyY2UpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKZGlmZiAtLWdpdCBhL2V2ZW50cy9wcGM2NC9wb3dlcjQvdW5pdF9tYXNrcyBiL2V2ZW50cy9wcGM2NC9wb3dlcjQvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY0M2YwNS4uMDAwMDAwMAotLS0gYS9ldmVudHMvcHBjNjQvcG93ZXI0L3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMgcHBjNjQgUE9XRVI0IHBvc3NpYmxlIHVuaXQgbWFza3MKLSMKLW5hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAotCTB4MCBObyB1bml0IG1hc2sKLQpkaWZmIC0tZ2l0IGEvZXZlbnRzL3BwYzY0L3Bvd2VyNS9ldmVudF9tYXBwaW5ncyBiL2V2ZW50cy9wcGM2NC9wb3dlcjUvZXZlbnRfbWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ODU2ZDIuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL3BwYzY0L3Bvd2VyNS9ldmVudF9tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0jR3JvdXAgRGVmYXVsdAotZXZlbnQ6MHgwMDEgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDQwMDAwMDAwMDIzNDFFMzYgbW1jcmE6MHgwMDAwMDAwMQotCi0jR3JvdXAgOSBMU1UgU1JRIGFuZCBMTVEgZXZlbnRzCi1ldmVudDoweDAxMCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDEwRjAwMEExMDJBQ0EyQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDAxMSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDEwRjAwMEExMDJBQ0EyQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDAxMiBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDEwRjAwMEExMDJBQ0EyQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDAxMyBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDEwRjAwMEExMDJBQ0EyQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDAxNCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDEwRjAwMEExMDJBQ0EyQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDAxNSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDEwRjAwMEExMDJBQ0EyQSBtbWNyYToweDAwMDAwMDAwCi0gICAgICAgICAgICAgCi0jR3JvdXAgMTMgTWlzYyBwcmVmZXRjaCBhbmQgcmVqZWN0IGV2ZW50cwotZXZlbnQ6MHgwMWEgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwMWIgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwMWMgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwMWQgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwMWUgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwMWYgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MHgwMDAwMDAwMAotICAgICAgICAgICAgCi0jR3JvdXAgMTQgTFNVIHJlamVjdCBldmVudHMKLWV2ZW50OjB4MDIwIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHhDMjJDMDAwRTIwMTBDNjEwIG1tY3JhOjB4MDAwMDAwMDEKLWV2ZW50OjB4MDIxIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHhDMjJDMDAwRTIwMTBDNjEwIG1tY3JhOjB4MDAwMDAwMDEKLWV2ZW50OjB4MDIyIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHhDMjJDMDAwRTIwMTBDNjEwIG1tY3JhOjB4MDAwMDAwMDEKLWV2ZW50OjB4MDIzIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHhDMjJDMDAwRTIwMTBDNjEwIG1tY3JhOjB4MDAwMDAwMDEKLWV2ZW50OjB4MDI0IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHhDMjJDMDAwRTIwMTBDNjEwIG1tY3JhOjB4MDAwMDAwMDEKLWV2ZW50OjB4MDI1IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHhDMjJDMDAwRTIwMTBDNjEwIG1tY3JhOjB4MDAwMDAwMDEKLSAgICAgICAgICAgIAotI0dyb3VwIDQzIEwxIGxvYWQgYW5kIFRMQiBtaXNzZXMKLWV2ZW50OjB4MDJiIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhFODgxMDIwIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDJjIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhFODgxMDIwIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDJkIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhFODgxMDIwIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDJlIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhFODgxMDIwIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDJmIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhFODgxMDIwIG1tY3JhOjB4MDAwMDAwMDAKLSAgICAgICAgICAgIAotI0dyb3VwIDQ0IEwxIHN0b3JlIGFuZCBERVJBVCBtaXNzZXMKLWV2ZW50OjB4MDMwIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIzMDAwMDBFMjAyMDg2IG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDMxIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIzMDAwMDBFMjAyMDg2IG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDMzIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIzMDAwMDBFMjAyMDg2IG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDM0IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIzMDAwMDBFMjAyMDg2IG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDM1IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIzMDAwMDBFMjAyMDg2IG1tY3JhOjB4MDAwMDAwMDAKLSAgICAgICAgICAgIAotI0dyb3VwIDQ1IEwxIGxvYWQgYW5kIFNMQiBtaXNzZXMKLWV2ZW50OjB4MDNhIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhBODI4NDhDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDNiIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhBODI4NDhDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDNjIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhBODI4NDhDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDNkIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhBODI4NDhDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDNlIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhBODI4NDhDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDNmIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMEIwMDAwMDhBODI4NDhDIG1tY3JhOjB4MDAwMDAwMDAKLSAgICAgICAgICAgIAotI0dyb3VwIDQ2IEwxIGxvYWQgcmVmZXJlbmNlcyBhbmQgNGsgRGF0YSBUTEIgcmVmZXJlbmNlcyBhbmQgbWlzc2VzCi1ldmVudDoweDA0MCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4NDgwODA4OCBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0MSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4NDgwODA4OCBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0MiBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4NDgwODA4OCBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0MyBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4NDgwODA4OCBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0NCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4NDgwODA4OCBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0NSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4NDgwODA4OCBtbWNyYToweDAwMDAwMDAwCi0gICAgICAgICAgICAKLSNHcm91cCA0NyBMMSBzdG9yZSByZWZlcmVuY2VzIGFuZCAxNk0gRGF0YSBUTEIgcmVmZXJlbmNlcyBhbmQgbWlzc2VzCi1ldmVudDoweDA0YSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4Qzg4ODI4QSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0YiBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4Qzg4ODI4QSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0YyBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4Qzg4ODI4QSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0ZCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4Qzg4ODI4QSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0ZSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4Qzg4ODI4QSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA0ZiBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MEJGMDAwMDA4Qzg4ODI4QSBtbWNyYToweDAwMDAwMDAwCi0gICAgICAgICAgICAKLSNHcm91cCA0OCBMMyBjYWNoZSBhbmQgbWVtb3J5IGRhdGEgYWNjZXNzCi1ldmVudDoweDA1MCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4NDAwMzAwMDAxQzBFOEUwMiBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA1MSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4NDAwMzAwMDAxQzBFOEUwMiBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA1MiBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4NDAwMzAwMDAxQzBFOEUwMiBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA1MyBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4NDAwMzAwMDAxQzBFOEUwMiBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA1NCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4NDAwMzAwMDAxQzBFOEUwMiBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA1NSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4NDAwMzAwMDAxQzBFOEUwMiBtbWNyYToweDAwMDAwMDAwCi0gICAgICAgICAgICAKLSNHcm91cCA0OSBMMyBjYWNhaGUgYW5kIG1lbW9yeSBkYXRhIGFjY2VzcwotZXZlbnQ6MHgwNWEgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMDMwMDAzMUMwRTM2MEUgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwNWIgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMDMwMDAzMUMwRTM2MEUgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwNWMgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMDMwMDAzMUMwRTM2MEUgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwNWQgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMDMwMDAzMUMwRTM2MEUgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwNWUgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMDMwMDAzMUMwRTM2MEUgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwNWYgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDAwMDMwMDAzMUMwRTM2MEUgbW1jcmE6MHgwMDAwMDAwMAotICAgICAgICAgICAgCi0jR3JvdXAgNTAgTDIgY2FjaGUgZGF0YSBhY2Nlc3MKLWV2ZW50OjB4MDYwIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDAzMDAwMzJFMkUyRTJFIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDYxIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDAzMDAwMzJFMkUyRTJFIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDYyIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDAzMDAwMzJFMkUyRTJFIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDYzIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDAzMDAwMzJFMkUyRTJFIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDY0IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDAzMDAwMzJFMkUyRTJFIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDY1IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDAzMDAwMzJFMkUyRTJFIG1tY3JhOjB4MDAwMDAwMDAKLSAgICAgICAgICAgIAotI0dyb3VwIDUxIEwzIGNhY2hlIGRhdGEgYWNjZXNzCi1ldmVudDoweDA2YSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwMzAwMDMzQzNDM0MzQyBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA2YiBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwMzAwMDMzQzNDM0MzQyBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA2YyBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwMzAwMDMzQzNDM0MzQyBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA2ZCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwMzAwMDMzQzNDM0MzQyBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA2ZSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwMzAwMDMzQzNDM0MzQyBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA2ZiBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4MDAwMzAwMDMzQzNDM0MzQyBtbWNyYToweDAwMDAwMDAwCi0gICAgICAgICAgICAKLSNHcm91cCA1MiBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KLWV2ZW50OjB4MDcwIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDcxIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDcyIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDczIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDc0IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjB4MDAwMDAwMDAKLWV2ZW50OjB4MDc1IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjB4MDAwMDAwMDAKLSAgICAgICAgICAgIAotI0dyb3VwIDU0IEwyIGluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgotZXZlbnQ6MHgwN2EgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwN2IgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwN2MgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwN2QgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwN2UgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MHgwMDAwMDAwMAotZXZlbnQ6MHgwN2YgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MHgwMDAwMDAwMAotICAgICAgICAgICAgCi0jR3JvdXAgNTUgTDMgaW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCi1ldmVudDoweDA4MCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4ODAwMDAwMEMzQTNBM0EzQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA4MSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4ODAwMDAwMEMzQTNBM0EzQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA4MiBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4ODAwMDAwMEMzQTNBM0EzQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA4MyBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4ODAwMDAwMEMzQTNBM0EzQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA4NCBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4ODAwMDAwMEMzQTNBM0EzQSBtbWNyYToweDAwMDAwMDAwCi1ldmVudDoweDA4NSBtbWNyMDoweDA0MDBDMDAwIG1tY3IxOjB4ODAwMDAwMEMzQTNBM0EzQSBtbWNyYToweDAwMDAwMDAwCi0gICAgICAgICAgICAKLSNHcm91cCAxMjMgTWFya2VkIFRMQiBhbmQgU0xCIG1pc3NlcwotZXZlbnQ6MHgwOGQgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDBDRjAwMDAwODI4QThDOEUgbW1jcmE6MHgwMDAwMDAwMQotZXZlbnQ6MHgwOGUgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDBDRjAwMDAwODI4QThDOEUgbW1jcmE6MHgwMDAwMDAwMQotZXZlbnQ6MHgwOGYgbW1jcjA6MHgwNDAwQzAwMCBtbWNyMToweDBDRjAwMDAwODI4QThDOEUgbW1jcmE6MHgwMDAwMDAwMQotICAgICAgICAgICAgCi0jR3JvdXAgMTI2IE1hcmsgdW5hbGlnbmVkIGxvYWQgYW5kIHN0b3JlIGZsdXNoZXMKLWV2ZW50OjB4MDkzIG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjB4MDAwMDAwMDEKLWV2ZW50OjB4MDk0IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjB4MDAwMDAwMDEKLWV2ZW50OjB4MDk1IG1tY3IwOjB4MDQwMEMwMDAgbW1jcjE6MHgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjB4MDAwMDAwMDEKZGlmZiAtLWdpdCBhL2V2ZW50cy9wcGM2NC9wb3dlcjUvZXZlbnRzIGIvZXZlbnRzL3BwYzY0L3Bvd2VyNS9ldmVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOGMwMjguLjAwMDAwMDAKLS0tIGEvZXZlbnRzL3BwYzY0L3Bvd2VyNS9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyBwcGM2NCBQT1dFUjUgZXZlbnRzCi0jCi0jICBXaXRoaW4gZWFjaCBncm91cCB0aGUgZXZlbnQgbmFtZXMgbXVzdCBiZSB1bmlxdWUuICBFYWNoIGV2ZW50IGluIGEgZ3JvdXAgaXMKLSMgIGFzc2lnbmVkIHRvIGEgdW5pcXVlIGNvdW50ZXIuICBUaGUgZ3JvdXBzIGFyZSBmcm9tIHRoZSBncm91cHMgZGVmaW5lZCBpbiB0aGUKLSMgIHBvd2VyNS5ldnMgYW5kIHBvd2VyNS5ncHMgZmlsZXMuCi0jCi0jICBPbmx5IGV2ZW50cyB3aXRoaW4gdGhlIHNhbWUgZ3JvdXAgY2FuIGJlIHNlbGVjdGVkIHNpbXVsdGFuZW91c2x5Ci0jICBFYWNoIGV2ZW50IGlzIGdpdmVuIGEgdW5pcXVlIGV2ZW50IG51bWJlci4gIFRoZSBldmVudCBudW1iZXIgaXMgdXNlZCBieSB0aGUKLSMgIE9wcm9maWxlIGNvZGUgdG8gcmVzb2x2ZSBldmVudCBuYW1lcyBmb3IgdGhlIHBvc3Rwcm9jZXNzaW5nLiAgVGhpcyBpcyBkb25lIHRvIAotIyAgcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBPcHJvZmlsZSBjb2RlLiAgVGhlIGV2ZW50Ci0jICBudW1iZXIgZm9ybWF0IGdyb3VwX251bSBmb2xsb3dlZCBieSB0aGUgY291bnRlciBudW1iZXIgZm9yIHRoZSBldmVudCB3aXRoaW4KLSMgIHRoZSBncm91cC4KLSMKLSMgIFRoZSBtYXhpbXVtIGV2ZW50IG51bWJlciBpcyAweDEwMC4gIE9wcm9maWxlIG51bWJlcnMgdGhlIGNvdW50ZXJzIDAtNS4KLQotI0dyb3VwIERlZmF1bHQKLWV2ZW50OjB4MDAxIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6Q1lDTEVTIDogUHJvY2Vzc29yIGN5Y2xlcwotCi0jR3JvdXAgOSBMU1UgU1JRIGFuZCBMTVEgZXZlbnRzCi1ldmVudDoweDAxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dQOSA6IEEgVExCIG1pc3MgZm9yIGEgZGF0YSByZXF1ZXN0IG9jY3VycmVkIAotZXZlbnQ6MHgwMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX1BSRUZfTDJfQ0xPTkVfTDNfR1A5IDogTDIgcHJlZmV0Y2ggY2xvbmVkIHdpdGggTDMKLWV2ZW50OjB4MDEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX0xIUl9NRVJHRV9HUDkgOiBEY2FjaGUgbWlzcyBvY2N1cmVkIGZvciB0aGUgc2FtZSByZWFsIGNhY2hlIGxpbmUgYXMgZWFybGllciByZXEsIG1lcmdlZCBpbnRvIExNUQotZXZlbnQ6MHgwMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfRU1QVFlfQ1lDX0dQOSA6IEN5Y2xlcyBTdG9yZSBSZXEgUXVldWUgZW1wdHkKLWV2ZW50OjB4MDE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dQOSA6IE51bWJlciBvZiBQUEMgaW5zdCBjb21wbGV0ZWQKLWV2ZW50OjB4MDE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUDkgOiBQcm9jIGN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoCi0gCi0jR3JvdXAgMTMgTWlzYyBwcmVmZXRjaCBhbmQgcmVqZWN0IGV2ZW50cwotZXZlbnQ6MHgwMWEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX1NSUV9MSFNfRzEzIDogTFNVMCByZWplY3QgZHVlIHRvIGxvYWQgaGl0IHN0b3JlCi1ldmVudDoweDAxYiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9NT0RfRzEzIDogREwxIHJlbG9hZGVkIHdpdGggbW9kaWZpZWQgZGF0YSBmcm9tIEwyIHdpdGhpbiB0aGlzIE1DTQotZXZlbnQ6MHgwMWMgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX1BSRUZfTDJfQ0xPTkVfTDNfRzEzIDogTDIgcHJlZmV0Y2ggY2xvbmVkIHdpdGggTDMKLWV2ZW50OjB4MDFkIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9QUkVGX0cxMyA6IEwyIGNhY2FoZSBwcmVmZXRjaHMKLWV2ZW50OjB4MDFlIGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0cxMyA6IE51bWJlciBvZiBQUEMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHgwMWYgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0cxMyA6IFByb2Nlc3NvciBjeWNsZXMgZ2F0ZWQgYnkgcnVuIGxhdGNoCi0KLSNHcm91cCAxNCBMU1UgcmVqZWN0IGV2ZW50cwotZXZlbnQ6MHgwMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzVfTU9EX0cxNCA6IERhdGEgbG9hZGVkIGZyb20gbDMuNSBtb2RpZmllZAotZXZlbnQ6MHgwMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VFX09GRl9FWFRfSU5UX0cxNCA6IEN5Y2xlcyBNU1IgKEVFKSBiaXQgb2ZmIGFuZCBleHRlcm5hbCBpbnRlcnVwdCBwZW5kaW5nIAotZXZlbnQ6MHgwMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0lNQkFMX0cxNCA6IEZsdXNoIGNhdXNlZCBieSB0aHJlYWQgR0NUIGltYmFsYW5jZQotZXZlbnQ6MHgwMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRkxVU0hfU1JRX0cxNCA6IE1hcmtlZCBTUlEgZmx1c2hlcwotZXZlbnQ6MHgwMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfRzE0IDogSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHgwMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDTEVTX0cxNCA6IFByb2Nlc3NvciBjeWNsZXMgZ2F0ZWQgYnkgcnVuIGxhdGNoCi0KLSNHcm91cCA0MyBMMSBsb2FkIGFuZCBUTEIgbWlzc2VzCi1ldmVudDoweDAyYiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0c0MyA6IERhdGEgVExCIG1pc3Mgb2NjdXJyZWQKLWV2ZW50OjB4MDJjIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0c0MyA6IEwxIEQgY2FjaGUgbG9hZCBtaXNzCi1ldmVudDoweDAyZCBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0c0MyA6IEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCi1ldmVudDoweDAyZSBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HNDMgOiBQUEMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHgwMmYgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0c0MyA6IFByb2Nlc3NvciBjeWNsZXMgZ2F0ZWQgYnkgcnVuIGxhdGNoCi0KLSNHcm91cCA0NCBMMSBzdG9yZSBhbmQgREVSQVQgbWlzc2VzCi1ldmVudDoweDAzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0c0NCA6IERhdGEgbG9hZGVkIGZyb20gTDIKLWV2ZW50OjB4MDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X0c0NCA6IERhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAotZXZlbnQ6MHgwMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfRzQ0IDogTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKLWV2ZW50OjB4MDM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUE1fSU5TVF9DTVBMX0c0NCA6IFBQQyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoweDAzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfRzQ0IDogUHJvY2Vzc29yIGN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoCi0KLSNncm91cCA0NSBMMSBsb2FkIGFuZCBTTEIgbWlzc2VzCi1ldmVudDoweDAzYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFNMQl9NSVNTX0c0NSA6IERhdGEgU0xCIG1pc3NlcwotZXZlbnQ6MHgwM2IgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lTTEJfTUlTU19HNDUgOiBJbnN0cnVjdGlvbiBTTEIgbWlzc2VzCi1ldmVudDoweDAzYyBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9MU1UwX0c0NSA6IExTVTAgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcwotZXZlbnQ6MHgwM2QgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfTFNVMV9HNDUgOiBMU1UxIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKLWV2ZW50OjB4MDNlIGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0c0NSA6IFBQQyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoweDAzZiBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfRzQ1IDogUHJvY2Vzc29yIGN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoCi0KLSNHcm91cCA0NiBMMSBsb2FkIHJlZmVyZW5jZXMgYW5kIDRrIERhdGEgVExCIHJlZmVyZW5jZXMgYW5kIG1pc3NlcwotZXZlbnQ6MHgwNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfUkVGXzRLX0c0NiA6IERhdGEgVExCIHJlZmVyZW5jZSBmb3IgNEsgcGFnZQotZXZlbnQ6MHgwNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU180S19HNDYgOiBEYXRhIFRMQiBtaXNzIGZvciA0SyBwYWdlCi1ldmVudDoweDA0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0xTVTBfRzQ2IDogTFNVMCBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcwotZXZlbnQ6MHgwNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9MU1UxX0c0NiA6IExTVTEgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKLWV2ZW50OjB4MDQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0c0NiA6IFBQQyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoweDA0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfRzQ2IDogUHJvY2Vzc29yIGN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoCi0KLSNHcm91cCA0NyBMMSBzdG9yZSByZWZlcmVuY2VzIGFuZCAxNk0gRGF0YSBUTEIgcmVmZXJlbmNlcyBhbmQgbWlzc2VzCi1ldmVudDoweDA0YSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9SRUZfRzQ3IDogRGF0YSBUTEIgcmVmZXJlbmNlIGZvciAxNk0gcGFnZQotZXZlbnQ6MHgwNGIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU19HNDcgOiBEYXRhIFRMQiBtaXNzIGZvciAxNk0gcGFnZQotZXZlbnQ6MHgwNGMgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlJTUF9GQ09OVl9HNDcgOiBGUFUwIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCi1ldmVudDoweDA0ZCBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0xTVTFfRzQ3IDogTFNVMSBMMSBEY2FjaGUgc3RvcmUgcmVmZXJlbmNlcwotZXZlbnQ6MHgwNGUgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfRzQ3IDogUFBDIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4MDRmIGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HNDcgOiBQcm9jZXNzb3IgY3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2gKLQotI0dyb3VwIDQ4IEwzIGNhY2hlIGFuZCBtZW1vcnkgZGF0YSBhY2Nlc3MKLWV2ZW50OjB4MDUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfRzQ4IDogRGF0YSBsb2FkZWQgZnJvbSBMMwotZXZlbnQ6MHgwNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0c0OCA6IERhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5Ci1ldmVudDoweDA1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfRzQ4IDogRmx1c2hlcwotZXZlbnQ6MHgwNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VJTlNUX0NNUExfRzQ4IDogRWxpZ2libGUgaW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkCi1ldmVudDoweDA1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HNDggOiBQUEMgaW5zdHJ1Y3RpaW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4MDU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HNDggOiBQcm9jZXNzb3IgY3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2gKLQotI0dyb3VwIDQ5IEwzIGNhY2FoZSBhbmQgbWVtb3J5IGRhdGEgYWNjZXNzCi1ldmVudDoweDA1YSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0c0OSA6IERhdGEgbG9hZGVkIGZyb20gTDMKLWV2ZW50OjB4MDViIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTE1FTV9HNDkgOiBEYXRhIGxvYWRlZCBmcm9tIE1lbW9yeQotZXZlbnQ6MHgwNWMgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VJTlNUX0NNUExfRzQ5IDogRWxpZ2libGUgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHgwNWQgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9STUVNX0c0OSA6IERhdGEgbG9hZGVkIGZyb20gcmVtb3RlIG1lbW9yeQotZXZlbnQ6MHgwNWUgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfRzQ5IDogUFBDIGluc3RydWN0aW9ucyBjb21wbGVkCi1ldmVudDoweDA1ZiBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfRzQ5IDogUHJvY2Vzc29yIGN5Y2xlcyBnYXRlZCBieSBydW4gbGF0Y2gKLQotI0dyb3VwIDUwIEwyIGNhY2hlIGRhdGEgYWNjZXNzCi1ldmVudDoweDA2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9TSFJfRzUwIDogRGF0YSBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAotZXZlbnQ6MHgwNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfTU9EX0c1MCA6IERhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAotZXZlbnQ6MHgwNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjc1X1NIUl9HNTAgOiBEYXRhIGxvYWRlZCBmcm9tIEwyLjc1IHNoYXJlZAotZXZlbnQ6MHgwNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjc1X01PRF9HNTAgOiBEYXRhIGxvYWRlZCBmcm9tIEwyLjc1IG1vZGlmaWVkCi1ldmVudDoweDA2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HNTAgOiBQUEMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHgwNjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0c1MCA6IFByb2Nlc3NvciBjeWNsZXMgZ2F0ZWQgYnkgcnVuIGxhdGNoCi0KLSNHcm91cCA1MSBMMyBjYWNoZSBkYXRhIGFjY2VzcwotZXZlbnQ6MHgwNmEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzVfU0hSX0c1MSA6IERhdGEgbG9hZGVkIGZyb20gTDMuNSBzaGFyZWQKLWV2ZW50OjB4MDZiIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X01PRF9HNTEgOiBEYXRhIGxvYWRlZCBmcm9tIEwzLjUgbW9kaWZpZWQKLWV2ZW50OjB4MDZjIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM3NV9TSFJfRzUxIDogRGF0YSBsb2FkZWQgZnJvbSBMMy43NSBzaGFyZWQKLWV2ZW50OjB4MDZkIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM3NV9NT0RfRzUxIDogRGF0YSBsb2FkZWQgZnJvbSBMMy43NSBtb2RpZmllZAotZXZlbnQ6MHgwNmUgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfRzUxIDogUFBDIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4MDZmIGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HNTEgOiBQcm9jZXNzb3IgY3ljbGVzIGdhdGVkIGJ5IHJ1biBsYXRjaAotCi0jR3JvdXAgNTIgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCi1ldmVudDoweDA3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzX0c1MiA6IEluc3RydWN0aW9uIGZldHJjaGVkIGZyb20gTDMKLWV2ZW50OjB4MDcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDFfRzUyIDogSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwxCi1ldmVudDoweDA3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX1BSRUZfRzUyIDogSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBwcmVmZXRjaAotZXZlbnQ6MHgwNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9STUVNX0c1MiA6IEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSByZW1vdGUgbWVtb3J5Ci1ldmVudDoweDA3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HNTIgOiBQUEMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAotZXZlbnQ6MHgwNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0c1MiA6IFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaAotCi0jR3JvdXAgNTQgTDIgaW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCi1ldmVudDoweDA3YSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyNV9TSFJfRzU0IDogSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwyLjUgc2hhcmVkCi1ldmVudDoweDA3YiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyNV9NT0RfRzU0IDogSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwyLjUgbW9kaWZpZWQKLWV2ZW50OjB4MDdjIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI3NV9TSFJfRzU0IDogSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwyLjc1IHNoYXJlZAotZXZlbnQ6MHgwN2QgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjc1X01PRF9HNTQgOiBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDIuNzUgbW9kaWZpZWQKLWV2ZW50OjB4MDdlIGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0c1NCA6IFBQQyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoweDA3ZiBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfRzU0IDogUHJvY2Vzc29yIGN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoCi0KLSNHcm91cCA1NSBMMyBpbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KLWV2ZW50OjB4MDgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDM1X1NIUl9HNTUgOiBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMuNSBzaGFyZWQKLWV2ZW50OjB4MDgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDM1X01PRF9HNTUgOiBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMuNSBtb2RpZmllZAotZXZlbnQ6MHgwODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzc1X1NIUl9HNTUgOiBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMuNzUgc2hhcmVkCi1ldmVudDoweDA4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzNzVfTU9EX0c1NSA6IEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMy43NSBtb2RpZmllZAotZXZlbnQ6MHgwODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfRzU1IDogUFBDIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4MDg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HNTUgOiBQcm9jZXNzb3IgY3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2gKLQotI0dyb3VwIDEyMyBNYXJrZWQgVExCIGFuZCBTTEIgTWlzc2VzCi1ldmVudDoweDA4ZCBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RTTEJfTUlTU19HMTIzIDogTWFya2VkIERhdGEgU0xCIG1pc3NlcwotZXZlbnQ6MHgwOGUgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfRzEyMyA6IEluc3RydWN0aW9ucyBjb21wbGV0ZWQKLWV2ZW50OjB4MDhmIGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HMTIzIDogUHJvY2Vzc29yIGN5Y2xlcyBnYXRlZCBieSBydW4gbGF0Y2gKLQotI0dyb3VwIDEyNiBNYXJrIHVuYWxpZ25lZCBsb2FkIGFuZCBzdG9yZSBmbHVzaGVzCi1ldmVudDoweDA5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GTFVTSF9VTERfRzEyNiA6IEEgbWFya2VkIGxvYWQgd2FzIGZsdXNoZWQgYmVjYXVzZSBpdCB3YXMgdW5hbGlnbmVkIChjcm9zc2VkIGEgNjRieXRlIGJvdW5kYXJ5IG9yIDMyIGJ5dGUgaWYgaXQgbWlzc2VkIHRoZSBMMSkKLWV2ZW50OjB4MDk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0cxMjYgOiBJbnN0cnVjdGlvbnMgY29tcGxldGVkCi1ldmVudDoweDA5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfRzEyNiA6IFByb2Nlc3NvciBjeWNsZXMgZ2F0ZWQgYnkgcnVuIGxhdGNoCmRpZmYgLS1naXQgYS9ldmVudHMvcHBjNjQvcG93ZXI1L3VuaXRfbWFza3MgYi9ldmVudHMvcHBjNjQvcG93ZXI1L3VuaXRfbWFza3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZTVmMzAuLjAwMDAwMDAKLS0tIGEvZXZlbnRzL3BwYzY0L3Bvd2VyNS91bml0X21hc2tzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jIHBwYzY0IFBPV0VSNSBwb3NzaWJsZSB1bml0IG1hc2tzCi0jCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9ldmVudHMvcnRjL2V2ZW50cyBiL2V2ZW50cy9ydGMvZXZlbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2U0NGIwLi4wMDAwMDAwCi0tLSBhL2V2ZW50cy9ydGMvZXZlbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIFJUQyBldmVudHMKLSMKLW5hbWU6UlRDX0lOVEVSUlVQVFMgZXZlbnQ6MHhmZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToyIDogUlRDIGludGVycnVwdHMvc2VjIChyb3VuZGVkIHVwIHRvIHBvd2VyIG9mIHR3bykKZGlmZiAtLWdpdCBhL2V2ZW50cy9ydGMvdW5pdF9tYXNrcyBiL2V2ZW50cy9ydGMvdW5pdF9tYXNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4NGI2Mi4uMDAwMDAwMAotLS0gYS9ldmVudHMvcnRjL3VuaXRfbWFza3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgUlRDIHBvc3NpYmxlIHVuaXQgbWFza3MKLSMKLW5hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAotCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL2V2ZW50cy94ODYtNjQvaGFtbWVyL2V2ZW50cyBiL2V2ZW50cy94ODYtNjQvaGFtbWVyL2V2ZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2ZGFkMS4uMDAwMDAwMAotLS0gYS9ldmVudHMveDg2LTY0L2hhbW1lci9ldmVudHMKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0jIEhhbW1lciBldmVudHMKLSMKLWV2ZW50OjB4NzYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDeWNsZXMgb3V0c2lkZSBvZiBoYWx0IHN0YXRlCi1ldmVudDoweGMwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpSRVRJUkVEX0lOU05TIDogUmV0aXJlZCBpbnN0cnVjdGlvbnMgKGluY2x1ZGVzIGV4Y2VwdGlvbnMsIGludGVycnVwdHMsIHJlLXN5bmNzKQotZXZlbnQ6MHhjMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX09QUyA6IFJldGlyZWQgb3BzCi1ldmVudDoweDgwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9GRVRDSEVTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgZmV0Y2hlcwotZXZlbnQ6MHg4MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCi1ldmVudDoweDQwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfQUNDRVNTRVMgOiBEYXRhIGNhY2hlIGFjY2Vzc2VzCi1ldmVudDoweDQxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfTUlTU0VTIDogRGF0YSBjYWNoZSBtaXNzZXMKLWV2ZW50OjB4NDIgY291bnRlcnM6MCwxLDIsMyB1bTptb2VzaSBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfUkVGSUxMU19GUk9NX0wyIDogRGF0YSBjYWNoZSByZWZpbGxzIGZyb20gTDIKLWV2ZW50OjB4NDMgY291bnRlcnM6MCwxLDIsMyB1bTptb2VzaSBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfUkVGSUxMU19GUk9NX1NZU1RFTSA6IERhdGEgY2FjaGUgcmVmaWxscyBmcm9tIHN5c3RlbQotZXZlbnQ6MHg0NCBjb3VudGVyczowLDEsMiwzIHVtOm1vZXNpIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9XUklURUJBQ0tTIDogRGF0YSBjYWNoZSB3cml0ZSBiYWNrcwotZXZlbnQ6MHhjMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0JSQU5DSEVTIDogUmV0aXJlZCBicmFuY2hlcyAoY29uZGl0aW9uYWwsIHVuY29uZGl0aW9uYWwsIGV4Y2VwdGlvbnMsIGludGVycnVwdHMpCi1ldmVudDoweGMzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfQlJBTkNIRVNfTUlTUFJFRElDVEVEIDogUmV0aXJlZCBicmFuY2hlcyBtaXNwcmVkaWN0ZWQKLWV2ZW50OjB4YzQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9UQUtFTl9CUkFOQ0hFUyA6IFJldGlyZWQgdGFrZW4gYnJhbmNoZXMKLWV2ZW50OjB4YzUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9UQUtFTl9CUkFOQ0hFU19NSVNQUkVESUNURUQgOiBSZXRpcmVkIHRha2VuIGJyYW5jaGVzIG1pc3ByZWRpY3RlZAotZXZlbnQ6MHg0NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9EVExCX01JU1NFU19MMl9EVExCX0hJVFMgOiBMMSBEVExCIG1pc3NlcyBhbmQgTDIgRFRMQiBoaXRzCi1ldmVudDoweDQ2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxX0FORF9MMl9EVExCX01JU1NFUyA6IEwxIGFuZCBMMiBEVExCIG1pc3NlcwotZXZlbnQ6MHg0NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTkVEX0RBVEFfUkVGUyA6IE1pc2FsaWduZWQgZGF0YSByZWZlcmVuY2VzCi1ldmVudDoweDg0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxX0lUTEJfTUlTU0VTX0wyX0lUTEJfSElUUyA6IEwxIElUTEIgbWlzc2VzIChhbmQgTDIgSVRMQiBoaXRzKQotZXZlbnQ6MHg4NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9BTkRfTDJfSVRMQl9NSVNTRVMgOiBMMSBhbmQgTDIgSVRMQiBtaXNzZXMKLWV2ZW50OjB4YzYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9GQVJfQ09OVFJPTF9UUkFOU0ZFUlMgOiBSZXRpcmVkIGZhciBjb250cm9sIHRyYW5zZmVycwotZXZlbnQ6MHhjNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1JFU1lOQ19CUkFOQ0hFUyA6IFJldGlyZWQgcmUtc3luYyBicmFuY2hlcyAob25seSBub24tY29udHJvbCB0cmFuc2ZlciBicmFuY2hlcykKLWV2ZW50OjB4Y2QgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJSVVBUU19NQVNLRUQgOiBJbnRlcnJ1cHRzIG1hc2tlZCBjeWNsZXMgKElGPTApCi1ldmVudDoweGNlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFNfTUFTS0VEX1BFTkRJTkcgOiBJbnRlcnJ1cHRzIG1hc2tlZCB3aGlsZSBwZW5kaW5nIGN5Y2xlcyAoSU5UUiB3aGlsZSBJRj0wKQotZXZlbnQ6MHhjZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bToxMCBuYW1lOkhBUkRXQVJFX0lOVEVSUlVQVFMgOiBOdW1iZXIgb2YgdGFrZW4gaGFyZHdhcmUgaW50ZXJydXB0cwotZXZlbnQ6MHgwMCBjb3VudGVyczowLDEsMiwzIHVtOmZwdV9vcHMgbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSEVEX0ZQVV9PUFMgOiBEaXNwYXRjaGVkIEZQVSBvcHMKLWV2ZW50OjB4MDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Tk9fRlBVX09QUyA6IEN5Y2xlcyB3aXRoIG5vIEZQVSBvcHMgcmV0aXJlZAotZXZlbnQ6MHgwMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGQVNUX0ZQVV9PUFMgOiBEaXNwYXRjaGVkIEZQVSBvcHMgdGhhdCB1c2UgdGhlIGZhc3QgZmxhZyBpbnRlcmZhY2UKLWV2ZW50OjB4MjAgY291bnRlcnM6MCwxLDIsMyB1bTpzZWdyZWdsb2FkIG1pbmltdW06NTAwIG5hbWU6U0VHX1JFR19MT0FEIDogU2VnbWVudCByZWdpc3RlciBsb2FkCi1ldmVudDoweDIxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFTEZfTU9ESUZZX1JFU1lOQyA6IE1pY3JvLWFyY2hpdGVjdHVyYWwgcmUtc3luYyBjYXVzZWQgYnkgc2VsZiBtb2RpZnlpbmcgY29kZQotZXZlbnQ6MHgyMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTTk9PUF9SRVNZTkMgOiBNaWNyby1hcmNoaXRlY3R1cmFsIHJlLXN5bmMgY2F1c2VkIGJ5IHNub29wCi1ldmVudDoweDIzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxTX0JVRkZFUl9GVUxMIDogTFMgQnVmZmVyIDIgRnVsbAotZXZlbnQ6MHgyNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0NLRURfT1AgOiBMb2NrZWQgb3BlcmF0aW9uCi1ldmVudDoweDI1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk9QX0xBVEVfQ0FOQ0VMIDogTWljcm8tYXJjaGl0ZWN0dXJhbCBsYXRlIGNhbmNlbCBvZiBhbiBvcGVyYXRpb24KLWV2ZW50OjB4MjYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0ZMVVNIX1JFVElSRUQgOiBSZXRpcmVkIENGTFVTSCBpbnN0cnVjdGlvbnMKLWV2ZW50OjB4MjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1BVSURfUkVUSVJFRCA6IFJldGlyZWQgQ1BVSUQgaW5zdHJ1Y3Rpb25zCi1ldmVudDoweDQ4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFDQ0VTU19DQU5DRUxfTEFURSA6IE1pY3JvLWFyY2hpdGVjdHVyYWwgbGF0ZSBjYW5jZWwgb2YgYW4gYWNjZXNzCi1ldmVudDoweDQ5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFDQ0VTU19DQU5DRUxfRUFSTFkgOiBNaWNyby1hcmNoaXRlY3R1cmFsIGVhcmx5IGNhbmNlbCBvZiBhbiBhY2Nlc3MKLWV2ZW50OjB4NEEgY291bnRlcnM6MCwxLDIsMyB1bTplY2MgbWluaW11bTo1MDAgbmFtZTpFQ0NfQklUX0VSUiA6IE9uZSBiaXQgRUNDIGVycm9yIHJlY29yZGVkIGJ5IHNjcnViYmVyCi1ldmVudDoweDRCIGNvdW50ZXJzOjAsMSwyLDMgdW06cHJlZmV0Y2ggbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSEVEX1BSRV9JTlNUUlMgOiBEaXNwYXRjaGVkIHByZWZldGNoIGluc3RydWN0aW9ucwotZXZlbnQ6MHg3RCBjb3VudGVyczowLDEsMiwzIHVtOmwyX2ludGVybmFsIG1pbmltdW06NTAwIG5hbWU6QlVfSU5UX0wyX1JFUSA6IEludGVybmFsIEwyIHJlcXVlc3QKLWV2ZW50OjB4N0UgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9yZXFfbWlzcyBtaW5pbXVtOjUwMCBuYW1lOkJVX0ZJTExfUkVRIDogRmlsbCByZXF1ZXN0IHRoYXQgbWlzc2VkIGluIEwyCi1ldmVudDoweDdGIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfZmlsbCBtaW5pbXVtOjUwMCBuYW1lOkJVX0ZJTExfTDIgOiBGaWxsIGludG8gTDIKLWV2ZW50OjB4ODIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNfUkVGSUxMX0ZST01fTDIgOiBSZWZpbGwgZnJvbSBMMgotZXZlbnQ6MHg4MyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ19SRUZJTExfRlJPTV9TWVMgOiBSZWZpbGwgZnJvbSBzeXN0ZW0KLWV2ZW50OjB4ODYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNfUkVTWU5DX0JZX1NOT09QIDogTWljcm8tYXJjaGl0ZWN0dXJhbCByZS1zeW5jIGNhdXNlZCBieSBzbm9vcAotZXZlbnQ6MHg4OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ19TVEFDS19ISVQgOiBSZXR1cm4gc3RhY2sgaGl0Ci1ldmVudDoweDg3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDX0ZFVENIX1NUQUxMIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggc3RhbGwKLWV2ZW50OjB4ODkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNfU1RBQ0tfT1ZFUkZMT1cgOiBSZXR1cm4gc3RhY2sgb3ZlcmZsb3cKLWV2ZW50OjB4QzggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9ORUFSX1JFVFVSTlMgOiBSZXRpcmVkIG5lYXIgcmV0dXJucwotZXZlbnQ6MHhjOSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1JFVFVSTlNfTUlTUFJFRElDVCA6IFJldGlyZWQgbmVhciByZXR1cm5zIG1pc3ByZWRpY3RlZAotZXZlbnQ6MHhjYSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0JSQU5DSF9NSVNDT01QQVJFIDogUmV0dXJuZWQgdGFrZW4gYnJhbmNoZXMgbWlzcHJlZGljdGVkIGR1ZSB0byBhZGRyZXNzIG1pc2NvbXBhcmUKLWV2ZW50OjB4Y2IgY291bnRlcnM6MCwxLDIsMyB1bTpmcHVfaW5zdHIgbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0ZQVV9JTlNUUlMgOiBSZXRpcmVkIEZQVSBpbnN0cnVjdGlvbnMKLWV2ZW50OjB4Y2MgY291bnRlcnM6MCwxLDIsMyB1bTpmcHVfZmFzdHBhdGggbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0ZBU1RQQVRIX0lOU1RSUyA6IFJldGlyZWQgRmFzdFBhdGggZG91YmxlLW9wIGluc3RydWN0aW9ucwotZXZlbnQ6MHhkMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERUNPREVSX0VNUFRZIDogTm90aGluZyB0byBkaXNwYXRjaCAoZGVjb2RlciBlbXB0eSkKLWV2ZW50OjB4ZDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExTIDogRGlzcGF0Y2ggc3RhbGxzCi1ldmVudDoweGQyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZST01fQlJBTkNIX0FCT1JUIDogRGlzcGF0Y2ggc3RhbGwgZnJvbSBicmFuY2ggYWJvcnQgdG8gcmV0aXJlCi1ldmVudDoweGQzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX1NFUklBTElaQVRJT04gOiBEaXNwYXRjaCBzdGFsbCBmb3Igc2VyaWFsaXphdGlvbgotZXZlbnQ6MHhkNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9TRUdfTE9BRCA6IERpc3BhdGNoIHN0YWxsIGZvciBzZWdtZW50IGxvYWQKLWV2ZW50OjB4ZDUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfUkVPUkRFUl9CVUZGRVIgOiBEaXNwYXRjaCBzdGFsbCB3aGVuIHJlb3JkZXIgYnVmZmVyIGlzIGZ1bGwKLWV2ZW50OjB4ZDYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfUkVTRVJWRV9TVEFUSU9OUyA6IERpc3BhdGNoIHN0YWxsIHdoZW4gcmVzZXJ2YXRpb24gc3RhdGlvbnMgYXJlIGZ1bGwKLWV2ZW50OjB4ZDcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRlBVIDogRGlzcGF0Y2ggc3RhbGwgd2hlbiBGUFUgaXMgZnVsbAotZXZlbnQ6MHhkOCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9MUyA6IERpc3BhdGNoIHN0YWxsIHdoZW4gTFMgaXMgZnVsbAotZXZlbnQ6MHhkOSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9RVUlFVF9XQUlUIDogRGlzcGF0Y2ggc3RhbGwgd2hlbiB3YWl0aW5nIGZvciBhbGwgdG8gYmUgcXVpZXQKLWV2ZW50OjB4ZGEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfUEVORElORyA6IERpc3BhdGNoIHN0YWxsIHdoZW4gZmFyIGNvbnRyb2wgdHJhbnNmZXIgb3IgcmUtc3luYyBicmFuY2ggaXMgcGVuZGluZwotZXZlbnQ6MHhkYiBjb3VudGVyczowLDEsMiwzIHVtOmZwdV9leGNlcHRpb25zIG1pbmltdW06MSBuYW1lOkZQVV9FWENFUFRJT05TIDogRlBVIGV4Y2VwdGlvbnMKLWV2ZW50OjB4ZGMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MSBuYW1lOkRSMF9CUkVBS1BPSU5UUyA6IE51bWJlciBvZiBicmVha3BvaW50cyBmb3IgRFIwCi1ldmVudDoweGRkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjEgbmFtZTpEUjFfQlJFQUtQT0lOVFMgOiBOdW1iZXIgb2YgYnJlYWtwb2ludHMgZm9yIERSMQotZXZlbnQ6MHhkZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bToxIG5hbWU6RFIyX0JSRUFLUE9JTlRTIDogTnVtYmVyIG9mIGJyZWFrcG9pbnRzIGZvciBEUjIKLWV2ZW50OjB4ZGYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MSBuYW1lOkRSM19CUkVBS1BPSU5UUyA6IE51bWJlciBvZiBicmVha3BvaW50cyBmb3IgRFIzCi1ldmVudDoweGUwIGNvdW50ZXJzOjAsMSwyLDMgdW06cGFnZV9hY2Nlc3MgbWluaW11bTo1MDAgbmFtZTpNRU1fUEFHRV9BQ0NFU1MgOiBNZW1vcnkgY29udHJvbGxlciBwYWdlIGFjY2VzcwotZXZlbnQ6MHhlMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNRU1fUEFHRV9UQkxfT1ZFUkZMT1cgOiBNZW1vcnkgY29udHJvbGxlciBwYWdlIHRhYmxlIG92ZXJmbG93Ci1ldmVudDoweGUyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRSQU1fU0xPVFNfTUlTU0VEIDogTWVtb3J5IGNvbnRyb2xsZXIgRFJBTSBjb21tYW5kIHNsb3RzIG1pc3NlZCAoaW4gTWVtQ2xrcykKLWV2ZW50OjB4ZTMgY291bnRlcnM6MCwxLDIsMyB1bTp0dXJuYXJvdW5kIG1pbmltdW06NTAwIG5hbWU6TUVNX1RVUk5BUk9VTkQgOiBNZW1vcnkgY29udHJvbGxlciB0dXJuYXJvdW5kCi1ldmVudDoweGU0IGNvdW50ZXJzOjAsMSwyLDMgdW06c2F0dXJhdGlvbiBtaW5pbXVtOjUwMCBuYW1lOk1FTV9CWVBBU1NfU0FUIDogTWVtb3J5IGNvbnRyb2xsZXIgYnlwYXNzIHNhdHVyYXRpb24KLWV2ZW50OjB4ZWIgY291bnRlcnM6MCwxLDIsMyB1bTpzaXplY21kcyBtaW5pbXVtOjUwMCBuYW1lOlNJWkVEX0NPTU1BTkRTIDogU2l6ZWQgQ29tbWFuZHMKLWV2ZW50OjB4ZWMgY291bnRlcnM6MCwxLDIsMyB1bTpwcm9iZSBtaW5pbXVtOjUwMCBuYW1lOlBST0JFX1JFU1VMVCA6IFByb2JlIFJlc3VsdAotZXZlbnQ6MHhmNiBjb3VudGVyczowLDEsMiwzIHVtOmh0IG1pbmltdW06NTAwIG5hbWU6SFlQRVJUUkFOU1BPUlRfQlVTMF9XSURUSCA6IEh5cGVyVHJhbnNwb3J0KHRtKSBidXMgMCBiYW5kd2lkdGgKLWV2ZW50OjB4ZjcgY291bnRlcnM6MCwxLDIsMyB1bTpodCBtaW5pbXVtOjUwMCBuYW1lOkhZUEVSVFJBTlNQT1JUX0JVUzFfV0lEVEggOiBIeXBlclRyYW5zcG9ydCh0bSkgYnVzIDEgYmFuZHdpZHRoCi1ldmVudDoweGY4IGNvdW50ZXJzOjAsMSwyLDMgdW06aHQgbWluaW11bTo1MDAgbmFtZTpIWVBFUlRSQU5TUE9SVF9CVVMyX1dJRFRIIDogSHlwZXJUcmFuc3BvcnQodG0pIGJ1cyAyIGJhbmR3aWR0aApkaWZmIC0tZ2l0IGEvZXZlbnRzL3g4Ni02NC9oYW1tZXIvdW5pdF9tYXNrcyBiL2V2ZW50cy94ODYtNjQvaGFtbWVyL3VuaXRfbWFza3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MTc1YTguLjAwMDAwMDAKLS0tIGEvZXZlbnRzL3g4Ni02NC9oYW1tZXIvdW5pdF9tYXNrcworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLSMgQXRobG9uIHBvc3NpYmxlIHVuaXQgbWFza3MKLSMKLSMgU2VlICJCaW9zIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIHRoZSBBTUQgQXRobG9uIDY0IGFuZCBBTUQgT3B0ZXJvbgotIyBQcm9jZXNzb3JzIiAocHVibGljYXRpb24gIzI2MDk0KQotIwotCi1uYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKLQkweDAgTm8gdW5pdCBtYXNrCi1uYW1lOm1vZXNpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKLQkweDEwIChNKW9kaWZpZWQgY2FjaGUgc3RhdGUKLQkweDA4IChPKXduZXIgY2FjaGUgc3RhdGUKLQkweDA0IChFKXhjbHVzaXZlIGNhY2hlIHN0YXRlCi0JMHgwMiAoUyloYXJlZCBjYWNoZSBzdGF0ZQotCTB4MDEgKEkpbnZhbGlkIGNhY2hlIHN0YXRlCi0JMHgxZiBBbGwgY2FjaGUgc3RhdGVzCi1uYW1lOmZwdV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZgotCTB4MDEgQWRkIHBpcGUgb3BzIGV4Y2x1ZGluZyBqdW5rIG9wcwotCTB4MDIgTXVsdGlwbHkgcGlwZSBvcHMgZXhjbHVkaW5nIGp1bmsgb3BzCi0JMHgwNCBTdG9yZSBwaXBlIG9wcyBleGNsdWRpbmcganVuayBvcHMKLQkweDA4IEFkZCBwaXBlIGp1bmsgb3BzCi0jIEZJWE1FOiBjb3JyZWN0ID8KLQkweDEwIE11bHRpcGxlIHBpcGUganVuayBvcHMKLQkweDIwIFN0b3JlIHBpcGUganVuayBvcHMKLW5hbWU6c2VncmVnbG9hZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDdmCi0JMHgwMSBFUyByZWdpc3RlcgotCTB4MDIgQ1MgcmVnaXN0ZXIKLQkweDA0IFNTIHJlZ2lzdGVyCi0JMHgwOCBEUyByZWdpc3RlcgotCTB4MTAgRlMgcmVnaXN0ZXIKLQkweDIwIEdTIHJlZ2lzdGVyCi0JMHg0MCBIUyByZWdpc3RlcgotbmFtZTplY2MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMwotCTB4MDEgU2NydWJiZXIgZXJyb3IKLQkweDAyIFBpZ2d5YmFjayBzY3J1YmJlciBlcnJvcnMKLW5hbWU6cHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNwotCTB4MDEgTG9hZAotCTB4MDIgU3RvcmUKLQkweDA0IE5UQQotbmFtZTpmcHVfaW5zdHIgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgotCTB4MDEgeDg3IGluc3RydWN0aW9ucwotCTB4MDIgQ29tYmluZWQgTU1YICYgM0ROb3cgaW5zdHJ1Y3Rpb25zCi0JMHgwNCBDb21iaW5lZCBwYWNrZWQgU1NFICYgU1NFMiBpbnN0cnVjdGlvbnMKLQkweDA4IENvbWJpbmVkIHBhY2tlZCBzY2FsYXIgU1NFICYgU1NFMiBpbnN0cnVjdGlvbnMKLW5hbWU6ZnB1X2Zhc3RwYXRoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKLQkweDAxIFdpdGggbG93IG9wIGluIHBvc2l0aW9uIDAKLQkweDAyIFdpdGggbG93IG9wIGluIHBvc2l0aW9uIDEKLQkweDA0IFdpdGggbG93IG9wIGluIHBvc2l0aW9uIDIKLW5hbWU6ZnB1X2V4Y2VwdGlvbnMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgotCTB4MDEgeDg3IHJlY2xhc3MgbWljcm9mYXVsdHMKLQkweDAyIFNTRSByZXR5cGUgbWljcm9mYXVsdHMKLQkweDA0IFNTRSByZWNsYXNzIG1pY3JvZmF1bHRzCi0JMHgwOCBTU0UgYW5kIHg4NyBtaWNyb3RyYXBzCi1uYW1lOnBhZ2VfYWNjZXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKLQkweDAxIFBhZ2UgaGl0Ci0JMHgwMiBQYWdlIG1pc3MKLQkweDA0IFBhZ2UgY29uZmxpY3QKLW5hbWU6dHVybmFyb3VuZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3Ci0JMHgwMSBESU1NIHR1cm5hcm91bmQKLQkweDAyIFJlYWQgdG8gd3JpdGUgdHVybmFyb3VuZAotCTB4MDQgV3JpdGUgdG8gcmVhZCB0dXJuYXJvdW5kCi1uYW1lOnNhdHVyYXRpb24gdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgotCTB4MDEgTWVtb3J5IGNvbnRyb2xsZXIgaGlnaCBwcmlvcml0eSBieXBhc3MKLQkweDAyIE1lbW9yeSBjb250cm9sbGVyIGxvdyBwcmlvcml0eSBieXBhc3MKLQkweDA0IERSQU0gY29udHJvbGxlciBpbnRlcmZhY2UgYnlwYXNzCi0JMHgwOCBEUkFNIGNvbnRyb2xsZXIgcXVldWUgYnlwYXNzCi1uYW1lOnNpemVjbWRzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4N2YKLSMgRklYTUU6IGNhbiB3ZSBnZXQgc29tZSBub24tZ29iYmxlZGVnb29rID8KLQkweDAxIE5vblBvc3RXclN6Qnl0ZQotCTB4MDIgTm9uUG9zdFdyU3pEV29yZAotCTB4MDQgUG9zdFdyU3pCeXRlCi0JMHgwOCBQb3N0V3JTekRXb3JkCi0JMHgxMCBSZFN6Qnl0ZQotCTB4MjAgUmRTekR3b3JkCi0JMHg0MCBSZE1vZFdyCi1uYW1lOnByb2JlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKLQkweDAxIFByb2JlIG1pc3MKLQkweDAyIFByb2JlIGhpdAotCTB4MDQgUHJvYmUgaGl0IGRpcnR5IHdpdGhvdXQgbWVtb3J5IGNhbmNlbAotCTB4MDggUHJvYmUgaGl0IGRpcnR5IHdpdGggbWVtb3J5IGNhbmNlbAotbmFtZTpodCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDcKLQkweDAxIENvbW1hbmQgc2VudAotCTB4MDIgRGF0YSBzZW50Ci0JMHgwNCBCdWZmZXIgcmVsZWFzZSBzZW50Ci0JMHgwOCBOT1Agc2VudAotbmFtZTpsMl9pbnRlcm5hbCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCi0JMHgwMSBJQyBmaWxsCi0JMHgwMiBEQyBmaWxsCi0JMHgwNCBUTEIgcmVsb2FkCi0JMHgwOCBUYWcgc25vb3AgcmVxdWVzdAotCTB4MTAgQ2FuY2VsZWQgcmVxdWVzdAotbmFtZTpsMl9yZXFfbWlzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3Ci0JMHgwMSBJQyBmaWxsCi0JMHgwMiBEQyBmaWxsCi0JMHgwNCBUTEIgcmVsb2FkCi1uYW1lOmwyX2ZpbGwgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMwotCTB4MDEgRGlydHkgTDIgdmljdGltCi0JMHgwMiBWaWN0aW0gZnJvbSBMMQpkaWZmIC0tZ2l0IGEvZ3VpL01ha2VmaWxlLmFtIGIvZ3VpL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTVlMjdjLi4wMDAwMDAwCi0tLSBhL2d1aS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLVNVQkRJUlMgPSB1aQotCi1kaXN0X3NvdXJjZXMgPSBcCi0Jb3Byb2Zfc3RhcnQuY3BwIFwKLQlvcHJvZl9zdGFydF9jb25maWcuY3BwIFwKLQlvcHJvZl9zdGFydF91dGlsLmNwcCBcCi0Jb3Byb2Zfc3RhcnRfbWFpbi5jcHAgXAotCW9wcm9mX3N0YXJ0LmggXAotCW9wcm9mX3N0YXJ0X2NvbmZpZy5oIFwKLQlvcHJvZl9zdGFydF91dGlsLmgKLQotRVhUUkFfRElTVCA9ICQoZGlzdF9zb3VyY2VzKQotCi1pZiBoYXZlX3F0Ci0KLUFNX0NQUEZMQUdTID0gXAotCUBRVF9JTkNMVURFU0AgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCsrIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKLQotQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi0KLWJpbl9QUk9HUkFNUyA9IG9wcm9mX3N0YXJ0Ci0KLW9wcm9mX3N0YXJ0X1NPVVJDRVMgPSAkKGRpc3Rfc291cmNlcykKLW5vZGlzdF9vcHJvZl9zdGFydF9TT1VSQ0VTID0gb3Byb2Zfc3RhcnQubW9jLmNwcAotb3Byb2Zfc3RhcnRfTERBREQgPSBcCi0JLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hIFwKLQkuLi9saWJvcC9saWJvcC5hIFwKLQkuLi9saWJ1dGlsL2xpYnV0aWwuYSBcCi0JdWkvbGlib3Byb2Zfc3RhcnQuYSBcCi0JQFFUX0xERkxBR1NAIFwKLQlAUVRfTElCQCBcCi0JQFhfTElCU0AKLQotb3Byb2Zfc3RhcnQubW9jLmNwcDogJHt0b3Bfc3JjZGlyfS9ndWkvb3Byb2Zfc3RhcnQuaAotCSQoTU9DKSAtbyAkQCAke3RvcF9zcmNkaXJ9L2d1aS9vcHJvZl9zdGFydC5oCi0KLWNsZWFuLWxvY2FsOgotCXJtIC1mIG9wcm9mX3N0YXJ0Lm1vYy5jcHAKLQotZW5kaWYKZGlmZiAtLWdpdCBhL2d1aS9NYWtlZmlsZS5pbiBiL2d1aS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAyM2Q2Yy4uMDAwMDAwMAotLS0gYS9ndWkvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw2MTggKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1TT1VSQ0VTID0gJChvcHJvZl9zdGFydF9TT1VSQ0VTKSAkKG5vZGlzdF9vcHJvZl9zdGFydF9TT1VSQ0VTKQotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1AaGF2ZV9xdF9UUlVFQGJpbl9QUk9HUkFNUyA9IG9wcm9mX3N0YXJ0JChFWEVFWFQpCi1zdWJkaXIgPSBndWkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpIgotYmluUFJPR1JBTVNfSU5TVEFMTCA9ICQoSU5TVEFMTF9QUk9HUkFNKQotUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKLWFtX19vcHJvZl9zdGFydF9TT1VSQ0VTX0RJU1QgPSBvcHJvZl9zdGFydC5jcHAgb3Byb2Zfc3RhcnRfY29uZmlnLmNwcCBcCi0Jb3Byb2Zfc3RhcnRfdXRpbC5jcHAgb3Byb2Zfc3RhcnRfbWFpbi5jcHAgb3Byb2Zfc3RhcnQuaCBcCi0Jb3Byb2Zfc3RhcnRfY29uZmlnLmggb3Byb2Zfc3RhcnRfdXRpbC5oCi1hbV9fb2JqZWN0c18xID0gb3Byb2Zfc3RhcnQuJChPQkpFWFQpIG9wcm9mX3N0YXJ0X2NvbmZpZy4kKE9CSkVYVCkgXAotCW9wcm9mX3N0YXJ0X3V0aWwuJChPQkpFWFQpIG9wcm9mX3N0YXJ0X21haW4uJChPQkpFWFQpCi1AaGF2ZV9xdF9UUlVFQGFtX29wcm9mX3N0YXJ0X09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpCi1AaGF2ZV9xdF9UUlVFQG5vZGlzdF9vcHJvZl9zdGFydF9PQkpFQ1RTID0gb3Byb2Zfc3RhcnQubW9jLiQoT0JKRVhUKQotb3Byb2Zfc3RhcnRfT0JKRUNUUyA9ICQoYW1fb3Byb2Zfc3RhcnRfT0JKRUNUUykgXAotCSQobm9kaXN0X29wcm9mX3N0YXJ0X09CSkVDVFMpCi1AaGF2ZV9xdF9UUlVFQG9wcm9mX3N0YXJ0X0RFUEVOREVOQ0lFUyA9IC4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYSBcCi1AaGF2ZV9xdF9UUlVFQAkuLi9saWJvcC9saWJvcC5hIC4uL2xpYnV0aWwvbGlidXRpbC5hIFwKLUBoYXZlX3F0X1RSVUVACXVpL2xpYm9wcm9mX3N0YXJ0LmEKLURFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1DWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCi0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKLUNYWExEID0gJChDWFgpCi1DWFhMSU5LID0gJChDWFhMRCkgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotU09VUkNFUyA9ICQob3Byb2Zfc3RhcnRfU09VUkNFUykgJChub2Rpc3Rfb3Byb2Zfc3RhcnRfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoYW1fX29wcm9mX3N0YXJ0X1NPVVJDRVNfRElTVCkKLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCi0JaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBcCi0JcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKLQl1bmluc3RhbGwtcmVjdXJzaXZlCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1ESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACi1BTVRBUiA9IEBBTVRBUkAKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkZEX0xJQlMgPSBAQkZEX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFURSA9IEBEQVRFQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVYRUVYVCA9IEBFWEVFWFRACi1FWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUtJTkMgPSBAS0lOQ0AKLUtTUkMgPSBAS1NSQ0AKLUtWRVJTID0gQEtWRVJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKLVhfTElCUyA9IEBYX0xJQlNACi1YX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWVuYWJsZV9hYmlfRkFMU0UgPSBAZW5hYmxlX2FiaV9GQUxTRUAKLWVuYWJsZV9hYmlfVFJVRSA9IEBlbmFibGVfYWJpX1RSVUVACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhhdmVfcXRfRkFMU0UgPSBAaGF2ZV9xdF9GQUxTRUAKLWhhdmVfcXRfVFJVRSA9IEBoYXZlX3F0X1RSVUVACi1oYXZlX3hzbHRwcm9jX0ZBTFNFID0gQGhhdmVfeHNsdHByb2NfRkFMU0VACi1oYXZlX3hzbHRwcm9jX1RSVUUgPSBAaGF2ZV94c2x0cHJvY19UUlVFQAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAota2VybmVsX3N1cHBvcnRfRkFMU0UgPSBAa2VybmVsX3N1cHBvcnRfRkFMU0VACi1rZXJuZWxfc3VwcG9ydF9UUlVFID0gQGtlcm5lbF9zdXBwb3J0X1RSVUVACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10b3BkaXIgPSBAdG9wZGlyQAotU1VCRElSUyA9IHVpCi1kaXN0X3NvdXJjZXMgPSBcCi0Jb3Byb2Zfc3RhcnQuY3BwIFwKLQlvcHJvZl9zdGFydF9jb25maWcuY3BwIFwKLQlvcHJvZl9zdGFydF91dGlsLmNwcCBcCi0Jb3Byb2Zfc3RhcnRfbWFpbi5jcHAgXAotCW9wcm9mX3N0YXJ0LmggXAotCW9wcm9mX3N0YXJ0X2NvbmZpZy5oIFwKLQlvcHJvZl9zdGFydF91dGlsLmgKLQotRVhUUkFfRElTVCA9ICQoZGlzdF9zb3VyY2VzKQotQGhhdmVfcXRfVFJVRUBBTV9DUFBGTEFHUyA9IFwKLUBoYXZlX3F0X1RSVUVACUBRVF9JTkNMVURFU0AgXAotQGhhdmVfcXRfVFJVRUAJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCi1AaGF2ZV9xdF9UUlVFQAktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyBcCi1AaGF2ZV9xdF9UUlVFQAktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKLQotQGhhdmVfcXRfVFJVRUBBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLUBoYXZlX3F0X1RSVUVAb3Byb2Zfc3RhcnRfU09VUkNFUyA9ICQoZGlzdF9zb3VyY2VzKQotQGhhdmVfcXRfVFJVRUBub2Rpc3Rfb3Byb2Zfc3RhcnRfU09VUkNFUyA9IG9wcm9mX3N0YXJ0Lm1vYy5jcHAKLUBoYXZlX3F0X1RSVUVAb3Byb2Zfc3RhcnRfTERBREQgPSBcCi1AaGF2ZV9xdF9UUlVFQAkuLi9saWJ1dGlsKysvbGlidXRpbCsrLmEgXAotQGhhdmVfcXRfVFJVRUAJLi4vbGlib3AvbGlib3AuYSBcCi1AaGF2ZV9xdF9UUlVFQAkuLi9saWJ1dGlsL2xpYnV0aWwuYSBcCi1AaGF2ZV9xdF9UUlVFQAl1aS9saWJvcHJvZl9zdGFydC5hIFwKLUBoYXZlX3F0X1RSVUVACUBRVF9MREZMQUdTQCBcCi1AaGF2ZV9xdF9UUlVFQAlAUVRfTElCQCBcCi1AaGF2ZV9xdF9UUlVFQAlAWF9MSUJTQAotCi1hbGw6IGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuY3BwIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGd1aS9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZ3VpL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotaW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChiaW5kaXIpIgotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIHAxPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JICBpZiB0ZXN0IC1mICQkcCBcCi0JICA7IHRoZW4gXAotCSAgICBmPWBlY2hvICIkJHAxIiB8IHNlZCAncyxeLiovLCw7JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCi0JICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAnJCRwJyAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAotCSAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAiJCRwIiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWJpblBST0dSQU1TOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj1gZWNobyAiJCRwIiB8IHNlZCAncyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1iaW5QUk9HUkFNUzoKLQktdGVzdCAteiAiJChiaW5fUFJPR1JBTVMpIiB8fCBybSAtZiAkKGJpbl9QUk9HUkFNUykKLW9wcm9mX3N0YXJ0JChFWEVFWFQpOiAkKG9wcm9mX3N0YXJ0X09CSkVDVFMpICQob3Byb2Zfc3RhcnRfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgb3Byb2Zfc3RhcnQkKEVYRUVYVCkKLQkkKENYWExJTkspICQob3Byb2Zfc3RhcnRfTERGTEFHUykgJChvcHJvZl9zdGFydF9PQkpFQ1RTKSAkKG9wcm9mX3N0YXJ0X0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcHJvZl9zdGFydC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Byb2Zfc3RhcnQubW9jLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcHJvZl9zdGFydF9jb25maWcuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wcm9mX3N0YXJ0X21haW4uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wcm9mX3N0YXJ0X3V0aWwuUG9AYW1fX3F1b3RlQAotCi0uY3BwLm86Ci1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJaWYgJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmNwcC5vYmo6Ci1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJaWYgJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFhDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi11bmluc3RhbGwtaW5mby1hbToKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KLSQoUkVDVVJTSVZFX1RBUkdFVFMpOgotCUBmYWlsY29tPSdleGl0IDEnOyBcCi0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAotCSAgY2FzZSAkJGYgaW4gXAotCSAgICAqPSogfCAtLVsha10qKTs7IFwKLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCi0JZG9uZTsgXAotCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAotCWZpOyB0ZXN0IC16ICIkJGZhaWwiCi0KLW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBcCi1tYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZToKLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKLQkgIGNhc2UgJCRmIGluIFwKLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCi0JICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCWNhc2UgIiRAIiBpbiBcCi0JICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCi0JICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCi0JZXNhYzsgXAotCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCXJldj0iJCRyZXYgLiI7IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKLXRhZ3MtcmVjdXJzaXZlOgotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKLQlkb25lCi1jdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKLQlkb25lCi0KLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKLQotVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICB0YWdzPSIkJHRhZ3MgJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAotCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICB8fCAkKG1rZGlyX3ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICAoY2QgJCRzdWJkaXIgJiYgXAotCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQotaW5zdGFsbGRpcnMtYW06Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQoYmluZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1AaGF2ZV9xdF9GQUxTRUBjbGVhbi1sb2NhbDoKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktcmVjdXJzaXZlCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1yZWN1cnNpdmUKLQotaW5mbzogaW5mby1yZWN1cnNpdmUKLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLWluZm8tYW0KLQotdW5pbnN0YWxsLWluZm86IHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi0uUEhPTlk6ICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gXAotCWNsZWFuIGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbG9jYWwgXAotCWNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKLQlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1yZWN1cnNpdmUgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKLQl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1iaW5QUk9HUkFNUyB1bmluc3RhbGwtaW5mby1hbQotCi0KLUBoYXZlX3F0X1RSVUVAb3Byb2Zfc3RhcnQubW9jLmNwcDogJHt0b3Bfc3JjZGlyfS9ndWkvb3Byb2Zfc3RhcnQuaAotQGhhdmVfcXRfVFJVRUAJJChNT0MpIC1vICRAICR7dG9wX3NyY2Rpcn0vZ3VpL29wcm9mX3N0YXJ0LmgKLQotQGhhdmVfcXRfVFJVRUBjbGVhbi1sb2NhbDoKLUBoYXZlX3F0X1RSVUVACXJtIC1mIG9wcm9mX3N0YXJ0Lm1vYy5jcHAKLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2d1aS9vcHJvZl9zdGFydC5jcHAgYi9ndWkvb3Byb2Zfc3RhcnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTI2MzE0Li4wMDAwMDAwCi0tLSBhL2d1aS9vcHJvZl9zdGFydC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5OTQgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcHJvZl9zdGFydC5jcHAKLSAqIFRoZSBHVUkgc3RhcnQgbWFpbiBjbGFzcwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Y3RpbWU+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8ZnN0cmVhbT4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlIDxxbGluZWVkaXQuaD4KLSNpbmNsdWRlIDxxbGlzdHZpZXcuaD4KLSNpbmNsdWRlIDxxY29tYm9ib3guaD4KLSNpbmNsdWRlIDxxbGlzdGJveC5oPgotI2luY2x1ZGUgPHFmaWxlZGlhbG9nLmg+Ci0jaW5jbHVkZSA8cWJ1dHRvbmdyb3VwLmg+Ci0jaW5jbHVkZSA8cWNoZWNrYm94Lmg+Ci0jaW5jbHVkZSA8cXRhYndpZGdldC5oPgotI2luY2x1ZGUgPHFtZXNzYWdlYm94Lmg+Ci0jaW5jbHVkZSA8cXZhbGlkYXRvci5oPgotI2luY2x1ZGUgPHFsYWJlbC5oPgotI2luY2x1ZGUgPHFwdXNoYnV0dG9uLmg+Ci0jaW5jbHVkZSA8cWhlYWRlci5oPgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAib3Byb2Zfc3RhcnQuaCIKLSNpbmNsdWRlICJvcF9jb25maWcuaCIKLSNpbmNsdWRlICJvcF9jb25maWdfMjQuaCIKLSNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKLSNpbmNsdWRlICJvcF9jcHVmcmVxLmgiCi0jaW5jbHVkZSAib3BfYWxsb2NfY291bnRlci5oIgotI2luY2x1ZGUgIm9wcm9mX3N0YXJ0X3V0aWwuaCIKLQotI2luY2x1ZGUgIm9wX2h3X2NvbmZpZy5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgY2hhciBjb25zdCAqIGdyZWVuX3hwbVtdID0gewotIjE2IDE2IDIgMSIsCi0iIAljIE5vbmUiLAotIi4JYyAjMDBGRjAwIiwKLSIgICAgLi4uLi4uLiAgICAgIiwKLSIgIC4uLi4uLi4uLi4uICAgIiwKLSIgLi4uLi4uLi4uLi4uLiAgIiwKLSIgLi4uLi4uLi4uLi4uLiAgIiwKLSIuLi4uLi4uLi4uLi4uLi4gIiwKLSIuLi4uLi4uLi4uLi4uLi4gIiwKLSIuLi4uLi4uLi4uLi4uLi4gIiwKLSIuLi4uLi4uLi4uLi4uLi4gIiwKLSIuLi4uLi4uLi4uLi4uLi4gIiwKLSIuLi4uLi4uLi4uLi4uLi4gIiwKLSIuLi4uLi4uLi4uLi4uLi4gIiwKLSIgLi4uLi4uLi4uLi4uLiAgIiwKLSIgLi4uLi4uLi4uLi4uLiAgIiwKLSIgIC4uLi4uLi4uLi4uICAgIiwKLSIgICAgLi4uLi4uLiAgICAgIiwKLSIgICAgICAgICAgICAgICAgIiB9OwotCi1zdGF0aWMgY2hhciBjb25zdCAqIHJlZF94cG1bXSA9IHsKLSIxNiAxNiAyIDEiLAotIiAJYyBOb25lIiwKLSIuCWMgI0ZGMDAwMCIsCi0iICAgIC4uLi4uLi4gICAgICIsCi0iICAuLi4uLi4uLi4uLiAgICIsCi0iIC4uLi4uLi4uLi4uLi4gICIsCi0iIC4uLi4uLi4uLi4uLi4gICIsCi0iLi4uLi4uLi4uLi4uLi4uICIsCi0iLi4uLi4uLi4uLi4uLi4uICIsCi0iLi4uLi4uLi4uLi4uLi4uICIsCi0iLi4uLi4uLi4uLi4uLi4uICIsCi0iLi4uLi4uLi4uLi4uLi4uICIsCi0iLi4uLi4uLi4uLi4uLi4uICIsCi0iLi4uLi4uLi4uLi4uLi4uICIsCi0iIC4uLi4uLi4uLi4uLi4gICIsCi0iIC4uLi4uLi4uLi4uLi4gICIsCi0iICAuLi4uLi4uLi4uLiAgICIsCi0iICAgIC4uLi4uLi4gICAgICIsCi0iICAgICAgICAgICAgICAgICIgfTsKLQotc3RhdGljIFFQaXhtYXAgKiBncmVlbl9waXhtYXA7Ci1zdGF0aWMgUVBpeG1hcCAqIHJlZF9waXhtYXA7Ci0KLQotb3BfZXZlbnRfZGVzY3I6Om9wX2V2ZW50X2Rlc2NyKCkKLQk6Ci0JY291bnRlcl9tYXNrKDApLAotCXZhbCgwKSwKLQl1bml0KDApLAotCW1pbl9jb3VudCgwKQotewotfQotCi0KLW9wcm9mX3N0YXJ0OjpvcHJvZl9zdGFydCgpCi0JOgotCW9wcm9mX3N0YXJ0X2Jhc2UoMCwgMCwgZmFsc2UsIDApLAotCWV2ZW50X2NvdW50X3ZhbGlkYXRvcihuZXcgUUludFZhbGlkYXRvcihldmVudF9jb3VudF9lZGl0KSksCi0JY3VycmVudF9ldmVudCgwKSwKLQljcHVfc3BlZWQob3BfY3B1X2ZyZXF1ZW5jeSgpKSwKLQl0b3RhbF9ucl9pbnRlcnJ1cHRzKDApCi17Ci0JZ3JlZW5fcGl4bWFwID0gbmV3IFFQaXhtYXAoZ3JlZW5feHBtKTsKLQlyZWRfcGl4bWFwID0gbmV3IFFQaXhtYXAocmVkX3hwbSk7Ci0JdmVjdG9yPHN0cmluZz4gYXJnczsKLQlhcmdzLnB1c2hfYmFjaygiLS1pbml0Iik7Ci0KLQlpZiAoZG9fZXhlY19jb21tYW5kKE9QX0JJTkRJUiAiL29wY29udHJvbCIsIGFyZ3MpKQotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0KLQljcHVfdHlwZSA9IG9wX2dldF9jcHVfdHlwZSgpOwotCW9wX25yX2NvdW50ZXJzID0gb3BfZ2V0X25yX2NvdW50ZXJzKGNwdV90eXBlKTsKLQotCWlmIChjcHVfdHlwZSA9PSBDUFVfVElNRVJfSU5UKSB7Ci0JCXNldHVwX2NvbmZpZ190YWItPnJlbW92ZVBhZ2UoY291bnRlcl9zZXR1cF9wYWdlKTsKLQl9IGVsc2UgewotCQlmaWxsX2V2ZW50cygpOwotCX0KLQotCW9wX2ludGVyZmFjZSBpbnRlcmZhY2UgPSBvcF9nZXRfaW50ZXJmYWNlKCk7Ci0JaWYgKGludGVyZmFjZSA9PSBPUF9JTlRFUkZBQ0VfTk9fR09PRCkgewotCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCAiQ291bGRuJ3QgZGV0ZXJtaW5lIGtlcm5lbCIKLQkJICAgICAgICAgICAgICAgICAgICAgIiBpbnRlcmZhY2UgdmVyc2lvbiIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCWJvb2wgaXNfMjYgPSBpbnRlcmZhY2UgPT0gT1BfSU5URVJGQUNFXzI2OwotCi0JaWYgKGlzXzI2KSB7Ci0JCW5vdGVfdGFibGVfc2l6ZV9lZGl0LT5oaWRlKCk7Ci0JCW5vdGVfdGFibGVfc2l6ZV9sYWJlbC0+aGlkZSgpOwotCQkvLyBGSVhNRTogY2FuIGFkYXB0IHRvIDIuNiAuLi4KLQkJYnVmZmVyX3NpemVfZWRpdC0+aGlkZSgpOwotCQlidWZmZXJfc2l6ZV9sYWJlbC0+aGlkZSgpOwotCX0KLQotCS8vIHNldHVwIHRoZSBjb25maWd1cmF0aW9uIHBhZ2UuCi0Ja2VybmVsX2ZpbGVuYW1lX2VkaXQtPnNldFRleHQoY29uZmlnLmtlcm5lbF9maWxlbmFtZS5jX3N0cigpKTsKLQotCW5vX3ZtbGludXgtPnNldENoZWNrZWQoY29uZmlnLm5vX2tlcm5lbCk7Ci0KLQlidWZmZXJfc2l6ZV9lZGl0LT5zZXRUZXh0KFFTdHJpbmcoKS5zZXROdW0oY29uZmlnLmJ1ZmZlcl9zaXplKSk7Ci0Jbm90ZV90YWJsZV9zaXplX2VkaXQtPnNldFRleHQoUVN0cmluZygpLnNldE51bShjb25maWcubm90ZV90YWJsZV9zaXplKSk7Ci0JdmVyYm9zZS0+c2V0Q2hlY2tlZChjb25maWcudmVyYm9zZSk7Ci0Jc2VwYXJhdGVfbGliX2NiLT5zZXRDaGVja2VkKGNvbmZpZy5zZXBhcmF0ZV9saWIpOwotCXNlcGFyYXRlX2tlcm5lbF9jYi0+c2V0Q2hlY2tlZChjb25maWcuc2VwYXJhdGVfa2VybmVsKTsKLQlzZXBhcmF0ZV9jcHVfY2ItPnNldENoZWNrZWQoY29uZmlnLnNlcGFyYXRlX2NwdSk7Ci0Jc2VwYXJhdGVfdGhyZWFkX2NiLT5zZXRDaGVja2VkKGNvbmZpZy5zZXBhcmF0ZV90aHJlYWQpOwotCi0JLy8gdGhlIHVuaXQgbWFzayBjaGVjayBib3hlcwotCWhpZGVfbWFza3MoKTsKLQotCWV2ZW50X2NvdW50X2VkaXQtPnNldFZhbGlkYXRvcihldmVudF9jb3VudF92YWxpZGF0b3IpOwotCVFJbnRWYWxpZGF0b3IgKiBpdjsKLQlpdiA9IG5ldyBRSW50VmFsaWRhdG9yKE9QX01JTl9CVUZfU0laRSwgT1BfTUFYX0JVRl9TSVpFLCBidWZmZXJfc2l6ZV9lZGl0KTsKLQlidWZmZXJfc2l6ZV9lZGl0LT5zZXRWYWxpZGF0b3IoaXYpOwotCWl2ID0gbmV3IFFJbnRWYWxpZGF0b3IoT1BfTUlOX05PVEVfVEFCTEVfU0laRSwgT1BfTUFYX05PVEVfVEFCTEVfU0laRSwgbm90ZV90YWJsZV9zaXplX2VkaXQpOwotCW5vdGVfdGFibGVfc2l6ZV9lZGl0LT5zZXRWYWxpZGF0b3IoaXYpOwotCi0JLy8gZGFlbW9uIHN0YXR1cyB0aW1lcgotCXN0YXJ0VGltZXIoNTAwMCk7Ci0JdGltZXJFdmVudCgwKTsKLQotCXJlc2l6ZShtaW5pbXVtU2l6ZUhpbnQoKSk7Ci0KLQkvLyBmb3JjZSB0aGUgcGl4bWFwIHJlLWRyYXcKLQlldmVudF9zZWxlY3RlZCgpOwotfQotCi0KLXZvaWQgb3Byb2Zfc3RhcnQ6OmZpbGxfZXZlbnRzKCkKLXsKLQkvLyB3ZSBuZWVkIHRvIGJ1aWxkIHRoZSBldmVudCBkZXNjciBzdHVmZiBiZWZvcmUgbG9hZGluZyB0aGUKLQkvLyBjb25maWd1cmF0aW9uIGJlY2F1c2Ugd2UgdXNlIGxvY2F0ZV9ldmVudCB0byBnZXQgYW4gZXZlbnQgZGVzY3IKLQkvLyBmcm9tIGl0cyBuYW1lLgotCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIGV2ZW50cyA9IG9wX2V2ZW50cyhjcHVfdHlwZSk7Ci0KLQlsaXN0X2Zvcl9lYWNoKHBvcywgZXZlbnRzKSB7Ci0JCXN0cnVjdCBvcF9ldmVudCAqIGV2ZW50ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcF9ldmVudCwgZXZlbnRfbmV4dCk7Ci0KLQkJb3BfZXZlbnRfZGVzY3IgZGVzY3I7Ci0KLQkJZGVzY3IuY291bnRlcl9tYXNrID0gZXZlbnQtPmNvdW50ZXJfbWFzazsKLQkJZGVzY3IudmFsID0gZXZlbnQtPnZhbDsKLQkJaWYgKGV2ZW50LT51bml0LT5udW0pIHsKLQkJCWRlc2NyLnVuaXQgPSBldmVudC0+dW5pdDsKLQkJfSBlbHNlIHsKLQkJCWRlc2NyLnVuaXQgPSAwOwotCQl9Ci0KLQkJZGVzY3IubmFtZSA9IGV2ZW50LT5uYW1lOwotCQlkZXNjci5oZWxwX3N0ciA9IGV2ZW50LT5kZXNjOwotCQlkZXNjci5taW5fY291bnQgPSBldmVudC0+bWluX2NvdW50OwotCi0JCWZvciAodWludCBjdHIgPSAwOyBjdHIgPCBvcF9ucl9jb3VudGVyczsgKytjdHIpIHsKLQkJCXVpbnQgY291bnQ7Ci0KLQkJCWlmICghKGRlc2NyLmNvdW50ZXJfbWFzayAmICgxIDw8IGN0cikpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoY3B1X3R5cGUgPT0gQ1BVX1JUQykgewotCQkJCWNvdW50ID0gMTAyNDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogc2V0dGluZyB0byBjcHUgSHogLyAyMDAwIGdpdmVzIGEgc2FmZSB2YWx1ZSBmb3IKLQkJCQkgKiBhbGwgZXZlbnRzLCBhbmQgYSBnb29kIG9uZSBmb3IgbW9zdC4KLQkJCQkgKi8KLQkJCQlpZiAoY3B1X3NwZWVkKQotCQkJCQljb3VudCA9IGludChjcHVfc3BlZWQgKiA1MDApOwotCQkJCWVsc2UKLQkJCQkJY291bnQgPSBkZXNjci5taW5fY291bnQgKiAxMDA7Ci0JCQl9Ci0KLQkJCWV2ZW50X2NmZ3NbZGVzY3IubmFtZV0uY291bnQgPSBjb3VudDsKLQkJCWV2ZW50X2NmZ3NbZGVzY3IubmFtZV0udW1hc2sgPSAwOwotCQkJaWYgKGRlc2NyLnVuaXQpCi0JCQkJZXZlbnRfY2Znc1tkZXNjci5uYW1lXS51bWFzayA9IGRlc2NyLnVuaXQtPmRlZmF1bHRfbWFzazsKLQkJCWV2ZW50X2NmZ3NbZGVzY3IubmFtZV0ub3NfcmluZ19jb3VudCA9IDE7Ci0JCQlldmVudF9jZmdzW2Rlc2NyLm5hbWVdLnVzZXJfcmluZ19jb3VudCA9IDE7Ci0JCX0KLQotCQl2X2V2ZW50cy5wdXNoX2JhY2soZGVzY3IpOwotCX0KLQotCWV2ZW50c19saXN0LT5oZWFkZXIoKS0+aGlkZSgpOwotCWV2ZW50c19saXN0LT5zZXRTb3J0aW5nKC0xKTsKLQotCWZpbGxfZXZlbnRzX2xpc3Rib3goKTsKLQotCXJlYWRfc2V0X2V2ZW50cygpOwotCi0JLy8gRklYTUU6IHdoeSB0aGlzID8KLQlpZiAoY3B1X3R5cGUgPT0gQ1BVX1JUQykKLQkJZXZlbnRzX2xpc3QtPnNldEN1cnJlbnRJdGVtKGV2ZW50c19saXN0LT5maXJzdENoaWxkKCkpOwotCi0JbG9hZF9jb25maWdfZmlsZSgpOwotfQotCi0KLW5hbWVzcGFjZSB7Ci0KLS8vLyBmaW5kIHRoZSBmaXJzdCBpdGVtIHdpdGggdGhlIGdpdmVuIHRleHQgaW4gY29sdW1uIDAgb3IgcmV0dXJuIE5VTEwKLVFMaXN0Vmlld0l0ZW0gKiBmaW5kSXRlbShRTGlzdFZpZXcgKiB2aWV3LCBjaGFyIGNvbnN0ICogbmFtZSkKLXsKLQkvLyBRdCAyLjMuMSBkb2VzIG5vdCBoYXZlIFFMaXN0Vmlldzo6ZmluZEl0ZW0oKQotCVFMaXN0Vmlld0l0ZW0gKiBpdGVtID0gdmlldy0+Zmlyc3RDaGlsZCgpOwotCi0Jd2hpbGUgKGl0ZW0gJiYgc3RyY21wKGl0ZW0tPnRleHQoMCkubGF0aW4xKCksIG5hbWUpKSB7Ci0JCWl0ZW0gPSBpdGVtLT5uZXh0U2libGluZygpOwotCX0KLQotCXJldHVybiBpdGVtOwotfQotCi19OwotCi0KLXZvaWQgb3Byb2Zfc3RhcnQ6OnNldHVwX2RlZmF1bHRfZXZlbnQoKQotewotCXN0cnVjdCBvcF9kZWZhdWx0X2V2ZW50X2Rlc2NyIGRlc2NyOwotCW9wX2RlZmF1bHRfZXZlbnQoY3B1X3R5cGUsICZkZXNjcik7Ci0KLQlldmVudF9jZmdzW2Rlc2NyLm5hbWVdLnVtYXNrID0gZGVzY3IudW07Ci0JZXZlbnRfY2Znc1tkZXNjci5uYW1lXS5jb3VudCA9IGRlc2NyLmNvdW50OwotCWV2ZW50X2NmZ3NbZGVzY3IubmFtZV0udXNlcl9yaW5nX2NvdW50ID0gMTsKLQlldmVudF9jZmdzW2Rlc2NyLm5hbWVdLm9zX3JpbmdfY291bnQgPSAxOwotCi0JUUxpc3RWaWV3SXRlbSAqIGl0ZW0gPSBmaW5kSXRlbShldmVudHNfbGlzdCwgZGVzY3IubmFtZSk7Ci0JaWYgKGl0ZW0pCi0JCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOwotfQotCi0KLXZvaWQgb3Byb2Zfc3RhcnQ6OnJlYWRfc2V0X2V2ZW50cygpCi17Ci0Jc3RyaW5nIG5hbWUgPSBnZXRfdXNlcl9maWxlbmFtZSgiLm9wcm9maWxlL2RhZW1vbnJjIik7Ci0KLQlpZnN0cmVhbSBpbihuYW1lLmNfc3RyKCkpOwotCi0JaWYgKCFpbikgewotCQlzZXR1cF9kZWZhdWx0X2V2ZW50KCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzdHJpbmcgc3RyOwotCi0JYm9vbCBvbmVfZW5hYmxlZCA9IGZhbHNlOwotCi0Jd2hpbGUgKGdldGxpbmUoaW4sIHN0cikpIHsKLQkJc3RyaW5nIGNvbnN0IHZhbCA9IHNwbGl0KHN0ciwgJz0nKTsKLQkJc3RyaW5nIGNvbnN0IG5hbWUgPSBzdHI7Ci0KLQkJaWYgKCFpc19wcmVmaXgobmFtZSwgIkNIT1NFTl9FVkVOVFNbIikpCi0JCQljb250aW51ZTsKLQotCQlvbmVfZW5hYmxlZCA9IHRydWU7Ci0KLQkJLy8gQ0hPU0VOX0VWRU5UU1swXT1DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwOjA6MToxCi0JCXZlY3RvcjxzdHJpbmc+IHBhcnRzID0gc2VwYXJhdGVfdG9rZW4odmFsLCAnOicpOwotCi0JCWlmIChwYXJ0cy5zaXplKCkgIT0gNSAmJiBwYXJ0cy5zaXplKCkgIT0gMikgewotCQkJY2VyciA8PCAiaW52YWxpZCBjb25maWd1cmF0aW9uIGZpbGVcbiI7Ci0JCQkvLyBGSVhNRQotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0KLQkJc3RyaW5nIGV2X25hbWUgPSBwYXJ0c1swXTsKLQkJZXZlbnRfY2Znc1tldl9uYW1lXS5jb3VudCA9Ci0JCQlvcF9sZXhpY2FsX2Nhc3Q8dW5zaWduZWQgaW50PihwYXJ0c1sxXSk7Ci0KLQkJLy8gQ1BVX0NMS19VTkhBTFRFRDoxMDAwMCBpcyBhbHNvIHZhbGlkCi0JCWlmIChwYXJ0cy5zaXplKCkgPT0gNSkgewotCQkJZXZlbnRfY2Znc1tldl9uYW1lXS51bWFzayA9Ci0JCQkJb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4ocGFydHNbMl0pOwotCQkJZXZlbnRfY2Znc1tldl9uYW1lXS51c2VyX3JpbmdfY291bnQgPQotCQkJCW9wX2xleGljYWxfY2FzdDx1bnNpZ25lZCBpbnQ+KHBhcnRzWzNdKTsKLQkJCWV2ZW50X2NmZ3NbZXZfbmFtZV0ub3NfcmluZ19jb3VudCA9Ci0JCQkJb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4ocGFydHNbNF0pOwotCQl9IGVsc2UgewotCQkJZXZlbnRfY2Znc1tldl9uYW1lXS51bWFzayA9IDA7Ci0JCQlldmVudF9jZmdzW2V2X25hbWVdLnVzZXJfcmluZ19jb3VudCA9IDE7Ci0JCQlldmVudF9jZmdzW2V2X25hbWVdLm9zX3JpbmdfY291bnQgPSAxOwotCQl9Ci0KLQkJUUxpc3RWaWV3SXRlbSAqIGl0ZW0gPSBmaW5kSXRlbShldmVudHNfbGlzdCwgZXZfbmFtZS5jX3N0cigpKTsKLQkJaWYgKGl0ZW0pCi0JCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsKLQl9Ci0KLQkvLyB1c2UgZGVmYXVsdCBldmVudCBpZiBub25lIHNldAotCWlmICghb25lX2VuYWJsZWQpCi0JCXNldHVwX2RlZmF1bHRfZXZlbnQoKTsKLX0KLQotCi12b2lkIG9wcm9mX3N0YXJ0Ojpsb2FkX2NvbmZpZ19maWxlKCkKLXsKLQlzdHJpbmcgbmFtZSA9IGdldF91c2VyX2ZpbGVuYW1lKCIub3Byb2ZpbGUvZGFlbW9ucmMiKTsKLQotCWlmc3RyZWFtIGluKG5hbWUuY19zdHIoKSk7Ci0JaWYgKCFpbikgewotCQlpZiAoIWNoZWNrX2FuZF9jcmVhdGVfY29uZmlnX2RpcigpKQotCQkJcmV0dXJuOwotCi0JCW9mc3RyZWFtIG91dChuYW1lLmNfc3RyKCkpOwotCQlpZiAoIW91dCkgewotCQkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcodGhpcywgMCwgIlVuYWJsZSB0byBvcGVuIGNvbmZpZ3VyYXRpb24gIgotCQkJCSJmaWxlIH4vLm9wcm9maWxlL2RhZW1vbnJjIik7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWluID4+IGNvbmZpZzsKLX0KLQotCi0vLyB1c2VyIHJlcXVlc3QgYSAibm9ybWFsIiBleGl0IHNvIHNhdmUgdGhlIGNvbmZpZyBmaWxlLgotdm9pZCBvcHJvZl9zdGFydDo6YWNjZXB0KCkKLXsKLQkvLyByZWNvcmQgdGhlIHByZXZpb3VzIHNldHRpbmdzCi0JcmVjb3JkX3NlbGVjdGVkX2V2ZW50X2NvbmZpZygpOwotCi0Jc2F2ZV9jb25maWcoKTsKLQotCVFEaWFsb2c6OmFjY2VwdCgpOwotfQotCi0KLXZvaWQgb3Byb2Zfc3RhcnQ6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQgKikKLXsKLQlhY2NlcHQoKTsKLX0KLQotCi12b2lkIG9wcm9mX3N0YXJ0Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50ICopCi17Ci0Jc3RhdGljIHRpbWVfdCBsYXN0ID0gdGltZSgwKTsKLQotCWRhZW1vbl9zdGF0dXMgZHN0YXQ7Ci0KLQlmbHVzaF9wcm9maWxlcl9kYXRhX2J0bi0+c2V0RW5hYmxlZChkc3RhdC5ydW5uaW5nKTsKLQlzdG9wX3Byb2ZpbGVyX2J0bi0+c2V0RW5hYmxlZChkc3RhdC5ydW5uaW5nKTsKLQlzdGFydF9wcm9maWxlcl9idG4tPnNldEVuYWJsZWQoIWRzdGF0LnJ1bm5pbmcpOwotCi0JaWYgKCFkc3RhdC5ydW5uaW5nKSB7Ci0JCWRhZW1vbl9sYWJlbC0+c2V0VGV4dCgiUHJvZmlsZXIgaXMgbm90IHJ1bm5pbmcuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlvc3RyaW5nc3RyZWFtIHNzOwotCXNzIDw8ICJQcm9maWxlciBydW5uaW5nOiI7Ci0KLQl0aW1lX3QgY3VyciA9IHRpbWUoMCk7Ci0JdG90YWxfbnJfaW50ZXJydXB0cyArPSBkc3RhdC5ucl9pbnRlcnJ1cHRzOwotCi0JaWYgKGN1cnIgLSBsYXN0KQotCQlzcyA8PCAiICgiIDw8IGRzdGF0Lm5yX2ludGVycnVwdHMgLyAoY3VyciAtIGxhc3QpIDw8ICIgaW50ZXJydXB0cyAvIHNlY29uZCwgdG90YWwgIiA8PCB0b3RhbF9ucl9pbnRlcnJ1cHRzIDw8ICIpIjsKLQotCWRhZW1vbl9sYWJlbC0+c2V0VGV4dChzcy5zdHIoKS5jX3N0cigpKTsKLQotCWxhc3QgPSBjdXJyOwotfQotCi0KLXZvaWQgb3Byb2Zfc3RhcnQ6OmZpbGxfZXZlbnRzX2xpc3Rib3goKQotewotCXNldFVwZGF0ZXNFbmFibGVkKGZhbHNlKTsKLQotCWZvciAodmVjdG9yPG9wX2V2ZW50X2Rlc2NyPjo6cmV2ZXJzZV9pdGVyYXRvciBjaXQgPSB2X2V2ZW50cy5yYmVnaW4oKTsKLQkJY2l0ICE9IHZfZXZlbnRzLnJlbmQoKTsgKytjaXQpIHsKLQkJbmV3IFFMaXN0Vmlld0l0ZW0oZXZlbnRzX2xpc3QsIGNpdC0+bmFtZS5jX3N0cigpKTsKLQl9Ci0KLQlzZXRVcGRhdGVzRW5hYmxlZCh0cnVlKTsKLQl1cGRhdGUoKTsKLX0KLQotCi12b2lkIG9wcm9mX3N0YXJ0OjpkaXNwbGF5X2V2ZW50KG9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgZGVzY3IpCi17Ci0Jc2V0VXBkYXRlc0VuYWJsZWQoZmFsc2UpOwotCi0Jc2V0dXBfdW5pdF9tYXNrcyhkZXNjcik7Ci0Jb3NfcmluZ19jb3VudF9jYi0+c2V0RW5hYmxlZCh0cnVlKTsKLQl1c2VyX3JpbmdfY291bnRfY2ItPnNldEVuYWJsZWQodHJ1ZSk7Ci0JZXZlbnRfY291bnRfZWRpdC0+c2V0RW5hYmxlZCh0cnVlKTsKLQotCWV2ZW50X3NldHRpbmcgJiBjZmcgPSBldmVudF9jZmdzW2Rlc2NyLm5hbWVdOwotCi0Jb3NfcmluZ19jb3VudF9jYi0+c2V0Q2hlY2tlZChjZmcub3NfcmluZ19jb3VudCk7Ci0JdXNlcl9yaW5nX2NvdW50X2NiLT5zZXRDaGVja2VkKGNmZy51c2VyX3JpbmdfY291bnQpOwotCVFTdHJpbmcgY291bnRfdGV4dDsKLQljb3VudF90ZXh0LnNldE51bShjZmcuY291bnQpOwotCWV2ZW50X2NvdW50X2VkaXQtPnNldFRleHQoY291bnRfdGV4dCk7Ci0JZXZlbnRfY291bnRfdmFsaWRhdG9yLT5zZXRSYW5nZShkZXNjci5taW5fY291bnQsIG1heF9wZXJmX2NvdW50KCkpOwotCi0Jc2V0VXBkYXRlc0VuYWJsZWQodHJ1ZSk7Ci0JdXBkYXRlKCk7Ci19Ci0KLQotYm9vbCBvcHJvZl9zdGFydDo6aXNfc2VsZWN0YWJsZV9ldmVudChRTGlzdFZpZXdJdGVtICogaXRlbSkKLXsKLQlpZiAoaXRlbS0+aXNTZWxlY3RlZCgpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXNlbGVjdGVkX2V2ZW50cy5pbnNlcnQoaXRlbSk7Ci0KLQlib29sIHJldCA9IGZhbHNlOwotCWlmIChhbGxvY19zZWxlY3RlZF9ldmVudHMoKSkKLQkJcmV0ID0gdHJ1ZTsKLQotCXNlbGVjdGVkX2V2ZW50cy5lcmFzZShpdGVtKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotdm9pZCBvcHJvZl9zdGFydDo6ZHJhd19ldmVudF9saXN0KCkKLXsKLQlRTGlzdFZpZXdJdGVtICogY3VyOwotCWZvciAoY3VyID0gZXZlbnRzX2xpc3QtPmZpcnN0Q2hpbGQoKTsgY3VyOyBjdXIgPSBjdXItPm5leHRTaWJsaW5nKCkpIHsKLQkJaWYgKGlzX3NlbGVjdGFibGVfZXZlbnQoY3VyKSkKLQkJCWN1ci0+c2V0UGl4bWFwKDAsICpncmVlbl9waXhtYXApOwotCQllbHNlCi0JCQljdXItPnNldFBpeG1hcCgwLCAqcmVkX3BpeG1hcCk7Ci0JfQotfQotCi0KLWJvb2wgb3Byb2Zfc3RhcnQ6OmFsbG9jX3NlbGVjdGVkX2V2ZW50cygpIGNvbnN0Ci17Ci0JdmVjdG9yPG9wX2V2ZW50IGNvbnN0ICo+IGV2ZW50czsKLQotCXNldDxRTGlzdFZpZXdJdGVtICo+Ojpjb25zdF9pdGVyYXRvciBpdDsKLQlmb3IgKGl0ID0gc2VsZWN0ZWRfZXZlbnRzLmJlZ2luKCk7IGl0ICE9IHNlbGVjdGVkX2V2ZW50cy5lbmQoKTsgKytpdCkgewotCQlldmVudHMucHVzaF9iYWNrKGZpbmRfZXZlbnRfYnlfbmFtZSgoKml0KS0+dGV4dCgwKS5sYXRpbjEoKSkpOwotCX0KLQotCXNpemVfdCAqIG1hcCA9Ci0JCW1hcF9ldmVudF90b19jb3VudGVyKCZldmVudHNbMF0sIGV2ZW50cy5zaXplKCksIGNwdV90eXBlKTsKLQotCWlmICghbWFwKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlmcmVlKG1hcCk7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgb3Byb2Zfc3RhcnQ6OmV2ZW50X3NlbGVjdGVkKCkKLXsKLQkvLyBUaGUgZGVhbCBpcyBzaW1wbGU6IFFUIGxhY2sgb2YgYSB3YXkgdG8ga25vdyB3aGF0IGl0ZW0gd2FzIHRoZSBsYXN0Ci0JLy8gKGRlKXNlbGVjdGVkIGl0ZW0gc28gd2UgcmVjb3JkIGEgc2V0IG9mIHNlbGVjdGVkIGl0ZW1zIGFuZCBkaWZmCi0JLy8gaXQgaW4gdGhlIGFwcHJvcHJpYXRlIHdheSB3aXRoIHRoZSBwcmV2aW91cyBsaXN0IG9mIHNlbGVjdGVkIGl0ZW1zLgotCi0Jc2V0PFFMaXN0Vmlld0l0ZW0gKj4gY3VycmVudF9zZWxlY3Rpb247Ci0JUUxpc3RWaWV3SXRlbSAqIGN1cjsKLQlmb3IgKGN1ciA9IGV2ZW50c19saXN0LT5maXJzdENoaWxkKCk7IGN1cjsgY3VyID0gY3VyLT5uZXh0U2libGluZygpKSB7Ci0JCWlmIChjdXItPmlzU2VsZWN0ZWQoKSkgewotCQkJY3VycmVudF9zZWxlY3Rpb24uaW5zZXJ0KGN1cik7Ci0JCX0KLQl9Ci0KLQkvLyBGaXJzdCByZW1vdmUgdGhlIGRlc2VsZWN0ZWQgaXRlbS4KLQl2ZWN0b3I8UUxpc3RWaWV3SXRlbSAqPiBuZXdfZGVzZWxlY3RlZDsKLQlzZXRfZGlmZmVyZW5jZShzZWxlY3RlZF9ldmVudHMuYmVnaW4oKSwgc2VsZWN0ZWRfZXZlbnRzLmVuZCgpLAotCQkgICAgICAgY3VycmVudF9zZWxlY3Rpb24uYmVnaW4oKSwgY3VycmVudF9zZWxlY3Rpb24uZW5kKCksCi0JCSAgICAgICBiYWNrX2luc2VydGVyKG5ld19kZXNlbGVjdGVkKSk7Ci0JdmVjdG9yPFFMaXN0Vmlld0l0ZW0gKj46OmNvbnN0X2l0ZXJhdG9yIGl0OwotCWZvciAoaXQgPSBuZXdfZGVzZWxlY3RlZC5iZWdpbigpOyBpdCAhPSBuZXdfZGVzZWxlY3RlZC5lbmQoKTsgKytpdCkgewotCQlzZWxlY3RlZF9ldmVudHMuZXJhc2UoKml0KTsKLQl9Ci0KLQkvLyBOb3cgdHJ5IHRvIGFkZCB0aGUgbmV3bHkgc2VsZWN0ZWQgaXRlbSBpZiBlbm91Z2ggSFcgcmVzb3VyY2UgZXhpc3RzCi0JdmVjdG9yPFFMaXN0Vmlld0l0ZW0gKj4gbmV3X3NlbGVjdGVkOwotCXNldF9kaWZmZXJlbmNlKGN1cnJlbnRfc2VsZWN0aW9uLmJlZ2luKCksIGN1cnJlbnRfc2VsZWN0aW9uLmVuZCgpLAotCQkgICAgICAgc2VsZWN0ZWRfZXZlbnRzLmJlZ2luKCksIHNlbGVjdGVkX2V2ZW50cy5lbmQoKSwKLQkJICAgICAgIGJhY2tfaW5zZXJ0ZXIobmV3X3NlbGVjdGVkKSk7Ci0JZm9yIChpdCA9IG5ld19zZWxlY3RlZC5iZWdpbigpOyBpdCAhPSBuZXdfc2VsZWN0ZWQuZW5kKCk7ICsraXQpIHsKLQkJc2VsZWN0ZWRfZXZlbnRzLmluc2VydCgqaXQpOwotCQlpZiAoIWFsbG9jX3NlbGVjdGVkX2V2ZW50cygpKSB7Ci0JCQkoKml0KS0+c2V0U2VsZWN0ZWQoZmFsc2UpOwotCQkJc2VsZWN0ZWRfZXZlbnRzLmVyYXNlKCppdCk7Ci0JCX0gZWxzZSB7Ci0JCQljdXJyZW50X2V2ZW50ID0gKml0OwotCQl9Ci0JfQotCi0JZHJhd19ldmVudF9saXN0KCk7Ci0KLQlpZiAoY3VycmVudF9ldmVudCkKLQkJZGlzcGxheV9ldmVudChsb2NhdGVfZXZlbnQoY3VycmVudF9ldmVudC0+dGV4dCgwKS5sYXRpbjEoKSkpOwotfQotCi0KLXZvaWQgb3Byb2Zfc3RhcnQ6OmV2ZW50X292ZXIoUUxpc3RWaWV3SXRlbSAqIGl0ZW0pCi17Ci0Jb3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkZXNjciA9IGxvY2F0ZV9ldmVudChpdGVtLT50ZXh0KDApLmxhdGluMSgpKTsKLQotCXN0cmluZyBoZWxwX3N0ciA9IGRlc2NyLmhlbHBfc3RyLmNfc3RyKCk7Ci0JaWYgKCFpc19zZWxlY3RhYmxlX2V2ZW50KGl0ZW0pKSB7Ci0JCWhlbHBfc3RyICs9ICIgY29uZmxpY3RzIHdpdGg6IjsKLQotCQlzZXQ8UUxpc3RWaWV3SXRlbSAqPjo6Y29uc3RfaXRlcmF0b3IgaXQ7Ci0JCWZvciAoaXQgPSBzZWxlY3RlZF9ldmVudHMuYmVnaW4oKTsgCi0JCSAgICAgaXQgIT0gc2VsZWN0ZWRfZXZlbnRzLmVuZCgpOyApIHsKLQkJCVFMaXN0Vmlld0l0ZW0gKiB0ZW1wID0gKml0OwotCQkJc2VsZWN0ZWRfZXZlbnRzLmVyYXNlKGl0KyspOwotCQkJaWYgKGlzX3NlbGVjdGFibGVfZXZlbnQoaXRlbSkpIHsKLQkJCQloZWxwX3N0ciArPSAiICI7Ci0JCQkJaGVscF9zdHIgKz0gdGVtcC0+dGV4dCgwKS5sYXRpbjEoKTsKLQkJCX0KLQkJCXNlbGVjdGVkX2V2ZW50cy5pbnNlcnQodGVtcCk7Ci0JCX0KLQl9Ci0KLQlldmVudF9oZWxwX2xhYmVsLT5zZXRUZXh0KGhlbHBfc3RyLmNfc3RyKCkpOwotfQotCi0KLS8vLyBzZWxlY3QgdGhlIGtlcm5lbCBpbWFnZSBmaWxlbmFtZQotdm9pZCBvcHJvZl9zdGFydDo6Y2hvb3NlX2tlcm5lbF9maWxlbmFtZSgpCi17Ci0Jc3RyaW5nIG5hbWUgPSBrZXJuZWxfZmlsZW5hbWVfZWRpdC0+dGV4dCgpLmxhdGluMSgpOwotCXN0cmluZyByZXN1bHQgPSBkb19vcGVuX2ZpbGVfb3JfZGlyKG5hbWUsIGZhbHNlKTsKLQotCWlmICghcmVzdWx0LmVtcHR5KCkpCi0JCWtlcm5lbF9maWxlbmFtZV9lZGl0LT5zZXRUZXh0KHJlc3VsdC5jX3N0cigpKTsKLX0KLQotCi0vLyB0aGlzIHJlY29yZCB0aGUgY3VycmVudCBzZWxlY3RlZCBldmVudCBzZXR0aW5nIGluIHRoZSBldmVudF9jZmdbXSBzdHVmZi4KLS8vIEZJWE1FOiBuZWVkIHZhbGlkYXRpb24/Ci12b2lkIG9wcm9mX3N0YXJ0OjpyZWNvcmRfc2VsZWN0ZWRfZXZlbnRfY29uZmlnKCkKLXsKLQlpZiAoIWN1cnJlbnRfZXZlbnQpCi0JCXJldHVybjsKLQotCXN0cmluZyBuYW1lKGN1cnJlbnRfZXZlbnQtPnRleHQoMCkubGF0aW4xKCkpOwotCi0JZXZlbnRfc2V0dGluZyAmIGNmZyA9IGV2ZW50X2NmZ3NbbmFtZV07Ci0Jb3BfZXZlbnRfZGVzY3IgY29uc3QgJiBjdXJyID0gbG9jYXRlX2V2ZW50KG5hbWUpOwotCi0JY2ZnLmNvdW50ID0gZXZlbnRfY291bnRfZWRpdC0+dGV4dCgpLnRvVUludCgpOwotCWNmZy5vc19yaW5nX2NvdW50ID0gb3NfcmluZ19jb3VudF9jYi0+aXNDaGVja2VkKCk7Ci0JY2ZnLnVzZXJfcmluZ19jb3VudCA9IHVzZXJfcmluZ19jb3VudF9jYi0+aXNDaGVja2VkKCk7Ci0JY2ZnLnVtYXNrID0gZ2V0X3VuaXRfbWFzayhjdXJyKTsKLX0KLQotCi0vLyB2YWxpZGF0ZSBhbmQgc2F2ZSB0aGUgY29uZmlndXJhdGlvbiAoVGhlIHF0IHZhbGlkYXRvciBpbnN0YWxsZWQKLS8vIGFyZSBub3Qgc3VmZmljaWVudCB0byBkbyB0aGUgdmFsaWRhdGlvbikKLWJvb2wgb3Byb2Zfc3RhcnQ6OnJlY29yZF9jb25maWcoKQotewotCWNvbmZpZy5rZXJuZWxfZmlsZW5hbWUgPSBrZXJuZWxfZmlsZW5hbWVfZWRpdC0+dGV4dCgpLmxhdGluMSgpOwotCWNvbmZpZy5ub19rZXJuZWwgPSBub192bWxpbnV4LT5pc0NoZWNrZWQoKTsKLQotCVFTdHJpbmcgY29uc3QgdCA9IGJ1ZmZlcl9zaXplX2VkaXQtPnRleHQoKTsKLQl1aW50IHRlbXAgPSB0LnRvVUludCgpOwotCWlmICh0ZW1wIDwgT1BfTUlOX0JVRl9TSVpFIHx8IHRlbXAgPiBPUF9NQVhfQlVGX1NJWkUpIHsKLQkJb3N0cmluZ3N0cmVhbSBlcnJvcjsKLQotCQllcnJvciA8PCAiYnVmZmVyIHNpemUgb3V0IG9mIHJhbmdlOiAiIDw8IHRlbXAKLQkJICAgICAgPDwgIiB2YWxpZCByYW5nZSBpcyBbIiA8PCBPUF9NSU5fQlVGX1NJWkUgPDwgIiwgIgotCQkgICAgICA8PCBPUF9NQVhfQlVGX1NJWkUgPDwgIl0iOwotCi0JCVFNZXNzYWdlQm94Ojp3YXJuaW5nKHRoaXMsIDAsIGVycm9yLnN0cigpLmNfc3RyKCkpOwotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JY29uZmlnLmJ1ZmZlcl9zaXplID0gdGVtcDsKLQotCXRlbXAgPSBub3RlX3RhYmxlX3NpemVfZWRpdC0+dGV4dCgpLnRvVUludCgpOwotCWlmICh0ZW1wIDwgT1BfTUlOX05PVEVfVEFCTEVfU0laRSB8fCB0ZW1wID4gT1BfTUFYX05PVEVfVEFCTEVfU0laRSkgewotCQlvc3RyaW5nc3RyZWFtIGVycm9yOwotCi0JCWVycm9yIDw8ICJub3RlIHRhYmxlIHNpemUgb3V0IG9mIHJhbmdlOiAiIDw8IHRlbXAKLQkJICAgICAgPDwgIiB2YWxpZCByYW5nZSBpcyBbIiA8PCBPUF9NSU5fTk9URV9UQUJMRV9TSVpFIDw8ICIsICIKLQkJICAgICAgPDwgT1BfTUFYX05PVEVfVEFCTEVfU0laRSA8PCAiXSI7Ci0KLQkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcodGhpcywgMCwgZXJyb3Iuc3RyKCkuY19zdHIoKSk7Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQljb25maWcubm90ZV90YWJsZV9zaXplID0gdGVtcDsKLQotCWNvbmZpZy52ZXJib3NlID0gdmVyYm9zZS0+aXNDaGVja2VkKCk7Ci0JY29uZmlnLnNlcGFyYXRlX2xpYiA9IHNlcGFyYXRlX2xpYl9jYi0+aXNDaGVja2VkKCk7Ci0JY29uZmlnLnNlcGFyYXRlX2tlcm5lbCA9IHNlcGFyYXRlX2tlcm5lbF9jYi0+aXNDaGVja2VkKCk7Ci0JY29uZmlnLnNlcGFyYXRlX2NwdSA9IHNlcGFyYXRlX2NwdV9jYi0+aXNDaGVja2VkKCk7Ci0JY29uZmlnLnNlcGFyYXRlX3RocmVhZCA9IHNlcGFyYXRlX3RocmVhZF9jYi0+aXNDaGVja2VkKCk7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotCi12b2lkIG9wcm9mX3N0YXJ0OjpnZXRfdW5pdF9tYXNrX3BhcnQob3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkZXNjciwgdWludCBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWxlY3RlZCwgdWludCAmIG1hc2spCi17Ci0JaWYgKCFzZWxlY3RlZCkKLQkJcmV0dXJuOwotCWlmICAobnVtID49IGRlc2NyLnVuaXQtPm51bSkKLQkJcmV0dXJuOwotCi0JaWYgKGRlc2NyLnVuaXQtPnVuaXRfdHlwZV9tYXNrID09IHV0bV9iaXRtYXNrKQotCQltYXNrIHw9IGRlc2NyLnVuaXQtPnVtW251bV0udmFsdWU7Ci0JZWxzZQotCQltYXNrID0gZGVzY3IudW5pdC0+dW1bbnVtXS52YWx1ZTsKLX0KLQotCi0vLyByZXR1cm4gdGhlIHVuaXQgbWFzayBzZWxlY3RlZCB0aHJvdWdoIHRoZSB1bml0IG1hc2sgY2hlY2sgYm94Ci11aW50IG9wcm9mX3N0YXJ0OjpnZXRfdW5pdF9tYXNrKG9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgZGVzY3IpCi17Ci0JdWludCBtYXNrID0gMDsKLQotCWlmICghZGVzY3IudW5pdCkKLQkJcmV0dXJuIDA7Ci0KLQkvLyBtYW5kYXRvcnkgbWFzayBpcyB0cmFuc3BhcmVudCBmb3IgdXNlci4KLQlpZiAoZGVzY3IudW5pdC0+dW5pdF90eXBlX21hc2sgPT0gdXRtX21hbmRhdG9yeSkgewotCQltYXNrID0gZGVzY3IudW5pdC0+ZGVmYXVsdF9tYXNrOwotCQlyZXR1cm4gbWFzazsKLQl9Ci0KLQlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDAsIGNoZWNrMC0+aXNDaGVja2VkKCksIG1hc2spOwotCWdldF91bml0X21hc2tfcGFydChkZXNjciwgMSwgY2hlY2sxLT5pc0NoZWNrZWQoKSwgbWFzayk7Ci0JZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCAyLCBjaGVjazItPmlzQ2hlY2tlZCgpLCBtYXNrKTsKLQlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDMsIGNoZWNrMy0+aXNDaGVja2VkKCksIG1hc2spOwotCWdldF91bml0X21hc2tfcGFydChkZXNjciwgNCwgY2hlY2s0LT5pc0NoZWNrZWQoKSwgbWFzayk7Ci0JZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCA1LCBjaGVjazUtPmlzQ2hlY2tlZCgpLCBtYXNrKTsKLQlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDYsIGNoZWNrNi0+aXNDaGVja2VkKCksIG1hc2spOwotCWdldF91bml0X21hc2tfcGFydChkZXNjciwgNywgY2hlY2s3LT5pc0NoZWNrZWQoKSwgbWFzayk7Ci0JZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCA4LCBjaGVjazgtPmlzQ2hlY2tlZCgpLCBtYXNrKTsKLQlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDksIGNoZWNrOS0+aXNDaGVja2VkKCksIG1hc2spOwotCWdldF91bml0X21hc2tfcGFydChkZXNjciwgMTAsIGNoZWNrMTAtPmlzQ2hlY2tlZCgpLCBtYXNrKTsKLQlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDExLCBjaGVjazExLT5pc0NoZWNrZWQoKSwgbWFzayk7Ci0JZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCAxMiwgY2hlY2sxMi0+aXNDaGVja2VkKCksIG1hc2spOwotCWdldF91bml0X21hc2tfcGFydChkZXNjciwgMTMsIGNoZWNrMTMtPmlzQ2hlY2tlZCgpLCBtYXNrKTsKLQlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDE0LCBjaGVjazE0LT5pc0NoZWNrZWQoKSwgbWFzayk7Ci0JZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCAxNSwgY2hlY2sxNS0+aXNDaGVja2VkKCksIG1hc2spOwotCXJldHVybiBtYXNrOwotfQotCi0KLXZvaWQgb3Byb2Zfc3RhcnQ6OmhpZGVfbWFza3MoKQotewotCWNoZWNrMC0+aGlkZSgpOwotCWNoZWNrMS0+aGlkZSgpOwotCWNoZWNrMi0+aGlkZSgpOwotCWNoZWNrMy0+aGlkZSgpOwotCWNoZWNrNC0+aGlkZSgpOwotCWNoZWNrNS0+aGlkZSgpOwotCWNoZWNrNi0+aGlkZSgpOwotCWNoZWNrNy0+aGlkZSgpOwotCWNoZWNrOC0+aGlkZSgpOwotCWNoZWNrOS0+aGlkZSgpOwotCWNoZWNrMTAtPmhpZGUoKTsKLQljaGVjazExLT5oaWRlKCk7Ci0JY2hlY2sxMi0+aGlkZSgpOwotCWNoZWNrMTMtPmhpZGUoKTsKLQljaGVjazE0LT5oaWRlKCk7Ci0JY2hlY2sxNS0+aGlkZSgpOwotfQotCi0KLXZvaWQgb3Byb2Zfc3RhcnQ6OnNldHVwX3VuaXRfbWFza3Mob3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkZXNjcikKLXsKLQlvcF91bml0X21hc2sgY29uc3QgKiB1bSA9IGRlc2NyLnVuaXQ7Ci0KLQloaWRlX21hc2tzKCk7Ci0KLQlpZiAoIXVtIHx8IHVtLT51bml0X3R5cGVfbWFzayA9PSB1dG1fbWFuZGF0b3J5KQotCQlyZXR1cm47Ci0KLQlldmVudF9zZXR0aW5nICYgY2ZnID0gZXZlbnRfY2Znc1tkZXNjci5uYW1lXTsKLQotCXVuaXRfbWFza19ncm91cC0+c2V0RXhjbHVzaXZlKHVtLT51bml0X3R5cGVfbWFzayA9PSB1dG1fZXhjbHVzaXZlKTsKLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW0tPm51bSA7ICsraSkgewotCQlRQ2hlY2tCb3ggKiBjaGVjayA9IDA7Ci0JCXN3aXRjaCAoaSkgewotCQkJY2FzZSAwOiBjaGVjayA9IGNoZWNrMDsgYnJlYWs7Ci0JCQljYXNlIDE6IGNoZWNrID0gY2hlY2sxOyBicmVhazsKLQkJCWNhc2UgMjogY2hlY2sgPSBjaGVjazI7IGJyZWFrOwotCQkJY2FzZSAzOiBjaGVjayA9IGNoZWNrMzsgYnJlYWs7Ci0JCQljYXNlIDQ6IGNoZWNrID0gY2hlY2s0OyBicmVhazsKLQkJCWNhc2UgNTogY2hlY2sgPSBjaGVjazU7IGJyZWFrOwotCQkJY2FzZSA2OiBjaGVjayA9IGNoZWNrNjsgYnJlYWs7Ci0JCQljYXNlIDc6IGNoZWNrID0gY2hlY2s3OyBicmVhazsKLQkJCWNhc2UgODogY2hlY2sgPSBjaGVjazg7IGJyZWFrOwotCQkJY2FzZSA5OiBjaGVjayA9IGNoZWNrOTsgYnJlYWs7Ci0JCQljYXNlIDEwOiBjaGVjayA9IGNoZWNrMTA7IGJyZWFrOwotCQkJY2FzZSAxMTogY2hlY2sgPSBjaGVjazExOyBicmVhazsKLQkJCWNhc2UgMTI6IGNoZWNrID0gY2hlY2sxMjsgYnJlYWs7Ci0JCQljYXNlIDEzOiBjaGVjayA9IGNoZWNrMTM7IGJyZWFrOwotCQkJY2FzZSAxNDogY2hlY2sgPSBjaGVjazE0OyBicmVhazsKLQkJCWNhc2UgMTU6IGNoZWNrID0gY2hlY2sxNTsgYnJlYWs7Ci0JCX0KLQkJY2hlY2stPnNldFRleHQodW0tPnVtW2ldLmRlc2MpOwotCQlpZiAodW0tPnVuaXRfdHlwZV9tYXNrID09IHV0bV9leGNsdXNpdmUpIHsKLQkJCWNoZWNrLT5zZXRDaGVja2VkKGNmZy51bWFzayA9PSB1bS0+dW1baV0udmFsdWUpOwotCQl9IGVsc2UgewotCQkJLy8gVGhlIGxhc3QgZGVzY3JpcHRvciBjb250YWlucyBhIG1hc2sgdGhhdCBlbmFibGUgYWxsCi0JCQkvLyB2YWx1ZSBzbyB3ZSBtdXN0IGVuYWJsZSB0aGUgbGFzdCBjaGVjayBib3ggb25seSBpZgotCQkJLy8gYWxsIGJpdHMgYXJlIG9uLgotCQkJaWYgKGkgPT0gdW0tPm51bSAtIDEpIHsKLQkJCQljaGVjay0+c2V0Q2hlY2tlZChjZmcudW1hc2sgPT0gdW0tPnVtW2ldLnZhbHVlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY2hlY2stPnNldENoZWNrZWQoY2ZnLnVtYXNrICYgdW0tPnVtW2ldLnZhbHVlKTsKLQkJCX0KLQkJfQotCQljaGVjay0+c2hvdygpOwotCX0KLQl1bml0X21hc2tfZ3JvdXAtPnNldE1pbmltdW1TaXplKHVuaXRfbWFza19ncm91cC0+c2l6ZUhpbnQoKSk7Ci0Jc2V0dXBfY29uZmlnX3RhYi0+c2V0TWluaW11bVNpemUoc2V0dXBfY29uZmlnX3RhYi0+c2l6ZUhpbnQoKSk7Ci19Ci0KLQotdWludCBvcHJvZl9zdGFydDo6bWF4X3BlcmZfY291bnQoKSBjb25zdAotewotCXJldHVybiBjcHVfdHlwZSA9PSBDUFVfUlRDID8gT1BfTUFYX1JUQ19DT1VOVCA6IE9QX01BWF9QRVJGX0NPVU5UOwotfQotCi0KLXZvaWQgb3Byb2Zfc3RhcnQ6Om9uX2ZsdXNoX3Byb2ZpbGVyX2RhdGEoKQotewotCXZlY3RvcjxzdHJpbmc+IGFyZ3M7Ci0JYXJncy5wdXNoX2JhY2soIi0tZHVtcCIpOwotCi0JaWYgKGRhZW1vbl9zdGF0dXMoKS5ydW5uaW5nKQotCQlkb19leGVjX2NvbW1hbmQoT1BfQklORElSICIvb3Bjb250cm9sIiwgYXJncyk7Ci0JZWxzZQotCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCAiVGhlIHByb2ZpbGVyIGlzIG5vdCBzdGFydGVkLiIpOwotfQotCi0KLS8vIHVzZXIgaXMgaGFwcHkgb2YgaXRzIHNldHRpbmcuCi12b2lkIG9wcm9mX3N0YXJ0Ojpvbl9zdGFydF9wcm9maWxlcigpCi17Ci0JLy8gc2F2ZSB0aGUgY3VycmVudCBzZXR0aW5ncwotCXJlY29yZF9zZWxlY3RlZF9ldmVudF9jb25maWcoKTsKLQotCWJvb2wgb25lX2VuYWJsZSA9IGZhbHNlOwotCi0JUUxpc3RWaWV3SXRlbSAqIGN1cjsKLQlmb3IgKGN1ciA9IGV2ZW50c19saXN0LT5maXJzdENoaWxkKCk7IGN1cjsgY3VyID0gY3VyLT5uZXh0U2libGluZygpKSB7Ci0JCWlmICghY3VyLT5pc1NlbGVjdGVkKCkpCi0JCQljb250aW51ZTsKLQotCQkvLyB0aGUgbWlzc2luZyByZWZlcmVuY2UgaXMgaW50ZW5kZWQ6IGdjYyAyLjkxLjY2IGNhbiBjb21waWxlCi0JCS8vICJvcF9ldmVudF9kZXNjciBjb25zdCAmIGRlc2NyID0gLi4uIiB3L28gYSB3YXJuaW5nCi0JCW9wX2V2ZW50X2Rlc2NyIGNvbnN0IGRlc2NyID0KLQkJCWxvY2F0ZV9ldmVudChjdXItPnRleHQoMCkubGF0aW4xKCkpOwotCi0JCWV2ZW50X3NldHRpbmcgJiBjZmcgPSBldmVudF9jZmdzW2N1ci0+dGV4dCgwKS5sYXRpbjEoKV07Ci0KLQkJb25lX2VuYWJsZSA9IHRydWU7Ci0KLQkJaWYgKCFjZmcub3NfcmluZ19jb3VudCAmJiAhY2ZnLnVzZXJfcmluZ19jb3VudCkgewotCQkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcodGhpcywgMCwgIllvdSBtdXN0IHNlbGVjdCB0byAiCi0JCQkJCSAicHJvZmlsZSBhdCBsZWFzdCBvbmUgb2YgdXNlciBiaW5hcmllcy9rZXJuZWwiKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWlmIChjZmcuY291bnQgPCBkZXNjci5taW5fY291bnQgfHwgCi0JCSAgICBjZmcuY291bnQgPiBtYXhfcGVyZl9jb3VudCgpKSB7Ci0JCQlvc3RyaW5nc3RyZWFtIG91dDsKLQotCQkJb3V0IDw8ICJldmVudCAiIDw8IGRlc2NyLm5hbWUgPDwgIiBjb3VudCBvZiByYW5nZTogIgotCQkJICAgIDw8IGNmZy5jb3VudCA8PCAiIG11c3QgYmUgaW4gWyAiCi0JCQkgICAgPDwgZGVzY3IubWluX2NvdW50IDw8ICIsICIKLQkJCSAgICA8PCBtYXhfcGVyZl9jb3VudCgpCi0JCQkgICAgPDwgIl0iOwotCi0JCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCBvdXQuc3RyKCkuY19zdHIoKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoZGVzY3IudW5pdCAmJgotCQkgICAgZGVzY3IudW5pdC0+dW5pdF90eXBlX21hc2sgPT0gdXRtX2JpdG1hc2sgJiYKLQkJICAgIGNmZy51bWFzayA9PSAwKSB7Ci0JCQlvc3RyaW5nc3RyZWFtIG91dDsKLQotCQkJb3V0IDw8ICJldmVudCAiIDw8IGRlc2NyLm5hbWUgPDwgIiBpbnZhbGlkIHVuaXQgbWFzazogIgotCQkJICAgIDw8IGNmZy51bWFzayA8PCBlbmRsOwotCi0JCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCBvdXQuc3RyKCkuY19zdHIoKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlpZiAob25lX2VuYWJsZSA9PSBmYWxzZSAmJiBjcHVfdHlwZSAhPSBDUFVfVElNRVJfSU5UKSB7Ci0JCVFNZXNzYWdlQm94Ojp3YXJuaW5nKHRoaXMsIDAsICJObyBjb3VudGVycyBlbmFibGVkLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoZGFlbW9uX3N0YXR1cygpLnJ1bm5pbmcpIHsKLQkJLy8gZ2NjIDIuOTEgd29yayBhcm91bmQKLQkJaW50IHVzZXJfY2hvaWNlID0gMDsKLQkJdXNlcl9jaG9pY2UgPQotCQkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcodGhpcywgMCwKLQkJCQkJICAgICAiUHJvZmlsZXIgYWxyZWFkeSBzdGFydGVkOlxuXG4iCi0JCQkJCSAgICAgInN0b3AgYW5kIHJlc3RhcnQgaXQ/IiwKLQkJCQkJICAgICAiJlJlc3RhcnQiLCAiJkNhbmNlbCIsIDAsIDAsIDEpOwotCi0JCWlmICh1c2VyX2Nob2ljZSA9PSAxKQotCQkJcmV0dXJuOwotCi0JCS8vIHRoaXMgZmx1c2ggcHJvZmlsZXIgZGF0YSBhbHNvLgotCQlvbl9zdG9wX3Byb2ZpbGVyKCk7Ci0JfQotCi0JdmVjdG9yPHN0cmluZz4gYXJnczsKLQotCS8vIHNhdmVfY29uZmlnIHZhbGlkYXRlIGFuZCBzZXR1cCB0aGUgY29uZmlnCi0JaWYgKHNhdmVfY29uZmlnKCkpIHsKLQkJLy8gbm93IGFjdHVhbGx5IHN0YXJ0Ci0JCWFyZ3MucHVzaF9iYWNrKCItLXN0YXJ0Iik7Ci0JCWlmIChjb25maWcudmVyYm9zZSkKLQkJCWFyZ3MucHVzaF9iYWNrKCItLXZlcmJvc2UiKTsKLQkJZG9fZXhlY19jb21tYW5kKE9QX0JJTkRJUiAiL29wY29udHJvbCIsIGFyZ3MpOwotCX0KLQotCXRvdGFsX25yX2ludGVycnVwdHMgPSAwOwotCXRpbWVyRXZlbnQoMCk7Ci19Ci0KLQotYm9vbCBvcHJvZl9zdGFydDo6c2F2ZV9jb25maWcoKQotewotCWlmICghcmVjb3JkX2NvbmZpZygpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQl2ZWN0b3I8c3RyaW5nPiBhcmdzOwotCi0JLy8gc2F2aW5nIGNvbmZpZyBpcyBkb25lIGJ5IHJ1bm5pbmcgb3Bjb250cm9sIC0tc2V0dXAgd2l0aCBhcHByb3ByaWF0ZQotCS8vIHNldHRlZCBwYXJhbWV0ZXJzIHNvIHdlIHVzZSB0aGUgc2FtZSBjb25maWcgZmlsZSBhcyBjb21tYW5kIGxpbmUKLQkvLyB0b29scwotCi0JYXJncy5wdXNoX2JhY2soIi0tc2V0dXAiKTsKLQotCWJvb2wgb25lX2VuYWJsZWQgPSBmYWxzZTsKLQotCXZlY3RvcjxzdHJpbmc+IHRtcGFyZ3M7Ci0JdG1wYXJncy5wdXNoX2JhY2soIi0tc2V0dXAiKTsKLQotCVFMaXN0Vmlld0l0ZW0gKiBjdXI7Ci0JZm9yIChjdXIgPSBldmVudHNfbGlzdC0+Zmlyc3RDaGlsZCgpOyBjdXI7IGN1ciA9IGN1ci0+bmV4dFNpYmxpbmcoKSkgewotCQlpZiAoIWN1ci0+aXNTZWxlY3RlZCgpKQotCQkJY29udGludWU7Ci0KLQkJZXZlbnRfc2V0dGluZyAmIGNmZyA9IGV2ZW50X2NmZ3NbY3VyLT50ZXh0KDApLmxhdGluMSgpXTsKLQotCQlvcF9ldmVudF9kZXNjciBjb25zdCAmIGRlc2NyID0KLQkJCWxvY2F0ZV9ldmVudChjdXItPnRleHQoMCkubGF0aW4xKCkpOwotCi0JCW9uZV9lbmFibGVkID0gdHJ1ZTsKLQotCQlzdHJpbmcgYXJnID0gIi0tZXZlbnQ9IiArIGRlc2NyLm5hbWU7Ci0JCWFyZyArPSAiOiIgKyBvcF9sZXhpY2FsX2Nhc3Q8c3RyaW5nPihjZmcuY291bnQpOwotCQlhcmcgKz0gIjoiICsgb3BfbGV4aWNhbF9jYXN0PHN0cmluZz4oY2ZnLnVtYXNrKTsKLQkJYXJnICs9ICI6IiArIG9wX2xleGljYWxfY2FzdDxzdHJpbmc+KGNmZy5vc19yaW5nX2NvdW50KTsKLQkJYXJnICs9ICI6IiArIG9wX2xleGljYWxfY2FzdDxzdHJpbmc+KGNmZy51c2VyX3JpbmdfY291bnQpOwotCi0JCXRtcGFyZ3MucHVzaF9iYWNrKGFyZyk7Ci0JfQotCi0JLy8gb25seSBzZXQgY291bnRlcnMgaWYgYXQgbGVhc3Qgb25lIGlzIGVuYWJsZWQKLQlpZiAob25lX2VuYWJsZWQpCi0JCWFyZ3MgPSB0bXBhcmdzOwotCi0JaWYgKGNvbmZpZy5ub19rZXJuZWwpIHsKLQkJYXJncy5wdXNoX2JhY2soIi0tbm8tdm1saW51eCIpOwotCX0gZWxzZSB7Ci0JCWFyZ3MucHVzaF9iYWNrKCItLXZtbGludXg9IiArIGNvbmZpZy5rZXJuZWxfZmlsZW5hbWUpOwotCX0KLQotCWlmIChvcF9nZXRfaW50ZXJmYWNlKCkgPT0gT1BfSU5URVJGQUNFXzI0KSB7Ci0JCWFyZ3MucHVzaF9iYWNrKCItLWJ1ZmZlci1zaXplPSIgKwotCQkgICAgICAgb3BfbGV4aWNhbF9jYXN0PHN0cmluZz4oY29uZmlnLmJ1ZmZlcl9zaXplKSk7Ci0JCWFyZ3MucHVzaF9iYWNrKCItLW5vdGUtdGFibGUtc2l6ZT0iICsKLQkJICAgICAgIG9wX2xleGljYWxfY2FzdDxzdHJpbmc+KGNvbmZpZy5ub3RlX3RhYmxlX3NpemUpKTsKLQl9Ci0KLQlzdHJpbmcgc2VwID0gIi0tc2VwYXJhdGU9IjsKLQotCWlmIChjb25maWcuc2VwYXJhdGVfbGliKQotCQlzZXAgKz0gImxpYnJhcnksIjsKLQlpZiAoY29uZmlnLnNlcGFyYXRlX2tlcm5lbCkKLQkJc2VwICs9ICJrZXJuZWwsIjsKLQlpZiAoY29uZmlnLnNlcGFyYXRlX2NwdSkKLQkJc2VwICs9ICJjcHUsIjsKLQlpZiAoY29uZmlnLnNlcGFyYXRlX3RocmVhZCkKLQkJc2VwICs9ICJ0aHJlYWQsIjsKLQotCWlmIChzZXAgPT0gIi0tc2VwYXJhdGU9IikKLQkJc2VwICs9ICJub25lIjsKLQlhcmdzLnB1c2hfYmFjayhzZXApOwotCi0JLy8gMi45NSB3b3JrLWFyb3VuZCwgaXQgZGlkbid0IGxpa2UgcmV0dXJuICFkb19leGVjX2NvbW1hbmQoKSAKLQlib29sIHJldCA9ICFkb19leGVjX2NvbW1hbmQoT1BfQklORElSICIvb3Bjb250cm9sIiwgYXJncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0vLyBmbHVzaCBhbmQgc3RvcCB0aGUgcHJvZmlsZXIgaWYgaXQgd2FzIHN0YXJ0ZWQuCi12b2lkIG9wcm9mX3N0YXJ0Ojpvbl9zdG9wX3Byb2ZpbGVyKCkKLXsKLQl2ZWN0b3I8c3RyaW5nPiBhcmdzOwotCWFyZ3MucHVzaF9iYWNrKCItLXNodXRkb3duIik7Ci0KLQlpZiAoZGFlbW9uX3N0YXR1cygpLnJ1bm5pbmcpCi0JCWRvX2V4ZWNfY29tbWFuZChPUF9CSU5ESVIgIi9vcGNvbnRyb2wiLCBhcmdzKTsKLQllbHNlCi0JCVFNZXNzYWdlQm94Ojp3YXJuaW5nKHRoaXMsIDAsICJUaGUgcHJvZmlsZXIgaXMgYWxyZWFkeSBzdG9wcGVkLiIpOwotCi0JdGltZXJFdmVudCgwKTsKLX0KLQotCi12b2lkIG9wcm9mX3N0YXJ0Ojpvbl9zZXBhcmF0ZV9rZXJuZWxfY2JfY2hhbmdlZChpbnQgc3RhdGUpCi17Ci0JaWYgKHN0YXRlID09IDIpCi0JCXNlcGFyYXRlX2xpYl9jYi0+c2V0Q2hlY2tlZCh0cnVlKTsKLX0KLQotCi0vLy8gZnVuY3Rpb24gb2JqZWN0IGZvciBtYXRjaGluZyBhZ2FpbnN0IG5hbWUKLWNsYXNzIGV2ZW50X25hbWVfZXEgewotCXN0cmluZyBuYW1lXzsKLXB1YmxpYzoKLQlleHBsaWNpdCBldmVudF9uYW1lX2VxKHN0cmluZyBjb25zdCAmIHMpIDogbmFtZV8ocykge30KLQlib29sIG9wZXJhdG9yKCkob3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkKSBjb25zdCB7Ci0JCXJldHVybiBkLm5hbWUgPT0gbmFtZV87Ci0JfQotfTsKLQotCi0vLyBoZWxwZXIgdG8gcmV0cmlldmUgYW4gZXZlbnQgZGVzY3IgdGhyb3VnaCBpdHMgbmFtZS4KLW9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgb3Byb2Zfc3RhcnQ6OmxvY2F0ZV9ldmVudChzdHJpbmcgY29uc3QgJiBuYW1lKSBjb25zdAotewotCXJldHVybiAqKGZpbmRfaWYodl9ldmVudHMuYmVnaW4oKSwgdl9ldmVudHMuZW5kKCksIGV2ZW50X25hbWVfZXEobmFtZSkpKTsKLX0KZGlmZiAtLWdpdCBhL2d1aS9vcHJvZl9zdGFydC5oIGIvZ3VpL29wcm9mX3N0YXJ0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNjIxMmIuLjAwMDAwMDAKLS0tIGEvZ3VpL29wcm9mX3N0YXJ0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcHJvZl9zdGFydC5oCi0gKiBUaGUgR1VJIHN0YXJ0IG1haW4gY2xhc3MKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIE9QUk9GX1NUQVJUX0gKLSNkZWZpbmUgT1BST0ZfU1RBUlRfSAotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRlICJ1aS9vcHJvZl9zdGFydC5iYXNlLmgiCi0jaW5jbHVkZSAib3Byb2Zfc3RhcnRfY29uZmlnLmgiCi0KLSNpbmNsdWRlICJvcF9ldmVudHMuaCIKLQotY2xhc3MgUUludFZhbGlkYXRvcjsKLWNsYXNzIFFMaXN0Vmlld0l0ZW07Ci1jbGFzcyBRVGltZXJFdmVudDsKLQotLy8vIGEgc3RydWN0IGRlc2NyaWJpbmcgYSBwYXJ0aWN1bGFyIGV2ZW50IHR5cGUKLXN0cnVjdCBvcF9ldmVudF9kZXNjciB7Ci0Jb3BfZXZlbnRfZGVzY3IoKTsKLQotCS8vLyBiaXQgbWFzayBvZiBhbGxvd2VkIGNvdW50ZXJzCi0JdWludCBjb3VudGVyX21hc2s7Ci0JLy8vIGhhcmR3YXJlIGV2ZW50IG51bWJlcgotCXU4IHZhbDsKLQkvLy8gdW5pdCBtYXNrIHZhbHVlcyBpZiBhcHBsaWNhYmxlCi0Jb3BfdW5pdF9tYXNrIGNvbnN0ICogdW5pdDsKLQkvLy8gbmFtZSBvZiBldmVudAotCXN0ZDo6c3RyaW5nIG5hbWU7Ci0JLy8vIGRlc2NyaXB0aW9uIG9mIGV2ZW50Ci0Jc3RkOjpzdHJpbmcgaGVscF9zdHI7Ci0JLy8vIG1pbmltdW0gY291bnRlciB2YWx1ZQotCXVpbnQgbWluX2NvdW50OwotfTsKLQotY2xhc3Mgb3Byb2Zfc3RhcnQgOiBwdWJsaWMgb3Byb2Zfc3RhcnRfYmFzZQotewotCVFfT0JKRUNUCi0KLXB1YmxpYzoKLQlvcHJvZl9zdGFydCgpOwotCi1wcm90ZWN0ZWQgc2xvdHM6Ci0JLy8vIHNlbGVjdCB0aGUga2VybmVsIGltYWdlIGZpbGVuYW1lCi0Jdm9pZCBjaG9vc2Vfa2VybmVsX2ZpbGVuYW1lKCk7Ci0JLy8vIGZsdXNoIHByb2ZpbGVyCi0Jdm9pZCBvbl9mbHVzaF9wcm9maWxlcl9kYXRhKCk7Ci0JLy8vIHN0YXJ0IHByb2ZpbGVyCi0Jdm9pZCBvbl9zdGFydF9wcm9maWxlcigpOwotCS8vLyBzdG9wIHByb2ZpbGVyCi0Jdm9pZCBvbl9zdG9wX3Byb2ZpbGVyKCk7Ci0JLy8vIGV2ZW50cyBzZWxlY3Rpb24gY2hhbmdlCi0Jdm9pZCBldmVudF9zZWxlY3RlZCgpOwotCS8vLyB0aGUgbW91c2UgaXMgb3ZlciBhbiBldmVudAotCXZvaWQgZXZlbnRfb3ZlcihRTGlzdFZpZXdJdGVtICopOwotCS8vLyBzdGF0ZSBvZiBzZXBhcmF0ZV9rZXJuZWxfY2IgY2hhbmdlZAotCXZvaWQgb25fc2VwYXJhdGVfa2VybmVsX2NiX2NoYW5nZWQoaW50KTsKLQotCS8vLyBjbG9zZSB0aGUgZGlhbG9nCi0Jdm9pZCBhY2NlcHQoKTsKLQotCS8vLyBXTSBoaWRlIGV2ZW50Ci0Jdm9pZCBjbG9zZUV2ZW50KFFDbG9zZUV2ZW50ICogZSk7Ci0KLQkvLy8gdGltZXIgZXZlbnQKLQl2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQgKiBlKTsKLQotcHJpdmF0ZToKLQkvLy8gdGhlIGNvdW50ZXIgY29tYm8gaGFzIGJlZW4gYWN0aXZhdGVkCi0Jdm9pZCBmaWxsX2V2ZW50c19saXN0Ym94KCk7Ci0KLQkvLy8gZmlsbCB0aGUgZXZlbnQgZGV0YWlscyBhbmQgZ3VpIHNldHVwCi0Jdm9pZCBmaWxsX2V2ZW50cygpOwotCi0JLy8vIGZpbmQgYW4gZXZlbnQgZGVzY3JpcHRpb24gYnkgbmFtZQotCW9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgbG9jYXRlX2V2ZW50KHN0ZDo6c3RyaW5nIGNvbnN0ICYgbmFtZSkgY29uc3Q7Ci0KLQkvLy8gdXBkYXRlIGNvbmZpZyBvbiB1c2VyIGNoYW5nZQotCXZvaWQgcmVjb3JkX3NlbGVjdGVkX2V2ZW50X2NvbmZpZygpOwotCS8vLyB1cGRhdGUgY29uZmlnIGFuZCB2YWxpZGF0ZQotCWJvb2wgcmVjb3JkX2NvbmZpZygpOwotCi0JLy8vIGNhbGN1bGF0ZSB1bml0IG1hc2sgZm9yIGdpdmVuIGV2ZW50IGFuZCB1bml0IG1hc2sgcGFydAotCXZvaWQgZ2V0X3VuaXRfbWFza19wYXJ0KG9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgZGVzY3IsIHVpbnQgbnVtLCBib29sIHNlbGVjdGVkLCB1aW50ICYgbWFzayk7Ci0JLy8vIGNhbGN1bGF0ZSB1bml0IG1hc2sgZm9yIGdpdmVuIGV2ZW50Ci0JdWludCBnZXRfdW5pdF9tYXNrKG9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgZGVzY3IpOwotCS8vLyBzZXQgdGhlIHVuaXQgbWFzayB3aWRnZXRzIGZvciBnaXZlbiBldmVudAotCXZvaWQgc2V0dXBfdW5pdF9tYXNrcyhvcF9ldmVudF9kZXNjciBjb25zdCAmIGRlc2NyKTsKLQotCS8vLyByZXR1cm4gdGhlIG1heGltdW0gcGVyZiBjb3VudGVyIHZhbHVlIGZvciB0aGUgY3VycmVudCBjcHUgdHlwZQotCXVpbnQgbWF4X3BlcmZfY291bnQoKSBjb25zdDsKLQotCS8vLyBzaG93IGFuIGV2ZW50J3Mgc2V0dGluZ3MKLQl2b2lkIGRpc3BsYXlfZXZlbnQob3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkZXNjcnApOwotCi0JLy8vIGhpZGUgdW5pdCBtYXNrIHdpZGdldHMKLQl2b2lkIGhpZGVfbWFza3Modm9pZCk7Ci0KLQkvLy8gcmVhZCB0aGUgZXZlbnRzIHNldCBpbiBkYWVtb25yYwotCXZvaWQgcmVhZF9zZXRfZXZlbnRzKCk7Ci0JLy8vIHVzZSB0aGUgZGVmYXVsdCBldmVudAotCXZvaWQgc2V0dXBfZGVmYXVsdF9ldmVudCgpOwotCS8vLyBsb2FkIHRoZSBleHRyYSBjb25maWcgZmlsZQotCXZvaWQgbG9hZF9jb25maWdfZmlsZSgpOwotCS8vLyBzYXZlIHRoZSBjb25maWcKLQlib29sIHNhdmVfY29uZmlnKCk7Ci0KLQkvLy8gcmVkcmF3IHRoZSBldmVudCBsaXN0IGJ5IGNoYW5naW5nIGljb24gc3RhdHVzCi0Jdm9pZCBkcmF3X2V2ZW50X2xpc3QoKTsKLQotCS8vLyByZXR1cm4gdHJ1ZSBpZiBpdGVtIGlzIHNlbGVjdGFibGUgb3IgYWxyZWFkeSBzZWxlY3RlZAotCWJvb2wgaXNfc2VsZWN0YWJsZV9ldmVudChRTGlzdFZpZXdJdGVtICogaXRlbSk7Ci0KLQkvLy8gdHJ5IHRvIGFsbG9jIGNvdW50ZXJzIGZvciB0aGUgc2VsZWN0ZWRfZXZlbnRzCi0JYm9vbCBhbGxvY19zZWxlY3RlZF9ldmVudHMoKSBjb25zdDsKLQotCS8vLyB2YWxpZGF0b3IgZm9yIGV2ZW50IGNvdW50Ci0JUUludFZhbGlkYXRvciogZXZlbnRfY291bnRfdmFsaWRhdG9yOwotCi0JLy8vIGFsbCBhdmFpbGFibGUgZXZlbnRzIGZvciB0aGlzIGhhcmR3YXJlCi0Jc3RkOjp2ZWN0b3I8b3BfZXZlbnRfZGVzY3I+IHZfZXZlbnRzOwotCi0JLy8vIGN1cnJlbnQgZXZlbnQgY29uZmlncyBmb3IgZWFjaCBjb3VudGVyCi0JdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgZXZlbnRfc2V0dGluZz4gZXZlbnRfc2V0dGluZ19tYXA7Ci0JZXZlbnRfc2V0dGluZ19tYXAgZXZlbnRfY2ZnczsKLQotCS8vLyBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGV2ZW50cy4gV2UgbXVzdCB0cmFjayB0aGlzIGJlY2F1c2UKLQkvLy8gd2l0aCBtdWx0aXBsZSBzZWxlY3Rpb24gbGlzdGJveCBRVCBkb2Vzbid0IGFsbG93IHRvIGtub3cKLQkvLy8gd2hhdCBpcyB0aGUgbGFzdCBzZWxlY3RlZCBpdGVtLiBldmVudHNfc2VsZWN0ZWQoKSB1cGRhdGUgaXQKLQlzdGQ6OnNldDxRTGlzdFZpZXdJdGVtICo+IHNlbGVjdGVkX2V2ZW50czsKLQlRTGlzdFZpZXdJdGVtICogY3VycmVudF9ldmVudDsKLQotCS8vLyBjdXJyZW50IGNvbmZpZwotCWNvbmZpZ19zZXR0aW5nIGNvbmZpZzsKLQotCS8vLyB0aGUgZXhwYW5zaW9uIG9mICJ+IiBkaXJlY3RvcnkKLQlzdGQ6OnN0cmluZyB1c2VyX2RpcjsKLQotCS8vLyBDUFUgdHlwZQotCW9wX2NwdSBjcHVfdHlwZTsKLQotCS8vLyBDUFUgc3BlZWQgaW4gTUh6Ci0JZG91YmxlIGNwdV9zcGVlZDsKLQotCS8vLyB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlIEhXIGNvdW50ZXJzCi0JdWludCBvcF9ucl9jb3VudGVyczsKLQotCS8vLyBUb3RhbCBudW1iZXIgb2Ygc2FtcGxlcyBmb3IgdGhpcyBydW4KLQl1bnNpZ25lZCBsb25nIHRvdGFsX25yX2ludGVycnVwdHM7Ci19OwotCi0jZW5kaWYgLy8gT1BST0ZfU1RBUlRfSApkaWZmIC0tZ2l0IGEvZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHAgYi9ndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyYjEzMC4uMDAwMDAwMAotLS0gYS9ndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wcm9mX3N0YXJ0X2NvbmZpZy5jcHAKLSAqIEdVSSBzdGFydHVwIGNvbmZpZyBtYW5hZ2VtZW50Ci0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPGZzdHJlYW0+Ci0jaW5jbHVkZSA8aW9tYW5pcD4KLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0jaW5jbHVkZSAib3Byb2Zfc3RhcnRfY29uZmlnLmgiCi0jaW5jbHVkZSAib3BfY29uZmlnLmgiCi0jaW5jbHVkZSAib3BfY29uZmlnXzI0LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWV2ZW50X3NldHRpbmc6OmV2ZW50X3NldHRpbmcoKQotCToKLQljb3VudCgwKSwKLQl1bWFzaygwKSwKLQlvc19yaW5nX2NvdW50KDApLAotCXVzZXJfcmluZ19jb3VudCgwKQotewotfQotCi0KLWNvbmZpZ19zZXR0aW5nOjpjb25maWdfc2V0dGluZygpCi0JOgotCWJ1ZmZlcl9zaXplKE9QX0RFRkFVTFRfQlVGX1NJWkUpLAotCW5vdGVfdGFibGVfc2l6ZShPUF9ERUZBVUxUX05PVEVfU0laRSksCi0Jbm9fa2VybmVsKGZhbHNlKSwKLQl2ZXJib3NlKGZhbHNlKSwKLQlzZXBhcmF0ZV9saWIoZmFsc2UpLAotCXNlcGFyYXRlX2tlcm5lbChmYWxzZSksCi0Jc2VwYXJhdGVfY3B1KGZhbHNlKSwKLQlzZXBhcmF0ZV90aHJlYWQoZmFsc2UpCi17Ci0Jc3RydWN0IHV0c25hbWUgaW5mbzsKLQotCS8qIEd1ZXNzIHBhdGggdG8gdm1saW51eCBiYXNlZCBvbiBrZXJuZWwgY3VycmVudGx5IHJ1bm5pbmcuICovCi0JaWYgKHVuYW1lKCZpbmZvKSkgewotCQlwZXJyb3IoIm9wcm9mX3N0YXJ0OiBVbmFibGUgdG8gZGV0ZXJtaW5lIE9TIHJlbGVhc2UuIik7Ci0JfSBlbHNlIHsKLQkJc3RyaW5nIGNvbnN0IHZlcnNpb24oaW5mby5yZWxlYXNlKTsKLQkJc3RyaW5nIGNvbnN0IHZtbGludXhfcGF0aCgiL2xpYi9tb2R1bGVzLyIgKyB2ZXJzaW9uCi0JCQkJCSArICIvYnVpbGQvdm1saW51eCIpOwotCQlrZXJuZWxfZmlsZW5hbWUgPSB2bWxpbnV4X3BhdGg7Ci0JfQotfQotCi0KLXZvaWQgY29uZmlnX3NldHRpbmc6OmxvYWQoaXN0cmVhbSAmIGluKQotewotCWJ1ZmZlcl9zaXplID0gT1BfREVGQVVMVF9CVUZfU0laRTsKLQlub3RlX3RhYmxlX3NpemUgPSBPUF9ERUZBVUxUX05PVEVfU0laRTsKLQotCXN0cmluZyBzdHI7Ci0KLQl3aGlsZSAoZ2V0bGluZShpbiwgc3RyKSkgewotCQlzdHJpbmcgdmFsID0gc3BsaXQoc3RyLCAnPScpOwotCQlpZiAoc3RyID09ICJCVUZfU0laRSIpIHsKLQkJCWJ1ZmZlcl9zaXplID0gb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4odmFsKTsKLQkJCWlmIChidWZmZXJfc2l6ZSA8IE9QX0RFRkFVTFRfQlVGX1NJWkUpCi0JCQkJYnVmZmVyX3NpemUgPSBPUF9ERUZBVUxUX0JVRl9TSVpFOwotCQl9IGVsc2UgaWYgKHN0ciA9PSAiTk9URV9TSVpFIikgewotCQkJbm90ZV90YWJsZV9zaXplID0gb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4odmFsKTsKLQkJCWlmIChub3RlX3RhYmxlX3NpemUgPCBPUF9ERUZBVUxUX05PVEVfU0laRSkKLQkJCQlub3RlX3RhYmxlX3NpemUgPSBPUF9ERUZBVUxUX05PVEVfU0laRTsKLQkJfSBlbHNlIGlmIChzdHIgPT0gIlZNTElOVVgiKSB7Ci0JCQlpZiAodmFsID09ICJub25lIikgewotCQkJCWtlcm5lbF9maWxlbmFtZSA9ICIiOwotCQkJCW5vX2tlcm5lbCA9IHRydWU7Ci0JCQl9IGVsc2UgaWYgKCF2YWwuZW1wdHkoKSkgewotCQkJCW5vX2tlcm5lbCA9IGZhbHNlOwotCQkJCWtlcm5lbF9maWxlbmFtZSA9IHZhbDsKLQkJCX0KLQkJfSBlbHNlIGlmIChzdHIgPT0gIlNFUEFSQVRFX0xJQiIpIHsKLQkJCXNlcGFyYXRlX2xpYiA9IG9wX2xleGljYWxfY2FzdDxib29sPih2YWwpOwotCQl9IGVsc2UgaWYgKHN0ciA9PSAiU0VQQVJBVEVfS0VSTkVMIikgewotCQkJc2VwYXJhdGVfa2VybmVsID0gb3BfbGV4aWNhbF9jYXN0PGJvb2w+KHZhbCk7Ci0JCX0gZWxzZSBpZiAoc3RyID09ICJTRVBBUkFURV9DUFUiKSB7Ci0JCQlzZXBhcmF0ZV9jcHUgPSBvcF9sZXhpY2FsX2Nhc3Q8Ym9vbD4odmFsKTsKLQkJfSBlbHNlIGlmIChzdHIgPT0gIlNFUEFSQVRFX1RIUkVBRCIpIHsKLQkJCXNlcGFyYXRlX3RocmVhZCA9IG9wX2xleGljYWxfY2FzdDxib29sPih2YWwpOwotCQl9Ci0JfQotfQotCi0KLWlzdHJlYW0gJiBvcGVyYXRvcj4+KGlzdHJlYW0gJiBpbiwgY29uZmlnX3NldHRpbmcgJiBvYmplY3QpCi17Ci0Jb2JqZWN0LmxvYWQoaW4pOwotCXJldHVybiBpbjsKLX0KZGlmZiAtLWdpdCBhL2d1aS9vcHJvZl9zdGFydF9jb25maWcuaCBiL2d1aS9vcHJvZl9zdGFydF9jb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U4Mjg3NS4uMDAwMDAwMAotLS0gYS9ndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wcm9mX3N0YXJ0X2NvbmZpZy5oCi0gKiBHVUkgc3RhcnR1cCBjb25maWcgbWFuYWdlbWVudAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpZm5kZWYgT1BST0ZfU1RBUlRfQ09ORklHX0gKLSNkZWZpbmUgT1BST0ZfU1RBUlRfQ09ORklHX0gKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0KLS8vLyBTdG9yZSB0aGUgc2V0dXAgb2Ygb25lIGV2ZW50Ci1zdHJ1Y3QgZXZlbnRfc2V0dGluZyB7Ci0KLQlldmVudF9zZXR0aW5nKCk7Ci0KLQl1aW50IGNvdW50OwotCXVpbnQgdW1hc2s7Ci0JYm9vbCBvc19yaW5nX2NvdW50OwotCWJvb2wgdXNlcl9yaW5nX2NvdW50OwotfTsKLQotLyoqCi0gKiBTdG9yZSB0aGUgZ2VuZXJhbCAgY29uZmlndXJhdGlvbiBvZiB0aGUgcHJvZmlsZXIuCi0gKiBUaGVyZSBpcyBubyBzYXZlKCksIGluc3RlYWQgb3Bjb250cm9sIC0tc2V0dXAgbXVzdCBiZQotICogY2FsbGVkLiBUaGlzIHVzZXMgb3Bjb250cm9sJ3MgZGFlbW9ucmMgZmlsZS4KLSAqLwotc3RydWN0IGNvbmZpZ19zZXR0aW5nIHsKLQljb25maWdfc2V0dGluZygpOwotCi0Jdm9pZCBsb2FkKHN0ZDo6aXN0cmVhbSAmIGluKTsKLQotCXVpbnQgYnVmZmVyX3NpemU7Ci0JdWludCBub3RlX3RhYmxlX3NpemU7Ci0Jc3RkOjpzdHJpbmcga2VybmVsX2ZpbGVuYW1lOwotCWJvb2wgbm9fa2VybmVsOwotCWJvb2wgdmVyYm9zZTsKLQlib29sIHNlcGFyYXRlX2xpYjsKLQlib29sIHNlcGFyYXRlX2tlcm5lbDsKLQlib29sIHNlcGFyYXRlX2NwdTsKLQlib29sIHNlcGFyYXRlX3RocmVhZDsKLX07Ci0KLXN0ZDo6aXN0cmVhbSAmIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICYgaW4sIGNvbmZpZ19zZXR0aW5nICYgb2JqZWN0KTsKLQotI2VuZGlmIC8vICEgT1BST0ZfU1RBUlRfQ09ORklHX0gKZGlmZiAtLWdpdCBhL2d1aS9vcHJvZl9zdGFydF9tYWluLmNwcCBiL2d1aS9vcHJvZl9zdGFydF9tYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRkYTVkZS4uMDAwMDAwMAotLS0gYS9ndWkvb3Byb2Zfc3RhcnRfbWFpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wcm9mX3N0YXJ0X21haW4uY3BwCi0gKiBtYWluIHJvdXRpbmUgZm9yIEdVSSBzdGFydAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDxxYXBwbGljYXRpb24uaD4KLQotI2luY2x1ZGUgIm9wcm9mX3N0YXJ0LmgiCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCi17Ci0JUUFwcGxpY2F0aW9uIGEoYXJnYywgYXJndik7Ci0KLQlvcHJvZl9zdGFydCogZGxnID0gbmV3IG9wcm9mX3N0YXJ0KCk7Ci0KLQlhLnNldE1haW5XaWRnZXQoZGxnKTsKLQotCWRsZy0+c2hvdygpOwotCi0JcmV0dXJuIGEuZXhlYygpOwotfQpkaWZmIC0tZ2l0IGEvZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwIGIvZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWQ5Y2FlLi4wMDAwMDAwCi0tLSBhL2d1aS9vcHJvZl9zdGFydF91dGlsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM0MSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wcm9mX3N0YXJ0X3V0aWwuY3BwCi0gKiBNaXNjZWxsYW5lb3VzIGhlbHBlcnMgZm9yIHRoZSBHVUkgc3RhcnQKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Z2xvYi5oPgotCi0jaW5jbHVkZSA8Y2Vycm5vPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGZzdHJlYW0+Ci0KLSNpbmNsdWRlIDxxZmlsZWRpYWxvZy5oPgotI2luY2x1ZGUgPHFtZXNzYWdlYm94Lmg+Ci0KLSNpbmNsdWRlICJvcF9maWxlLmgiCi0jaW5jbHVkZSAiZmlsZV9tYW5pcC5oIgotI2luY2x1ZGUgImNoaWxkX3JlYWRlci5oIgotI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgotCi0jaW5jbHVkZSAib3Byb2Zfc3RhcnQuaCIKLSNpbmNsdWRlICJvcHJvZl9zdGFydF91dGlsLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIHJldHVybiB0aGUgfiBleHBhbnNpb24gc3VmZml4ZWQgd2l0aCBhICcvJwotc3RyaW5nIGNvbnN0IGdldF91c2VyX2RpcigpCi17Ci0Jc3RhdGljIHN0cmluZyB1c2VyX2RpcjsKLQotCWlmICh1c2VyX2Rpci5lbXB0eSgpKSB7Ci0JCWNoYXIgKiBkaXIgPSBnZXRlbnYoIkhPTUUiKTsKLQkJaWYgKCFkaXIpIHsKLQkJCWNlcnIgPDwgIkNhbid0IGRldGVybWluZSBob21lIGRpcmVjdG9yeSAhXG4iIDw8IGVuZGw7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQotCQl1c2VyX2RpciA9IGRpcjsKLQotCQlpZiAodXNlcl9kaXIubGVuZ3RoKCkgJiYgdXNlcl9kaXJbdXNlcl9kaXIubGVuZ3RoKCkgLTFdICE9ICcvJykKLQkJCXVzZXJfZGlyICs9ICcvJzsKLQl9Ci0KLQlyZXR1cm4gdXNlcl9kaXI7Ci19Ci0KLXN0cmluZyBkYWVtb25fcGlkOwotCi19IC8vIG5hbWVzcGFjZSBhbm9uCi0KLWRhZW1vbl9zdGF0dXM6OmRhZW1vbl9zdGF0dXMoKQotCTogcnVubmluZyhmYWxzZSkKLXsKLQlpbnQgSFo7Ci0JaWYgKCFkYWVtb25fcGlkLmVtcHR5KCkpIHsKLQkJc3RyaW5nIGNvbnN0IGV4ZWMgPQotCQkJb3BfcmVhbHBhdGgoc3RyaW5nKCIvcHJvYy8iKSArIGRhZW1vbl9waWQgKyAiL2V4ZSIpOwotCQlpZiAoZXhlYy5lbXB0eSgpKQotCQkJZGFlbW9uX3BpZC5lcmFzZSgpOwotCQllbHNlCi0JCQlydW5uaW5nID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoZGFlbW9uX3BpZC5lbXB0eSgpKSB7Ci0JCURJUiAqIGRpcjsKLQkJc3RydWN0IGRpcmVudCAqIGRpcmVudDsKLQotCQlpZiAoIShkaXIgPSBvcGVuZGlyKCIvcHJvYyIpKSkgewotCQkJcGVycm9yKCJvcHJvZmlsZWQ6IC9wcm9jIGRpcmVjdG9yeSBjb3VsZCBub3QgYmUgb3BlbmVkLiAiKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCi0JCXdoaWxlICgoZGlyZW50ID0gcmVhZGRpcihkaXIpKSkgewotCQkJc3RyaW5nIGNvbnN0IGV4ZWMgPQotCQkJCW9wX3JlYWxwYXRoKHN0cmluZygiL3Byb2MvIikKLQkJCQkgICAgICAgICAgICAgICArIGRpcmVudC0+ZF9uYW1lICsgIi9leGUiKTsKLQkJCXN0cmluZyBjb25zdCBuYW1lID0gb3BfYmFzZW5hbWUoZXhlYyk7Ci0JCQlpZiAobmFtZSAhPSAib3Byb2ZpbGVkIikKLQkJCQljb250aW51ZTsKLQotCQkJZGFlbW9uX3BpZCA9IGRpcmVudC0+ZF9uYW1lOwotCQkJcnVubmluZyA9IHRydWU7Ci0JCX0KLQotCQljbG9zZWRpcihkaXIpOwotCX0KLQotCUhaID0gc3lzY29uZihfU0NfQ0xLX1RDSyk7Ci0JaWYgKEhaID09IC0xKSB7Ci0JCXBlcnJvcigib3Byb2ZpbGVkOiBVbmFibGUgdG8gZGV0ZXJtaW5lIGNsb2NrIHRpY2tzIHBlciBzZWNvbmQuICIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JaWYgKGRhZW1vbl9waWQuZW1wdHkoKSkKLQkJcmV0dXJuOwotCi0JbnJfaW50ZXJydXB0cyA9IDA7Ci0KLQlzd2l0Y2ggKG9wX2dldF9pbnRlcmZhY2UoKSkgewotCWNhc2UgT1BfSU5URVJGQUNFXzI0OgotCQl7Ci0JCQlpZnN0cmVhbSBpZnMzKCIvcHJvYy9zeXMvZGV2L29wcm9maWxlL25yX2ludGVycnVwdHMiKTsKLQkJCWlmIChpZnMzKQotCQkJCWlmczMgPj4gbnJfaW50ZXJydXB0czsKLQkJfQotCQlicmVhazsKLQljYXNlIE9QX0lOVEVSRkFDRV8yNjoKLQkJewotCQkJc3RhdGljIHVuc2lnbmVkIGludCBvbGRfc3VtX2ludGVycnVwdHM7Ci0JCQl1bnNpZ25lZCBpbnQgc3VtX2ludGVycnVwdHMgPSAwOwotCQkJZ2xvYl90IGZpbGVfbmFtZXM7Ci0KLQkJCWZpbGVfbmFtZXMuZ2xfb2ZmcyA9IDA7Ci0JCQlnbG9iKCIvZGV2L29wcm9maWxlL3N0YXRzL2NwdSovc2FtcGxlX3JlY2VpdmVkIiwKLQkJCSAgICAgR0xPQl9ET09GRlMsIE5VTEwsICZmaWxlX25hbWVzKTsKLQotCQkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlX25hbWVzLmdsX3BhdGhjOyArK2kpIHsKLQkJCQlpZnN0cmVhbSBpZnMzKGZpbGVfbmFtZXMuZ2xfcGF0aHZbaV0pOwotCQkJCWlmIChpZnMzKSB7Ci0JCQkJCXVuc2lnbmVkIGludCBmaWxlX2ludGVycnVwdHM7Ci0JCQkJCWlmczMgPj4gZmlsZV9pbnRlcnJ1cHRzOwotCQkJCQlzdW1faW50ZXJydXB0cyArPSBmaWxlX2ludGVycnVwdHM7Ci0JCQkJfQotCQkJfQotCQkJbnJfaW50ZXJydXB0cyA9IHN1bV9pbnRlcnJ1cHRzIC0gb2xkX3N1bV9pbnRlcnJ1cHRzOwotCQkJb2xkX3N1bV9pbnRlcnJ1cHRzID0gc3VtX2ludGVycnVwdHM7Ci0JCQlnbG9iZnJlZSgmZmlsZV9uYW1lcyk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi0KLS8qKgotICogZ2V0X3VzZXJfZmlsZW5hbWUgLSBnZXQgYWJzb2x1dGUgZmlsZW5hbWUgb2YgZmlsZSBpbiB1c2VyICRIT01FCi0gKiBAcGFyYW0gZmlsZW5hbWUgIHRoZSByZWxhdGl2ZSBmaWxlbmFtZQotICoKLSAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCBvZiBhIGZpbGUgaW4gYSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCi0gKi8KLXN0cmluZyBjb25zdCBnZXRfdXNlcl9maWxlbmFtZShzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSkKLXsKLQlyZXR1cm4gZ2V0X3VzZXJfZGlyKCkgKyAiLyIgKyBmaWxlbmFtZTsKLX0KLQotCi0vKioKLSAqIGNoZWNrX2FuZF9jcmVhdGVfY29uZmlnX2RpciAtIG1ha2Ugc3VyZSBjb25maWcgZGlyIGlzIGFjY2Vzc2libGUKLSAqCi0gKiBSZXR1cm5zICV0cnVlIGlmIHRoZSBkaXIgaXMgYWNjZXNzaWJsZS4KLSAqLwotYm9vbCBjaGVja19hbmRfY3JlYXRlX2NvbmZpZ19kaXIoKQotewotCXN0cmluZyBkaXIgPSBnZXRfdXNlcl9maWxlbmFtZSgiLm9wcm9maWxlIik7Ci0KLQljaGFyICogbmFtZSA9IHhzdHJkdXAoZGlyLmNfc3RyKCkpOwotCi0JaWYgKGNyZWF0ZV9kaXIobmFtZSkpIHsKLQkJb3N0cmluZ3N0cmVhbSBvdXQ7Ci0JCW91dCA8PCAidW5hYmxlIHRvIGNyZWF0ZSAiIDw8IGRpciA8PCAiIGRpcmVjdG9yeSAiOwotCQlvdXQgPDwgImNhdXNlOiAiIDw8IHN0cmVycm9yKGVycm5vKTsKLQkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcoMCwgMCwgb3V0LnN0cigpLmNfc3RyKCkpOwotCi0JCWZyZWUobmFtZSk7Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWZyZWUobmFtZSk7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLQotLyoqCi0gKiBmb3JtYXQgLSByZS1mb3JtYXQgYSBzdHJpbmcKLSAqIEBwYXJhbSBvcmlnICBzdHJpbmcgdG8gZm9ybWF0Ci0gKiBAcGFyYW0gbWF4bGVuICB3aWR0aCBvZiBsaW5lCi0gKgotICogUmUtZm9ybWF0cyBhIHN0cmluZyB0byBmaXQgaW50byBhIGNlcnRhaW4gd2lkdGgsCi0gKiBicmVha2luZyBsaW5lcyBhdCBzcGFjZXMgYmV0d2VlbiB3b3Jkcy4KLSAqCi0gKiBSZXR1cm5zIHRoZSBmb3JtYXR0ZWQgc3RyaW5nCi0gKi8KLXN0cmluZyBjb25zdCBmb3JtYXQoc3RyaW5nIGNvbnN0ICYgb3JpZywgdWludCBjb25zdCBtYXhsZW4pCi17Ci0Jc3RyaW5nIHRleHQob3JpZyk7Ci0KLQlpc3RyaW5nc3RyZWFtIHNzKHRleHQpOwotCXZlY3RvcjxzdHJpbmc+IGxpbmVzOwotCi0Jc3RyaW5nIG9saW5lOwotCXN0cmluZyBsaW5lOwotCi0Jd2hpbGUgKGdldGxpbmUoc3MsIG9saW5lKSkgewotCQlpZiAobGluZS5zaXplKCkgKyBvbGluZS5zaXplKCkgPCBtYXhsZW4pIHsKLQkJCWxpbmVzLnB1c2hfYmFjayhsaW5lICsgb2xpbmUpOwotCQkJbGluZS5lcmFzZSgpOwotCQl9IGVsc2UgewotCQkJbGluZXMucHVzaF9iYWNrKGxpbmUpOwotCQkJbGluZS5lcmFzZSgpOwotCQkJc3RyaW5nIHM7Ci0JCQlzdHJpbmcgd29yZDsKLQkJCWlzdHJpbmdzdHJlYW0gb3NzKG9saW5lKTsKLQkJCXdoaWxlIChvc3MgPj4gd29yZCkgewotCQkJCWlmIChsaW5lLnNpemUoKSArIHdvcmQuc2l6ZSgpID4gbWF4bGVuKSB7Ci0JCQkJCWxpbmVzLnB1c2hfYmFjayhsaW5lKTsKLQkJCQkJbGluZS5lcmFzZSgpOwotCQkJCX0KLQkJCQlsaW5lICs9IHdvcmQgKyAiICI7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAobGluZS5zaXplKCkpCi0JCWxpbmVzLnB1c2hfYmFjayhsaW5lKTsKLQotCXN0cmluZyByZXQ7Ci0KLQlmb3IodmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGluZXMuYmVnaW4oKTsgaXQgIT0gbGluZXMuZW5kKCk7ICsraXQpCi0JCXJldCArPSAqaXQgKyAiXG4iOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi0vKioKLSAqIGRvX2V4ZWNfY29tbWFuZCAtIGV4ZWN1dGUgYSBjb21tYW5kCi0gKiBAcGFyYW0gY21kICBjb21tYW5kIG5hbWUKLSAqIEBwYXJhbSBhcmdzICBhcmd1bWVudHMgdG8gY29tbWFuZAotICoKLSAqIEV4ZWN1dGUgYSBjb21tYW5kIHN5bmNocm9ub3VzbHkuIEFuIGVycm9yIG1lc3NhZ2UgaXMgc2hvd24KLSAqIGlmIHRoZSBjb21tYW5kIHJldHVybnMgYSBub24temVybyBzdGF0dXMsIHdoaWNoIGlzIGFsc28gcmV0dXJuZWQuCi0gKgotICogVGhlIGFyZ3VtZW50cyBhcmUgdmVyaWZpZWQgYW5kIHdpbGwgcmVmdXNlIHRvIGV4ZWN1dGUgaWYgdGhleSBjb250YWluCi0gKiBzaGVsbCBtZXRhY2hhcmFjdGVycy4KLSAqLwotaW50IGRvX2V4ZWNfY29tbWFuZChzdHJpbmcgY29uc3QgJiBjbWQsIHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgYXJncykKLXsKLQlvc3RyaW5nc3RyZWFtIGVycjsKLQlib29sIG9rID0gdHJ1ZTsKLQotCS8vIHZlcmlmeSBhcmd1bWVudHMKLQlmb3IgKHZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBhcmdzLmJlZ2luKCk7Ci0JCWNpdCAhPSBhcmdzLmVuZCgpOyArK2NpdCkgewotCQlpZiAodmVyaWZ5X2FyZ3VtZW50KCpjaXQpKQotCQkJY29udGludWU7Ci0KLQkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcoMCwgMCwKLQkJCXN0cmluZygKLQkJCSJDb3VsZCBub3QgZXhlY3V0ZTogQXJndW1lbnQgXCIiICsgKmNpdCArCi0JCQkiXCIgY29udGFpbnMgc2hlbGwgbWV0YWNoYXJhY3RlcnMuXG4iKS5jX3N0cigpKTsKLQkJcmV0dXJuIEVJTlZBTDsKLQl9Ci0KLQljaGlsZF9yZWFkZXIgcmVhZGVyKGNtZCwgYXJncyk7Ci0JaWYgKHJlYWRlci5lcnJvcigpKQotCQlvayA9IGZhbHNlOwotCi0JaWYgKG9rKQotCQlyZWFkZXIuZ2V0X2RhdGEoY291dCwgZXJyKTsKLQotCWludCByZXQgPSByZWFkZXIudGVybWluYXRlX3Byb2Nlc3MoKTsKLQlpZiAocmV0KSB7Ci0JCXN0cmluZyBlcnJvciA9IHJlYWRlci5lcnJvcl9zdHIoKSArICJcbiI7Ci0JCWVycm9yICs9ICJGYWlsZWQ6IFxuIiArIGVyci5zdHIoKSArICJcbiI7Ci0JCXN0cmluZyBjbWRsaW5lID0gY21kOwotCQlmb3IgKHZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBhcmdzLmJlZ2luKCk7Ci0JCQljaXQgIT0gYXJncy5lbmQoKTsgKytjaXQpIHsKLQkJCWNtZGxpbmUgKz0gIiAiICsgKmNpdCArICIgIjsKLQkJfQotCQllcnJvciArPSAiXG5cbkNvbW1hbmQgd2FzIDpcblxuIiArIGNtZGxpbmUgKyAiXG4iOwotCi0JCVFNZXNzYWdlQm94Ojp3YXJuaW5nKDAsIDAsIGZvcm1hdChlcnJvciwgNTApLmNfc3RyKCkpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyoqCi0gKiBkb19vcGVuX2ZpbGVfb3JfZGlyIC0gb3BlbiBmaWxlL2RpcmVjdG9yeQotICogQHBhcmFtIGJhc2VfZGlyICBkaXJlY3RvcnkgdG8gc3RhcnQgYXQKLSAqIEBwYXJhbSBkaXJfb25seSAgZGlyZWN0b3J5IG9yIGZpbGVuYW1lIHRvIHNlbGVjdAotICoKLSAqIFNlbGVjdCBhIGZpbGUgb3IgZGlyZWN0b3J5LiBUaGUgc2VsZWN0aW9uIGlzIHJldHVybmVkOwotICogYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBzZWxlY3Rpb24gd2FzIGNhbmNlbGxlZC4KLSAqLwotc3RyaW5nIGNvbnN0IGRvX29wZW5fZmlsZV9vcl9kaXIoc3RyaW5nIGNvbnN0ICYgYmFzZV9kaXIsIGJvb2wgZGlyX29ubHkpCi17Ci0JUVN0cmluZyByZXN1bHQ7Ci0KLQlpZiAoZGlyX29ubHkpIHsKLQkJcmVzdWx0ID0gUUZpbGVEaWFsb2c6OmdldEV4aXN0aW5nRGlyZWN0b3J5KGJhc2VfZGlyLmNfc3RyKCksIDAsCi0JCQkib3Blbl9maWxlX29yX2RpciIsICJHZXQgZGlyZWN0b3J5IG5hbWUiLCB0cnVlKTsKLQl9IGVsc2UgewotCQlyZXN1bHQgPSBRRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lKGJhc2VfZGlyLmNfc3RyKCksIDAsIDAsCi0JCQkib3Blbl9maWxlX29yX2RpciIsICJHZXQgZmlsZW5hbWUiKTsKLQl9Ci0KLQlpZiAocmVzdWx0LmlzTnVsbCgpKQotCQlyZXR1cm4gc3RyaW5nKCk7Ci0JZWxzZQotCQlyZXR1cm4gcmVzdWx0LmxhdGluMSgpOwotfQotCi0vKioKLSAqIHZlcmlmeV9hcmd1bWVudCAtIGNoZWNrIHN0cmluZyBmb3IgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGNoYXJhY3RlcnMKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYgdGhlIHN0cmluZyBjb250YWlucyBkYW5nZXJvdXMgc2hlbGwKLSAqIG1ldGFjaGFyYWN0ZXJzLgotICoKLSAqIFdXVyBTZWN1cml0eSBGQVEgZGFuZ2Vyb3VzIGNoYXJzOgotICoKLSAqICYgOyBgICcgXCAiIHwgKiA/IH4gPCA+IF4gKCApIFsgXSB7IH0gJCBcbiBccgotICoKLSAqIERhdmlkIFdoZWVsZXI6ICEgIwotICoKLSAqIFdlIGFsbG93ICctJyBiZWNhdXNlIHdlIGRpc2FsbG93IHdoaXRlc3BhY2UuIFdlIGFsbG93ICc6JyBhbmQgJz0nCi0gKi8KLWJvb2wgdmVyaWZ5X2FyZ3VtZW50KHN0cmluZyBjb25zdCAmIHN0cikKLXsKLQlpZiAoc3RyLmZpbmRfZmlyc3Rfbm90X29mKAotCQkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCi0JCSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlfOj0tKyUsLi8iKQotCQkhPSBzdHJpbmc6Om5wb3MpCi0JCXJldHVybiBmYWxzZTsKLQlyZXR1cm4gdHJ1ZTsKLX0KZGlmZiAtLWdpdCBhL2d1aS9vcHJvZl9zdGFydF91dGlsLmggYi9ndWkvb3Byb2Zfc3RhcnRfdXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmZhZmFkLi4wMDAwMDAwCi0tLSBhL2d1aS9vcHJvZl9zdGFydF91dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wcm9mX3N0YXJ0X3V0aWwuaAotICogTWlzY2VsbGFuZW91cyBoZWxwZXJzIGZvciB0aGUgR1VJIHN0YXJ0Ci0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBPUFJPRl9TVEFSVF9VVElMX0gKLSNkZWZpbmUgT1BST0ZfU1RBUlRfVVRJTF9ICi0KLSNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0vLy8gU3RvcmUgdmFyaW91cyBkYWVtb24gc3RhdHVzIGRhdGEKLXN0cnVjdCBkYWVtb25fc3RhdHVzIHsKLQkvLy8gZmlsbCB2YXJpb3VzIGRhdGEgbWVtYmVyIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBkYWVtb24gc3RhdHVzCi0JZGFlbW9uX3N0YXR1cygpOwotCWJvb2wgcnVubmluZzsJCQkvLy88IHRydWUgaWYgZGFlbW9uIGlzIHJ1bm5pbmcKLQl1bnNpZ25lZCBpbnQgbnJfaW50ZXJydXB0czsJLy8vPCBucl9pbnRlcnJ1cHRzIGZyb20gcHJvZmlsaW5nIHN0YXJ0Ci19OwotCi1pbmxpbmUgZG91YmxlIHJhdGlvKGRvdWJsZSB4MSwgZG91YmxlIHgyKQotewotCXJldHVybiBmYWJzKCgoeDEgLSB4MikgLyB4MikpICogMTAwOwotfQotCi1zdGQ6OnN0cmluZyBjb25zdCBnZXRfdXNlcl9maWxlbmFtZShzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lKTsKLWJvb2wgY2hlY2tfYW5kX2NyZWF0ZV9jb25maWdfZGlyKCk7Ci1zdGQ6OnN0cmluZyBjb25zdCBmb3JtYXQoc3RkOjpzdHJpbmcgY29uc3QgJiBvcmlnLCB1aW50IGNvbnN0IG1heGxlbik7Ci1pbnQgZG9fZXhlY19jb21tYW5kKHN0ZDo6c3RyaW5nIGNvbnN0ICYgY21kLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBhcmdzID0gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCkpOwotc3RkOjpzdHJpbmcgY29uc3QgZG9fb3Blbl9maWxlX29yX2RpcihzdGQ6OnN0cmluZyBjb25zdCAmIGJhc2VfZGlyLCBib29sIGRpcl9vbmx5KTsKLWJvb2wgdmVyaWZ5X2FyZ3VtZW50KHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKTsKLQotI2VuZGlmIC8vIE9QUk9GX1NUQVJUX1VUSUxfSApkaWZmIC0tZ2l0IGEvZ3VpL3VpL01ha2VmaWxlLmFtIGIvZ3VpL3VpL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdlZjRlLi4wMDAwMDAwCi0tLSBhL2d1aS91aS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLUVYVFJBX0RJU1QgPSBvcHJvZl9zdGFydC5iYXNlLnVpCi0KLWlmIGhhdmVfcXQKLQotQU1fQ1BQRkxBR1MgPSBAUVRfSU5DTFVERVNACi0KLUFNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotCi1ub2luc3RfTElCUkFSSUVTID0gbGlib3Byb2Zfc3RhcnQuYQotbm9kaXN0X2xpYm9wcm9mX3N0YXJ0X2FfU09VUkNFUyA9IG9wcm9mX3N0YXJ0LmJhc2UuY3BwIG9wcm9mX3N0YXJ0LmJhc2UubW9jLmNwcAotCi1vcHJvZl9zdGFydC5iYXNlLmg6IG9wcm9mX3N0YXJ0LmJhc2UudWkKLQkkKFVJQykgLW8gJEAgJDwKLQotb3Byb2Zfc3RhcnQuYmFzZS5jcHA6IG9wcm9mX3N0YXJ0LmJhc2UuaCBvcHJvZl9zdGFydC5iYXNlLnVpCi0JJChVSUMpIC1vICRAIC1pbXBsICReCi0KLW9wcm9mX3N0YXJ0LmJhc2UubW9jLmNwcDogb3Byb2Zfc3RhcnQuYmFzZS5oCi0JJChNT0MpIC1vICRAICQ8Ci0KLWNsZWFuLWxvY2FsOgotCXJtIC1mIG9wcm9mX3N0YXJ0LmJhc2UuaCBvcHJvZl9zdGFydC5iYXNlLmNwcCBvcHJvZl9zdGFydC5iYXNlLm1vYy5jcHAKLQotZW5kaWYKZGlmZiAtLWdpdCBhL2d1aS91aS9NYWtlZmlsZS5pbiBiL2d1aS91aS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE1ODdhNC4uMDAwMDAwMAotLS0gYS9ndWkvdWkvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0NTMgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1TT1VSQ0VTID0gJChub2Rpc3RfbGlib3Byb2Zfc3RhcnRfYV9TT1VSQ0VTKQotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uLy4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1zdWJkaXIgPSBndWkvdWkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUxJQlJBUklFUyA9ICQobm9pbnN0X0xJQlJBUklFUykKLUFSID0gYXIKLUFSRkxBR1MgPSBjcnUKLWxpYm9wcm9mX3N0YXJ0X2FfQVIgPSAkKEFSKSAkKEFSRkxBR1MpCi1saWJvcHJvZl9zdGFydF9hX0xJQkFERCA9Ci1AaGF2ZV9xdF9UUlVFQG5vZGlzdF9saWJvcHJvZl9zdGFydF9hX09CSkVDVFMgPSAgXAotQGhhdmVfcXRfVFJVRUAJb3Byb2Zfc3RhcnQuYmFzZS4kKE9CSkVYVCkgXAotQGhhdmVfcXRfVFJVRUAJb3Byb2Zfc3RhcnQuYmFzZS5tb2MuJChPQkpFWFQpCi1saWJvcHJvZl9zdGFydF9hX09CSkVDVFMgPSAkKG5vZGlzdF9saWJvcHJvZl9zdGFydF9hX09CSkVDVFMpCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAotCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCi1DWFhMRCA9ICQoQ1hYKQotQ1hYTElOSyA9ICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLVNPVVJDRVMgPSAkKG5vZGlzdF9saWJvcHJvZl9zdGFydF9hX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1PQyA9IEBNT0NACi1NT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACi1PQkpFWFQgPSBAT0JKRVhUQAotT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKLU9QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAotT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLU9QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBPUFRfTElCUyA9IEBQT1BUX0xJQlNACi1QVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKLVFUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAotUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAotUVRfTElCID0gQFFUX0xJQkAKLVFUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACi1TVFJJUCA9IEBTVFJJUEAKLVVJQyA9IEBVSUNACi1WRVJTSU9OID0gQFZFUlNJT05ACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACi1YX0xJQlMgPSBAWF9MSUJTQAotWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1kYXRhZGlyID0gQGRhdGFkaXJACi1lbmFibGVfYWJpX0ZBTFNFID0gQGVuYWJsZV9hYmlfRkFMU0VACi1lbmFibGVfYWJpX1RSVUUgPSBAZW5hYmxlX2FiaV9UUlVFQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1oYXZlX3F0X0ZBTFNFID0gQGhhdmVfcXRfRkFMU0VACi1oYXZlX3F0X1RSVUUgPSBAaGF2ZV9xdF9UUlVFQAotaGF2ZV94c2x0cHJvY19GQUxTRSA9IEBoYXZlX3hzbHRwcm9jX0ZBTFNFQAotaGF2ZV94c2x0cHJvY19UUlVFID0gQGhhdmVfeHNsdHByb2NfVFJVRUAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWtlcm5lbF9zdXBwb3J0X0ZBTFNFID0gQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAota2VybmVsX3N1cHBvcnRfVFJVRSA9IEBrZXJuZWxfc3VwcG9ydF9UUlVFQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdG9wZGlyID0gQHRvcGRpckAKLUVYVFJBX0RJU1QgPSBvcHJvZl9zdGFydC5iYXNlLnVpCi1AaGF2ZV9xdF9UUlVFQEFNX0NQUEZMQUdTID0gQFFUX0lOQ0xVREVTQAotQGhhdmVfcXRfVFJVRUBBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLUBoYXZlX3F0X1RSVUVAbm9pbnN0X0xJQlJBUklFUyA9IGxpYm9wcm9mX3N0YXJ0LmEKLUBoYXZlX3F0X1RSVUVAbm9kaXN0X2xpYm9wcm9mX3N0YXJ0X2FfU09VUkNFUyA9IG9wcm9mX3N0YXJ0LmJhc2UuY3BwIG9wcm9mX3N0YXJ0LmJhc2UubW9jLmNwcAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuY3BwIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGd1aS91aS9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZ3VpL3VpL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi1jbGVhbi1ub2luc3RMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQobm9pbnN0X0xJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xJQlJBUklFUykKLWxpYm9wcm9mX3N0YXJ0LmE6ICQobGlib3Byb2Zfc3RhcnRfYV9PQkpFQ1RTKSAkKGxpYm9wcm9mX3N0YXJ0X2FfREVQRU5ERU5DSUVTKSAKLQktcm0gLWYgbGlib3Byb2Zfc3RhcnQuYQotCSQobGlib3Byb2Zfc3RhcnRfYV9BUikgbGlib3Byb2Zfc3RhcnQuYSAkKGxpYm9wcm9mX3N0YXJ0X2FfT0JKRUNUUykgJChsaWJvcHJvZl9zdGFydF9hX0xJQkFERCkKLQkkKFJBTkxJQikgbGlib3Byb2Zfc3RhcnQuYQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Byb2Zfc3RhcnQuYmFzZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Byb2Zfc3RhcnQuYmFzZS5tb2MuUG9AYW1fX3F1b3RlQAotCi0uY3BwLm86Ci1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJaWYgJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmNwcC5vYmo6Ci1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJaWYgJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFhDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi11bmluc3RhbGwtaW5mby1hbToKLQotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUwotCi1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAotCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExJQlJBUklFUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLUBoYXZlX3F0X0ZBTFNFQGNsZWFuLWxvY2FsOgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxvY2FsIGNsZWFuLW5vaW5zdExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxvY2FsIGNsZWFuLW5vaW5zdExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIFwKLQlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAotCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCi0JaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIFwKLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgXAotCXVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQotCi0KLUBoYXZlX3F0X1RSVUVAb3Byb2Zfc3RhcnQuYmFzZS5oOiBvcHJvZl9zdGFydC5iYXNlLnVpCi1AaGF2ZV9xdF9UUlVFQAkkKFVJQykgLW8gJEAgJDwKLQotQGhhdmVfcXRfVFJVRUBvcHJvZl9zdGFydC5iYXNlLmNwcDogb3Byb2Zfc3RhcnQuYmFzZS5oIG9wcm9mX3N0YXJ0LmJhc2UudWkKLUBoYXZlX3F0X1RSVUVACSQoVUlDKSAtbyAkQCAtaW1wbCAkXgotCi1AaGF2ZV9xdF9UUlVFQG9wcm9mX3N0YXJ0LmJhc2UubW9jLmNwcDogb3Byb2Zfc3RhcnQuYmFzZS5oCi1AaGF2ZV9xdF9UUlVFQAkkKE1PQykgLW8gJEAgJDwKLQotQGhhdmVfcXRfVFJVRUBjbGVhbi1sb2NhbDoKLUBoYXZlX3F0X1RSVUVACXJtIC1mIG9wcm9mX3N0YXJ0LmJhc2UuaCBvcHJvZl9zdGFydC5iYXNlLmNwcCBvcHJvZl9zdGFydC5iYXNlLm1vYy5jcHAKLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2d1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpIGIvZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NGMyMTUuLjAwMDAwMDAKLS0tIGEvZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDc4ICswLDAgQEAKLTwhRE9DVFlQRSBVST48VUk+Ci08Y2xhc3M+b3Byb2Zfc3RhcnRfYmFzZTwvY2xhc3M+Ci08d2lkZ2V0PgotICAgIDxjbGFzcz5RRGlhbG9nPC9jbGFzcz4KLSAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgPGNzdHJpbmc+b3Byb2Zfc3RhcnRfYmFzZTwvY3N0cmluZz4KLSAgICA8L3Byb3BlcnR5PgotICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICA8bmFtZT5nZW9tZXRyeTwvbmFtZT4KLSAgICAgICAgPHJlY3Q+Ci0gICAgICAgICAgICA8eD4wPC94PgotICAgICAgICAgICAgPHk+MDwveT4KLSAgICAgICAgICAgIDx3aWR0aD41Njk8L3dpZHRoPgotICAgICAgICAgICAgPGhlaWdodD43MzU8L2hlaWdodD4KLSAgICAgICAgPC9yZWN0PgotICAgIDwvcHJvcGVydHk+Ci0gICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgIDxuYW1lPmNhcHRpb248L25hbWU+Ci0gICAgICAgIDxzdHJpbmc+U3RhcnQgcHJvZmlsZXI8L3N0cmluZz4KLSAgICA8L3Byb3BlcnR5PgotICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICA8bmFtZT5zaXplR3JpcEVuYWJsZWQ8L25hbWU+Ci0gICAgICAgIDxib29sPnRydWU8L2Jvb2w+Ci0gICAgPC9wcm9wZXJ0eT4KLSAgICA8dmJveD4KLSAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+Ci0gICAgICAgICAgICA8bnVtYmVyPjExPC9udW1iZXI+Ci0gICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KLSAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgotICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgPGNsYXNzPlFUYWJXaWRnZXQ8L2NsYXNzPgotICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICA8Y3N0cmluZz5zZXR1cF9jb25maWdfdGFiPC9jc3RyaW5nPgotICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgPGNsYXNzPlFXaWRnZXQ8L2NsYXNzPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jb3VudGVyX3NldHVwX3BhZ2U8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgICAgICAgICAgICA8bmFtZT50aXRsZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgPHN0cmluZz4mYW1wO1NldHVwPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICAgICAgICAgPHZib3g+Ci0gICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWFyZ2luPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4xMTwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KLSAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RR3JvdXBCb3g8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jb3VudGVyX2dyb3VwPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRpdGxlPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+RXZlbnRzPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHZib3g+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm1hcmdpbjwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4xMTwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYXlvdXRXaWRnZXQ8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5MYXlvdXQxMDwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhib3g+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4wPC9udW1iZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGlzdFZpZXc8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2x1bW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlJlbW92ZWRpbmNvZGU8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+Y2xpY2thYmxlPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJvb2w+ZmFsc2U8L2Jvb2w+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnJlc2l6ZWFibGU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Ym9vbD50cnVlPC9ib29sPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29sdW1uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5ldmVudHNfbGlzdDwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5taW5pbXVtU2l6ZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkdGg+MjUwPC93aWR0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZWlnaHQ+MDwvaGVpZ2h0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2VsZWN0aW9uTW9kZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+TXVsdGk8L2VudW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRvb2xUaXA8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+QXZhaWxhYmxlIGV2ZW50czwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYXlvdXRXaWRnZXQ8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5MYXlvdXQ5PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZib3g+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWFyZ2luPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4wPC9udW1iZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPm9zX3JpbmdfY291bnRfY2I8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlByb2ZpbGUgJmFtcDtrZXJuZWw8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlByb2ZpbGUga2VybmVsIGNvZGU8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnVzZXJfcmluZ19jb3VudF9jYjwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+UHJvZmlsZSAmYW1wO3VzZXIgYmluYXJpZXM8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlByb2ZpbGUgdXNlciBsaWJyYXJpZXMgYW5kIGFwcGxpY2F0aW9uczwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxheW91dFdpZGdldDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPkxheW91dDE2PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoYm94PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+MDwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYWJlbDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPlRleHRMYWJlbDFfMjwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5DJmFtcDtvdW50PC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmJ1ZGR5PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+ZXZlbnRfY291bnRfZWRpdDwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxpbmVFZGl0PC9jbGFzcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+ZXZlbnRfY291bnRfZWRpdDwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zaXplUG9saWN5PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhzaXpldHlwZT4xPC9oc2l6ZXR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZzaXpldHlwZT4wPC92c2l6ZXR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemVwb2xpY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRvb2xUaXA8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlNldCB0aGUgY291bnQgdmFsdWU8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhY2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+U3BhY2VyMTNfMjwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vcmllbnRhdGlvbjwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkhvcml6b250YWw8L2VudW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZVR5cGU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5FeHBhbmRpbmc8L2VudW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVIaW50PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZHRoPjIwPC93aWR0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aGVpZ2h0PjIwPC9oZWlnaHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFjZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2hib3g+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFCdXR0b25Hcm91cDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnVuaXRfbWFza19ncm91cDwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zaXplUG9saWN5PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaXplcG9saWN5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHNpemV0eXBlPjE8L2hzaXpldHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZzaXpldHlwZT41PC92c2l6ZXR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zaXplcG9saWN5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRpdGxlPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+VW5pdCBtYXNrPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRvb2xUaXA8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5Vbml0IG1hc2sgc2V0dGluZ3MgZm9yIHRoaXMgZXZlbnQ8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JpZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWFyZ2luPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjExPC9udW1iZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj42PC9udW1iZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iMCIgIGNvbHVtbj0iMCIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2swPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrMDwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIxIiAgY29sdW1uPSIwIiAgcm93c3Bhbj0iMiIgIGNvbHNwYW49IjIiID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNoZWNrMTwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazE8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iMyIgIGNvbHVtbj0iMCIgIHJvd3NwYW49IjIiICBjb2xzcGFuPSIyIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazI8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2syPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjUiICBjb2x1bW49IjAiID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNoZWNrMzwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazM8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iNiIgIGNvbHVtbj0iMCIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2s0PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrNDwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSI3IiAgY29sdW1uPSIwIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazU8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2s1PC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjgiICBjb2x1bW49IjAiICByb3dzcGFuPSIyIiAgY29sc3Bhbj0iMiIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2s2PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrNjwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIxMCIgIGNvbHVtbj0iMCIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2s3PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrNzwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFjZXIgcm93PSIxMSIgIGNvbHVtbj0iMSIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+U3BhY2VyMTQ8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+b3JpZW50YXRpb248L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5WZXJ0aWNhbDwvZW51bT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zaXplVHlwZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkV4cGFuZGluZzwvZW51bT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZUhpbnQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkdGg+MjA8L3dpZHRoPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZWlnaHQ+MjA8L2hlaWdodD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYWNlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iNSIgIGNvbHVtbj0iMSIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2sxMTwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazExPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjciICBjb2x1bW49IjEiID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNoZWNrMTM8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2sxMzwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIxMCIgIGNvbHVtbj0iMSIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2sxNTwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazE1PC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjQiICBjb2x1bW49IjEiID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNoZWNrMTA8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2sxMDwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSI5IiAgY29sdW1uPSIxIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazE0PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrMTQ8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iMiIgIGNvbHVtbj0iMSIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2s5PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrOTwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIwIiAgY29sdW1uPSIxIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazg8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2s4PC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjYiICBjb2x1bW49IjEiID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNoZWNrMTI8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2sxMjwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ncmlkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zib3g+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oYm94PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGFiZWw8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5ldmVudF9oZWxwX2xhYmVsPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmVuYWJsZWQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Ym9vbD50cnVlPC9ib29sPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVQb2xpY3k8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZXBvbGljeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHNpemV0eXBlPjE8L2hzaXpldHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dnNpemV0eXBlPjE8L3ZzaXpldHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5mcmFtZVNoYXBlPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+V2luUGFuZWw8L2VudW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+ZnJhbWVTaGFkb3c8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5TdW5rZW48L2VudW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+PC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Zib3g+Ci0gICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgIDwvdmJveD4KLSAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgPHdpZGdldD4KLSAgICAgICAgICAgICAgICA8Y2xhc3M+UVdpZGdldDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNvbmZpZ3VyYXRpb25fcGFnZTwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGU+Ci0gICAgICAgICAgICAgICAgICAgIDxuYW1lPnRpdGxlPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPiZhbXA7Q29uZmlndXJhdGlvbjwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgICAgICAgIDx2Ym94PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm1hcmdpbjwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+MTE8L251bWJlcj4KLSAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zcGFjaW5nPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj42PC9udW1iZXI+Ci0gICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxheW91dFdpZGdldDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPkxheW91dDExPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxoYm94PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+MDwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYWJlbDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPlRleHRMYWJlbDE8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtLZXJuZWwgaW1hZ2UgZmlsZTwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5idWRkeTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmtlcm5lbF9maWxlbmFtZV9lZGl0PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGluZUVkaXQ8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5rZXJuZWxfZmlsZW5hbWVfZWRpdDwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+VGhlIHZtbGludXggZmlsZSBvZiB0aGUgcnVubmluZyBrZXJuZWw8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UVRvb2xCdXR0b248L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5rZXJuZWxfZmlsZW5hbWVfdGI8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Li4uPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPm5vX3ZtbGludXg8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Tm8ga2VybmVsIGltYWdlPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRvb2xUaXA8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPk5vIGtlcm5lbCBpbWFnZSBhdmFpbGFibGUuIERpc2FibGVzIGtlcm5lbCBwcm9maWxpbmcuPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2hib3g+Ci0gICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYXlvdXRXaWRnZXQ8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5MYXlvdXQxNjwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JpZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWFyZ2luPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjA8L251bWJlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zcGFjaW5nPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFjZXIgcm93PSIwIiAgY29sdW1uPSIxIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5TcGFjZXIxMTwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vcmllbnRhdGlvbjwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkhvcml6b250YWw8L2VudW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZVR5cGU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5FeHBhbmRpbmc8L2VudW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVIaW50PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZHRoPjIwPC93aWR0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aGVpZ2h0PjIwPC9oZWlnaHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFjZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjAiICBjb2x1bW49IjAiID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYXlvdXRXaWRnZXQ8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5MYXlvdXQxNTwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4wPC9udW1iZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iMSIgIGNvbHVtbj0iMSIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGluZUVkaXQ8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5idWZmZXJfc2l6ZV9lZGl0PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50b29sVGlwPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlRoZSBzaXplIG9mIHRoZSBwcm9maWxlcidzIGJ1ZmZlcnM8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iNCIgIGNvbHVtbj0iMSIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGluZUVkaXQ8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5ub3RlX3RhYmxlX3NpemVfZWRpdDwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iNCIgIGNvbHVtbj0iMCIgPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGFiZWw8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5ub3RlX3RhYmxlX3NpemVfbGFiZWw8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5Ob3RlIFNpemU8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+YnVkZHk8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPm5vdGVfdGFibGVfc2l6ZV9lZGl0PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIxIiAgY29sdW1uPSIwIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYWJlbDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmJ1ZmZlcl9zaXplX2xhYmVsPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtCdWZmZXIgc2l6ZTwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5idWRkeTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+YnVmZmVyX3NpemVfZWRpdDwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ3JpZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ3JpZD4KLSAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxheW91dFdpZGdldDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPkxheW91dDExPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxoYm94PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+MDwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYXlvdXRXaWRnZXQ8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5MYXlvdXQxMDwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZib3g+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4wPC9udW1iZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz52ZXJib3NlPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtWZXJib3NlPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRvb2xUaXA8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+VmVyeSB2ZXJib3NlIG91dHB1dCBpbiBsb2cgZmlsZTwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnNlcGFyYXRlX2xpYl9jYjwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlBlci1hcHBsaWNhdGlvbiBwcm9maWxlczwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50b29sVGlwPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlNlcGFyYXRlIHNhbXBsZXMgZm9yIGVhY2ggc2hhcmVkIGxpYnJhcnkuIFRoaXMgaW5jcmVhc2VzIHRoZSB0aW1lIGFuZCBzcGFjZSBvdmVyaGVhZCBvZiBPUHJvZmlsZS48L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5zZXBhcmF0ZV9rZXJuZWxfY2I8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5QZXItYXBwbGljYXRpb24gcHJvZmlsZXMsIGluY2x1ZGluZyBrZXJuZWw8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5TZXBhcmF0ZSBzYW1wbGVzIGZvciBlYWNoIHNoYXJlZCBsaWJyYXJ5IGFuZCBrZXJuZWwgc2FtcGxlcy4gVGhpcyBpbmNyZWFzZXMgdGhlIHRpbWUgYW5kIHNwYWNlIG92ZXJoZWFkIG9mIE9Qcm9maWxlLjwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnNlcGFyYXRlX2NwdV9jYjwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlBlci1DUFUgcHJvZmlsZXM8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5TZXBhcmF0ZSBzYW1wbGVzIGZvciBlYWNoIHNoYXJlZCBsaWJyYXJ5IGFuZCBrZXJuZWwgc2FtcGxlcy4gVGhpcyBpbmNyZWFzZXMgdGhlIHRpbWUgYW5kIHNwYWNlIG92ZXJoZWFkIG9mIE9Qcm9maWxlLjwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnNlcGFyYXRlX3RocmVhZF9jYjwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlBlci10aHJlYWQvdGFzayBwcm9maWxlczwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50b29sVGlwPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlNlcGFyYXRlIHNhbXBsZXMgZm9yIGVhY2ggc2hhcmVkIGxpYnJhcnkgYW5kIGtlcm5lbCBzYW1wbGVzLiBUaGlzIGluY3JlYXNlcyB0aGUgdGltZSBhbmQgc3BhY2Ugb3ZlcmhlYWQgb2YgT1Byb2ZpbGUuPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zib3g+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYWNlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPlNwYWNlcjEyPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm9yaWVudGF0aW9uPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+SG9yaXpvbnRhbDwvZW51bT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zaXplVHlwZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkV4cGFuZGluZzwvZW51bT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZUhpbnQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkdGg+MjA8L3dpZHRoPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZWlnaHQ+MjA8L2hlaWdodD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYWNlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KLSAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFjZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5TcGFjZXI5PC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm9yaWVudGF0aW9uPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPlZlcnRpY2FsPC9lbnVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVUeXBlPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkV4cGFuZGluZzwvZW51bT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZUhpbnQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWR0aD4yMDwvd2lkdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZWlnaHQ+MjA8L2hlaWdodD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8L3NwYWNlcj4KLSAgICAgICAgICAgICAgICA8L3Zib3g+Ci0gICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICA8Y2xhc3M+UUxhYmVsPC9jbGFzcz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgPGNzdHJpbmc+ZGFlbW9uX2xhYmVsPC9jc3RyaW5nPgotICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgIDxuYW1lPmZyYW1lU2hhcGU8L25hbWU+Ci0gICAgICAgICAgICAgICAgPGVudW0+UGFuZWw8L2VudW0+Ci0gICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgPG5hbWU+ZnJhbWVTaGFkb3c8L25hbWU+Ci0gICAgICAgICAgICAgICAgPGVudW0+U3Vua2VuPC9lbnVtPgotICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgPHN0cmluZz48L3N0cmluZz4KLSAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KLSAgICAgICAgICAgICAgICA8c3RyaW5nPkN1cnJlbnQgZGFlbW9uIHN0YXR1czwvc3RyaW5nPgotICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICA8Y2xhc3M+UUxheW91dFdpZGdldDwvY2xhc3M+Ci0gICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgIDxjc3RyaW5nPkxheW91dDExPC9jc3RyaW5nPgotICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxoYm94PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgIDxudW1iZXI+MDwvbnVtYmVyPgotICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgotICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHdpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFQdXNoQnV0dG9uPC9jbGFzcz4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+c3RhcnRfcHJvZmlsZXJfYnRuPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlN0YXJ0ICZhbXA7cHJvZmlsZXI8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UVB1c2hCdXR0b248L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5mbHVzaF9wcm9maWxlcl9kYXRhX2J0bjwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz4mYW1wO0ZsdXNoIHByb2ZpbGVyIGRhdGE8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICA8d2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UVB1c2hCdXR0b248L2NsYXNzPgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5zdG9wX3Byb2ZpbGVyX2J0bjwvY3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5TdG9wIHByb2ZpbGVyPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgPHNwYWNlcj4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPlNwYWNlcjU8L2NzdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+b3JpZW50YXRpb248L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5Ib3Jpem9udGFsPC9lbnVtPgotICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVUeXBlPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+RXhwYW5kaW5nPC9lbnVtPgotICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zaXplSGludDwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzaXplPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWR0aD4yMDwvd2lkdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9zaXplPgotICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDwvc3BhY2VyPgotICAgICAgICAgICAgICAgIDx3aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RUHVzaEJ1dHRvbjwvY2xhc3M+Ci0gICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgotICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnF1aXRfYW5kX3NhdmVfYnRuPC9jc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlNhdmUgYW5kICZhbXA7cXVpdDwvc3RyaW5nPgotICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmF1dG9EZWZhdWx0PC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJvb2w+dHJ1ZTwvYm9vbD4KLSAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgIDwvaGJveD4KLSAgICAgICAgPC93aWRnZXQ+Ci0gICAgPC92Ym94PgotPC93aWRnZXQ+Ci08Y29ubmVjdGlvbnM+Ci0gICAgPGNvbm5lY3Rpb24+Ci0gICAgICAgIDxzZW5kZXI+c3RhcnRfcHJvZmlsZXJfYnRuPC9zZW5kZXI+Ci0gICAgICAgIDxzaWduYWw+Y2xpY2tlZCgpPC9zaWduYWw+Ci0gICAgICAgIDxyZWNlaXZlcj5vcHJvZl9zdGFydF9iYXNlPC9yZWNlaXZlcj4KLSAgICAgICAgPHNsb3Q+b25fc3RhcnRfcHJvZmlsZXIoKTwvc2xvdD4KLSAgICA8L2Nvbm5lY3Rpb24+Ci0gICAgPGNvbm5lY3Rpb24+Ci0gICAgICAgIDxzZW5kZXI+c3RvcF9wcm9maWxlcl9idG48L3NlbmRlcj4KLSAgICAgICAgPHNpZ25hbD5jbGlja2VkKCk8L3NpZ25hbD4KLSAgICAgICAgPHJlY2VpdmVyPm9wcm9mX3N0YXJ0X2Jhc2U8L3JlY2VpdmVyPgotICAgICAgICA8c2xvdD5vbl9zdG9wX3Byb2ZpbGVyKCk8L3Nsb3Q+Ci0gICAgPC9jb25uZWN0aW9uPgotICAgIDxjb25uZWN0aW9uPgotICAgICAgICA8c2VuZGVyPmZsdXNoX3Byb2ZpbGVyX2RhdGFfYnRuPC9zZW5kZXI+Ci0gICAgICAgIDxzaWduYWw+Y2xpY2tlZCgpPC9zaWduYWw+Ci0gICAgICAgIDxyZWNlaXZlcj5vcHJvZl9zdGFydF9iYXNlPC9yZWNlaXZlcj4KLSAgICAgICAgPHNsb3Q+b25fZmx1c2hfcHJvZmlsZXJfZGF0YSgpPC9zbG90PgotICAgIDwvY29ubmVjdGlvbj4KLSAgICA8Y29ubmVjdGlvbj4KLSAgICAgICAgPHNlbmRlcj5xdWl0X2FuZF9zYXZlX2J0bjwvc2VuZGVyPgotICAgICAgICA8c2lnbmFsPmNsaWNrZWQoKTwvc2lnbmFsPgotICAgICAgICA8cmVjZWl2ZXI+b3Byb2Zfc3RhcnRfYmFzZTwvcmVjZWl2ZXI+Ci0gICAgICAgIDxzbG90PmFjY2VwdCgpPC9zbG90PgotICAgIDwvY29ubmVjdGlvbj4KLSAgICA8Y29ubmVjdGlvbj4KLSAgICAgICAgPHNlbmRlcj5rZXJuZWxfZmlsZW5hbWVfdGI8L3NlbmRlcj4KLSAgICAgICAgPHNpZ25hbD5jbGlja2VkKCk8L3NpZ25hbD4KLSAgICAgICAgPHJlY2VpdmVyPm9wcm9mX3N0YXJ0X2Jhc2U8L3JlY2VpdmVyPgotICAgICAgICA8c2xvdD5jaG9vc2Vfa2VybmVsX2ZpbGVuYW1lKCk8L3Nsb3Q+Ci0gICAgPC9jb25uZWN0aW9uPgotICAgIDxjb25uZWN0aW9uPgotICAgICAgICA8c2VuZGVyPm5vX3ZtbGludXg8L3NlbmRlcj4KLSAgICAgICAgPHNpZ25hbD50b2dnbGVkKGJvb2wpPC9zaWduYWw+Ci0gICAgICAgIDxyZWNlaXZlcj5rZXJuZWxfZmlsZW5hbWVfdGI8L3JlY2VpdmVyPgotICAgICAgICA8c2xvdD5zZXREaXNhYmxlZChib29sKTwvc2xvdD4KLSAgICA8L2Nvbm5lY3Rpb24+Ci0gICAgPGNvbm5lY3Rpb24+Ci0gICAgICAgIDxzZW5kZXI+bm9fdm1saW51eDwvc2VuZGVyPgotICAgICAgICA8c2lnbmFsPnRvZ2dsZWQoYm9vbCk8L3NpZ25hbD4KLSAgICAgICAgPHJlY2VpdmVyPmtlcm5lbF9maWxlbmFtZV9lZGl0PC9yZWNlaXZlcj4KLSAgICAgICAgPHNsb3Q+c2V0RGlzYWJsZWQoYm9vbCk8L3Nsb3Q+Ci0gICAgPC9jb25uZWN0aW9uPgotICAgIDxjb25uZWN0aW9uPgotICAgICAgICA8c2VuZGVyPm5vX3ZtbGludXg8L3NlbmRlcj4KLSAgICAgICAgPHNpZ25hbD50b2dnbGVkKGJvb2wpPC9zaWduYWw+Ci0gICAgICAgIDxyZWNlaXZlcj5UZXh0TGFiZWwxPC9yZWNlaXZlcj4KLSAgICAgICAgPHNsb3Q+c2V0RGlzYWJsZWQoYm9vbCk8L3Nsb3Q+Ci0gICAgPC9jb25uZWN0aW9uPgotICAgIDxjb25uZWN0aW9uPgotICAgICAgICA8c2VuZGVyPmV2ZW50c19saXN0PC9zZW5kZXI+Ci0gICAgICAgIDxzaWduYWw+c2VsZWN0aW9uQ2hhbmdlZCgpPC9zaWduYWw+Ci0gICAgICAgIDxyZWNlaXZlcj5vcHJvZl9zdGFydF9iYXNlPC9yZWNlaXZlcj4KLSAgICAgICAgPHNsb3Q+ZXZlbnRfc2VsZWN0ZWQoKTwvc2xvdD4KLSAgICA8L2Nvbm5lY3Rpb24+Ci0gICAgPGNvbm5lY3Rpb24+Ci0gICAgICAgIDxzZW5kZXI+ZXZlbnRzX2xpc3Q8L3NlbmRlcj4KLSAgICAgICAgPHNpZ25hbD5vbkl0ZW0oUUxpc3RWaWV3SXRlbSopPC9zaWduYWw+Ci0gICAgICAgIDxyZWNlaXZlcj5vcHJvZl9zdGFydF9iYXNlPC9yZWNlaXZlcj4KLSAgICAgICAgPHNsb3Q+ZXZlbnRfb3ZlcihRTGlzdFZpZXdJdGVtICopPC9zbG90PgotICAgIDwvY29ubmVjdGlvbj4KLSAgICA8Y29ubmVjdGlvbj4KLSAgICAgICAgPHNlbmRlcj5zZXBhcmF0ZV9rZXJuZWxfY2I8L3NlbmRlcj4KLSAgICAgICAgPHNpZ25hbD5zdGF0ZUNoYW5nZWQoaW50KTwvc2lnbmFsPgotICAgICAgICA8cmVjZWl2ZXI+b3Byb2Zfc3RhcnRfYmFzZTwvcmVjZWl2ZXI+Ci0gICAgICAgIDxzbG90Pm9uX3NlcGFyYXRlX2tlcm5lbF9jYl9jaGFuZ2VkKGludCk8L3Nsb3Q+Ci0gICAgPC9jb25uZWN0aW9uPgotICAgIDxzbG90IGFjY2Vzcz0icHJvdGVjdGVkIj5jaG9vc2Vfa2VybmVsX2ZpbGVuYW1lKCk8L3Nsb3Q+Ci0gICAgPHNsb3QgYWNjZXNzPSJwcm90ZWN0ZWQiPmV2ZW50X292ZXIoUUxpc3RWaWV3SXRlbSAqKTwvc2xvdD4KLSAgICA8c2xvdCBhY2Nlc3M9InByb3RlY3RlZCI+ZXZlbnRfc2VsZWN0ZWQoKTwvc2xvdD4KLSAgICA8c2xvdCBhY2Nlc3M9InByb3RlY3RlZCI+b25fZmx1c2hfcHJvZmlsZXJfZGF0YSgpPC9zbG90PgotICAgIDxzbG90IGFjY2Vzcz0icHJvdGVjdGVkIj5vbl9zZXBhcmF0ZV9rZXJuZWxfY2JfY2hhbmdlZChpbnQpPC9zbG90PgotICAgIDxzbG90IGFjY2Vzcz0icHJvdGVjdGVkIj5vbl9zdGFydF9wcm9maWxlcigpPC9zbG90PgotICAgIDxzbG90IGFjY2Vzcz0icHJvdGVjdGVkIj5vbl9zdG9wX3Byb2ZpbGVyKCk8L3Nsb3Q+Ci08L2Nvbm5lY3Rpb25zPgotPHRhYnN0b3BzPgotICAgIDx0YWJzdG9wPnNldHVwX2NvbmZpZ190YWI8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+ZXZlbnRzX2xpc3Q8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+b3NfcmluZ19jb3VudF9jYjwvdGFic3RvcD4KLSAgICA8dGFic3RvcD51c2VyX3JpbmdfY291bnRfY2I8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+ZXZlbnRfY291bnRfZWRpdDwvdGFic3RvcD4KLSAgICA8dGFic3RvcD5jaGVjazA8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+Y2hlY2sxPC90YWJzdG9wPgotICAgIDx0YWJzdG9wPmNoZWNrMjwvdGFic3RvcD4KLSAgICA8dGFic3RvcD5jaGVjazM8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+Y2hlY2s0PC90YWJzdG9wPgotICAgIDx0YWJzdG9wPmNoZWNrNTwvdGFic3RvcD4KLSAgICA8dGFic3RvcD5jaGVjazY8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+Y2hlY2s3PC90YWJzdG9wPgotICAgIDx0YWJzdG9wPmNoZWNrODwvdGFic3RvcD4KLSAgICA8dGFic3RvcD5jaGVjazk8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+Y2hlY2sxMDwvdGFic3RvcD4KLSAgICA8dGFic3RvcD5jaGVjazExPC90YWJzdG9wPgotICAgIDx0YWJzdG9wPmNoZWNrMTI8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+Y2hlY2sxMzwvdGFic3RvcD4KLSAgICA8dGFic3RvcD5jaGVjazE0PC90YWJzdG9wPgotICAgIDx0YWJzdG9wPmNoZWNrMTU8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+c3RhcnRfcHJvZmlsZXJfYnRuPC90YWJzdG9wPgotICAgIDx0YWJzdG9wPmZsdXNoX3Byb2ZpbGVyX2RhdGFfYnRuPC90YWJzdG9wPgotICAgIDx0YWJzdG9wPnN0b3BfcHJvZmlsZXJfYnRuPC90YWJzdG9wPgotICAgIDx0YWJzdG9wPnF1aXRfYW5kX3NhdmVfYnRuPC90YWJzdG9wPgotICAgIDx0YWJzdG9wPmtlcm5lbF9maWxlbmFtZV9lZGl0PC90YWJzdG9wPgotICAgIDx0YWJzdG9wPm5vX3ZtbGludXg8L3RhYnN0b3A+Ci0gICAgPHRhYnN0b3A+YnVmZmVyX3NpemVfZWRpdDwvdGFic3RvcD4KLSAgICA8dGFic3RvcD5ub3RlX3RhYmxlX3NpemVfZWRpdDwvdGFic3RvcD4KLSAgICA8dGFic3RvcD52ZXJib3NlPC90YWJzdG9wPgotICAgIDx0YWJzdG9wPnNlcGFyYXRlX2tlcm5lbF9jYjwvdGFic3RvcD4KLSAgICA8dGFic3RvcD5zZXBhcmF0ZV9saWJfY2I8L3RhYnN0b3A+Ci08L3RhYnN0b3BzPgotPC9VST4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3N0cmVhbSBiL2luY2x1ZGUvc3N0cmVhbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUzOTNiMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3NzdHJlYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotLyogVGhpcyBpcyBwYXJ0IG9mIGxpYmlvL2lvc3RyZWFtLCBwcm92aWRpbmcgLSotIEMrKyAtKi0gaW5wdXQvb3V0cHV0LgotQ29weXJpZ2h0IChDKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotCi1UaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElPIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi10ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi1hbnkgbGF0ZXIgdmVyc2lvbi4KLQotVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgotCi1BcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgbGluayB0aGlzIGxpYnJhcnkgd2l0aCBmaWxlcwotY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMgZG9lcyBub3QgY2F1c2UKLXRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLVRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkKLXRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICovCi0KLS8qIFdyaXR0ZW4gYnkgTWFnbnVzIEZyb21yZWlkZSAobWFnZnJAbHlzYXRvci5saXUuc2UpLiAqLwotLyogc2Vla29mZiBhbmQgaWRlYXMgZm9yIG92ZXJmbG93IGlzIGxhcmdlbHkgYm9ycm93ZWQgZnJvbSBsaWJzdGRjKystdjMgKi8KLQotI2lmbmRlZiBfX1NTVFJFQU1fXwotI2RlZmluZSBfX1NTVFJFQU1fXwotCi0jaW5jbHVkZSA8aW9zdHJlYW0uaD4KLSNpbmNsdWRlIDxzdHJlYW1idWYuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBzdGQKLXsKLSAgY2xhc3Mgc3RyaW5nYnVmIDogcHVibGljIHN0cmVhbWJ1ZgotICB7Ci0gIHB1YmxpYzoKLSAgICB0eXBlZGVmIGNoYXIJY2hhcl90eXBlOwotICAgIHR5cGVkZWYgaW50CQlpbnRfdHlwZTsKLSAgICB0eXBlZGVmIHN0cmVhbXBvcwlwb3NfdHlwZTsKLSAgICB0eXBlZGVmIHN0cmVhbW9mZglvZmZfdHlwZTsKLQotICAgIGV4cGxpY2l0Ci0gICAgc3RyaW5nYnVmKGludCB3aGljaD1pb3M6OmlufGlvczo6b3V0KQotICAgICAgOiBzdHJlYW1idWYoKSwgbW9kZShzdGF0aWNfY2FzdDxpb3M6Om9wZW5fbW9kZT4od2hpY2gpKSwKLQlzdHJlYW0oTlVMTCksIHN0cmVhbV9sZW4oMCkKLSAgICB7Ci0gICAgICBzdHJpbmdidWZfaW5pdCgpOwotICAgIH0KLQotICAgIGV4cGxpY2l0Ci0gICAgc3RyaW5nYnVmKGNvbnN0IHN0cmluZyAmc3RyLCBpbnQgd2hpY2g9aW9zOjppbnxpb3M6Om91dCkKLSAgICAgIDogc3RyZWFtYnVmKCksIG1vZGUoc3RhdGljX2Nhc3Q8aW9zOjpvcGVuX21vZGU+KHdoaWNoKSksCi0Jc3RyZWFtKE5VTEwpLCBzdHJlYW1fbGVuKDApCi0gICAgewotICAgICAgaWYgKG1vZGUgJiAoaW9zOjppbnxpb3M6Om91dCkpCi0JewotCSAgc3RyZWFtX2xlbiA9IHN0ci5zaXplKCk7Ci0JICBzdHJlYW0gPSBuZXcgY2hhcl90eXBlW3N0cmVhbV9sZW5dOwotCSAgc3RyLmNvcHkoc3RyZWFtLCBzdHJlYW1fbGVuKTsKLQl9Ci0gICAgICBzdHJpbmdidWZfaW5pdCgpOwotICAgIH0KLQotICAgIHZpcnR1YWwKLSAgICB+c3RyaW5nYnVmKCkKLSAgICB7Ci0gICAgICBkZWxldGVbXSBzdHJlYW07Ci0gICAgfQotCi0gICAgc3RyaW5nCi0gICAgc3RyKCkgY29uc3QKLSAgICB7Ci0gICAgICBpZiAocGJhc2UoKSAhPSAwKQotCXJldHVybiBzdHJpbmcoc3RyZWFtLCBwcHRyKCktcGJhc2UoKSk7Ci0gICAgICBlbHNlCi0JcmV0dXJuIHN0cmluZygpOwotICAgIH0KLQotICAgIHZvaWQKLSAgICBzdHIoY29uc3Qgc3RyaW5nJiBzdHIpCi0gICAgewotICAgICAgZGVsZXRlW10gc3RyZWFtOwotICAgICAgc3RyZWFtX2xlbiA9IHN0ci5zaXplKCk7Ci0gICAgICBzdHJlYW0gPSBuZXcgY2hhcl90eXBlW3N0cmVhbV9sZW5dOwotICAgICAgc3RyLmNvcHkoc3RyZWFtLCBzdHJlYW1fbGVuKTsKLSAgICAgIHN0cmluZ2J1Zl9pbml0KCk7Ci0gICAgfQotCi0gIHByb3RlY3RlZDoKLSAgICAvLyBUaGUgYnVmZmVyIGlzIGFscmVhZHkgaW4gZ3B0ciwgc28gaWYgaXQgZW5kcyB0aGVuIGl0IGlzIG91dCBvZiBkYXRhLgotICAgIHZpcnR1YWwgaW50Ci0gICAgdW5kZXJmbG93KCkKLSAgICB7Ci0gICAgICByZXR1cm4gRU9GOwotICAgIH0KLQotICAgIHZpcnR1YWwgaW50Ci0gICAgb3ZlcmZsb3coaW50IGMgPSBFT0YpCi0gICAgewotICAgICAgaW50IHJlczsKLSAgICAgIGlmIChtb2RlICYgaW9zOjpvdXQpCi0JewotCSAgaWYgKGMgIT0gRU9GKQotCSAgICB7Ci0JICAgICAgc3RyZWFtc2l6ZSBvbGRfc3RyZWFtX2xlbiA9IHN0cmVhbV9sZW47Ci0JICAgICAgc3RyZWFtX2xlbiArPSAxOwotCSAgICAgIGNoYXJfdHlwZSogbmV3X3N0cmVhbSA9IG5ldyBjaGFyX3R5cGVbc3RyZWFtX2xlbl07Ci0JICAgICAgbWVtY3B5KG5ld19zdHJlYW0sIHN0cmVhbSwgb2xkX3N0cmVhbV9sZW4pOwotCSAgICAgIGRlbGV0ZVtdIHN0cmVhbTsKLQkgICAgICBzdHJlYW0gPSBuZXdfc3RyZWFtOwotCSAgICAgIHN0cmluZ2J1Zl9zeW5jKGdwdHIoKS1lYmFjaygpLCBwcHRyKCktcGJhc2UoKSk7Ci0JICAgICAgc3B1dGMoYyk7Ci0JICAgICAgcmVzID0gYzsKLQkgICAgfQotCSAgZWxzZQotCSAgICByZXMgPSBFT0Y7Ci0JfQotICAgICAgZWxzZQotCXJlcyA9IDA7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLQotICAgIHZpcnR1YWwgc3RyZWFtYnVmKgotICAgIHNldGJ1ZihjaGFyX3R5cGUqIHMsIHN0cmVhbXNpemUgbikKLSAgICB7Ci0gICAgICBpZiAobiAhPSAwKQotCXsKLQkgIGRlbGV0ZVtdIHN0cmVhbTsKLQkgIHN0cmVhbSA9IG5ldyBjaGFyX3R5cGVbbl07Ci0JICBtZW1jcHkoc3RyZWFtLCBzLCBuKTsKLQkgIHN0cmVhbV9sZW4gPSBuOwotCSAgc3RyaW5nYnVmX3N5bmMoMCwgMCk7Ci0JfQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgdmlydHVhbCBwb3NfdHlwZQotICAgIHNlZWtvZmYob2ZmX3R5cGUgb2ZmLCBpb3M6OnNlZWtfZGlyIHdheSwgaW50IHdoaWNoID0gaW9zOjppbiB8IGlvczo6b3V0KQotICAgIHsKLSAgICAgIHBvc190eXBlIHJldCA9ICBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOwotICAgICAgYm9vbCB0ZXN0aW4gPSB3aGljaCAmIGlvczo6aW4gJiYgbW9kZSAmIGlvczo6aW47Ci0gICAgICBib29sIHRlc3RvdXQgPSB3aGljaCAmIGlvczo6b3V0ICYmIG1vZGUgJiBpb3M6Om91dDsKLSAgICAgIGJvb2wgdGVzdGJvdGggPSB0ZXN0aW4gJiYgdGVzdG91dCAmJiB3YXkgIT0gaW9zOjpjdXI7Ci0KLSAgICAgIGlmIChzdHJlYW1fbGVuICYmICgodGVzdGluICE9IHRlc3RvdXQpIHx8IHRlc3Rib3RoKSkKLQl7Ci0JICBjaGFyX3R5cGUqIGJlZyA9IHN0cmVhbTsKLQkgIGNoYXJfdHlwZSogY3VyaSA9IE5VTEw7Ci0JICBjaGFyX3R5cGUqIGN1cm8gPSBOVUxMOwotCSAgY2hhcl90eXBlKiBlbmRpID0gTlVMTDsKLQkgIGNoYXJfdHlwZSogZW5kbyA9IE5VTEw7Ci0KLQkgIGlmICh0ZXN0aW4pCi0JICAgIHsKLQkgICAgICBjdXJpID0gZ3B0cigpOwotCSAgICAgIGVuZGkgPSBlZ3B0cigpOwotCSAgICB9Ci0JICBpZiAodGVzdG91dCkKLQkgICAgewotCSAgICAgIGN1cm8gPSBwcHRyKCk7Ci0JICAgICAgZW5kbyA9IGVwcHRyKCk7Ci0JICAgIH0KLQotCSAgb2ZmX3R5cGUgbmV3b2ZmaSA9IDA7Ci0JICBvZmZfdHlwZSBuZXdvZmZvID0gMDsKLQkgIGlmICh3YXkgPT0gaW9zOjpiZWcpCi0JICAgIHsKLQkgICAgICBuZXdvZmZpID0gYmVnIC0gY3VyaTsKLQkgICAgICBuZXdvZmZvID0gYmVnIC0gY3VybzsKLQkgICAgfQotCSAgZWxzZSBpZiAod2F5ID09IGlvczo6ZW5kKQotCSAgICB7Ci0JICAgICAgbmV3b2ZmaSA9IGVuZGkgLSBjdXJpOwotCSAgICAgIG5ld29mZm8gPSBlbmRvIC0gY3VybzsKLQkgICAgfQotCi0JICBpZiAodGVzdGluICYmIG5ld29mZmkgKyBvZmYgKyBjdXJpIC0gYmVnID49IDAgJiYKLQkgICAgICBlbmRpIC0gYmVnID49IG5ld29mZmkgKyBvZmYgKyBjdXJpIC0gYmVnKQotCSAgICB7Ci0JICAgICAgZ2J1bXAobmV3b2ZmaSArIG9mZik7Ci0JICAgICAgcmV0ID0gcG9zX3R5cGUobmV3b2ZmaSArIG9mZiArIGN1cmkpOwotCSAgICB9Ci0JICBpZiAodGVzdG91dCAmJiBuZXdvZmZvICsgb2ZmICsgY3VybyAtIGJlZyA+PSAwICYmCi0JICAgICAgZW5kbyAtIGJlZyA+PSBuZXdvZmZvICsgb2ZmICsgY3VybyAtIGJlZykKLQkgICAgewotCSAgICAgIHBidW1wKG5ld29mZm8gKyBvZmYpOwotCSAgICAgIHJldCA9IHBvc190eXBlKG5ld29mZm8gKyBvZmYgKyBjdXJvKTsKLQkgICAgfQotCX0KLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgdmlydHVhbCBwb3NfdHlwZQotICAgIHNlZWtwb3MocG9zX3R5cGUgc3AsIGludCB3aGljaCA9IGlvczo6aW4gfCBpb3M6Om91dCkKLSAgICB7Ci0gICAgICBwb3NfdHlwZSByZXQgPSBzZWVrb2ZmKHNwLCBpb3M6OmJlZywgd2hpY2gpOwotICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgcHJpdmF0ZToKLSAgICB2b2lkCi0gICAgc3RyaW5nYnVmX3N5bmMoc3RyZWFtc2l6ZSBpLCBzdHJlYW1zaXplIG8pCi0gICAgewotICAgICAgaWYgKG1vZGUgJiBpb3M6OmluKQotCXNldGcoc3RyZWFtLCBzdHJlYW0gKyBpLCBzdHJlYW0gKyBzdHJlYW1fbGVuKTsKLSAgICAgIGlmIChtb2RlICYgaW9zOjpvdXQpCi0JewotCSAgc2V0cChzdHJlYW0sIHN0cmVhbSArIHN0cmVhbV9sZW4pOwotCSAgcGJ1bXAobyk7Ci0JfQotICAgIH0KLSAgICB2b2lkCi0gICAgc3RyaW5nYnVmX2luaXQoKQotICAgIHsKLSAgICAgIGlmIChtb2RlICYgaW9zOjphdGUpCi0Jc3RyaW5nYnVmX3N5bmMoMCwgc3RyZWFtX2xlbik7Ci0gICAgICBlbHNlCi0Jc3RyaW5nYnVmX3N5bmMoMCwgMCk7Ci0gICAgfQotCi0gIHByaXZhdGU6Ci0gICAgaW9zOjpvcGVuX21vZGUJbW9kZTsKLSAgICBjaGFyX3R5cGUqCQlzdHJlYW07Ci0gICAgc3RyZWFtc2l6ZQkJc3RyZWFtX2xlbjsKLSAgfTsKLQwKLSAgY2xhc3MgaXN0cmluZ3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtIHsKLSAgcHVibGljOgotICAgIHR5cGVkZWYgY2hhcgljaGFyX3R5cGU7Ci0gICAgdHlwZWRlZiBpbnQJCWludF90eXBlOwotICAgIHR5cGVkZWYgc3RyZWFtcG9zCXBvc190eXBlOwotICAgIHR5cGVkZWYgc3RyZWFtb2ZmCW9mZl90eXBlOwotCi0gICAgZXhwbGljaXQKLSAgICBpc3RyaW5nc3RyZWFtKGludCB3aGljaD1pb3M6OmluKQotICAgICAgOiBpc3RyZWFtKCZzYiksIHNiKHdoaWNoIHwgaW9zOjppbikKLSAgICB7IH0KLQotICAgIGV4cGxpY2l0Ci0gICAgaXN0cmluZ3N0cmVhbShjb25zdCBzdHJpbmcmIHN0ciwgaW50IHdoaWNoPWlvczo6aW4pCi0gICAgICA6IGlzdHJlYW0oJnNiKSwgc2Ioc3RyLCB3aGljaCB8IGlvczo6aW4pCi0gICAgeyB9Ci0KLSAgICBzdHJpbmdidWYqCi0gICAgcmRidWYoKSBjb25zdAotICAgIHsKLSAgICAgIHJldHVybiBjb25zdF9jYXN0PHN0cmluZ2J1Zio+KCZzYik7Ci0gICAgfQotCi0gICAgc3RyaW5nCi0gICAgc3RyKCkgY29uc3QKLSAgICB7Ci0gICAgICByZXR1cm4gcmRidWYoKS0+c3RyKCk7Ci0gICAgfQotICAgIHZvaWQKLSAgICBzdHIoY29uc3Qgc3RyaW5nJiBzKQotICAgIHsKLSAgICAgIHJkYnVmKCktPnN0cihzKTsKLSAgICB9Ci0gIHByaXZhdGU6Ci0gICAgc3RyaW5nYnVmIHNiOwotICB9OwotDAotICBjbGFzcyBvc3RyaW5nc3RyZWFtIDogcHVibGljIG9zdHJlYW0gewotICBwdWJsaWM6Ci0gICAgdHlwZWRlZiBjaGFyCWNoYXJfdHlwZTsKLSAgICB0eXBlZGVmIGludAkJaW50X3R5cGU7Ci0gICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7Ci0gICAgdHlwZWRlZiBzdHJlYW1vZmYJb2ZmX3R5cGU7Ci0KLSAgICBleHBsaWNpdAotICAgIG9zdHJpbmdzdHJlYW0oaW50IHdoaWNoPWlvczo6b3V0KQotICAgICAgOiBvc3RyZWFtKCZzYiksIHNiKHdoaWNoIHwgaW9zOjpvdXQpCi0gICAgeyB9Ci0KLSAgICBleHBsaWNpdAotICAgIG9zdHJpbmdzdHJlYW0oY29uc3Qgc3RyaW5nJiBzdHIsIGludCB3aGljaD1pb3M6Om91dCkKLSAgICAgIDogb3N0cmVhbSgmc2IpLCBzYihzdHIsIHdoaWNoIHwgaW9zOjpvdXQpCi0gICAgeyB9Ci0KLSAgICBzdHJpbmdidWYqCi0gICAgcmRidWYoKSBjb25zdAotICAgIHsKLSAgICAgIHJldHVybiBjb25zdF9jYXN0PHN0cmluZ2J1Zio+KCZzYik7Ci0gICAgfQotCi0gICAgc3RyaW5nCi0gICAgc3RyKCkgY29uc3QKLSAgICB7Ci0gICAgICByZXR1cm4gcmRidWYoKS0+c3RyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzdHIoY29uc3Qgc3RyaW5nJiBzKQotICAgIHsKLSAgICAgIHJkYnVmKCktPnN0cihzKTsKLSAgICB9Ci0gIHByaXZhdGU6Ci0gICAgc3RyaW5nYnVmIHNiOwotICB9OwotDAotICBjbGFzcyBzdHJpbmdzdHJlYW0gOiBwdWJsaWMgaW9zdHJlYW0gewotICBwdWJsaWM6Ci0gICAgdHlwZWRlZiBjaGFyCWNoYXJfdHlwZTsKLSAgICB0eXBlZGVmIGludAkJaW50X3R5cGU7Ci0gICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7Ci0gICAgdHlwZWRlZiBzdHJlYW1vZmYJb2ZmX3R5cGU7Ci0KLSAgICBleHBsaWNpdAotICAgIHN0cmluZ3N0cmVhbShpbnQgd2hpY2g9aW9zOjpvdXR8aW9zOjppbikKLSAgICAgIDogaW9zdHJlYW0oJnNiKSwgc2Iod2hpY2gpCi0gICAgeyB9Ci0KLSAgICBleHBsaWNpdAotICAgIHN0cmluZ3N0cmVhbShjb25zdCBzdHJpbmcmIHN0ciwgaW50IHdoaWNoPWlvczo6b3V0fGlvczo6aW4pCi0gICAgICA6IGlvc3RyZWFtKCZzYiksIHNiKHN0ciwgd2hpY2gpCi0gICAgeyB9Ci0KLSAgICBzdHJpbmdidWYqCi0gICAgcmRidWYoKSBjb25zdAotICAgIHsKLSAgICAgIHJldHVybiBjb25zdF9jYXN0PHN0cmluZ2J1Zio+KCZzYik7Ci0gICAgfQotCi0gICAgc3RyaW5nCi0gICAgc3RyKCkgY29uc3QKLSAgICB7Ci0gICAgICByZXR1cm4gcmRidWYoKS0+c3RyKCk7Ci0gICAgfQotCi0gICAgdm9pZAotICAgIHN0cihjb25zdCBzdHJpbmcmIHMpCi0gICAgewotICAgICAgcmRidWYoKS0+c3RyKHMpOwotICAgIH0KLSAgcHJpdmF0ZToKLSAgICBzdHJpbmdidWYgc2I7Ci0gIH07Ci19OwotCi0jZW5kaWYgLyogbm90IF9fU1RSU1RSRUFNX18gKi8KZGlmZiAtLWdpdCBhL2luc3RhbGwtc2ggYi9pbnN0YWxsLXNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxYTgzNTM0Li4wMDAwMDAwCi0tLSBhL2luc3RhbGwtc2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotIyEvYmluL3NoCi0jIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQotCi1zY3JpcHR2ZXJzaW9uPTIwMDUtMDItMDIuMjEKLQotIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCi0jIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQotIyBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgotIwotIyBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCi0jCi0jIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCi0jIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCi0jIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgotIyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotIwotIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSMKLSMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0jIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSMgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCi0jIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0jCi0jIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90Ci0jIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQotIyBpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3ItCi0jIHRpdW0uCi0jCi0jCi0jIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jCi0jIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50Ci0jIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0Ci0jIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCi0jCi0jIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KLSMgZnJvbSBzY3JhdGNoLiAgSXQgY2FuIG9ubHkgaW5zdGFsbCBvbmUgZmlsZSBhdCBhIHRpbWUsIGEgcmVzdHJpY3Rpb24KLSMgc2hhcmVkIHdpdGggbWFueSBPUydzIGluc3RhbGwgcHJvZ3JhbXMuCi0KLSMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAotCi0jIERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2UgaXQuCi1kb2l0PSIke0RPSVRQUk9HLX0iCi0KLSMgcHV0IGluIGFic29sdXRlIHBhdGhzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOyBvciB1c2UgZW52LiB2YXJzLgotCi1tdnByb2c9IiR7TVZQUk9HLW12fSIKLWNwcHJvZz0iJHtDUFBST0ctY3B9IgotY2htb2Rwcm9nPSIke0NITU9EUFJPRy1jaG1vZH0iCi1jaG93bnByb2c9IiR7Q0hPV05QUk9HLWNob3dufSIKLWNoZ3JwcHJvZz0iJHtDSEdSUFBST0ctY2hncnB9Igotc3RyaXBwcm9nPSIke1NUUklQUFJPRy1zdHJpcH0iCi1ybXByb2c9IiR7Uk1QUk9HLXJtfSIKLW1rZGlycHJvZz0iJHtNS0RJUlBST0ctbWtkaXJ9IgotCi1jaG1vZGNtZD0iJGNobW9kcHJvZyAwNzU1IgotY2hvd25jbWQ9Ci1jaGdycGNtZD0KLXN0cmlwY21kPQotcm1jbWQ9IiRybXByb2cgLWYiCi1tdmNtZD0iJG12cHJvZyIKLXNyYz0KLWRzdD0KLWRpcl9hcmc9Ci1kc3Rhcmc9Ci1ub190YXJnZXRfZGlyZWN0b3J5PQotCi11c2FnZT0iVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFstVF0gU1JDRklMRSBEU1RGSUxFCi0gICBvcjogJDAgW09QVElPTl0uLi4gU1JDRklMRVMuLi4gRElSRUNUT1JZCi0gICBvcjogJDAgW09QVElPTl0uLi4gLXQgRElSRUNUT1JZIFNSQ0ZJTEVTLi4uCi0gICBvcjogJDAgW09QVElPTl0uLi4gLWQgRElSRUNUT1JJRVMuLi4KLQotSW4gdGhlIDFzdCBmb3JtLCBjb3B5IFNSQ0ZJTEUgdG8gRFNURklMRS4KLUluIHRoZSAybmQgYW5kIDNyZCwgY29weSBhbGwgU1JDRklMRVMgdG8gRElSRUNUT1JZLgotSW4gdGhlIDR0aCwgY3JlYXRlIERJUkVDVE9SSUVTLgotCi1PcHRpb25zOgotLWMgICAgICAgICAoaWdub3JlZCkKLS1kICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KLS1nIEdST1VQICAgJGNoZ3JwcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gR1JPVVAuCi0tbSBNT0RFICAgICRjaG1vZHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIE1PREUuCi0tbyBVU0VSICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCi0tcyAgICAgICAgICRzdHJpcHByb2cgaW5zdGFsbGVkIGZpbGVzLgotLXQgRElSRUNUT1JZICBpbnN0YWxsIGludG8gRElSRUNUT1JZLgotLVQgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KLS0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCi0tLXZlcnNpb24gIGRpc3BsYXkgdmVyc2lvbiBpbmZvIGFuZCBleGl0LgotCi1FbnZpcm9ubWVudCB2YXJpYWJsZXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbWFuZHM6Ci0gIENIR1JQUFJPRyBDSE1PRFBST0cgQ0hPV05QUk9HIENQUFJPRyBNS0RJUlBST0cgTVZQUk9HIFJNUFJPRyBTVFJJUFBST0cKLSIKLQotd2hpbGUgdGVzdCAtbiAiJDEiOyBkbwotICBjYXNlICQxIGluCi0gICAgLWMpIHNoaWZ0Ci0gICAgICAgIGNvbnRpbnVlOzsKLQotICAgIC1kKSBkaXJfYXJnPXRydWUKLSAgICAgICAgc2hpZnQKLSAgICAgICAgY29udGludWU7OwotCi0gICAgLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgotICAgICAgICBzaGlmdAotICAgICAgICBzaGlmdAotICAgICAgICBjb250aW51ZTs7Ci0KLSAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgJD87OwotCi0gICAgLW0pIGNobW9kY21kPSIkY2htb2Rwcm9nICQyIgotICAgICAgICBzaGlmdAotICAgICAgICBzaGlmdAotICAgICAgICBjb250aW51ZTs7Ci0KLSAgICAtbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCi0gICAgICAgIHNoaWZ0Ci0gICAgICAgIHNoaWZ0Ci0gICAgICAgIGNvbnRpbnVlOzsKLQotICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nCi0gICAgICAgIHNoaWZ0Ci0gICAgICAgIGNvbnRpbnVlOzsKLQotICAgIC10KSBkc3Rhcmc9JDIKLQlzaGlmdAotCXNoaWZ0Ci0JY29udGludWU7OwotCi0gICAgLVQpIG5vX3RhcmdldF9kaXJlY3Rvcnk9dHJ1ZQotCXNoaWZ0Ci0JY29udGludWU7OwotCi0gICAgLS12ZXJzaW9uKSBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiI7IGV4aXQgJD87OwotCi0gICAgKikgICMgV2hlbiAtZCBpcyB1c2VkLCBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLgotCSMgV2hlbiAtdCBpcyB1c2VkLCB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQuCi0JdGVzdCAtbiAiJGRpcl9hcmckZHN0YXJnIiAmJiBicmVhawotICAgICAgICAjIE90aGVyd2lzZSwgdGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIGRlc3RpbmF0aW9uLiAgUmVtb3ZlIGl0IGZyb20gJEAuCi0JZm9yIGFyZwotCWRvCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJGRzdGFyZyI7IHRoZW4KLQkgICAgIyAkQCBpcyBub3QgZW1wdHk6IGl0IGNvbnRhaW5zIGF0IGxlYXN0ICRhcmcuCi0JICAgIHNldCBmbm9yZCAiJEAiICIkZHN0YXJnIgotCSAgICBzaGlmdCAjIGZub3JkCi0JICBmaQotCSAgc2hpZnQgIyBhcmcKLQkgIGRzdGFyZz0kYXJnCi0JZG9uZQotCWJyZWFrOzsKLSAgZXNhYwotZG9uZQotCi1pZiB0ZXN0IC16ICIkMSI7IHRoZW4KLSAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCi0gICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCi0gICAgZXhpdCAxCi0gIGZpCi0gICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgotICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgotICBleGl0IDAKLWZpCi0KLWZvciBzcmMKLWRvCi0gICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KLSAgY2FzZSAkc3JjIGluCi0gICAgLSopIHNyYz0uLyRzcmMgOzsKLSAgZXNhYwotCi0gIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgotICAgIGRzdD0kc3JjCi0gICAgc3JjPQotCi0gICAgaWYgdGVzdCAtZCAiJGRzdCI7IHRoZW4KLSAgICAgIG1rZGlyY21kPToKLSAgICAgIGNobW9kY21kPQotICAgIGVsc2UKLSAgICAgIG1rZGlyY21kPSRta2RpcnByb2cKLSAgICBmaQotICBlbHNlCi0gICAgIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQKLSAgICAjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkCi0gICAgIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCi0gICAgaWYgdGVzdCAhIC1mICIkc3JjIiAmJiB0ZXN0ICEgLWQgIiRzcmMiOyB0aGVuCi0gICAgICBlY2hvICIkMDogJHNyYyBkb2VzIG5vdCBleGlzdC4iID4mMgotICAgICAgZXhpdCAxCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLXogIiRkc3RhcmciOyB0aGVuCi0gICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCi0gICAgICBleGl0IDEKLSAgICBmaQotCi0gICAgZHN0PSRkc3RhcmcKLSAgICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCi0gICAgY2FzZSAkZHN0IGluCi0gICAgICAtKikgZHN0PS4vJGRzdCA7OwotICAgIGVzYWMKLQotICAgICMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IHdvbid0IHdvcmsKLSAgICAjIGlmIGRvdWJsZSBzbGFzaGVzIGFyZW4ndCBpZ25vcmVkLgotICAgIGlmIHRlc3QgLWQgIiRkc3QiOyB0aGVuCi0gICAgICBpZiB0ZXN0IC1uICIkbm9fdGFyZ2V0X2RpcmVjdG9yeSI7IHRoZW4KLQllY2hvICIkMDogJGRzdGFyZzogSXMgYSBkaXJlY3RvcnkiID4mMgotCWV4aXQgMQotICAgICAgZmkKLSAgICAgIGRzdD0kZHN0L2BiYXNlbmFtZSAiJHNyYyJgCi0gICAgZmkKLSAgZmkKLQotICAjIFRoaXMgc2VkIGNvbW1hbmQgZW11bGF0ZXMgdGhlIGRpcm5hbWUgY29tbWFuZC4KLSAgZHN0ZGlyPWBlY2hvICIkZHN0IiB8IHNlZCAtZSAncywvKiQsLDtzLFteL10qJCwsO3MsLyokLCw7cyxeJCwuLCdgCi0KLSAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0cy4KLQotICAjIFNraXAgbG90cyBvZiBzdGF0IGNhbGxzIGluIHRoZSB1c3VhbCBjYXNlLgotICBpZiB0ZXN0ICEgLWQgIiRkc3RkaXIiOyB0aGVuCi0gICAgZGVmYXVsdElGUz0nCi0JICcKLSAgICBJRlM9IiR7SUZTLSRkZWZhdWx0SUZTfSIKLQotICAgIG9JRlM9JElGUwotICAgICMgU29tZSBzaCdzIGNhbid0IGhhbmRsZSBJRlM9LyBmb3Igc29tZSByZWFzb24uCi0gICAgSUZTPSclJwotICAgIHNldCB4IGBlY2hvICIkZHN0ZGlyIiB8IHNlZCAtZSAnc0AvQCVAZycgLWUgJ3NAXiVAL0AnYAotICAgIHNoaWZ0Ci0gICAgSUZTPSRvSUZTCi0KLSAgICBwYXRoY29tcD0KLQotICAgIHdoaWxlIHRlc3QgJCMgLW5lIDAgOyBkbwotICAgICAgcGF0aGNvbXA9JHBhdGhjb21wJDEKLSAgICAgIHNoaWZ0Ci0gICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KLSAgICAgICAgJG1rZGlycHJvZyAiJHBhdGhjb21wIgotCSMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhIGBGaWxlIGV4aXN0JyBlcnJvciBpbiBjYXNlIHNldmVyYWwKLQkjIGluc3RhbGwtc2ggYXJlIGNyZWF0aW5nIHRoZSBkaXJlY3RvcnkgY29uY3VycmVudGx5LiAgVGhpcwotCSMgaXMgT0suCi0JdGVzdCAtZCAiJHBhdGhjb21wIiB8fCBleGl0Ci0gICAgICBmaQotICAgICAgcGF0aGNvbXA9JHBhdGhjb21wLwotICAgIGRvbmUKLSAgZmkKLQotICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KLSAgICAkZG9pdCAkbWtkaXJjbWQgIiRkc3QiIFwKLSAgICAgICYmIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3QiOyB9IFwKLSAgICAgICYmIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3QiOyB9IFwKLSAgICAgICYmIHsgdGVzdCAteiAiJHN0cmlwY21kIiB8fCAkZG9pdCAkc3RyaXBjbWQgIiRkc3QiOyB9IFwKLSAgICAgICYmIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgIiRkc3QiOyB9Ci0KLSAgZWxzZQotICAgIGRzdGZpbGU9YGJhc2VuYW1lICIkZHN0ImAKLQotICAgICMgTWFrZSBhIGNvdXBsZSBvZiB0ZW1wIGZpbGUgbmFtZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCi0gICAgZHN0dG1wPSRkc3RkaXIvX2luc3QuJCRfCi0gICAgcm10bXA9JGRzdGRpci9fcm0uJCRfCi0KLSAgICAjIFRyYXAgdG8gY2xlYW4gdXAgdGhvc2UgdGVtcCBmaWxlcyBhdCBleGl0LgotICAgIHRyYXAgJ3JldD0kPzsgcm0gLWYgIiRkc3R0bXAiICIkcm10bXAiICYmIGV4aXQgJHJldCcgMAotICAgIHRyYXAgJyhleGl0ICQ/KTsgZXhpdCcgMSAyIDEzIDE1Ci0KLSAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgotICAgICRkb2l0ICRjcHByb2cgIiRzcmMiICIkZHN0dG1wIiAmJgotCi0gICAgIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzLgotICAgICMKLSAgICAjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCi0gICAgIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCi0gICAgIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgotICAgICMKLSAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgfSBcCi0gICAgICAmJiB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSBcCi0gICAgICAmJiB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSBcCi0gICAgICAmJiB7IHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICIkZHN0dG1wIjsgfSAmJgotCi0gICAgIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgotICAgIHsgJGRvaXQgJG12Y21kIC1mICIkZHN0dG1wIiAiJGRzdGRpci8kZHN0ZmlsZSIgMj4vZGV2L251bGwgXAotICAgICAgfHwgewotCSAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKLQkgICAjIHRvIGl0c2VsZiwgb3IgcGVyaGFwcyBiZWNhdXNlIG12IGlzIHNvIGFuY2llbnQgdGhhdCBpdCBkb2VzIG5vdAotCSAgICMgc3VwcG9ydCAtZi4KLQotCSAgICMgTm93IHJlbW92ZSBvciBtb3ZlIGFzaWRlIGFueSBvbGQgZmlsZSBhdCBkZXN0aW5hdGlvbiBsb2NhdGlvbi4KLQkgICAjIFdlIHRyeSB0aGlzIHR3byB3YXlzIHNpbmNlIHJtIGNhbid0IHVubGluayBpdHNlbGYgb24gc29tZQotCSAgICMgc3lzdGVtcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbWlnaHQgYmUgYnVzeSBmb3Igb3RoZXIKLQkgICAjIHJlYXNvbnMuICBJbiB0aGlzIGNhc2UsIHRoZSBmaW5hbCBjbGVhbnVwIG1pZ2h0IGZhaWwgYnV0IHRoZSBuZXcKLQkgICAjIGZpbGUgc2hvdWxkIHN0aWxsIGluc3RhbGwgc3VjY2Vzc2Z1bGx5LgotCSAgIHsKLQkgICAgIGlmIHRlc3QgLWYgIiRkc3RkaXIvJGRzdGZpbGUiOyB0aGVuCi0JICAgICAgICRkb2l0ICRybWNtZCAtZiAiJGRzdGRpci8kZHN0ZmlsZSIgMj4vZGV2L251bGwgXAotCSAgICAgICB8fCAkZG9pdCAkbXZjbWQgLWYgIiRkc3RkaXIvJGRzdGZpbGUiICIkcm10bXAiIDI+L2Rldi9udWxsIFwKLQkgICAgICAgfHwgewotCQkgZWNobyAiJDA6IGNhbm5vdCB1bmxpbmsgb3IgcmVuYW1lICRkc3RkaXIvJGRzdGZpbGUiID4mMgotCQkgKGV4aXQgMSk7IGV4aXQgMQotCSAgICAgICB9Ci0JICAgICBlbHNlCi0JICAgICAgIDoKLQkgICAgIGZpCi0JICAgfSAmJgotCi0JICAgIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgotCSAgICRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3RkaXIvJGRzdGZpbGUiCi0JIH0KLSAgICB9Ci0gIGZpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotZG9uZQotCi0jIFRoZSBmaW5hbCBsaXR0bGUgdHJpY2sgdG8gImNvcnJlY3RseSIgcGFzcyB0aGUgZXhpdCBzdGF0dXMgdG8gdGhlIGV4aXQgdHJhcC4KLXsKLSAgKGV4aXQgMCk7IGV4aXQgMAotfQotCi0jIExvY2FsIHZhcmlhYmxlczoKLSMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgotIyB0aW1lLXN0YW1wLWVuZDogIiQiCi0jIEVuZDoKZGlmZiAtLWdpdCBhL2xpYmFiaS9NYWtlZmlsZS5hbSBiL2xpYmFiaS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFhMjc3Yy4uMDAwMDAwMAotLS0gYS9saWJhYmkvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1TVUJESVJTPS4gdGVzdHMKLQotZGlzdF9zb3VyY2VzID0gXAotCWFiaS5jcHAgXAotCW9wX2FiaS5jcHAgXAotCWFiaS5oIFwKLQlvcF9hYmkuaCBcCi0Jb3BpbXBvcnQuY3BwCi0KLUVYVFJBX0RJU1QgPSAkKGRpc3Rfc291cmNlcykKLQotTElCUz1AUE9QVF9MSUJTQCBATElCRVJUWV9MSUJTQAotCi1pZiBlbmFibGVfYWJpCi0KLUFNX0NQUEZMQUdTID0gXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKwotCi1BTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLQotbm9pbnN0X0xJQlJBUklFUyA9IGxpYmFiaS5hCi1saWJhYmlfYV9TT1VSQ0VTID0gYWJpLmNwcCBvcF9hYmkuY3BwCi0KLWJpbl9QUk9HUkFNUyA9IG9waW1wb3J0Ci0KLW9waW1wb3J0X1NPVVJDRVMgPSBvcGltcG9ydC5jcHAKLW9waW1wb3J0X0xEQUREID0gXAotCWxpYmFiaS5hIFwKLQkuLi9saWJkYi9saWJvZGIuYSBcCi0JLi4vbGlib3B0KysvbGlib3B0KysuYSBcCi0JLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hIFwKLQkuLi9saWJ1dGlsL2xpYnV0aWwuYQotCi1lbmRpZgpkaWZmIC0tZ2l0IGEvbGliYWJpL01ha2VmaWxlLmluIGIvbGliYWJpL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzNlOTQxLi4wMDAwMDAwCi0tLSBhL2xpYmFiaS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDYxNCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotU09VUkNFUyA9ICQobGliYWJpX2FfU09VUkNFUykgJChvcGltcG9ydF9TT1VSQ0VTKQotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1AZW5hYmxlX2FiaV9UUlVFQGJpbl9QUk9HUkFNUyA9IG9waW1wb3J0JChFWEVFWFQpCi1zdWJkaXIgPSBsaWJhYmkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUxJQlJBUklFUyA9ICQobm9pbnN0X0xJQlJBUklFUykKLUFSID0gYXIKLUFSRkxBR1MgPSBjcnUKLWxpYmFiaV9hX0FSID0gJChBUikgJChBUkZMQUdTKQotbGliYWJpX2FfTElCQUREID0KLWFtX19saWJhYmlfYV9TT1VSQ0VTX0RJU1QgPSBhYmkuY3BwIG9wX2FiaS5jcHAKLUBlbmFibGVfYWJpX1RSVUVAYW1fbGliYWJpX2FfT0JKRUNUUyA9IGFiaS4kKE9CSkVYVCkgb3BfYWJpLiQoT0JKRVhUKQotbGliYWJpX2FfT0JKRUNUUyA9ICQoYW1fbGliYWJpX2FfT0JKRUNUUykKLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpIgotYmluUFJPR1JBTVNfSU5TVEFMTCA9ICQoSU5TVEFMTF9QUk9HUkFNKQotUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKLWFtX19vcGltcG9ydF9TT1VSQ0VTX0RJU1QgPSBvcGltcG9ydC5jcHAKLUBlbmFibGVfYWJpX1RSVUVAYW1fb3BpbXBvcnRfT0JKRUNUUyA9IG9waW1wb3J0LiQoT0JKRVhUKQotb3BpbXBvcnRfT0JKRUNUUyA9ICQoYW1fb3BpbXBvcnRfT0JKRUNUUykKLUBlbmFibGVfYWJpX1RSVUVAb3BpbXBvcnRfREVQRU5ERU5DSUVTID0gbGliYWJpLmEgLi4vbGliZGIvbGlib2RiLmEgXAotQGVuYWJsZV9hYmlfVFJVRUAJLi4vbGlib3B0KysvbGlib3B0KysuYSBcCi1AZW5hYmxlX2FiaV9UUlVFQAkuLi9saWJ1dGlsKysvbGlidXRpbCsrLmEgLi4vbGlidXRpbC9saWJ1dGlsLmEKLURFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1DWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCi0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKLUNYWExEID0gJChDWFgpCi1DWFhMSU5LID0gJChDWFhMRCkgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotU09VUkNFUyA9ICQobGliYWJpX2FfU09VUkNFUykgJChvcGltcG9ydF9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChhbV9fbGliYWJpX2FfU09VUkNFU19ESVNUKSBcCi0JJChhbV9fb3BpbXBvcnRfU09VUkNFU19ESVNUKQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKLQlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKLQlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCXVuaW5zdGFsbC1yZWN1cnNpdmUKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKLUFNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKLUFNVEFSID0gQEFNVEFSQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CRkRfTElCUyA9IEBCRkRfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRFID0gQERBVEVACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVhFRVhUID0gQEVYRUVYVEAKLUVYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotS0lOQyA9IEBLSU5DQAotS1NSQyA9IEBLU1JDQAotS1ZFUlMgPSBAS1ZFUlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQFBPUFRfTElCU0AgQExJQkVSVFlfTElCU0AKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1PQyA9IEBNT0NACi1NT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACi1PQkpFWFQgPSBAT0JKRVhUQAotT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKLU9QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAotT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLU9QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBPUFRfTElCUyA9IEBQT1BUX0xJQlNACi1QVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKLVFUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAotUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAotUVRfTElCID0gQFFUX0xJQkAKLVFUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACi1TVFJJUCA9IEBTVFJJUEAKLVVJQyA9IEBVSUNACi1WRVJTSU9OID0gQFZFUlNJT05ACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACi1YX0xJQlMgPSBAWF9MSUJTQAotWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1kYXRhZGlyID0gQGRhdGFkaXJACi1lbmFibGVfYWJpX0ZBTFNFID0gQGVuYWJsZV9hYmlfRkFMU0VACi1lbmFibGVfYWJpX1RSVUUgPSBAZW5hYmxlX2FiaV9UUlVFQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1oYXZlX3F0X0ZBTFNFID0gQGhhdmVfcXRfRkFMU0VACi1oYXZlX3F0X1RSVUUgPSBAaGF2ZV9xdF9UUlVFQAotaGF2ZV94c2x0cHJvY19GQUxTRSA9IEBoYXZlX3hzbHRwcm9jX0ZBTFNFQAotaGF2ZV94c2x0cHJvY19UUlVFID0gQGhhdmVfeHNsdHByb2NfVFJVRUAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWtlcm5lbF9zdXBwb3J0X0ZBTFNFID0gQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAota2VybmVsX3N1cHBvcnRfVFJVRSA9IEBrZXJuZWxfc3VwcG9ydF9UUlVFQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdG9wZGlyID0gQHRvcGRpckAKLVNVQkRJUlMgPSAuIHRlc3RzCi1kaXN0X3NvdXJjZXMgPSBcCi0JYWJpLmNwcCBcCi0Jb3BfYWJpLmNwcCBcCi0JYWJpLmggXAotCW9wX2FiaS5oIFwKLQlvcGltcG9ydC5jcHAKLQotRVhUUkFfRElTVCA9ICQoZGlzdF9zb3VyY2VzKQotQGVuYWJsZV9hYmlfVFJVRUBBTV9DUFBGTEFHUyA9IFwKLUBlbmFibGVfYWJpX1RSVUVACS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAotQGVuYWJsZV9hYmlfVFJVRUAJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKLUBlbmFibGVfYWJpX1RSVUVACS1JICR7dG9wX3NyY2Rpcn0vbGliZGIgXAotQGVuYWJsZV9hYmlfVFJVRUAJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKwotCi1AZW5hYmxlX2FiaV9UUlVFQEFNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotQGVuYWJsZV9hYmlfVFJVRUBub2luc3RfTElCUkFSSUVTID0gbGliYWJpLmEKLUBlbmFibGVfYWJpX1RSVUVAbGliYWJpX2FfU09VUkNFUyA9IGFiaS5jcHAgb3BfYWJpLmNwcAotQGVuYWJsZV9hYmlfVFJVRUBvcGltcG9ydF9TT1VSQ0VTID0gb3BpbXBvcnQuY3BwCi1AZW5hYmxlX2FiaV9UUlVFQG9waW1wb3J0X0xEQUREID0gXAotQGVuYWJsZV9hYmlfVFJVRUAJbGliYWJpLmEgXAotQGVuYWJsZV9hYmlfVFJVRUAJLi4vbGliZGIvbGlib2RiLmEgXAotQGVuYWJsZV9hYmlfVFJVRUAJLi4vbGlib3B0KysvbGlib3B0KysuYSBcCi1AZW5hYmxlX2FiaV9UUlVFQAkuLi9saWJ1dGlsKysvbGlidXRpbCsrLmEgXAotQGVuYWJsZV9hYmlfVFJVRUAJLi4vbGlidXRpbC9saWJ1dGlsLmEKLQotYWxsOiBhbGwtcmVjdXJzaXZlCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmNwcCAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJhYmkvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYmFiaS9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotY2xlYW4tbm9pbnN0TElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCi1saWJhYmkuYTogJChsaWJhYmlfYV9PQkpFQ1RTKSAkKGxpYmFiaV9hX0RFUEVOREVOQ0lFUykgCi0JLXJtIC1mIGxpYmFiaS5hCi0JJChsaWJhYmlfYV9BUikgbGliYWJpLmEgJChsaWJhYmlfYV9PQkpFQ1RTKSAkKGxpYmFiaV9hX0xJQkFERCkKLQkkKFJBTkxJQikgbGliYWJpLmEKLWluc3RhbGwtYmluUFJPR1JBTVM6ICQoYmluX1BST0dSQU1TKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQoYmluZGlyKSIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQoYmluZGlyKSIKLQlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBwMT1gZWNobyAkJHB8c2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCSAgaWYgdGVzdCAtZiAkJHAgXAotCSAgOyB0aGVuIFwKLQkgICAgZj1gZWNobyAiJCRwMSIgfCBzZWQgJ3MsXi4qLywsOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAotCSAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoYmluUFJPR1JBTVNfSU5TVEFMTCkgJyQkcCcgJyQoREVTVERJUikkKGJpbmRpcikvJCRmJyI7IFwKLQkgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoYmluUFJPR1JBTVNfSU5TVEFMTCkgIiQkcCIgIiQoREVTVERJUikkKGJpbmRpcikvJCRmIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1iaW5QUk9HUkFNUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9YGVjaG8gIiQkcCIgfCBzZWQgJ3MsXi4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJ2A7IFwKLQkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAotCSAgcm0gLWYgIiQoREVTVERJUikkKGJpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tYmluUFJPR1JBTVM6Ci0JLXRlc3QgLXogIiQoYmluX1BST0dSQU1TKSIgfHwgcm0gLWYgJChiaW5fUFJPR1JBTVMpCi1vcGltcG9ydCQoRVhFRVhUKTogJChvcGltcG9ydF9PQkpFQ1RTKSAkKG9waW1wb3J0X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIG9waW1wb3J0JChFWEVFWFQpCi0JJChDWFhMSU5LKSAkKG9waW1wb3J0X0xERkxBR1MpICQob3BpbXBvcnRfT0JKRUNUUykgJChvcGltcG9ydF9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWJpLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9hYmkuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29waW1wb3J0LlBvQGFtX19xdW90ZUAKLQotLmNwcC5vOgotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACWlmICQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jcHAub2JqOgotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACWlmICQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotdW5pbnN0YWxsLWluZm8tYW06Ci0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCi0kKFJFQ1VSU0lWRV9UQVJHRVRTKToKLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKLQkgIGNhc2UgJCRmIGluIFwKLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCi0JICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1tb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAotbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZG90X3NlZW49bm87IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCi0JICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQlyZXY9IiQkcmV2IC4iOyBcCi0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCi0JZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCi10YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCi0JZG9uZQotY3RhZ3MtcmVjdXJzaXZlOgotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCi0JZG9uZQotCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCi0KLVRBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKLQlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKLQkgICAgZGlyPSIvJCRkaXIiOyBcCi0JICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKLQkgIGVsc2UgXAotCSAgICBkaXI9Jyc7IFwKLQkgIGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi0JbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgfHwgJChta2Rpcl9wKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgKGNkICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAotCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyKSBcCi0JICAgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1yZWN1cnNpdmUKLWFsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpICQoUFJPR1JBTVMpCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbm9pbnN0TElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1yZWN1cnNpdmUKLQotZHZpLWFtOgotCi1odG1sOiBodG1sLXJlY3Vyc2l2ZQotCi1pbmZvOiBpbmZvLXJlY3Vyc2l2ZQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1iaW5QUk9HUkFNUwotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYwotCi1wZGY6IHBkZi1yZWN1cnNpdmUKLQotcGRmLWFtOgotCi1wczogcHMtcmVjdXJzaXZlCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1iaW5QUk9HUkFNUyB1bmluc3RhbGwtaW5mby1hbQotCi11bmluc3RhbGwtaW5mbzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLS5QSE9OWTogJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBcCi0JY2xlYW4gY2xlYW4tYmluUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1ub2luc3RMSUJSQVJJRVMgXAotCWNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKLQlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1yZWN1cnNpdmUgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKLQl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1iaW5QUk9HUkFNUyB1bmluc3RhbGwtaW5mby1hbQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWJhYmkvYWJpLmNwcCBiL2xpYmFiaS9hYmkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTI0YjQ1Li4wMDAwMDAwCi0tLSBhL2xpYmFiaS9hYmkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKgotICogQGZpbGUgYWJpLmNwcAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlICJhYmkuaCIKLSNpbmNsdWRlICJvZGIuaCIKLSNpbmNsdWRlICJvcF9zYW1wbGVfZmlsZS5oIgotCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotdHlwZWRlZiBtYXA8c3RyaW5nLCBpbnQ+IGFiaV9tYXA7Ci10eXBlZGVmIG1hcDxzdHJpbmcsIGludD46OmNvbnN0X2l0ZXJhdG9yIGFiaV9pdGVyOwotCi0jZGVmaW5lIGJ5dGVfYWRkcih4KSAocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KCYoeCkpKQotI2RlZmluZSBmaWVsZF9vZmZzZXQocywgZikgKGJ5dGVfYWRkcihzLmYpIC0gYnl0ZV9hZGRyKHMpKQotCi1hYmlfZXhjZXB0aW9uOjphYmlfZXhjZXB0aW9uKHN0cmluZyBjb25zdCBkKSA6IGRlc2MoZCkge30KLQotCi1hYmk6OmFiaSgpCi17Ci0Jb2RiX25vZGVfdCBub2RlOwotCW9kYl9kZXNjcl90IGRlc2NyOwotCXN0cnVjdCBvcGRfaGVhZGVyIGhlYWRlcjsKLQkKLQlzbG90c1sic2l6ZW9mX2RvdWJsZSJdID0gc2l6ZW9mKGRvdWJsZSk7Ci0Jc2xvdHNbInNpemVvZl90aW1lX3QiXSA9IHNpemVvZih0aW1lX3QpOwotCXNsb3RzWyJzaXplb2ZfdTgiXSA9IHNpemVvZih1OCk7Ci0Jc2xvdHNbInNpemVvZl91MzIiXSA9IHNpemVvZih1MzIpOwotCXNsb3RzWyJzaXplb2ZfaW50Il0gPSBzaXplb2YoaW50KTsKLQlzbG90c1sic2l6ZW9mX3Vuc2lnbmVkX2ludCJdID0gc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0Jc2xvdHNbInNpemVvZl9vZGJfa2V5X3QiXSA9IHNpemVvZihvZGJfa2V5X3QpOwotCXNsb3RzWyJzaXplb2Zfb2RiX2luZGV4X3QiXSA9IHNpemVvZihvZGJfaW5kZXhfdCk7Ci0Jc2xvdHNbInNpemVvZl9vZGJfdmFsdWVfdCJdID0gc2l6ZW9mKG9kYl92YWx1ZV90KTsKLQlzbG90c1sic2l6ZW9mX29kYl9ub2RlX25yX3QiXSA9IHNpemVvZihvZGJfbm9kZV9ucl90KTsKLQlzbG90c1sic2l6ZW9mX29kYl9kZXNjcl90Il0gPSBzaXplb2Yob2RiX2Rlc2NyX3QpOwotCXNsb3RzWyJzaXplb2Zfb2RiX25vZGVfdCJdID0gc2l6ZW9mKG9kYl9ub2RlX3QpOwotCXNsb3RzWyJzaXplb2Zfc3RydWN0X29wZF9oZWFkZXIiXSA9IHNpemVvZihzdHJ1Y3Qgb3BkX2hlYWRlcik7CQkKLQkKLQlzbG90c1sib2Zmc2V0b2Zfbm9kZV9rZXkiXSA9IGZpZWxkX29mZnNldChub2RlLCBrZXkpOwotCXNsb3RzWyJvZmZzZXRvZl9ub2RlX3ZhbHVlIl0gPSBmaWVsZF9vZmZzZXQobm9kZSwgdmFsdWUpOwotCXNsb3RzWyJvZmZzZXRvZl9ub2RlX25leHQiXSA9IGZpZWxkX29mZnNldChub2RlLCBuZXh0KTsKLQkKLQlzbG90c1sib2Zmc2V0b2ZfZGVzY3Jfc2l6ZSJdID0gZmllbGRfb2Zmc2V0KGRlc2NyLCBzaXplKTsKLQlzbG90c1sib2Zmc2V0b2ZfZGVzY3JfY3VycmVudF9zaXplIl0gPSBmaWVsZF9vZmZzZXQoZGVzY3IsIGN1cnJlbnRfc2l6ZSk7Ci0JCi0Jc2xvdHNbIm9mZnNldG9mX2hlYWRlcl9tYWdpYyJdID0gZmllbGRfb2Zmc2V0KGhlYWRlciwgbWFnaWMpOwotCXNsb3RzWyJvZmZzZXRvZl9oZWFkZXJfdmVyc2lvbiJdID0gZmllbGRfb2Zmc2V0KGhlYWRlciwgdmVyc2lvbik7Ci0Jc2xvdHNbIm9mZnNldG9mX2hlYWRlcl9jcHVfdHlwZSJdID0gZmllbGRfb2Zmc2V0KGhlYWRlciwgY3B1X3R5cGUpOwotCXNsb3RzWyJvZmZzZXRvZl9oZWFkZXJfY3RyX2V2ZW50Il0gPSBmaWVsZF9vZmZzZXQoaGVhZGVyLCBjdHJfZXZlbnQpOwotCXNsb3RzWyJvZmZzZXRvZl9oZWFkZXJfY3RyX3VtIl0gPSBmaWVsZF9vZmZzZXQoaGVhZGVyLCBjdHJfdW0pOwotCXNsb3RzWyJvZmZzZXRvZl9oZWFkZXJfY3RyX2NvdW50Il0gPSBmaWVsZF9vZmZzZXQoaGVhZGVyLCBjdHJfY291bnQpOwotCXNsb3RzWyJvZmZzZXRvZl9oZWFkZXJfaXNfa2VybmVsIl0gPSBmaWVsZF9vZmZzZXQoaGVhZGVyLCBpc19rZXJuZWwpOwotCXNsb3RzWyJvZmZzZXRvZl9oZWFkZXJfY3B1X3NwZWVkIl0gPSBmaWVsZF9vZmZzZXQoaGVhZGVyLCBjcHVfc3BlZWQpOwotCXNsb3RzWyJvZmZzZXRvZl9oZWFkZXJfbXRpbWUiXSA9IGZpZWxkX29mZnNldChoZWFkZXIsIG10aW1lKTsKLQlzbG90c1sib2Zmc2V0b2ZfaGVhZGVyX2NnX3RvX2lzX2tlcm5lbCJdID0gZmllbGRfb2Zmc2V0KGhlYWRlciwKLQkJY2dfdG9faXNfa2VybmVsKTsKLQlzbG90c1sib2Zmc2V0b2ZfaGVhZGVyX2Fub25fc3RhcnQiXSA9IGZpZWxkX29mZnNldChoZWFkZXIsIGFub25fc3RhcnQpOwotCXNsb3RzWyJvZmZzZXRvZl9oZWFkZXJfY2dfdG9fYW5vbl9zdGFydCJdID0gZmllbGRfb2Zmc2V0KGhlYWRlciwKLQkJY2dfdG9fYW5vbl9zdGFydCk7Ci0KLQkvLyBkZXRlcm1pbmUgZW5kaWFubmVzcwotCi0JdW5zaWduZWQgaW50IHByb2JlID0gMHhmZjsKLQlzaXplX3Qgc3ogPSBzaXplb2YodW5zaWduZWQgaW50KTsKLQl1bnNpZ25lZCBjaGFyICogcHJvYmVfYnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPigmcHJvYmUpOwotCi0JYXNzZXJ0KHByb2JlX2J5dGVbMF0gPT0gMHhmZiB8fCBwcm9iZV9ieXRlW3N6IC0gMV0gPT0gMHhmZik7Ci0KLQlpZiAocHJvYmVfYnl0ZVswXSA9PSAweGZmKQotCQlzbG90c1sibGl0dGxlX2VuZGlhbiJdID0gMTsKLQllbHNlCi0JCXNsb3RzWyJsaXR0bGVfZW5kaWFuIl0gPSAwOwotfQotCi0KLWFiaTo6YWJpKGFiaSBjb25zdCAmIG90aGVyKQotewotCXNsb3RzLmNsZWFyKCk7Ci0Jc2xvdHMuaW5zZXJ0KG90aGVyLnNsb3RzLmJlZ2luKCksIG90aGVyLnNsb3RzLmVuZCgpKTsKLX0KLQotCi1pbnQgYWJpOjpuZWVkKHN0cmluZyBjb25zdCBrZXkpIGNvbnN0IHRocm93IChhYmlfZXhjZXB0aW9uKQotewotCWlmIChzbG90cy5maW5kKGtleSkgIT0gc2xvdHMuZW5kKCkpCi0JCXJldHVybiBzbG90cy5maW5kKGtleSktPnNlY29uZDsKLQllbHNlCi0JCXRocm93IGFiaV9leGNlcHRpb24oc3RyaW5nKCJtaXNzaW5nIEFCSSBrZXk6ICIpICsga2V5KTsKLX0KLQotCi1ib29sIGFiaTo6b3BlcmF0b3I9PShhYmkgY29uc3QgJiBvdGhlcikgY29uc3QKLXsKLQlhYmlfaXRlciBpID0gc2xvdHMuYmVnaW4oKTsKLQlhYmlfaXRlciBlID0gc2xvdHMuZW5kKCk7Ci0JYWJpX21hcCBjb25zdCAmIHRoZWlycyA9IG90aGVyLnNsb3RzOwotCi0JZm9yICg7IGkgIT0gZTsgKytpKSB7Ci0JCWlmICh0aGVpcnMuZmluZChpLT5maXJzdCkgPT0gdGhlaXJzLmVuZCgpIHx8Ci0JCSAgICB0aGVpcnMuZmluZChpLT5maXJzdCktPnNlY29uZCAhPSBpLT5zZWNvbmQpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHRydWU7CQkKLX0KLQotCi1vc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYgbywgYWJpIGNvbnN0ICYgYWJpKQotewotCWFiaV9pdGVyIGkgPSBhYmkuc2xvdHMuYmVnaW4oKTsKLQlhYmlfaXRlciBlID0gYWJpLnNsb3RzLmVuZCgpOwotCi0JZm9yICg7IGkgIT0gZTsgKytpKSB7Ci0JCW8gPDwgaS0+Zmlyc3QgPDwgIiAiIDw8IGktPnNlY29uZCA8PCBlbmRsOwotCX0KLQotCXJldHVybiBvOwotfQotCi0KLWlzdHJlYW0gJiBvcGVyYXRvcj4+KGlzdHJlYW0gJiBpLCBhYmkgJiBhYmkpCi17Ci0Jc3RyaW5nIGtleTsKLQlpbnQgdmFsOwotCWFiaS5zbG90cy5jbGVhcigpOwotCi0Jd2hpbGUoaSA+PiBrZXkgPj4gdmFsKSB7Ci0JCWFiaS5zbG90c1trZXldID0gdmFsOwotCX0KLQotCXJldHVybiBpOwotfQpkaWZmIC0tZ2l0IGEvbGliYWJpL2FiaS5oIGIvbGliYWJpL2FiaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTQzOWUwLi4wMDAwMDAwCi0tLSBhL2xpYmFiaS9hYmkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKgotICogQGZpbGUgYWJpLmgKLSAqCi0gKiBDb250YWlucyBpbnRlcm5hbCBBQkkgbWFuYWdlbWVudCBjbGFzcwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKLSAqLwotCi0jaWZuZGVmIE9QUk9GX0FCSV9ICi0jZGVmaW5lIE9QUk9GX0FCSV9ICi0gCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0KLXN0cnVjdCBhYmlfZXhjZXB0aW9uIDogc3RkOjpleGNlcHRpb24gewotCXN0ZDo6c3RyaW5nIGNvbnN0IGRlc2M7Ci0gCi0JZXhwbGljaXQgYWJpX2V4Y2VwdGlvbihzdGQ6OnN0cmluZyBjb25zdCBkKTsKLSAKLQl+YWJpX2V4Y2VwdGlvbigpIHRocm93KCkge30KLX07Ci0KLQotY2xhc3MgYWJpIHsKLXB1YmxpYzoKLQlhYmkoKTsKLQlhYmkoYWJpIGNvbnN0ICYgb3RoZXIpOwotCi0JaW50IG5lZWQoc3RkOjpzdHJpbmcgY29uc3Qga2V5KSBjb25zdCB0aHJvdyAoYWJpX2V4Y2VwdGlvbik7Ci0KLQlib29sIG9wZXJhdG9yPT0oYWJpIGNvbnN0ICYgb3RoZXIpIGNvbnN0OwotCWZyaWVuZCBzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmIG8sIGFiaSBjb25zdCAmIGFiaSk7Ci0JZnJpZW5kIHN0ZDo6aXN0cmVhbSAmIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICYgaSwgYWJpICYgYWJpKTsKLQotcHJpdmF0ZToKLQlzdGQ6Om1hcDxzdGQ6OnN0cmluZywgaW50PiBzbG90czsKLX07Ci0KLSNlbmRpZiAvLyBPUFJPRl9BQklfSApkaWZmIC0tZ2l0IGEvbGliYWJpL29wX2FiaS5jcHAgYi9saWJhYmkvb3BfYWJpLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ2MGQwMS4uMDAwMDAwMAotLS0gYS9saWJhYmkvb3BfYWJpLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BfYWJpLmNwcAotICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2ltcGxlIEMgaW50ZXJmYWNlIHRvIHRoZSBBQkktZGVzY3JpYmluZyBmdW5jdGlvbmFsaXR5LAotICogdGhlIG1ham9yaXR5IG9mIHdoaWNoIGlzIGltcGxlbWVudGVkIGluIEMrKy4gdGhpcyBpcyB0aGUgZmlsZSB3aGljaCBpcyAKLSAqIGludGVuZGVkIGZvciB1c2UgaW4gZmlsZXMgb3V0c2lkZSB0aGUgL2xpYmFiaSBkaXJlY3RvcnkuCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQotICovCi0KLSNpbmNsdWRlICJvcF9hYmkuaCIKLSNpbmNsdWRlICJhYmkuaCIKLQotI2luY2x1ZGUgPGZzdHJlYW0+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWludCBvcF93cml0ZV9hYmlfdG9fZmlsZShjaGFyIGNvbnN0ICogYWJpX2ZpbGUpCi17Ci0Jb2ZzdHJlYW0gZmlsZShhYmlfZmlsZSk7Ci0JaWYgKCFmaWxlKSAKLQkJcmV0dXJuIDA7Ci0KLQlhYmkgY3VycjsKLQlmaWxlIDw8IGN1cnI7Ci0KLQlyZXR1cm4gMTsKLX0KZGlmZiAtLWdpdCBhL2xpYmFiaS9vcGltcG9ydC5jcHAgYi9saWJhYmkvb3BpbXBvcnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTRiNjkwLi4wMDAwMDAwCi0tLSBhL2xpYmFiaS9vcGltcG9ydC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcGltcG9ydC5jcHAKLSAqIEltcG9ydCBzYW1wbGUgZmlsZXMgZnJvbSBvdGhlciBBQkkKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCi0gKi8KLQotI2luY2x1ZGUgImFiaS5oIgotI2luY2x1ZGUgIm9kYi5oIgotI2luY2x1ZGUgInBvcHRfb3B0aW9ucy5oIgotI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCi0KLSNpbmNsdWRlIDxmc3RyZWFtPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxjYXNzZXJ0PgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0Jc3RyaW5nIG91dHB1dF9maWxlbmFtZTsKLQlzdHJpbmcgYWJpX2ZpbGVuYW1lOwotCWJvb2wgdmVyYm9zZTsKLQlib29sIGZvcmNlOwotfTsKLQotCi1wb3B0OjpvcHRpb24gb3B0aW9uc19hcnJheVtdID0gewotCXBvcHQ6Om9wdGlvbih2ZXJib3NlLCAidmVyYm9zZSIsICdWJywgInZlcmJvc2Ugb3V0cHV0IiksCi0JcG9wdDo6b3B0aW9uKG91dHB1dF9maWxlbmFtZSwgIm91dHB1dCIsICdvJywgIm91dHB1dCB0byBmaWxlIiwgImZpbGVuYW1lIiksCi0JcG9wdDo6b3B0aW9uKGFiaV9maWxlbmFtZSwgImFiaSIsICdhJywgImFiaSBkZXNjcmlwdGlvbiIsICJmaWxlbmFtZSIpLAotCXBvcHQ6Om9wdGlvbihmb3JjZSwgImZvcmNlIiwgJ2YnLCAiZm9yY2UgY29udmVyc2lvbiwgZXZlbiBpZiBpZGVudGljYWwiKQotfTsKLQotCi1zdHJ1Y3QgZXh0cmFjdG9yIHsKLQotCWFiaSBjb25zdCAmIHRoZWFiaTsKLQotCXVuc2lnbmVkIGNoYXIgY29uc3QgKiBiZWdpbjsKLQl1bnNpZ25lZCBjaGFyIGNvbnN0ICogZW5kOwotCWJvb2wgbGl0dGxlX2VuZGlhbjsKLQotCWV4cGxpY2l0Ci0JZXh0cmFjdG9yKGFiaSBjb25zdCAmIGEsIHVuc2lnbmVkIGNoYXIgY29uc3QgKiBzcmMsIHNpemVfdCBsZW4pCi0JCTogdGhlYWJpKGEpLCBiZWdpbihzcmMpLCBlbmQoc3JjICsgbGVuKSB7Ci0JCWxpdHRsZV9lbmRpYW4gPSB0aGVhYmkubmVlZChzdHJpbmcoImxpdHRsZV9lbmRpYW4iKSkgPT0gMTsKLQkJaWYgKHZlcmJvc2UpIHsKLQkJCWNlcnIgPDwgInNvdXJjZSBieXRlIG9yZGVyIGlzOiAiCi0JCQkgICAgIDw8IHN0cmluZyhsaXR0bGVfZW5kaWFuID8gImxpdHRsZSIgOiAiYmlnIikKLQkJCSAgICAgPDwgIiBlbmRpYW4iIDw8IGVuZGw7Ci0JCX0KLQl9Ci0KLQl0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLQl2b2lkIGV4dHJhY3QoVCAmIHRhcmcsIHZvaWQgY29uc3QgKiBzcmNfLAotCSAgICAgICAgICAgICBjaGFyIGNvbnN0ICogc3osIGNoYXIgY29uc3QgKiBvZmYpOwotfTsKLQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXZvaWQgZXh0cmFjdG9yOjpleHRyYWN0KFQgJiB0YXJnLCB2b2lkIGNvbnN0ICogc3JjXywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBzeiwgY2hhciBjb25zdCAqIG9mZikKLXsKLQl1bnNpZ25lZCBjaGFyIGNvbnN0ICogc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciBjb25zdCAqPihzcmNfKQotCQkrIHRoZWFiaS5uZWVkKG9mZik7Ci0Jc2l6ZV90IG5ieXRlcyA9IHRoZWFiaS5uZWVkKHN6KTsKLQkKLQlpZiAobmJ5dGVzID09IDApCi0JCXJldHVybjsKLQkKLQlhc3NlcnQobmJ5dGVzIDw9IHNpemVvZihUKSk7Ci0JYXNzZXJ0KHNyYyA+PSBiZWdpbik7Ci0JYXNzZXJ0KHNyYyArIG5ieXRlcyA8PSBlbmQpOwotCQotCWlmICh2ZXJib3NlKQotCQljZXJyIDw8IGhleCA8PCAiZ2V0ICIgPDwgc3ogPDwgIiA9ICIgPDwgbmJ5dGVzCi0JCSAgICAgPDwgIiBieXRlcyBAICIgPDwgb2ZmIDw8ICIgPSAiIDw8IChzcmMgLSBiZWdpbikKLQkJICAgICA8PCAiIDogIjsKLQotCXRhcmcgPSAwOwotCWlmIChsaXR0bGVfZW5kaWFuKQotCQl3aGlsZShuYnl0ZXMtLSkKLQkJCXRhcmcgPSAodGFyZyA8PCA4KSB8IHNyY1tuYnl0ZXNdOwotCWVsc2UKLQkJZm9yKHNpemVfdCBpID0gMDsgaSA8IG5ieXRlczsgKytpKQotCQkJdGFyZyA9ICh0YXJnIDw8IDgpIHwgc3JjW2ldOwotCQotCWlmICh2ZXJib3NlKQotCQljZXJyIDw8ICIgPSAiIDw8IHRhcmcgPDwgZW5kbDsKLX0KLQotCi12b2lkIGltcG9ydF9mcm9tX2FiaShhYmkgY29uc3QgJiBhYmksIHZvaWQgY29uc3QgKiBzcmN2LAotICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgb2RiX3QgKiBkZXN0KSB0aHJvdyAoYWJpX2V4Y2VwdGlvbikKLXsKLQlzdHJ1Y3Qgb3BkX2hlYWRlciAqIGhlYWQgPQotCQlzdGF0aWNfY2FzdDxvcGRfaGVhZGVyICo+KG9kYl9nZXRfZGF0YShkZXN0KSk7Ci0JdW5zaWduZWQgY2hhciBjb25zdCAqIHNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgY29uc3QgKj4oc3Jjdik7Ci0JdW5zaWduZWQgY2hhciBjb25zdCAqIGNvbnN0IGJlZ2luID0gc3JjOwotCWV4dHJhY3RvciBleHQoYWJpLCBzcmMsIGxlbik7CQotCi0JbWVtY3B5KGhlYWQtPm1hZ2ljLCBzcmMgKyBhYmkubmVlZCgib2Zmc2V0b2ZfaGVhZGVyX21hZ2ljIiksIDQpOwotCi0JLy8gYmVnaW4gZXh0cmFjdGluZyBvcGQgaGVhZGVyCi0JZXh0LmV4dHJhY3QoaGVhZC0+dmVyc2lvbiwgc3JjLCAic2l6ZW9mX3UzMiIsICJvZmZzZXRvZl9oZWFkZXJfdmVyc2lvbiIpOwotCWV4dC5leHRyYWN0KGhlYWQtPmNwdV90eXBlLCBzcmMsICJzaXplb2ZfdTMyIiwgIm9mZnNldG9mX2hlYWRlcl9jcHVfdHlwZSIpOwotCWV4dC5leHRyYWN0KGhlYWQtPmN0cl9ldmVudCwgc3JjLCAic2l6ZW9mX3UzMiIsICJvZmZzZXRvZl9oZWFkZXJfY3RyX2V2ZW50Iik7Ci0JZXh0LmV4dHJhY3QoaGVhZC0+Y3RyX3VtLCBzcmMsICJzaXplb2ZfdTMyIiwgIm9mZnNldG9mX2hlYWRlcl9jdHJfdW0iKTsKLQlleHQuZXh0cmFjdChoZWFkLT5jdHJfY291bnQsIHNyYywgInNpemVvZl91MzIiLCAib2Zmc2V0b2ZfaGVhZGVyX2N0cl9jb3VudCIpOwotCWV4dC5leHRyYWN0KGhlYWQtPmlzX2tlcm5lbCwgc3JjLCAic2l6ZW9mX3UzMiIsICJvZmZzZXRvZl9oZWFkZXJfaXNfa2VybmVsIik7Ci0JLy8gImRvdWJsZSIgZXh0cmFjdGlvbiBpcyB1bmxpa2VseSB0byB3b3JrCi0JaGVhZC0+Y3B1X3NwZWVkID0gMC4wOwotCWV4dC5leHRyYWN0KGhlYWQtPm10aW1lLCBzcmMsICJzaXplb2ZfdGltZV90IiwgIm9mZnNldG9mX2hlYWRlcl9tdGltZSIpOwotCWV4dC5leHRyYWN0KGhlYWQtPmNnX3RvX2lzX2tlcm5lbCwgc3JjLCAic2l6ZW9mX3UzMiIsCi0JCSJvZmZzZXRvZl9oZWFkZXJfY2dfdG9faXNfa2VybmVsIik7Ci0JZXh0LmV4dHJhY3QoaGVhZC0+YW5vbl9zdGFydCwgc3JjLCAic2l6ZW9mX3UzMiIsCi0JCSJvZmZzZXRvZl9oZWFkZXJfYW5vbl9zdGFydCIpOwotCWV4dC5leHRyYWN0KGhlYWQtPmNnX3RvX2Fub25fc3RhcnQsIHNyYywgInNpemVvZl91MzIiLAotCQkib2Zmc2V0b2ZfaGVhZGVyX2NnX3RvX2Fub25fc3RhcnQiKTsKLQlzcmMgKz0gYWJpLm5lZWQoInNpemVvZl9zdHJ1Y3Rfb3BkX2hlYWRlciIpOwotCS8vIGRvbmUgZXh0cmFjdGluZyBvcGQgaGVhZGVyCi0KLQkvLyBiZWdpbiBleHRyYWN0aW5nIG5lY2Vzc2FyeSBwYXJ0cyBvZiBkZXNjcgotCW9kYl9ub2RlX25yX3Qgbm9kZV9ucjsKLQlleHQuZXh0cmFjdChub2RlX25yLCBzcmMsICJzaXplb2Zfb2RiX25vZGVfbnJfdCIsICJvZmZzZXRvZl9kZXNjcl9jdXJyZW50X3NpemUiKTsKLQlzcmMgKz0gYWJpLm5lZWQoInNpemVvZl9vZGJfZGVzY3JfdCIpOwotCS8vIGRvbmUgZXh0cmFjdGluZyBkZXNjcgotCi0JLy8gc2tpcCBub2RlIHplcm8sIGl0IGlzIHJlc2VydmVkIGFuZCBjb250YWlucyBub3RoaW5nIHVzZWZ1bGwKLQlzcmMgKz0gYWJpLm5lZWQoInNpemVvZl9vZGJfbm9kZV90Iik7Ci0KLQkvLyBiZWdpbiBleHRyYWN0aW5nIG5vZGVzCi0JdW5zaWduZWQgaW50IHN0ZXAgPSBhYmkubmVlZCgic2l6ZW9mX29kYl9ub2RlX3QiKTsKLQlpZiAodmVyYm9zZSkKLQkJY2VyciA8PCAiZXh0cmFjdGluZyAiIDw8IG5vZGVfbnIgPDwgIiBub2RlcyBvZiAiIDw8IHN0ZXAgPDwgIiBieXRlcyBlYWNoICIgPDwgZW5kbDsKLQotCWFzc2VydChzcmMgKyAobm9kZV9uciAqIHN0ZXApIDw9IGJlZ2luICsgbGVuKTsKLQotCWZvciAob2RiX25vZGVfbnJfdCBpID0gMSA7IGkgPCBub2RlX25yIDsgKytpLCBzcmMgKz0gc3RlcCkgewotCQlvZGJfa2V5X3Qga2V5OwotCQlvZGJfdmFsdWVfdCB2YWw7Ci0JCWV4dC5leHRyYWN0KGtleSwgc3JjLCAic2l6ZW9mX29kYl9rZXlfdCIsICJvZmZzZXRvZl9ub2RlX2tleSIpOwotCQlleHQuZXh0cmFjdCh2YWwsIHNyYywgInNpemVvZl9vZGJfdmFsdWVfdCIsICJvZmZzZXRvZl9ub2RlX3ZhbHVlIik7Ci0JCWludCByYyA9IG9kYl9pbnNlcnQoZGVzdCwga2V5LCB2YWwpOwotCQlpZiAocmMgIT0gRVhJVF9TVUNDRVNTKSB7Ci0JCQljZXJyIDw8IHN0cmVycm9yKHJjKSA8PCBlbmRsOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0JfQotCS8vIGRvbmUgZXh0cmFjdGluZyBub2RlcwotfQotCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICoqIGFyZ3YpCi17Ci0KLQl2ZWN0b3I8c3RyaW5nPiBpbnB1dHM7Ci0JcG9wdDo6cGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBpbnB1dHMpOwotCi0JaWYgKGlucHV0cy5zaXplKCkgIT0gMSkgewotCQljZXJyIDw8ICJlcnJvcjogbXVzdCBzcGVjaWZ5IGV4YWN0bHkgMSBpbnB1dCBmaWxlIiA8PCBlbmRsOwotCQlleGl0KDEpOwotCX0KLQotCWFiaSBjdXJyZW50X2FiaSwgaW5wdXRfYWJpOwotCi0JewotCQlpZnN0cmVhbSBhYmlfZmlsZShhYmlfZmlsZW5hbWUuY19zdHIoKSk7Ci0JCWlmICghYWJpX2ZpbGUpIHsKLQkJCWNlcnIgPDwgImVycm9yOiBjYW5ub3Qgb3BlbiBhYmkgZmlsZSAiCi0JCQkgICAgIDw8IGFiaV9maWxlbmFtZSA8PCBlbmRsOwotCQkJZXhpdCgxKTsKLQkJfQotCQlhYmlfZmlsZSA+PiBpbnB1dF9hYmk7Ci0JfQotCi0JaWYgKCFmb3JjZSAmJiBjdXJyZW50X2FiaSA9PSBpbnB1dF9hYmkpIHsKLQkJY2VyciA8PCAiaW5wdXQgYWJpIGlzIGlkZW50aWNhbCB0byBuYXRpdmUuICIKLQkJICAgICA8PCAibm8gY29udmVyc2lvbiBuZWNlc3NhcnkuIiA8PCBlbmRsOwotCQlleGl0KDEpOwotCX0KLQotCWludCBpbl9mZDsKLQlzdHJ1Y3Qgc3RhdCBzdGF0YjsKLQl2b2lkICogaW47Ci0Jb2RiX3QgZGVzdDsKLQlpbnQgcmM7Ci0KLQlhc3NlcnQoKGluX2ZkID0gb3BlbihpbnB1dHNbMF0uY19zdHIoKSwgT19SRE9OTFkpKSA+IDApOwkJCi0JYXNzZXJ0KGZzdGF0KGluX2ZkLCAmc3RhdGIpID09IDApOwotCWFzc2VydCgoaW4gPSBtbWFwKDAsIHN0YXRiLnN0X3NpemUsIFBST1RfUkVBRCwKLQkJCSAgTUFQX1BSSVZBVEUsIGluX2ZkLCAwKSkgIT0gKHZvaWQgKiktMSk7Ci0KLQlyYyA9IG9kYl9vcGVuKCZkZXN0LCBvdXRwdXRfZmlsZW5hbWUuY19zdHIoKSwgT0RCX1JEV1IsCi0JCSAgICAgIHNpemVvZihzdHJ1Y3Qgb3BkX2hlYWRlcikpOwotCWlmIChyYykgewotCQljZXJyIDw8ICJvZGJfb3BlbigpIGZhaWw6XG4iCi0JCSAgICAgPDwgc3RyZXJyb3IocmMpIDw8IGVuZGw7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQl0cnkgewotCQlpbXBvcnRfZnJvbV9hYmkoaW5wdXRfYWJpLCBpbiwgc3RhdGIuc3Rfc2l6ZSwgJmRlc3QpOwotCX0gY2F0Y2ggKGFiaV9leGNlcHRpb24gJiBlKSB7Ci0JCWNlcnIgPDwgImNhdWdodCBhYmkgZXhjZXB0aW9uOiAiIDw8IGUuZGVzYyA8PCBlbmRsOwotCX0KLQotCW9kYl9jbG9zZSgmZGVzdCk7Ci0KLQlhc3NlcnQobXVubWFwKGluLCBzdGF0Yi5zdF9zaXplKSA9PSAwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmFiaS90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYmFiaS90ZXN0cy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE3MWIxNy4uMDAwMDAwMAotLS0gYS9saWJhYmkvdGVzdHMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0KLWRpc3Rfc291cmNlcyA9IGFiaV90ZXN0LmNwcAotCi1FWFRSQV9ESVNUID0gJChkaXN0X3NvdXJjZXMpCi0KLUxJQlM9QFBPUFRfTElCU0AgQExJQkVSVFlfTElCU0AKLQotaWYgZW5hYmxlX2FiaQotCi1BTV9DUFBGTEFHUyA9IFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYmFiaSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKyBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCi0KLUFNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotCi1jaGVja19QUk9HUkFNUyA9IGFiaV90ZXN0Ci0KLWFiaV90ZXN0X1NPVVJDRVMgPSBhYmlfdGVzdC5jcHAKLWFiaV90ZXN0X0xEQUREID0gXAotCS4uL2xpYmFiaS5hIFwKLQkuLi8uLi9saWJvcC9saWJvcC5hIFwKLQkuLi8uLi9saWJkYi9saWJvZGIuYSBcCi0JLi4vLi4vbGlib3B0KysvbGlib3B0KysuYSBcCi0JLi4vLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hIFwKLQkuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQotCi1lbmRpZgpkaWZmIC0tZ2l0IGEvbGliYWJpL3Rlc3RzL01ha2VmaWxlLmluIGIvbGliYWJpL3Rlc3RzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTNhN2VmLi4wMDAwMDAwCi0tLSBhL2xpYmFiaS90ZXN0cy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ1MSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi1TT1VSQ0VTID0gJChhYmlfdGVzdF9TT1VSQ0VTKQotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uLy4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1AZW5hYmxlX2FiaV9UUlVFQGNoZWNrX1BST0dSQU1TID0gYWJpX3Rlc3QkKEVYRUVYVCkKLXN1YmRpciA9IGxpYmFiaS90ZXN0cwotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotYW1fX2FiaV90ZXN0X1NPVVJDRVNfRElTVCA9IGFiaV90ZXN0LmNwcAotQGVuYWJsZV9hYmlfVFJVRUBhbV9hYmlfdGVzdF9PQkpFQ1RTID0gYWJpX3Rlc3QuJChPQkpFWFQpCi1hYmlfdGVzdF9PQkpFQ1RTID0gJChhbV9hYmlfdGVzdF9PQkpFQ1RTKQotQGVuYWJsZV9hYmlfVFJVRUBhYmlfdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9saWJhYmkuYSBcCi1AZW5hYmxlX2FiaV9UUlVFQAkuLi8uLi9saWJvcC9saWJvcC5hIC4uLy4uL2xpYmRiL2xpYm9kYi5hIFwKLUBlbmFibGVfYWJpX1RSVUVACS4uLy4uL2xpYm9wdCsrL2xpYm9wdCsrLmEgXAotQGVuYWJsZV9hYmlfVFJVRUAJLi4vLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hIFwKLUBlbmFibGVfYWJpX1RSVUVACS4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAotCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCi1DWFhMRCA9ICQoQ1hYKQotQ1hYTElOSyA9ICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLVNPVVJDRVMgPSAkKGFiaV90ZXN0X1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGFtX19hYmlfdGVzdF9TT1VSQ0VTX0RJU1QpCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACi1BTVRBUiA9IEBBTVRBUkAKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkZEX0xJQlMgPSBAQkZEX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFURSA9IEBEQVRFQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVYRUVYVCA9IEBFWEVFWFRACi1FWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUtJTkMgPSBAS0lOQ0AKLUtTUkMgPSBAS1NSQ0AKLUtWRVJTID0gQEtWRVJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBQT1BUX0xJQlNAIEBMSUJFUlRZX0xJQlNACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NT0MgPSBATU9DQAotTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAotT0JKRVhUID0gQE9CSkVYVEAKLU9QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACi1PUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKLU9QX0NGTEFHUyA9IEBPUF9DRkxBR1NACi1PUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLU9QX0RPQ0RJUiA9IEBPUF9ET0NESVJACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAotUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACi1RVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKLVFUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKLVFUX0xJQiA9IEBRVF9MSUJACi1RVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAotU1RSSVAgPSBAU1RSSVBACi1VSUMgPSBAVUlDQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAotWF9MSUJTID0gQFhfTElCU0AKLVhfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACi1hY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJUEAKLWFtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACi1hbV9fZmFzdGRlcENYWF9GQUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKLWFtX19mYXN0ZGVwQ1hYX1RSVUUgPSBAYW1fX2Zhc3RkZXBDWFhfVFJVRUAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZW5hYmxlX2FiaV9GQUxTRSA9IEBlbmFibGVfYWJpX0ZBTFNFQAotZW5hYmxlX2FiaV9UUlVFID0gQGVuYWJsZV9hYmlfVFJVRUAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaGF2ZV9xdF9GQUxTRSA9IEBoYXZlX3F0X0ZBTFNFQAotaGF2ZV9xdF9UUlVFID0gQGhhdmVfcXRfVFJVRUAKLWhhdmVfeHNsdHByb2NfRkFMU0UgPSBAaGF2ZV94c2x0cHJvY19GQUxTRUAKLWhhdmVfeHNsdHByb2NfVFJVRSA9IEBoYXZlX3hzbHRwcm9jX1RSVUVACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1rZXJuZWxfc3VwcG9ydF9GQUxTRSA9IEBrZXJuZWxfc3VwcG9ydF9GQUxTRUAKLWtlcm5lbF9zdXBwb3J0X1RSVUUgPSBAa2VybmVsX3N1cHBvcnRfVFJVRUAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRvcGRpciA9IEB0b3BkaXJACi1kaXN0X3NvdXJjZXMgPSBhYmlfdGVzdC5jcHAKLUVYVFJBX0RJU1QgPSAkKGRpc3Rfc291cmNlcykKLUBlbmFibGVfYWJpX1RSVUVAQU1fQ1BQRkxBR1MgPSBcCi1AZW5hYmxlX2FiaV9UUlVFQAktSSAke3RvcF9zcmNkaXJ9L2xpYmFiaSBcCi1AZW5hYmxlX2FiaV9UUlVFQAktSSAke3RvcF9zcmNkaXJ9L2xpYm9wIFwKLUBlbmFibGVfYWJpX1RSVUVACS1JICR7dG9wX3NyY2Rpcn0vbGliZGIgXAotQGVuYWJsZV9hYmlfVFJVRUAJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKyBcCi1AZW5hYmxlX2FiaV9UUlVFQAktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKLQotQGVuYWJsZV9hYmlfVFJVRUBBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLUBlbmFibGVfYWJpX1RSVUVAYWJpX3Rlc3RfU09VUkNFUyA9IGFiaV90ZXN0LmNwcAotQGVuYWJsZV9hYmlfVFJVRUBhYmlfdGVzdF9MREFERCA9IFwKLUBlbmFibGVfYWJpX1RSVUVACS4uL2xpYmFiaS5hIFwKLUBlbmFibGVfYWJpX1RSVUVACS4uLy4uL2xpYm9wL2xpYm9wLmEgXAotQGVuYWJsZV9hYmlfVFJVRUAJLi4vLi4vbGliZGIvbGlib2RiLmEgXAotQGVuYWJsZV9hYmlfVFJVRUAJLi4vLi4vbGlib3B0KysvbGlib3B0KysuYSBcCi1AZW5hYmxlX2FiaV9UUlVFQAkuLi8uLi9saWJ1dGlsKysvbGlidXRpbCsrLmEgXAotQGVuYWJsZV9hYmlfVFJVRUAJLi4vLi4vbGlidXRpbC9saWJ1dGlsLmEKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuY3BwIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYmFiaS90ZXN0cy9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgbGliYWJpL3Rlc3RzL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi1jbGVhbi1jaGVja1BST0dSQU1TOgotCS10ZXN0IC16ICIkKGNoZWNrX1BST0dSQU1TKSIgfHwgcm0gLWYgJChjaGVja19QUk9HUkFNUykKLWFiaV90ZXN0JChFWEVFWFQpOiAkKGFiaV90ZXN0X09CSkVDVFMpICQoYWJpX3Rlc3RfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgYWJpX3Rlc3QkKEVYRUVYVCkKLQkkKENYWExJTkspICQoYWJpX3Rlc3RfTERGTEFHUykgJChhYmlfdGVzdF9PQkpFQ1RTKSAkKGFiaV90ZXN0X0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hYmlfdGVzdC5Qb0BhbV9fcXVvdGVACi0KLS5jcHAubzoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAlpZiAkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uY3BwLm9iajoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAlpZiAkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLXVuaW5zdGFsbC1pbmZvLWFtOgotCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCi0KLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCi0JZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBcCi0JY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGN0YWdzIGRpc3RjbGVhbiBcCi0JZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAotCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgXAotCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCBcCi0JdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYmFiaS90ZXN0cy9hYmlfdGVzdC5jcHAgYi9saWJhYmkvdGVzdHMvYWJpX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDhlNWU0Li4wMDAwMDAwCi0tLSBhL2xpYmFiaS90ZXN0cy9hYmlfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioKLSAqIEBmaWxlIGFiaV90ZXN0LmNwcAotICogSW1wb3J0IHNhbXBsZSBmaWxlcyBmcm9tIG90aGVyIEFCSQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUgCi0gKi8KLQotI2luY2x1ZGUgImFiaS5oIgotI2luY2x1ZGUgIm9kYi5oIgotI2luY2x1ZGUgInBvcHRfb3B0aW9ucy5oIgotI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCi0jaW5jbHVkZSAib3BfY3B1X3R5cGUuaCIKLSNpbmNsdWRlICJvcF9jb25maWcuaCIKLQotI2luY2x1ZGUgPGZzdHJlYW0+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0Jc3RyaW5nIGRiX2ZpbGVuYW1lOwotCXN0cmluZyBhYmlfZmlsZW5hbWU7Ci19Ci0KLQotcG9wdDo6b3B0aW9uIG9wdGlvbnNfYXJyYXlbXSA9IHsKLQlwb3B0OjpvcHRpb24oZGJfZmlsZW5hbWUsICJkYiIsICdkJywgIm91dHB1dCBkYiB0byBmaWxlIiwgImZpbGVuYW1lIiksCi0JcG9wdDo6b3B0aW9uKGFiaV9maWxlbmFtZSwgImFiaSIsICdhJywgIm91dHB1dCBhYmkgdG8gZmlsZSIsICJmaWxlbmFtZSIpCi19OwotCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICoqIGFyZ3YpCi17Ci0JdmVjdG9yPHN0cmluZz4gcmVzdDsKLQlwb3B0OjpwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHJlc3QpOwotCi0JaWYgKGFiaV9maWxlbmFtZS5lbXB0eSgpICYmIGRiX2ZpbGVuYW1lLmVtcHR5KCkpIHsKLQkJY2VyciA8PCAiZXJyb3I6IG5vIGZpbGUgc3BlY2lmaWVkIHRvIHdvcmsgb24iIDw8IGVuZGw7Ci0JCWV4aXQoMSk7Ci0JfQotCi0KLQlpZiAoIWFiaV9maWxlbmFtZS5lbXB0eSgpKSB7Ci0JCW9mc3RyZWFtIGZpbGUoYWJpX2ZpbGVuYW1lLmNfc3RyKCkpOwotCQlpZiAoIWZpbGUpIHsKLQkJCWNlcnIgPDwgImVycm9yOiBjYW5ub3Qgb3BlbiAiIDw8IGFiaV9maWxlbmFtZQotCQkJICAgICA8PCAiIGZvciB3cml0aW5nIiA8PCBlbmRsOwotCQkJZXhpdCgxKTsKLQkJfQotCQlmaWxlIDw8IGFiaSgpOwotCX0KLQotCWlmICghZGJfZmlsZW5hbWUuZW1wdHkoKSkgewotCQlvZGJfdCBkZXN0OwotCQlpbnQgcmMgPSBvZGJfb3BlbigmZGVzdCwgZGJfZmlsZW5hbWUuY19zdHIoKSwgT0RCX1JEV1IsCi0JCSAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgb3BkX2hlYWRlcikpOwotCi0JCWlmIChyYykgewotCQkJY2VyciA8PCAib2RiX29wZW4oKSBmYWlsOlxuIgotCQkJICAgICA8PCBzdHJlcnJvcihyYykgPDwgZW5kbDsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCi0JCXN0cnVjdCBvcGRfaGVhZGVyICogaGVhZGVyOwotCQloZWFkZXIgPSBzdGF0aWNfY2FzdDxzdHJ1Y3Qgb3BkX2hlYWRlciAqPihvZGJfZ2V0X2RhdGEoJmRlc3QpKTsKLQkJbWVtc2V0KGhlYWRlciwgJ1wwJywgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7Ci0JCWhlYWRlci0+dmVyc2lvbiA9IE9QRF9WRVJTSU9OOwotCQltZW1jcHkoaGVhZGVyLT5tYWdpYywgT1BEX01BR0lDLCBzaXplb2YoaGVhZGVyLT5tYWdpYykpOwotCQloZWFkZXItPmlzX2tlcm5lbCA9IDE7Ci0JCS8qIElDQUNIRV9GRVRDSEVTICovCi0JCWhlYWRlci0+Y3RyX2V2ZW50ID0gMHg4MDsKLQkJaGVhZGVyLT5jdHJfdW0gPSAweDA7Ci0JCWhlYWRlci0+Y3B1X3R5cGUgPSBDUFVfQVRITE9OOwotCQloZWFkZXItPmN0cl9jb3VudCA9IDB4ZGVhZGJlZWY7Ci0JCWhlYWRlci0+Y3B1X3NwZWVkID0gMDsKLQkJaGVhZGVyLT5tdGltZSA9IDEwMzQ3OTAwNjM7Ci0JCWhlYWRlci0+Y2dfdG9faXNfa2VybmVsID0gMTsKLQkJaGVhZGVyLT5hbm9uX3N0YXJ0ID0gMDsKLQkJaGVhZGVyLT5jZ190b19hbm9uX3N0YXJ0ID0gMDsKLSAgICAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCAzNzkzOyArK2kpIHsKLQkJCWludCByYyA9IG9kYl9pbnNlcnQoJmRlc3QsICgoaSAqIGkpIF4gKGkgKyBpKSksCi0JCQkJKChpICogaSkgXiBpKSk7Ci0JCQlpZiAocmMgIT0gRVhJVF9TVUNDRVNTKSB7Ci0JCQkJY2VyciA8PCBzdHJlcnJvcihyYykgPDwgZW5kbDsKLQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCQl9Ci0JCX0KLQkJb2RiX2Nsb3NlKCZkZXN0KTsKLQl9Ci19CmRpZmYgLS1naXQgYS9saWJhYmljL0FuZHJvaWQubWsgYi9saWJhYmljL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2YzA2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmFiaWMvQW5kcm9pZC5tawpAQCAtMCwwICsxLDE0IEBACitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVM6PSBvcF9hYmkuY3BwCisKK0xPQ0FMX01PRFVMRSA6PSBsaWJhYmljCisKK0xPQ0FMX0NfSU5DTFVERVMgOj0gXAorCSQoTE9DQUxfUEFUSCkvLi4gXAorCSQoTE9DQUxfUEFUSCkvLi4vbGliZGIgXAorCSQoTE9DQUxfUEFUSCkvLi4vbGlidXRpbCBcCisJJChMT0NBTF9QQVRIKS8uLi9saWJvcAorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9saWJhYmljL29wX2FiaS5jcHAgYi9saWJhYmljL29wX2FiaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkYjlhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmFiaWMvb3BfYWJpLmNwcApAQCAtMCwwICsxLDg0IEBACisvKioKKyAqIEBmaWxlIG9wX2FiaS5jcHAKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIHNpbXBsZSBDIGludGVyZmFjZSB0byB0aGUgQUJJLWRlc2NyaWJpbmcgZnVuY3Rpb25hbGl0eSwKKyAqIHRoZSBtYWpvcml0eSBvZiB3aGljaCBpcyBpbXBsZW1lbnRlZCBpbiBDKysuIHRoaXMgaXMgdGhlIGZpbGUgd2hpY2ggaXMgCisgKiBpbnRlbmRlZCBmb3IgdXNlIGluIGZpbGVzIG91dHNpZGUgdGhlIC9saWJhYmkgZGlyZWN0b3J5LgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKKyAqLworCisjaW5jbHVkZSAib3BfYWJpLmgiCisjaW5jbHVkZSAib2RiLmgiCisjaW5jbHVkZSAib3Bfc2FtcGxlX2ZpbGUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNkZWZpbmUgYnl0ZV9hZGRyKHgpIChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oJih4KSkpCisjZGVmaW5lIGZpZWxkX29mZnNldChzLCBmKSAoYnl0ZV9hZGRyKHMuZikgLSBieXRlX2FkZHIocykpCisKK2ludCBvcF93cml0ZV9hYmlfdG9fZmlsZShjaGFyIGNvbnN0ICogYWJpX2ZpbGUpCit7CisJb2RiX25vZGVfdCBub2RlOworCW9kYl9kZXNjcl90IGRlc2NyOworCXN0cnVjdCBvcGRfaGVhZGVyIGhlYWRlcjsKKworICAgIEZJTEUqIGZpbGUgPSBmb3BlbihhYmlfZmlsZSwgInd0Iik7CisKKyAgICBmcHJpbnRmKGZpbGUsICJzaXplb2ZfZG91YmxlICV1XG4iLCAgc2l6ZW9mKGRvdWJsZSkpOworCisJZnByaW50ZihmaWxlLCAic2l6ZW9mX3RpbWVfdCAldVxuIiwgc2l6ZW9mKHRpbWVfdCkpOworCWZwcmludGYoZmlsZSwgInNpemVvZl91OCAldVxuIiwgc2l6ZW9mKHU4KSk7CisJZnByaW50ZihmaWxlLCAic2l6ZW9mX3UzMiAldVxuIiwgc2l6ZW9mKHUzMikpOworCWZwcmludGYoZmlsZSwgInNpemVvZl9pbnQgJXVcbiIsIHNpemVvZihpbnQpKTsKKwlmcHJpbnRmKGZpbGUsICJzaXplb2ZfdW5zaWduZWRfaW50ICV1XG4iLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisJZnByaW50ZihmaWxlLCAic2l6ZW9mX29kYl9rZXlfdCAldVxuIiwgc2l6ZW9mKG9kYl9rZXlfdCkpOworCWZwcmludGYoZmlsZSwgInNpemVvZl9vZGJfaW5kZXhfdCAldVxuIiwgc2l6ZW9mKG9kYl9pbmRleF90KSk7CisJZnByaW50ZihmaWxlLCAic2l6ZW9mX29kYl92YWx1ZV90ICV1XG4iLCBzaXplb2Yob2RiX3ZhbHVlX3QpKTsKKwlmcHJpbnRmKGZpbGUsICJzaXplb2Zfb2RiX25vZGVfbnJfdCAldVxuIiwgc2l6ZW9mKG9kYl9ub2RlX25yX3QpKTsKKwlmcHJpbnRmKGZpbGUsICJzaXplb2Zfb2RiX2Rlc2NyX3QgJXVcbiIsIHNpemVvZihvZGJfZGVzY3JfdCkpOworCWZwcmludGYoZmlsZSwgInNpemVvZl9vZGJfbm9kZV90ICV1XG4iLCBzaXplb2Yob2RiX25vZGVfdCkpOworCWZwcmludGYoZmlsZSwgInNpemVvZl9zdHJ1Y3Rfb3BkX2hlYWRlciAldVxuIiwgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7CQkKKwkKKwlmcHJpbnRmKGZpbGUsICJvZmZzZXRvZl9ub2RlX2tleSAldVxuIiwgZmllbGRfb2Zmc2V0KG5vZGUsIGtleSkpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX25vZGVfdmFsdWUgJXVcbiIsIGZpZWxkX29mZnNldChub2RlLCB2YWx1ZSkpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX25vZGVfbmV4dCAldVxuIiwgZmllbGRfb2Zmc2V0KG5vZGUsIG5leHQpKTsKKwkKKwlmcHJpbnRmKGZpbGUsICJvZmZzZXRvZl9kZXNjcl9zaXplICV1XG4iLCBmaWVsZF9vZmZzZXQoZGVzY3IsIHNpemUpKTsKKwlmcHJpbnRmKGZpbGUsICJvZmZzZXRvZl9kZXNjcl9jdXJyZW50X3NpemUgJXVcbiIsIGZpZWxkX29mZnNldChkZXNjciwgY3VycmVudF9zaXplKSk7CisJCisJZnByaW50ZihmaWxlLCAib2Zmc2V0b2ZfaGVhZGVyX21hZ2ljICV1XG4iLCBmaWVsZF9vZmZzZXQoaGVhZGVyLCBtYWdpYykpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX2hlYWRlcl92ZXJzaW9uICV1XG4iLCBmaWVsZF9vZmZzZXQoaGVhZGVyLCB2ZXJzaW9uKSk7CisJZnByaW50ZihmaWxlLCAib2Zmc2V0b2ZfaGVhZGVyX2NwdV90eXBlICV1XG4iLCBmaWVsZF9vZmZzZXQoaGVhZGVyLCBjcHVfdHlwZSkpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX2hlYWRlcl9jdHJfZXZlbnQgJXVcbiIsIGZpZWxkX29mZnNldChoZWFkZXIsIGN0cl9ldmVudCkpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX2hlYWRlcl9jdHJfdW0gJXVcbiIsIGZpZWxkX29mZnNldChoZWFkZXIsIGN0cl91bSkpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX2hlYWRlcl9jdHJfY291bnQgJXVcbiIsIGZpZWxkX29mZnNldChoZWFkZXIsIGN0cl9jb3VudCkpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX2hlYWRlcl9pc19rZXJuZWwgJXVcbiIsIGZpZWxkX29mZnNldChoZWFkZXIsIGlzX2tlcm5lbCkpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX2hlYWRlcl9jcHVfc3BlZWQgJXVcbiIsIGZpZWxkX29mZnNldChoZWFkZXIsIGNwdV9zcGVlZCkpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX2hlYWRlcl9tdGltZSAldVxuIiwgZmllbGRfb2Zmc2V0KGhlYWRlciwgbXRpbWUpKTsKKwlmcHJpbnRmKGZpbGUsICJvZmZzZXRvZl9oZWFkZXJfY2dfdG9faXNfa2VybmVsICV1XG4iLCBmaWVsZF9vZmZzZXQoaGVhZGVyLCBjZ190b19pc19rZXJuZWwpKTsKKwlmcHJpbnRmKGZpbGUsICJvZmZzZXRvZl9oZWFkZXJfYW5vbl9zdGFydCAldVxuIiwgZmllbGRfb2Zmc2V0KGhlYWRlciwgYW5vbl9zdGFydCkpOworCWZwcmludGYoZmlsZSwgIm9mZnNldG9mX2hlYWRlcl9jZ190b19hbm9uX3N0YXJ0ICV1XG4iLCBmaWVsZF9vZmZzZXQoaGVhZGVyLCBjZ190b19hbm9uX3N0YXJ0KSk7CisgICAgCisJLy8gZGV0ZXJtaW5lIGVuZGlhbm5lc3MKKworCXVuc2lnbmVkIGludCBwcm9iZSA9IDB4ZmY7CisJc2l6ZV90IHN6ID0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJdW5zaWduZWQgY2hhciAqIHByb2JlX2J5dGUgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oJnByb2JlKTsKKworCWFzc2VydChwcm9iZV9ieXRlWzBdID09IDB4ZmYgfHwgcHJvYmVfYnl0ZVtzeiAtIDFdID09IDB4ZmYpOworCisJaWYgKHByb2JlX2J5dGVbMF0gPT0gMHhmZikKKwkJZnByaW50ZihmaWxlLCAibGl0dGxlX2VuZGlhbiAxXG4iKTsKKwllbHNlCisJCWZwcmludGYoZmlsZSwgImxpdHRsZV9lbmRpYW4gMFxuIik7CisKKwlmcHJpbnRmKGZpbGUsICJcbiIpOworCisgICAgZmNsb3NlKGZpbGUpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvbGliYWJpL29wX2FiaS5oIGIvbGliYWJpYy9vcF9hYmkuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYWJpL29wX2FiaS5oCnJlbmFtZSB0byBsaWJhYmljL29wX2FiaS5oCmRpZmYgLS1naXQgYS9saWJkYi9BbmRyb2lkLm1rIGIvbGliZGIvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTk0ZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZGIvQW5kcm9pZC5tawpAQCAtMCwwICsxLDE3IEBACitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVM6PSBcCisJZGJfZGVidWcuYyBcCisJZGJfaW5zZXJ0LmMgXAorCWRiX21hbmFnZS5jIFwKKwlkYl9zdGF0LmMgXAorCWRiX3RyYXZlbC5jCisKK0xPQ0FMX0NfSU5DTFVERVMgOj0gXAorCSQoTE9DQUxfUEFUSCkvLi4gXAorCSQoTE9DQUxfUEFUSCkvLi4vbGlidXRpbAorCitMT0NBTF9NT0RVTEUgOj0gbGliZGIKKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvbGliZGIvTWFrZWZpbGUuYW0gYi9saWJkYi9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2NThmOS4uMDAwMDAwMAotLS0gYS9saWJkYi9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVNVQkRJUlM9LiB0ZXN0cwotCi1BTV9DUFBGTEFHUyA9IFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKLQotQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLQotbm9pbnN0X0xJQlJBUklFUyA9IGxpYm9kYi5hCi0KLWxpYm9kYl9hX1NPVVJDRVMgPSBcCi0JZGJfbWFuYWdlLmMgXAotCWRiX2luc2VydC5jIFwKLQlkYl90cmF2ZWwuYyBcCi0JZGJfZGVidWcuYyBcCi0JZGJfc3RhdC5jIFwKLQlvZGIuaAotCmRpZmYgLS1naXQgYS9saWJkYi9NYWtlZmlsZS5pbiBiL2xpYmRiL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjU0OTc3Li4wMDAwMDAwCi0tLSBhL2xpYmRiL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTYxICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS41IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotU09VUkNFUyA9ICQobGlib2RiX2FfU09VUkNFUykKLQotc3JjZGlyID0gQHNyY2RpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLVZQQVRIID0gQHNyY2RpckAKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi10b3BfYnVpbGRkaXIgPSAuLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotc3ViZGlyID0gbGliZGIKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUxJQlJBUklFUyA9ICQobm9pbnN0X0xJQlJBUklFUykKLUFSID0gYXIKLUFSRkxBR1MgPSBjcnUKLWxpYm9kYl9hX0FSID0gJChBUikgJChBUkZMQUdTKQotbGlib2RiX2FfTElCQUREID0KLWFtX2xpYm9kYl9hX09CSkVDVFMgPSBkYl9tYW5hZ2UuJChPQkpFWFQpIGRiX2luc2VydC4kKE9CSkVYVCkgXAotCWRiX3RyYXZlbC4kKE9CSkVYVCkgZGJfZGVidWcuJChPQkpFWFQpIGRiX3N0YXQuJChPQkpFWFQpCi1saWJvZGJfYV9PQkpFQ1RTID0gJChhbV9saWJvZGJfYV9PQkpFQ1RTKQotREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLVNPVVJDRVMgPSAkKGxpYm9kYl9hX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYm9kYl9hX1NPVVJDRVMpCi1SRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAotCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgXAotCXBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCi0JdW5pbnN0YWxsLXJlY3Vyc2l2ZQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVF9TVUJESVJTID0gJChTVUJESVJTKQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1PQyA9IEBNT0NACi1NT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACi1PQkpFWFQgPSBAT0JKRVhUQAotT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKLU9QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAotT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLU9QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBPUFRfTElCUyA9IEBQT1BUX0xJQlNACi1QVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKLVFUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAotUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAotUVRfTElCID0gQFFUX0xJQkAKLVFUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACi1TVFJJUCA9IEBTVFJJUEAKLVVJQyA9IEBVSUNACi1WRVJTSU9OID0gQFZFUlNJT05ACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACi1YX0xJQlMgPSBAWF9MSUJTQAotWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1kYXRhZGlyID0gQGRhdGFkaXJACi1lbmFibGVfYWJpX0ZBTFNFID0gQGVuYWJsZV9hYmlfRkFMU0VACi1lbmFibGVfYWJpX1RSVUUgPSBAZW5hYmxlX2FiaV9UUlVFQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1oYXZlX3F0X0ZBTFNFID0gQGhhdmVfcXRfRkFMU0VACi1oYXZlX3F0X1RSVUUgPSBAaGF2ZV9xdF9UUlVFQAotaGF2ZV94c2x0cHJvY19GQUxTRSA9IEBoYXZlX3hzbHRwcm9jX0ZBTFNFQAotaGF2ZV94c2x0cHJvY19UUlVFID0gQGhhdmVfeHNsdHByb2NfVFJVRUAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWtlcm5lbF9zdXBwb3J0X0ZBTFNFID0gQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAota2VybmVsX3N1cHBvcnRfVFJVRSA9IEBrZXJuZWxfc3VwcG9ydF9UUlVFQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdG9wZGlyID0gQHRvcGRpckAKLVNVQkRJUlMgPSAuIHRlc3RzCi1BTV9DUFBGTEFHUyA9IFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKLQotQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLW5vaW5zdF9MSUJSQVJJRVMgPSBsaWJvZGIuYQotbGlib2RiX2FfU09VUkNFUyA9IFwKLQlkYl9tYW5hZ2UuYyBcCi0JZGJfaW5zZXJ0LmMgXAotCWRiX3RyYXZlbC5jIFwKLQlkYl9kZWJ1Zy5jIFwKLQlkYl9zdGF0LmMgXAotCW9kYi5oCi0KLWFsbDogYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYmRiL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJkYi9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotY2xlYW4tbm9pbnN0TElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCi1saWJvZGIuYTogJChsaWJvZGJfYV9PQkpFQ1RTKSAkKGxpYm9kYl9hX0RFUEVOREVOQ0lFUykgCi0JLXJtIC1mIGxpYm9kYi5hCi0JJChsaWJvZGJfYV9BUikgbGlib2RiLmEgJChsaWJvZGJfYV9PQkpFQ1RTKSAkKGxpYm9kYl9hX0xJQkFERCkKLQkkKFJBTkxJQikgbGlib2RiLmEKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RiX2RlYnVnLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kYl9pbnNlcnQuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RiX21hbmFnZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGJfc3RhdC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGJfdHJhdmVsLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCi11bmluc3RhbGwtaW5mby1hbToKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KLSQoUkVDVVJTSVZFX1RBUkdFVFMpOgotCUBmYWlsY29tPSdleGl0IDEnOyBcCi0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAotCSAgY2FzZSAkJGYgaW4gXAotCSAgICAqPSogfCAtLVsha10qKTs7IFwKLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCi0JZG9uZTsgXAotCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAotCWZpOyB0ZXN0IC16ICIkJGZhaWwiCi0KLW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBcCi1tYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZToKLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKLQkgIGNhc2UgJCRmIGluIFwKLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCi0JICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCWNhc2UgIiRAIiBpbiBcCi0JICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCi0JICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCi0JZXNhYzsgXAotCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCXJldj0iJCRyZXYgLiI7IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKLXRhZ3MtcmVjdXJzaXZlOgotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKLQlkb25lCi1jdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKLQlkb25lCi0KLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKLQotVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICB0YWdzPSIkJHRhZ3MgJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAotCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICB8fCAkKG1rZGlyX3ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICAoY2QgJCRzdWJkaXIgJiYgXAotCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZSAkKExJQlJBUklFUykKLWluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKLWluc3RhbGxkaXJzLWFtOgotaW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCi11bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCi1pbnN0YWxsLXN0cmlwOgotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAotCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1ub2luc3RMSUJSQVJJRVMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktcmVjdXJzaXZlCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1yZWN1cnNpdmUKLQotaW5mbzogaW5mby1yZWN1cnNpdmUKLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljCi0KLXBkZjogcGRmLXJlY3Vyc2l2ZQotCi1wZGYtYW06Ci0KLXBzOiBwcy1yZWN1cnNpdmUKLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KLQotdW5pbnN0YWxsLWluZm86IHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi0uUEhPTlk6ICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gXAotCWNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbm9pbnN0TElCUkFSSUVTIGNsZWFuLXJlY3Vyc2l2ZSBcCi0JY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCi0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIFwKLQlkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWJkYi9kYl9tYW5hZ2UuYyBiL2xpYmRiL2RiX21hbmFnZS5jCmluZGV4IGFmZTMxZjUuLmQ5Y2MxY2UgMTAwNjQ0Ci0tLSBhL2xpYmRiL2RiX21hbmFnZS5jCisrKyBiL2xpYmRiL2RiX21hbmFnZS5jCkBAIC0xMSwxMCArMTEsMTEgQEAKICNkZWZpbmUgX0dOVV9TT1VSQ0UKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN5cy9mY250bC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtIGIvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MzIwODguLjAwMDAwMDAKLS0tIGEvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1BTV9DUFBGTEFHUyA9IFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGliZGIKLQotQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLQotTElCUyA9IEBMSUJFUlRZX0xJQlNACi0KLWNoZWNrX1BST0dSQU1TID0gZGJfdGVzdAotCi1kYl90ZXN0X1NPVVJDRVMgPSBkYl90ZXN0LmMKLWRiX3Rlc3RfTERBREQgPSAuLi9saWJvZGIuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQotCi1URVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CmRpZmYgLS1naXQgYS9saWJkYi90ZXN0cy9NYWtlZmlsZS5pbiBiL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmFhZWIyLi4wMDAwMDAwCi0tLSBhL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTA5ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS41IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLVNPVVJDRVMgPSAkKGRiX3Rlc3RfU09VUkNFUykKLQotc3JjZGlyID0gQHNyY2RpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLVZQQVRIID0gQHNyY2RpckAKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi10b3BfYnVpbGRkaXIgPSAuLi8uLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotY2hlY2tfUFJPR1JBTVMgPSBkYl90ZXN0JChFWEVFWFQpCi1zdWJkaXIgPSBsaWJkYi90ZXN0cwotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotYW1fZGJfdGVzdF9PQkpFQ1RTID0gZGJfdGVzdC4kKE9CSkVYVCkKLWRiX3Rlc3RfT0JKRUNUUyA9ICQoYW1fZGJfdGVzdF9PQkpFQ1RTKQotZGJfdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9saWJvZGIuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQotREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLVNPVVJDRVMgPSAkKGRiX3Rlc3RfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoZGJfdGVzdF9TT1VSQ0VTKQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCRVJUWV9MSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKLVhfTElCUyA9IEBYX0xJQlNACi1YX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWVuYWJsZV9hYmlfRkFMU0UgPSBAZW5hYmxlX2FiaV9GQUxTRUAKLWVuYWJsZV9hYmlfVFJVRSA9IEBlbmFibGVfYWJpX1RSVUVACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhhdmVfcXRfRkFMU0UgPSBAaGF2ZV9xdF9GQUxTRUAKLWhhdmVfcXRfVFJVRSA9IEBoYXZlX3F0X1RSVUVACi1oYXZlX3hzbHRwcm9jX0ZBTFNFID0gQGhhdmVfeHNsdHByb2NfRkFMU0VACi1oYXZlX3hzbHRwcm9jX1RSVUUgPSBAaGF2ZV94c2x0cHJvY19UUlVFQAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAota2VybmVsX3N1cHBvcnRfRkFMU0UgPSBAa2VybmVsX3N1cHBvcnRfRkFMU0VACi1rZXJuZWxfc3VwcG9ydF9UUlVFID0gQGtlcm5lbF9zdXBwb3J0X1RSVUVACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10b3BkaXIgPSBAdG9wZGlyQAotQU1fQ1BQRkxBR1MgPSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYmRiCi0KLUFNX0NGTEFHUyA9IEBPUF9DRkxBR1NACi1kYl90ZXN0X1NPVVJDRVMgPSBkYl90ZXN0LmMKLWRiX3Rlc3RfTERBREQgPSAuLi9saWJvZGIuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQotVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJkYi90ZXN0cy9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgbGliZGIvdGVzdHMvTWFrZWZpbGUKLS5QUkVDSU9VUzogTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLWNsZWFuLWNoZWNrUFJPR1JBTVM6Ci0JLXRlc3QgLXogIiQoY2hlY2tfUFJPR1JBTVMpIiB8fCBybSAtZiAkKGNoZWNrX1BST0dSQU1TKQotZGJfdGVzdCQoRVhFRVhUKTogJChkYl90ZXN0X09CSkVDVFMpICQoZGJfdGVzdF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBkYl90ZXN0JChFWEVFWFQpCi0JJChMSU5LKSAkKGRiX3Rlc3RfTERGTEFHUykgJChkYl90ZXN0X09CSkVDVFMpICQoZGJfdGVzdF9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGJfdGVzdC5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKLUBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKLUBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAotdW5pbnN0YWxsLWluZm8tYW06Ci0KLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKLQotVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKLQlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1jaGVjay1URVNUUzogJChURVNUUykKLQlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKLQlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCi0JbGlzdD0nJChURVNUUyknOyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBmb3IgdHN0IGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mIC4vJCR0c3Q7IHRoZW4gZGlyPS4vOyBcCi0JICAgIGVsaWYgdGVzdCAtZiAkJHRzdDsgdGhlbiBkaXI9OyBcCi0JICAgIGVsc2UgZGlyPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgICAgaWYgJChURVNUU19FTlZJUk9OTUVOVCkgJCR7ZGlyfSQkdHN0OyB0aGVuIFwKLQkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAotCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKLQkgICAgICAqIiAkJHRzdCAiKikgXAotCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKLQkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKLQkJZWNobyAiWFBBU1M6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICAqKSBcCi0JCWVjaG8gIlBBU1M6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICBlc2FjOyBcCi0JICAgIGVsaWYgdGVzdCAkJD8gLW5lIDc3OyB0aGVuIFwKLQkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAotCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKLQkgICAgICAqIiAkJHRzdCAiKikgXAotCQl4ZmFpbD1gZXhwciAkJHhmYWlsICsgMWA7IFwKLQkJZWNobyAiWEZBSUw6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICAqKSBcCi0JCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCi0JCWVjaG8gIkZBSUw6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICBlc2FjOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIHNraXA9YGV4cHIgJCRza2lwICsgMWA7IFwKLQkgICAgICBlY2hvICJTS0lQOiAkJHRzdCI7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCi0JICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKLQkgICAgICBiYW5uZXI9IkFsbCAkJGFsbCB0ZXN0cyBwYXNzZWQiOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIGJhbm5lcj0iQWxsICQkYWxsIHRlc3RzIGJlaGF2ZWQgYXMgZXhwZWN0ZWQgKCQkeGZhaWwgZXhwZWN0ZWQgZmFpbHVyZXMpIjsgXAotCSAgICBmaTsgXAotCSAgZWxzZSBcCi0JICAgIGlmIHRlc3QgIiQkeHBhc3MiIC1lcSAwOyB0aGVuIFwKLQkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsIHRlc3RzIGZhaWxlZCI7IFwKLQkgICAgZWxzZSBcCi0JICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCB0ZXN0cyBkaWQgbm90IGJlaGF2ZSBhcyBleHBlY3RlZCAoJCR4cGFzcyB1bmV4cGVjdGVkIHBhc3NlcykiOyBcCi0JICAgIGZpOyBcCi0JICBmaTsgXAotCSAgZGFzaGVzPSIkJGJhbm5lciI7IFwKLQkgIHNraXBwZWQ9IiI7IFwKLQkgIGlmIHRlc3QgIiQkc2tpcCIgLW5lIDA7IHRoZW4gXAotCSAgICBza2lwcGVkPSIoJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikiOyBcCi0JICAgIHRlc3QgYGVjaG8gIiQkc2tpcHBlZCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAotCSAgICAgIGRhc2hlcz0iJCRza2lwcGVkIjsgXAotCSAgZmk7IFwKLQkgIHJlcG9ydD0iIjsgXAotCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwICYmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbiBcCi0JICAgIHJlcG9ydD0iUGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IFwKLQkgICAgdGVzdCBgZWNobyAiJCRyZXBvcnQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKLQkgICAgICBkYXNoZXM9IiQkcmVwb3J0IjsgXAotCSAgZmk7IFwKLQkgIGRhc2hlcz1gZWNobyAiJCRkYXNoZXMiIHwgc2VkIHMvLi89L2dgOyBcCi0JICBlY2hvICIkJGRhc2hlcyI7IFwKLQkgIGVjaG8gIiQkYmFubmVyIjsgXAotCSAgdGVzdCAteiAiJCRza2lwcGVkIiB8fCBlY2hvICIkJHNraXBwZWQiOyBcCi0JICB0ZXN0IC16ICIkJHJlcG9ydCIgfHwgZWNobyAiJCRyZXBvcnQiOyBcCi0JICBlY2hvICIkJGRhc2hlcyI7IFwKLQkgIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgXAotCWVsc2UgOjsgZmkKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAotCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLVRFU1RTIGNoZWNrLWFtIGNsZWFuIFwKLQljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY3RhZ3MgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCi0JZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIFwKLQl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliZGIvdGVzdHMvZGJfdGVzdC5jIGIvbGliZGIvdGVzdHMvZGJfdGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTdmZjE2Li4wMDAwMDAwCi0tLSBhL2xpYmRiL3Rlc3RzL2RiX3Rlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vKioKLSAqIEBmaWxlIGRiX3Rlc3QuYwotICogVGVzdHMgZm9yIERCIGhhc2gKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotCi0jaW5jbHVkZSAib3Bfc2FtcGxlX2ZpbGUuaCIKLSNpbmNsdWRlICJvZGIuaCIKLQotI2RlZmluZSBURVNUX0ZJTEVOQU1FICJ0ZXN0LWhhc2gtZGIuZGF0IgotCi1zdGF0aWMgaW50IG5yX2Vycm9yOwotCi1zdGF0aWMgaW50IHZlcmJvc2UgPSAwOwotCi0jZGVmaW5lIHZlcmJwcmludGYoYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAodmVyYm9zZSkgXAotCQkJcHJpbnRmKGFyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIGRvdWJsZSB1c2VkX3RpbWUodm9pZCkKLXsKLQlzdHJ1Y3QgcnVzYWdlICB1c2FnZTsKLQotCWdldHJ1c2FnZShSVVNBR0VfU0VMRiwgJnVzYWdlKTsKLQotCXJldHVybiB1c2FnZS5ydV91dGltZS50dl9zZWMgKyB1c2FnZS5ydV9zdGltZS50dl9zZWMgKyAKLQkJKCh1c2FnZS5ydV91dGltZS50dl91c2VjICsgdXNhZ2UucnVfc3RpbWUudHZfdXNlYykgLyAxMDAwMDAwLjApOwotfQotCi0KLS8qIGNyZWF0ZSBuciBpdGVtIHJhbmRvbWx5IGNyZWF0ZWQgd2l0aCBucl91bmlxdWVfaXRlbSBkaXN0aW5jdCBpdGVtcyAqLwotc3RhdGljIHZvaWQgc3BlZWRfdGVzdChpbnQgbnJfaXRlbSwgaW50IG5yX3VuaXF1ZV9pdGVtKQotewotCWludCBpOwotCWRvdWJsZSBiZWdpbiwgZW5kOwotCW9kYl90IGhhc2g7Ci0JaW50IHJjOwotCi0JcmMgPSBvZGJfb3BlbigmaGFzaCwgVEVTVF9GSUxFTkFNRSwgT0RCX1JEV1IsIHNpemVvZihzdHJ1Y3Qgb3BkX2hlYWRlcikpOwotCWlmIChyYykgewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgc3RyZXJyb3IocmMpKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQliZWdpbiA9IHVzZWRfdGltZSgpOwotCWZvciAoaSA9IDAgOyBpIDwgbnJfaXRlbSA7ICsraSkgewotCQlyYyA9IG9kYl9pbnNlcnQoJmhhc2gsIChyYW5kb20oKSAlIG5yX3VuaXF1ZV9pdGVtKSArIDEsIDEpOwotCQlpZiAocmMgIT0gRVhJVF9TVUNDRVNTKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgc3RyZXJyb3IocmMpKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCX0KLQllbmQgPSB1c2VkX3RpbWUoKTsKLQlvZGJfY2xvc2UoJmhhc2gpOwotCi0JcmVtb3ZlKFRFU1RfRklMRU5BTUUpOwotCi0JdmVyYnByaW50ZigibnIgaXRlbTogJWQsIHVuaXF1ZSBpdGVtOiAlZCwgZWxhcHNlZDogJWZcbiIsCi0JICAgICAgICAgICBucl9pdGVtLCBucl91bmlxdWVfaXRlbSwgZW5kIC0gYmVnaW4pOwotfQotCi0KLXN0YXRpYyB2b2lkIGRvX3NwZWVkX3Rlc3Qodm9pZCkKLXsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDEwMDAgOyBpIDw9IDEwMDAwMCA7IGkgKj0gMTApIHsKLQkJZm9yIChqID0gMTAwIDsgaiA8PSBpIC8gMTAgOyBqICo9IDEwKSB7Ci0JCQlzcGVlZF90ZXN0KGksIGopOwotCQl9Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgdGVzdChpbnQgbnJfaXRlbSwgaW50IG5yX3VuaXF1ZV9pdGVtKQotewotCWludCBpOwotCW9kYl90IGhhc2g7Ci0JaW50IHJldDsKLQlpbnQgcmM7Ci0KLQlyYyA9IG9kYl9vcGVuKCZoYXNoLCBURVNUX0ZJTEVOQU1FLCBPREJfUkRXUiwgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7Ci0JaWYgKHJjKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXMiLCBzdHJlcnJvcihyYykpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0KLQlmb3IgKGkgPSAwIDsgaSA8IG5yX2l0ZW0gOyArK2kpIHsKLQkJb2RiX2tleV90IGtleSA9IChyYW5kb20oKSAlIG5yX3VuaXF1ZV9pdGVtKSArIDE7Ci0JCXJjID0gb2RiX2luc2VydCgmaGFzaCwga2V5LCAxKTsKLQkJaWYgKHJjICE9IEVYSVRfU1VDQ0VTUykgewotCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIHN0cmVycm9yKHJjKSk7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQl9Ci0KLQlyZXQgPSBvZGJfY2hlY2tfaGFzaCgmaGFzaCk7Ci0KLQlvZGJfY2xvc2UoJmhhc2gpOwotCi0JcmVtb3ZlKFRFU1RfRklMRU5BTUUpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgdm9pZCBkb190ZXN0KHZvaWQpCi17Ci0JaW50IGksIGo7Ci0KLQlmb3IgKGkgPSAxMDAwOyBpIDw9IDEwMDAwMDsgaSAqPSAxMCkgewotCQlmb3IgKGogPSAxMDAgOyBqIDw9IGkgLyAxMCA7IGogKj0gMTApIHsKLQkJCWlmICh0ZXN0KGksIGopKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICIlczolZCBmYWlsdXJlIGZvciAlZCAlZFxuIiwKLQkJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBpLCBqKTsKLQkJCQlucl9lcnJvcisrOwotCQkJfSBlbHNlIHsKLQkJCQl2ZXJicHJpbnRmKCJ0ZXN0KCkgb2sgJWQgJWRcbiIsIGksIGopOwotCQkJfQotCQl9Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIHNhbml0eV9jaGVjayhjaGFyIGNvbnN0ICogZmlsZW5hbWUpCi17Ci0Jb2RiX3QgaGFzaDsKLQlpbnQgcmM7Ci0KLQlyYyA9IG9kYl9vcGVuKCZoYXNoLCBmaWxlbmFtZSwgT0RCX1JET05MWSwgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7Ci0JaWYgKHJjKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXMiLCBzdHJlcnJvcihyYykpOwotCSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWlmIChvZGJfY2hlY2tfaGFzaCgmaGFzaCkpIHsKLQkJZnByaW50ZihzdGRlcnIsICJjaGVja2luZyBmaWxlICVzIEZBSUxcbiIsIGZpbGVuYW1lKTsKLQkJKytucl9lcnJvcjsKLQl9IGVsc2UgaWYgKHZlcmJvc2UpIHsKLQkJb2RiX2hhc2hfc3RhdF90ICogc3RhdHM7Ci0JCXN0YXRzID0gb2RiX2hhc2hfc3RhdCgmaGFzaCk7Ci0JCW9kYl9oYXNoX2Rpc3BsYXlfc3RhdChzdGF0cyk7Ci0JCW9kYl9oYXNoX2ZyZWVfc3RhdChzdGF0cyk7Ci0JfQotCi0Jb2RiX2Nsb3NlKCZoYXNoKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2WzFdKQotewotCS8qIGlmIGEgZmlsZW5hbWUgaXMgZ2l2ZW4gdGFrZSBpdCBhczogImNoZWNrIHRoaXMgZGIiICovCi0JaWYgKGFyZ2MgPiAxKSB7Ci0JCWludCBpOwotCQl2ZXJib3NlID0gMTsKLQkJZm9yIChpID0gMSA7IGkgPCBhcmdjIDsgKytpKQotCQkJc2FuaXR5X2NoZWNrKGFyZ3ZbaV0pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZW1vdmUoVEVTVF9GSUxFTkFNRSk7Ci0KLQlkb190ZXN0KCk7Ci0KLQlkb19zcGVlZF90ZXN0KCk7Ci0KLQlpZiAobnJfZXJyb3IpCi0JCXByaW50ZigiJWQgZXJyb3Igb2NjdXJlZFxuIiwgbnJfZXJyb3IpOwotCi0JcmV0dXJuIG5yX2Vycm9yID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvbGlib3AvQW5kcm9pZC5tayBiL2xpYm9wL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmZDA4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm9wL0FuZHJvaWQubWsKQEAgLTAsMCArMSwxOCBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTOj0gXAorCW9wX2FsbG9jX2NvdW50ZXIuYyBcCisJb3BfY3B1X3R5cGUuYyBcCisJb3BfZXZlbnRzLmMgXAorCW9wX2dldF9pbnRlcmZhY2UuYyBcCisJb3BfbWFuZ2xlLmMgXAorCW9wX3BhcnNlX2V2ZW50LmMKKworTE9DQUxfQ19JTkNMVURFUyA6PSBcCisJJChMT0NBTF9QQVRIKS8uLiBcCisJJChMT0NBTF9QQVRIKS8uLi9saWJ1dGlsCisKK0xPQ0FMX01PRFVMRSA6PSBsaWJvcAorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9saWJvcC9NYWtlZmlsZS5hbSBiL2xpYm9wL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2FlYmI4Li4wMDAwMDAwCi0tLSBhL2xpYm9wL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotU1VCRElSUyA9IC4gdGVzdHMKLQotQU1fQ1BQRkxBR1M9LUkke3RvcF9zcmNkaXJ9L2xpYnV0aWwKLUFNX0NGTEFHUyA9IEBPUF9DRkxBR1NACi0KLW5vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcC5hCi1saWJvcF9hX1NPVVJDRVMgPSBcCi0Jb3BfZXZlbnRzLmMgXAotCW9wX2V2ZW50cy5oIFwKLQlvcF9wYXJzZV9ldmVudC5jIFwKLQlvcF9wYXJzZV9ldmVudC5oIFwKLQlvcF9jcHVfdHlwZS5jIFwKLQlvcF9jcHVfdHlwZS5oIFwKLQlvcF9tYW5nbGUuYyBcCi0Jb3BfbWFuZ2xlLmggXAotCW9wX2dldF9pbnRlcmZhY2UuYyBcCi0Jb3BfaW50ZXJmYWNlLmggXAotCW9wX2FsbG9jX2NvdW50ZXIuYyBcCi0Jb3BfYWxsb2NfY291bnRlci5oIFwKLQlvcF9od19jb25maWcuaCBcCi0Jb3BfY29uZmlnLmggXAotCW9wX2NvbmZpZ18yNC5oIFwKLQlvcF9zYW1wbGVfZmlsZS5oCmRpZmYgLS1naXQgYS9saWJvcC9NYWtlZmlsZS5pbiBiL2xpYm9wL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2UyMjQwLi4wMDAwMDAwCi0tLSBhL2xpYm9wL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTcwICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS41IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotU09VUkNFUyA9ICQobGlib3BfYV9TT1VSQ0VTKQotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1zdWJkaXIgPSBsaWJvcAotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotTElCUkFSSUVTID0gJChub2luc3RfTElCUkFSSUVTKQotQVIgPSBhcgotQVJGTEFHUyA9IGNydQotbGlib3BfYV9BUiA9ICQoQVIpICQoQVJGTEFHUykKLWxpYm9wX2FfTElCQUREID0KLWFtX2xpYm9wX2FfT0JKRUNUUyA9IG9wX2V2ZW50cy4kKE9CSkVYVCkgb3BfcGFyc2VfZXZlbnQuJChPQkpFWFQpIFwKLQlvcF9jcHVfdHlwZS4kKE9CSkVYVCkgb3BfbWFuZ2xlLiQoT0JKRVhUKSBcCi0Jb3BfZ2V0X2ludGVyZmFjZS4kKE9CSkVYVCkgb3BfYWxsb2NfY291bnRlci4kKE9CSkVYVCkKLWxpYm9wX2FfT0JKRUNUUyA9ICQoYW1fbGlib3BfYV9PQkpFQ1RTKQotREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLVNPVVJDRVMgPSAkKGxpYm9wX2FfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGlib3BfYV9TT1VSQ0VTKQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKLQlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKLQlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCXVuaW5zdGFsbC1yZWN1cnNpdmUKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKLUFNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKLUFNVEFSID0gQEFNVEFSQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CRkRfTElCUyA9IEBCRkRfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRFID0gQERBVEVACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVhFRVhUID0gQEVYRUVYVEAKLUVYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotS0lOQyA9IEBLSU5DQAotS1NSQyA9IEBLU1JDQAotS1ZFUlMgPSBAS1ZFUlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NT0MgPSBATU9DQAotTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAotT0JKRVhUID0gQE9CSkVYVEAKLU9QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACi1PUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKLU9QX0NGTEFHUyA9IEBPUF9DRkxBR1NACi1PUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLU9QX0RPQ0RJUiA9IEBPUF9ET0NESVJACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAotUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACi1RVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKLVFUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKLVFUX0xJQiA9IEBRVF9MSUJACi1RVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAotU1RSSVAgPSBAU1RSSVBACi1VSUMgPSBAVUlDQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAotWF9MSUJTID0gQFhfTElCU0AKLVhfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACi1hY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJUEAKLWFtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACi1hbV9fZmFzdGRlcENYWF9GQUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKLWFtX19mYXN0ZGVwQ1hYX1RSVUUgPSBAYW1fX2Zhc3RkZXBDWFhfVFJVRUAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZW5hYmxlX2FiaV9GQUxTRSA9IEBlbmFibGVfYWJpX0ZBTFNFQAotZW5hYmxlX2FiaV9UUlVFID0gQGVuYWJsZV9hYmlfVFJVRUAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaGF2ZV9xdF9GQUxTRSA9IEBoYXZlX3F0X0ZBTFNFQAotaGF2ZV9xdF9UUlVFID0gQGhhdmVfcXRfVFJVRUAKLWhhdmVfeHNsdHByb2NfRkFMU0UgPSBAaGF2ZV94c2x0cHJvY19GQUxTRUAKLWhhdmVfeHNsdHByb2NfVFJVRSA9IEBoYXZlX3hzbHRwcm9jX1RSVUVACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1rZXJuZWxfc3VwcG9ydF9GQUxTRSA9IEBrZXJuZWxfc3VwcG9ydF9GQUxTRUAKLWtlcm5lbF9zdXBwb3J0X1RSVUUgPSBAa2VybmVsX3N1cHBvcnRfVFJVRUAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRvcGRpciA9IEB0b3BkaXJACi1TVUJESVJTID0gLiB0ZXN0cwotQU1fQ1BQRkxBR1MgPSAtSSR7dG9wX3NyY2Rpcn0vbGlidXRpbAotQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLW5vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcC5hCi1saWJvcF9hX1NPVVJDRVMgPSBcCi0Jb3BfZXZlbnRzLmMgXAotCW9wX2V2ZW50cy5oIFwKLQlvcF9wYXJzZV9ldmVudC5jIFwKLQlvcF9wYXJzZV9ldmVudC5oIFwKLQlvcF9jcHVfdHlwZS5jIFwKLQlvcF9jcHVfdHlwZS5oIFwKLQlvcF9tYW5nbGUuYyBcCi0Jb3BfbWFuZ2xlLmggXAotCW9wX2dldF9pbnRlcmZhY2UuYyBcCi0Jb3BfaW50ZXJmYWNlLmggXAotCW9wX2FsbG9jX2NvdW50ZXIuYyBcCi0Jb3BfYWxsb2NfY291bnRlci5oIFwKLQlvcF9od19jb25maWcuaCBcCi0Jb3BfY29uZmlnLmggXAotCW9wX2NvbmZpZ18yNC5oIFwKLQlvcF9zYW1wbGVfZmlsZS5oCi0KLWFsbDogYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYm9wL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJvcC9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotY2xlYW4tbm9pbnN0TElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCi1saWJvcC5hOiAkKGxpYm9wX2FfT0JKRUNUUykgJChsaWJvcF9hX0RFUEVOREVOQ0lFUykgCi0JLXJtIC1mIGxpYm9wLmEKLQkkKGxpYm9wX2FfQVIpIGxpYm9wLmEgJChsaWJvcF9hX09CSkVDVFMpICQobGlib3BfYV9MSUJBREQpCi0JJChSQU5MSUIpIGxpYm9wLmEKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2FsbG9jX2NvdW50ZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2NwdV90eXBlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9ldmVudHMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2dldF9pbnRlcmZhY2UuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX21hbmdsZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BfcGFyc2VfZXZlbnQuUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKLXVuaW5zdGFsbC1pbmZvLWFtOgotCi0jIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAotIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCi0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCi0jICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKLSMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7Ci0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgotJChSRUNVUlNJVkVfVEFSR0VUUyk6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBkb3Rfc2Vlbj15ZXM7IFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKLW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgotCUBmYWlsY29tPSdleGl0IDEnOyBcCi0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAotCSAgY2FzZSAkJGYgaW4gXAotCSAgICAqPSogfCAtLVsha10qKTs7IFwKLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAotCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JcmV2PSIkJHJldiAuIjsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgotdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAotCWRvbmUKLWN0YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAotCWRvbmUKLQotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUwotCi1UQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD0uOyBcCi0JZWxzZSBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD07IFwKLQlmaTsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAotCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCi0JZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgIHx8ICQobWtkaXJfcCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIChjZCAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQotaW5zdGFsbGRpcnMtYW06Ci1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLW5vaW5zdExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1yZWN1cnNpdmUKLQotZHZpLWFtOgotCi1odG1sOiBodG1sLXJlY3Vyc2l2ZQotCi1pbmZvOiBpbmZvLXJlY3Vyc2l2ZQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQotCi11bmluc3RhbGwtaW5mbzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLS5QSE9OWTogJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBcCi0JY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1ub2luc3RMSUJSQVJJRVMgY2xlYW4tcmVjdXJzaXZlIFwKLQljdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKLQlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgXAotCWR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAotCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCi0JaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIFwKLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1yZWN1cnNpdmUgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYm9wL29wX2NvbmZpZy5oIGIvbGlib3Avb3BfY29uZmlnLmgKaW5kZXggNmI0Y2ZiYy4uNWUxNmVkZSAxMDA2NDQKLS0tIGEvbGlib3Avb3BfY29uZmlnLmgKKysrIGIvbGlib3Avb3BfY29uZmlnLmgKQEAgLTE1LDcgKzE1LDExIEBACiAjZGVmaW5lIE9QX0NPTkZJR19ICiAKIC8qIHZhcmlvdXMgcGF0aHMsIGR1cGxpY2F0ZWQgaW4gb3Bjb250cm9sICovCi0jZGVmaW5lIE9QX0JBU0VfRElSICIvdmFyL2xpYi9vcHJvZmlsZS8iCisKKyNkZWZpbmUgT1BfRFJJVkVSX0JBU0UgIi9kZXYub3Byb2ZpbGUiCisjZGVmaW5lIE9QX0JBU0VfRElSICIvdG1wL29wcm9maWxlLyIKKy8vI2RlZmluZSBPUF9CQVNFX0RJUiAiL3Zhci9saWIvb3Byb2ZpbGUvIgorCiAjZGVmaW5lIE9QX1NBTVBMRVNfRElSIE9QX0JBU0VfRElSICJzYW1wbGVzLyIKICNkZWZpbmUgT1BfU0FNUExFU19DVVJSRU5UX0RJUiBPUF9TQU1QTEVTX0RJUiAiY3VycmVudC8iCiAjZGVmaW5lIE9QX0xPQ0tfRklMRSBPUF9CQVNFX0RJUiAibG9jayIKQEAgLTI0LDcgKzI4LDggQEAKIAogLyogR2xvYmFsIGRpcmVjdG9yeSB0aGF0IHN0b3JlcyBkZWJ1ZyBmaWxlcyAqLwogI2lmbmRlZiBERUJVR0RJUgotI2RlZmluZSBERUJVR0RJUiAiL3Vzci9saWIvZGVidWciCisvLyNkZWZpbmUgREVCVUdESVIgIi91c3IvbGliL2RlYnVnIgorI2RlZmluZSBERUJVR0RJUiAiL3RtcC9kZWJ1ZyIKICNlbmRpZgogCiAjZGVmaW5lIE9QRF9NQUdJQyAiREFFXG4iCmRpZmYgLS1naXQgYS9saWJvcC9vcF9jcHVfdHlwZS5jIGIvbGlib3Avb3BfY3B1X3R5cGUuYwppbmRleCBhMjU3NGEwLi5kN2ZmNGE3IDEwMDY0NAotLS0gYS9saWJvcC9vcF9jcHVfdHlwZS5jCisrKyBiL2xpYm9wL29wX2NwdV90eXBlLmMKQEAgLTksMTEgKzksMTQgQEAKICAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQogICovCiAKKyNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgorI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgogCiBzdHJ1Y3QgY3B1X2Rlc2NyIHsKIAljaGFyIGNvbnN0ICogcHJldHR5OwpAQCAtNjgsNyArNzEsNyBAQAogCWZwID0gZm9wZW4oIi9wcm9jL3N5cy9kZXYvb3Byb2ZpbGUvY3B1X3R5cGUiLCAiciIpOwogCWlmICghZnApIHsKIAkJLyogVHJ5IDIuNidzIG9wcm9maWxlZnMgb25lIGluc3RlYWQuICovCi0JCWZwID0gZm9wZW4oIi9kZXYvb3Byb2ZpbGUvY3B1X3R5cGUiLCAiciIpOworCQlmcCA9IGZvcGVuKE9QX0RSSVZFUl9CQVNFIi9jcHVfdHlwZSIsICJyIik7CiAJCWlmICghZnApIHsKIAkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIG9wZW4gY3B1X3R5cGUgZmlsZSBmb3IgcmVhZGluZ1xuIik7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIk1ha2Ugc3VyZSB5b3UgaGF2ZSBkb25lIG9wY29udHJvbCAtLWluaXRcbiIpOwpkaWZmIC0tZ2l0IGEvbGlib3Avb3BfZ2V0X2ludGVyZmFjZS5jIGIvbGlib3Avb3BfZ2V0X2ludGVyZmFjZS5jCmluZGV4IGJkZjcyYTUuLmI1N2E3OWYgMTAwNjQ0Ci0tLSBhL2xpYm9wL29wX2dldF9pbnRlcmZhY2UuYworKysgYi9saWJvcC9vcF9nZXRfaW50ZXJmYWNlLmMKQEAgLTgsMTIgKzgsMTUgQEAKICAqIEBhdXRob3IgV2lsbCBDb2hlbgogICovCiAKKyNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgogI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKIAogb3BfaW50ZXJmYWNlIG9wX2dldF9pbnRlcmZhY2Uodm9pZCkKIHsKQEAgLTI0LDcgKzI3LDcgQEAKIAogCWlmIChvcF9maWxlX3JlYWRhYmxlKCIvcHJvYy9zeXMvZGV2L29wcm9maWxlL2NwdV90eXBlIikpIHsKIAkJY3VycmVudF9pbnRlcmZhY2UgPSBPUF9JTlRFUkZBQ0VfMjQ7Ci0JfSBlbHNlIGlmIChvcF9maWxlX3JlYWRhYmxlKCIvZGV2L29wcm9maWxlL2NwdV90eXBlIikpIHsKKwl9IGVsc2UgaWYgKG9wX2ZpbGVfcmVhZGFibGUoT1BfRFJJVkVSX0JBU0UiL2NwdV90eXBlIikpIHsKIAkJY3VycmVudF9pbnRlcmZhY2UgPSBPUF9JTlRFUkZBQ0VfMjY7CiAJfQogCmRpZmYgLS1naXQgYS9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjVlOGZjLi4wMDAwMDAwCi0tLSBhL2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotQU1fQ1BQRkxBR1MgPSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wCi0KLUFNX0NGTEFHUyA9IEBPUF9DRkxBR1NAIC1ET1BST0ZJTEVfU1JDRElSPVwiQHRvcF9zcmNkaXJAXCIKLQotQ09NTU9OX0xJQlMgPSAuLi9saWJvcC5hIC4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCi0KLUxJQlMgPSBATElCRVJUWV9MSUJTQAotCi1jaGVja19QUk9HUkFNUyA9IFwKLQljcHVfdHlwZV90ZXN0cyBcCi0JcGFyc2VfZXZlbnRfdGVzdHMgXAotCWxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzIFwKLQlhbGxvY19jb3VudGVyX3Rlc3RzIFwKLQltYW5nbGVfdGVzdHMKLQotY3B1X3R5cGVfdGVzdHNfU09VUkNFUyA9IGNwdV90eXBlX3Rlc3RzLmMKLWNwdV90eXBlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLQotcGFyc2VfZXZlbnRfdGVzdHNfU09VUkNFUyA9IHBhcnNlX2V2ZW50X3Rlc3RzLmMKLXBhcnNlX2V2ZW50X3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLQotYWxsb2NfY291bnRlcl90ZXN0c19TT1VSQ0VTID0gYWxsb2NfY291bnRlcl90ZXN0cy5jCi1hbGxvY19jb3VudGVyX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLQotbG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfU09VUkNFUyA9IGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzLmMKLWxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLQotbWFuZ2xlX3Rlc3RzX1NPVVJDRVMgPSBtYW5nbGVfdGVzdHMuYwotbWFuZ2xlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLQotVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQpkaWZmIC0tZ2l0IGEvbGlib3AvdGVzdHMvTWFrZWZpbGUuaW4gYi9saWJvcC90ZXN0cy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk5MmNlYy4uMDAwMDAwMAotLS0gYS9saWJvcC90ZXN0cy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDU1NCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi1TT1VSQ0VTID0gJChhbGxvY19jb3VudGVyX3Rlc3RzX1NPVVJDRVMpICQoY3B1X3R5cGVfdGVzdHNfU09VUkNFUykgJChsb2FkX2V2ZW50c19maWxlc190ZXN0c19TT1VSQ0VTKSAkKG1hbmdsZV90ZXN0c19TT1VSQ0VTKSAkKHBhcnNlX2V2ZW50X3Rlc3RzX1NPVVJDRVMpCi0KLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLi4vLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSBASU5TVEFMTEAKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWNoZWNrX1BST0dSQU1TID0gY3B1X3R5cGVfdGVzdHMkKEVYRUVYVCkgcGFyc2VfZXZlbnRfdGVzdHMkKEVYRUVYVCkgXAotCWxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzJChFWEVFWFQpIGFsbG9jX2NvdW50ZXJfdGVzdHMkKEVYRUVYVCkgXAotCW1hbmdsZV90ZXN0cyQoRVhFRVhUKQotc3ViZGlyID0gbGlib3AvdGVzdHMKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLWFtX2FsbG9jX2NvdW50ZXJfdGVzdHNfT0JKRUNUUyA9IGFsbG9jX2NvdW50ZXJfdGVzdHMuJChPQkpFWFQpCi1hbGxvY19jb3VudGVyX3Rlc3RzX09CSkVDVFMgPSAkKGFtX2FsbG9jX2NvdW50ZXJfdGVzdHNfT0JKRUNUUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9IC4uL2xpYm9wLmEgLi4vLi4vbGlidXRpbC9saWJ1dGlsLmEKLWFsbG9jX2NvdW50ZXJfdGVzdHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9jcHVfdHlwZV90ZXN0c19PQkpFQ1RTID0gY3B1X3R5cGVfdGVzdHMuJChPQkpFWFQpCi1jcHVfdHlwZV90ZXN0c19PQkpFQ1RTID0gJChhbV9jcHVfdHlwZV90ZXN0c19PQkpFQ1RTKQotY3B1X3R5cGVfdGVzdHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9sb2FkX2V2ZW50c19maWxlc190ZXN0c19PQkpFQ1RTID0gIFwKLQlsb2FkX2V2ZW50c19maWxlc190ZXN0cy4kKE9CSkVYVCkKLWxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX09CSkVDVFMgPSAgXAotCSQoYW1fbG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfT0JKRUNUUykKLWxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbWFuZ2xlX3Rlc3RzX09CSkVDVFMgPSBtYW5nbGVfdGVzdHMuJChPQkpFWFQpCi1tYW5nbGVfdGVzdHNfT0JKRUNUUyA9ICQoYW1fbWFuZ2xlX3Rlc3RzX09CSkVDVFMpCi1tYW5nbGVfdGVzdHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9wYXJzZV9ldmVudF90ZXN0c19PQkpFQ1RTID0gcGFyc2VfZXZlbnRfdGVzdHMuJChPQkpFWFQpCi1wYXJzZV9ldmVudF90ZXN0c19PQkpFQ1RTID0gJChhbV9wYXJzZV9ldmVudF90ZXN0c19PQkpFQ1RTKQotcGFyc2VfZXZlbnRfdGVzdHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotU09VUkNFUyA9ICQoYWxsb2NfY291bnRlcl90ZXN0c19TT1VSQ0VTKSAkKGNwdV90eXBlX3Rlc3RzX1NPVVJDRVMpIFwKLQkkKGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX1NPVVJDRVMpICQobWFuZ2xlX3Rlc3RzX1NPVVJDRVMpIFwKLQkkKHBhcnNlX2V2ZW50X3Rlc3RzX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGFsbG9jX2NvdW50ZXJfdGVzdHNfU09VUkNFUykgXAotCSQoY3B1X3R5cGVfdGVzdHNfU09VUkNFUykgJChsb2FkX2V2ZW50c19maWxlc190ZXN0c19TT1VSQ0VTKSBcCi0JJChtYW5nbGVfdGVzdHNfU09VUkNFUykgJChwYXJzZV9ldmVudF90ZXN0c19TT1VSQ0VTKQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCRVJUWV9MSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKLVhfTElCUyA9IEBYX0xJQlNACi1YX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWVuYWJsZV9hYmlfRkFMU0UgPSBAZW5hYmxlX2FiaV9GQUxTRUAKLWVuYWJsZV9hYmlfVFJVRSA9IEBlbmFibGVfYWJpX1RSVUVACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhhdmVfcXRfRkFMU0UgPSBAaGF2ZV9xdF9GQUxTRUAKLWhhdmVfcXRfVFJVRSA9IEBoYXZlX3F0X1RSVUVACi1oYXZlX3hzbHRwcm9jX0ZBTFNFID0gQGhhdmVfeHNsdHByb2NfRkFMU0VACi1oYXZlX3hzbHRwcm9jX1RSVUUgPSBAaGF2ZV94c2x0cHJvY19UUlVFQAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAota2VybmVsX3N1cHBvcnRfRkFMU0UgPSBAa2VybmVsX3N1cHBvcnRfRkFMU0VACi1rZXJuZWxfc3VwcG9ydF9UUlVFID0gQGtlcm5lbF9zdXBwb3J0X1RSVUVACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10b3BkaXIgPSBAdG9wZGlyQAotQU1fQ1BQRkxBR1MgPSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wCi0KLUFNX0NGTEFHUyA9IEBPUF9DRkxBR1NAIC1ET1BST0ZJTEVfU1JDRElSPVwiQHRvcF9zcmNkaXJAXCIKLUNPTU1PTl9MSUJTID0gLi4vbGlib3AuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQotY3B1X3R5cGVfdGVzdHNfU09VUkNFUyA9IGNwdV90eXBlX3Rlc3RzLmMKLWNwdV90eXBlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLXBhcnNlX2V2ZW50X3Rlc3RzX1NPVVJDRVMgPSBwYXJzZV9ldmVudF90ZXN0cy5jCi1wYXJzZV9ldmVudF90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci1hbGxvY19jb3VudGVyX3Rlc3RzX1NPVVJDRVMgPSBhbGxvY19jb3VudGVyX3Rlc3RzLmMKLWFsbG9jX2NvdW50ZXJfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQotbG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfU09VUkNFUyA9IGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzLmMKLWxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLW1hbmdsZV90ZXN0c19TT1VSQ0VTID0gbWFuZ2xlX3Rlc3RzLmMKLW1hbmdsZV90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci1URVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9Ci1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYm9wL3Rlc3RzL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJvcC90ZXN0cy9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotY2xlYW4tY2hlY2tQUk9HUkFNUzoKLQktdGVzdCAteiAiJChjaGVja19QUk9HUkFNUykiIHx8IHJtIC1mICQoY2hlY2tfUFJPR1JBTVMpCi1hbGxvY19jb3VudGVyX3Rlc3RzJChFWEVFWFQpOiAkKGFsbG9jX2NvdW50ZXJfdGVzdHNfT0JKRUNUUykgJChhbGxvY19jb3VudGVyX3Rlc3RzX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGFsbG9jX2NvdW50ZXJfdGVzdHMkKEVYRUVYVCkKLQkkKExJTkspICQoYWxsb2NfY291bnRlcl90ZXN0c19MREZMQUdTKSAkKGFsbG9jX2NvdW50ZXJfdGVzdHNfT0JKRUNUUykgJChhbGxvY19jb3VudGVyX3Rlc3RzX0xEQUREKSAkKExJQlMpCi1jcHVfdHlwZV90ZXN0cyQoRVhFRVhUKTogJChjcHVfdHlwZV90ZXN0c19PQkpFQ1RTKSAkKGNwdV90eXBlX3Rlc3RzX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGNwdV90eXBlX3Rlc3RzJChFWEVFWFQpCi0JJChMSU5LKSAkKGNwdV90eXBlX3Rlc3RzX0xERkxBR1MpICQoY3B1X3R5cGVfdGVzdHNfT0JKRUNUUykgJChjcHVfdHlwZV90ZXN0c19MREFERCkgJChMSUJTKQotbG9hZF9ldmVudHNfZmlsZXNfdGVzdHMkKEVYRUVYVCk6ICQobG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfT0JKRUNUUykgJChsb2FkX2V2ZW50c19maWxlc190ZXN0c19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBsb2FkX2V2ZW50c19maWxlc190ZXN0cyQoRVhFRVhUKQotCSQoTElOSykgJChsb2FkX2V2ZW50c19maWxlc190ZXN0c19MREZMQUdTKSAkKGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX09CSkVDVFMpICQobG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfTERBREQpICQoTElCUykKLW1hbmdsZV90ZXN0cyQoRVhFRVhUKTogJChtYW5nbGVfdGVzdHNfT0JKRUNUUykgJChtYW5nbGVfdGVzdHNfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgbWFuZ2xlX3Rlc3RzJChFWEVFWFQpCi0JJChMSU5LKSAkKG1hbmdsZV90ZXN0c19MREZMQUdTKSAkKG1hbmdsZV90ZXN0c19PQkpFQ1RTKSAkKG1hbmdsZV90ZXN0c19MREFERCkgJChMSUJTKQotcGFyc2VfZXZlbnRfdGVzdHMkKEVYRUVYVCk6ICQocGFyc2VfZXZlbnRfdGVzdHNfT0JKRUNUUykgJChwYXJzZV9ldmVudF90ZXN0c19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBwYXJzZV9ldmVudF90ZXN0cyQoRVhFRVhUKQotCSQoTElOSykgJChwYXJzZV9ldmVudF90ZXN0c19MREZMQUdTKSAkKHBhcnNlX2V2ZW50X3Rlc3RzX09CSkVDVFMpICQocGFyc2VfZXZlbnRfdGVzdHNfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FsbG9jX2NvdW50ZXJfdGVzdHMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NwdV90eXBlX3Rlc3RzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sb2FkX2V2ZW50c19maWxlc190ZXN0cy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWFuZ2xlX3Rlc3RzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wYXJzZV9ldmVudF90ZXN0cy5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKLUBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKLUBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAotdW5pbnN0YWxsLWluZm8tYW06Ci0KLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKLQotVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKLQlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1jaGVjay1URVNUUzogJChURVNUUykKLQlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKLQlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCi0JbGlzdD0nJChURVNUUyknOyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBmb3IgdHN0IGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mIC4vJCR0c3Q7IHRoZW4gZGlyPS4vOyBcCi0JICAgIGVsaWYgdGVzdCAtZiAkJHRzdDsgdGhlbiBkaXI9OyBcCi0JICAgIGVsc2UgZGlyPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgICAgaWYgJChURVNUU19FTlZJUk9OTUVOVCkgJCR7ZGlyfSQkdHN0OyB0aGVuIFwKLQkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAotCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKLQkgICAgICAqIiAkJHRzdCAiKikgXAotCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKLQkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKLQkJZWNobyAiWFBBU1M6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICAqKSBcCi0JCWVjaG8gIlBBU1M6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICBlc2FjOyBcCi0JICAgIGVsaWYgdGVzdCAkJD8gLW5lIDc3OyB0aGVuIFwKLQkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAotCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKLQkgICAgICAqIiAkJHRzdCAiKikgXAotCQl4ZmFpbD1gZXhwciAkJHhmYWlsICsgMWA7IFwKLQkJZWNobyAiWEZBSUw6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICAqKSBcCi0JCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCi0JCWVjaG8gIkZBSUw6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICBlc2FjOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIHNraXA9YGV4cHIgJCRza2lwICsgMWA7IFwKLQkgICAgICBlY2hvICJTS0lQOiAkJHRzdCI7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCi0JICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKLQkgICAgICBiYW5uZXI9IkFsbCAkJGFsbCB0ZXN0cyBwYXNzZWQiOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIGJhbm5lcj0iQWxsICQkYWxsIHRlc3RzIGJlaGF2ZWQgYXMgZXhwZWN0ZWQgKCQkeGZhaWwgZXhwZWN0ZWQgZmFpbHVyZXMpIjsgXAotCSAgICBmaTsgXAotCSAgZWxzZSBcCi0JICAgIGlmIHRlc3QgIiQkeHBhc3MiIC1lcSAwOyB0aGVuIFwKLQkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsIHRlc3RzIGZhaWxlZCI7IFwKLQkgICAgZWxzZSBcCi0JICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCB0ZXN0cyBkaWQgbm90IGJlaGF2ZSBhcyBleHBlY3RlZCAoJCR4cGFzcyB1bmV4cGVjdGVkIHBhc3NlcykiOyBcCi0JICAgIGZpOyBcCi0JICBmaTsgXAotCSAgZGFzaGVzPSIkJGJhbm5lciI7IFwKLQkgIHNraXBwZWQ9IiI7IFwKLQkgIGlmIHRlc3QgIiQkc2tpcCIgLW5lIDA7IHRoZW4gXAotCSAgICBza2lwcGVkPSIoJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikiOyBcCi0JICAgIHRlc3QgYGVjaG8gIiQkc2tpcHBlZCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAotCSAgICAgIGRhc2hlcz0iJCRza2lwcGVkIjsgXAotCSAgZmk7IFwKLQkgIHJlcG9ydD0iIjsgXAotCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwICYmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbiBcCi0JICAgIHJlcG9ydD0iUGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IFwKLQkgICAgdGVzdCBgZWNobyAiJCRyZXBvcnQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKLQkgICAgICBkYXNoZXM9IiQkcmVwb3J0IjsgXAotCSAgZmk7IFwKLQkgIGRhc2hlcz1gZWNobyAiJCRkYXNoZXMiIHwgc2VkIHMvLi89L2dgOyBcCi0JICBlY2hvICIkJGRhc2hlcyI7IFwKLQkgIGVjaG8gIiQkYmFubmVyIjsgXAotCSAgdGVzdCAteiAiJCRza2lwcGVkIiB8fCBlY2hvICIkJHNraXBwZWQiOyBcCi0JICB0ZXN0IC16ICIkJHJlcG9ydCIgfHwgZWNobyAiJCRyZXBvcnQiOyBcCi0JICBlY2hvICIkJGRhc2hlcyI7IFwKLQkgIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgXAotCWVsc2UgOjsgZmkKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAotCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLVRFU1RTIGNoZWNrLWFtIGNsZWFuIFwKLQljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY3RhZ3MgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCi0JZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIFwKLQl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jIGIvbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTgyOTc0Li4wMDAwMDAwCi0tLSBhL2xpYm9wL3Rlc3RzL2FsbG9jX2NvdW50ZXJfdGVzdHMuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioKLSAqIEBmaWxlIGFsbG9jX2NvdW50ZXJfdGVzdHMuYwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAib3BfcGFyc2VfZXZlbnQuaCIKLSNpbmNsdWRlICJvcF9hbGxvY19jb3VudGVyLmgiCi0jaW5jbHVkZSAib3BfZXZlbnRzLmgiCi0jaW5jbHVkZSAib3BfaHdfY29uZmlnLmgiCi0jaW5jbHVkZSAib3BfY3B1X3R5cGUuaCIKLSNpbmNsdWRlICJvcF9ldmVudHMuaCIKLQotLyogRklYTUU6IGFscGhhIGRlc2NyaXB0aW9uIGV2ZW50cyBuZWVkIDIwIGJ1dCB3aGVuIHJ1bm5pbmcgdGVzdCBvbiB4ODYKLSAqIE9QX01BWF9DT1VOVEVSUyBpcyA4LCBzbyB3ZSBjYW4ndCB1c2UgaXQgKi8KLSNkZWZpbmUgTUFYX0VWRU5UUyAyMAotCi0KLS8qIHNvbWUgdGVzdCBhcmUgc2V0dXAgdG8gZmFpbCBpbiBhIGtub3duIHdheSAqLwotZW51bSBmYWlsdXJlX3R5cGUgewotCW5vX2ZhaWx1cmUsCi0JZmFpbF90b19maW5kX2V2ZW50LAotCWZhaWxfdG9fYWxsb2NfY291bnRlcgotfTsKLQotc3RydWN0IGFsbG9jYXRlZF9jb3VudGVyIHsKLQlvcF9jcHUgY3B1X3R5cGU7Ci0JY2hhciAgY29uc3QgKiBjb25zdCAqIGV2ZW50czsKLQlzaXplX3QgYWxsb2NfbWFwW01BWF9FVkVOVFNdOwotCS8qIGV4cGVjdGVkIGZhaWx1cmUgZm9yIHRoaXMgdGVzdCAqLwotCWVudW0gZmFpbHVyZV90eXBlIGZhaWx1cmU7Ci19OwotCi0KLS8qIG5vdCBtb3JlIHRoYW4gTUFYX0VWRU5UUyBzdHJpbmcgZm9yIGFsbCB0aGVzZSBhcnJheXMgKi8KLXN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZXZlbnRzX2FscGhhX2V2NF8xW10gPSB7Ci0JIklTU1VFUzo0MDk2OjA6MToxIiwKLQlOVUxMCi19OwotCi1zdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGV2ZW50c19hbHBoYV9ldjRfMltdID0gewotCSJVTktOT1dOX0VWRU5UOjQwOTY6MDoxOjEiLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZXZlbnRzX3Bwcm9fMVtdID0gewotCSJDUFVfQ0xLX1VOSEFMVEVEOjQwOTY6MDoxOjEiLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZXZlbnRzX3Bwcm9fMltdID0gewotCSJDUFVfQ0xLX1VOSEFMVEVEOjQwOTY6MDoxOjEiLAotCSJEQVRBX01FTV9SRUZTOjQwOTY6MDoxOjEiLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZXZlbnRzX3Bwcm9fM1tdID0gewotCS8qIGZhaWxfdG9fYWxsb2NfY291bnRlcjogMiBldmVudCB0byBjb3VudGVyIDAgKi8KLQkiQ09NUF9GTE9QX1JFVDo0MDk2OjA6MToxIiwKLQkiRkxPUFM6NDA5NjowOjE6MSIsCi0JTlVMTAotfTsKLQotc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBldmVudHNfcHByb180W10gPSB7Ci0JIkZMT1BTOjQwOTY6MDoxOjEiLAotCSJGUF9BU1NJU1Q6NDA5NjowOjE6MSIsCi0JTlVMTAotfTsKLQotc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBldmVudHNfcHByb181W10gPSB7Ci0JIkZQX0FTU0lTVDo0MDk2OjA6MToxIiwKLQkiRkxPUFM6NDA5NjowOjE6MSIsCi0JTlVMTAotfTsKLQotc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBldmVudHNfcDRfMVtdID0gewotCSJCUkFOQ0hfUkVUSVJFRDo0MDk2OjA6MToxIiwKLQkiTUlTUFJFRF9CUkFOQ0hfUkVUSVJFRDo0MDk2OjA6MToxIiwKLQkiQlBVX0ZFVENIX1JFUVVFU1Q6NDA5NjowOjE6MSIsCi0JIklUTEJfUkVGRVJFTkNFOjQwOTY6MDoxOjEiLAotCSJNRU1PUllfQ0FOQ0VMOjQwOTY6MDoxOjEiLAotCSJNRU1PUllfQ09NUExFVEU6NDA5NjowOjE6MSIsCi0JIlRDX01TX1hGRVI6NDA5NjowOjE6MSIsCi0JIlVPUF9RVUVVRV9XUklURVM6NDA5NjowOjE6MSIsCi0JTlVMTAotfTsKLQotc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBldmVudHNfcDRfMltdID0gewotCS8qIGZhaWxfdG9fYWxsb2NfY291bnRlcjogMyBldmVudCB0byBjb3VudGVyIDMsIDcgKi8KLQkiQlJBTkNIX1JFVElSRUQ6NDA5NjowOjE6MSIsCi0JIk1JU1BSRURfQlJBTkNIX1JFVElSRUQ6NDA5NjowOjE6MSIsCi0JIklOU1RSX1JFVElSRUQ6NDA5NjowOjE6MSIsCi0JIkJQVV9GRVRDSF9SRVFVRVNUOjQwOTY6MDoxOjEiLAotCSJJVExCX1JFRkVSRU5DRTo0MDk2OjA6MToxIiwKLQkiTUVNT1JZX0NBTkNFTDo0MDk2OjA6MToxIiwKLQkiTUVNT1JZX0NPTVBMRVRFOjQwOTY6MDoxOjEiLAotCSJUQ19NU19YRkVSOjQwOTY6MDoxOjEiLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWxsb2NhdGVkX2NvdW50ZXIgY29uc3QgdGVzdHNbXSA9IHsKLQl7IENQVV9BWFBfRVY0LCBldmVudHNfYWxwaGFfZXY0XzEsIHsgMCB9LCBub19mYWlsdXJlIH0sCi0JeyBDUFVfQVhQX0VWNCwgZXZlbnRzX2FscGhhX2V2NF8yLCB7IC0xIH0sIGZhaWxfdG9fZmluZF9ldmVudCB9LAotCXsgQ1BVX1BQUk8sIGV2ZW50c19wcHJvXzEsIHsgMCB9LCBub19mYWlsdXJlIH0sCi0JeyBDUFVfUFBSTywgZXZlbnRzX3Bwcm9fMiwgeyAxLCAwIH0sIG5vX2ZhaWx1cmUgfSwKLQl7IENQVV9QUFJPLCBldmVudHNfcHByb18zLCB7IDEsIDAgfSwgZmFpbF90b19hbGxvY19jb3VudGVyIH0sCi0JeyBDUFVfUFBSTywgZXZlbnRzX3Bwcm9fNCwgeyAwLCAxIH0sIG5vX2ZhaWx1cmUgfSwKLQl7IENQVV9QUFJPLCBldmVudHNfcHByb181LCB7IDEsIDAgfSwgbm9fZmFpbHVyZSB9LAotCXsgQ1BVX1A0LCBldmVudHNfcDRfMSwgeyA3LCAzLCA0LCAwLCA2LCAyLCA1LCAxIH0sIG5vX2ZhaWx1cmUgfSwKLQl7IENQVV9QNCwgZXZlbnRzX3A0XzIsIHsgLTEgfSwgZmFpbF90b19hbGxvY19jb3VudGVyIH0sCi0JeyBDUFVfTk9fR09PRCwgMCwgeyAwIH0sIDAgfQotfTsKLQotCi1zdGF0aWMgdm9pZCBzaG93X2V2ZW50cyhjaGFyIGNvbnN0ICogY29uc3QgKiBldmVudHMpCi17Ci0JZm9yICggOyAqZXZlbnRzOyArK2V2ZW50cykKLQkJcHJpbnRmKCIlc1xuIiwgKmV2ZW50cyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgc2hvd19jb3VudGVyX21hcChzaXplX3QgY29uc3QgKiBjb3VudGVyX21hcCwgc2l6ZV90IG5yX2V2ZW50cykKLXsKLQlzaXplX3QgaTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfZXZlbnRzOyArK2kpCi0JCXByaW50ZigiJWx1ICIsICh1bnNpZ25lZCBsb25nKWNvdW50ZXJfbWFwW2ldKTsKLQlwcmludGYoIlxuIik7Ci19Ci0KLQotc3RhdGljIHZvaWQgZG9fdGVzdChzdHJ1Y3QgYWxsb2NhdGVkX2NvdW50ZXIgY29uc3QgKiBpdCkKLXsKLQlzaXplX3QgaTsKLQlzaXplX3QgKiBjb3VudGVyX21hcDsKLQlzaXplX3QgbnJfZXZlbnRzOwotCXN0cnVjdCBwYXJzZWRfZXZlbnQgcGFyc2VkW01BWF9FVkVOVFNdOwotCXN0cnVjdCBvcF9ldmVudCBjb25zdCAqIGV2ZW50W01BWF9FVkVOVFNdOwotCi0Jb3BfZXZlbnRzKGl0LT5jcHVfdHlwZSk7Ci0KLQlucl9ldmVudHMgPSBwYXJzZV9ldmVudHMocGFyc2VkLCBNQVhfRVZFTlRTLCBpdC0+ZXZlbnRzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9ldmVudHM7ICsraSkgewotCQlldmVudFtpXSA9IGZpbmRfZXZlbnRfYnlfbmFtZShwYXJzZWRbaV0ubmFtZSk7Ci0JCWlmICghZXZlbnRbaV0pIHsKLQkJCWlmIChpdC0+ZmFpbHVyZSA9PSBmYWlsX3RvX2ZpbmRfZXZlbnQpCi0JCQkJZ290byBmcmVlX2V2ZW50czsKLQkJCXByaW50ZigiQ2FuJ3QgZmluZCBldmVudHMgJXMgZm9yIGNwdSAlc1xuIiwKLQkJCSAgICAgICBwYXJzZWRbaV0ubmFtZSwKLQkJCSAgICAgICBvcF9nZXRfY3B1X3R5cGVfc3RyKGl0LT5jcHVfdHlwZSkpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0JfQotCi0JY291bnRlcl9tYXAgPSAgbWFwX2V2ZW50X3RvX2NvdW50ZXIoZXZlbnQsIG5yX2V2ZW50cywgaXQtPmNwdV90eXBlKTsKLQlpZiAoIWNvdW50ZXJfbWFwKSB7Ci0JCWlmIChpdC0+ZmFpbHVyZSA9PSBmYWlsX3RvX2FsbG9jX2NvdW50ZXIpCi0JCQlnb3RvIGZyZWVfZXZlbnRzOwotCQlwcmludGYoIkNhbid0IG1hcCB0aGlzIHNldCBvZiBldmVudHMgdG8gY291bnRlcjpcbiIpOwotCQlzaG93X2V2ZW50cyhpdC0+ZXZlbnRzKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBucl9ldmVudHM7ICsraSkgewotCQlpZiAoY291bnRlcl9tYXBbaV0gIT0gaXQtPmFsbG9jX21hcFtpXSkgewotCQkJcHJpbnRmKCJJbmNvcnJlY3QgYWxsb2NhdGlvbiBtYXAgZm9yIHRoZXNlIGV2ZW50czpcbiIpOwotCQkJc2hvd19ldmVudHMoaXQtPmV2ZW50cyk7Ci0JCQlwcmludGYoIihleHBlY3QsIGZvdW5kKTpcbiIpOwotCQkJc2hvd19jb3VudGVyX21hcChpdC0+YWxsb2NfbWFwLCBucl9ldmVudHMpOwotCQkJc2hvd19jb3VudGVyX21hcChjb3VudGVyX21hcCwgbnJfZXZlbnRzKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCX0KLQotCWlmIChpdC0+ZmFpbHVyZSAhPSBub19mYWlsdXJlKSB7Ci0JCS8qIHRlc3Qgc2hvdWxkIGZhaWwgYnV0IHN1Y2Nlc3MhICovCi0JCXByaW50ZigidGVzdCBzaG91bGQgZmFpbCB3aXRoIGEgZmFpbHVyZSB0eXBlICVkIGJ1dCBzdWNjZWVkICIKLQkJICAgICAgICJmb3IgZXZlbnRzOlxuIiwgaXQtPmZhaWx1cmUpOwotCQlmb3IgKGkgPSAwOyBpIDwgbnJfZXZlbnRzOyArK2kpCi0JCQlwcmludGYoIiVzXG4iLCBpdC0+ZXZlbnRzW2ldKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWZyZWUoY291bnRlcl9tYXApOwotZnJlZV9ldmVudHM6Ci0Jb3BfZnJlZV9ldmVudHMoKTsKLX0KLQotCi1pbnQgbWFpbih2b2lkKQotewotCXN0cnVjdCBhbGxvY2F0ZWRfY291bnRlciBjb25zdCAqIGl0OwotCi0Jc2V0ZW52KCJPUFJPRklMRV9FVkVOVFNfRElSIiwgT1BST0ZJTEVfU1JDRElSICIvZXZlbnRzIiwgMSk7Ci0KLQlmb3IgKGl0ID0gdGVzdHM7IGl0LT5jcHVfdHlwZSAhPSBDUFVfTk9fR09PRDsgKytpdCkgewotCQlkb190ZXN0KGl0KTsKLQl9Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJvcC90ZXN0cy9jcHVfdHlwZV90ZXN0cy5jIGIvbGlib3AvdGVzdHMvY3B1X3R5cGVfdGVzdHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIwZjZiYS4uMDAwMDAwMAotLS0gYS9saWJvcC90ZXN0cy9jcHVfdHlwZV90ZXN0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjcHVfdHlwZV90ZXN0cy5jCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgotCi1zdGF0aWMgc3RydWN0IGNwdV90eXBlIHsKLQljaGFyIGNvbnN0ICogbmFtZTsKLQlvcF9jcHUgdHlwZTsKLX0gY3B1X3N0cltdID0gewotCXsgImkzODYvcHBybyIsIENQVV9QUFJPIH0sCi0JeyAiaTM4Ni9waWkiLCBDUFVfUElJIH0sCi0JeyAiaTM4Ni9waWlpIiwgQ1BVX1BJSUkgfSwKLQl7ICJpMzg2L2F0aGxvbiIsIENQVV9BVEhMT04gfSwKLQl7ICJ0aW1lciIsIENQVV9USU1FUl9JTlQgfSwKLQl7ICJydGMiLCBDUFVfUlRDIH0sCi0JeyAiaTM4Ni9wNCIsIENQVV9QNCB9LAotCXsgImlhNjQvaWE2NCIsIENQVV9JQTY0IH0sCi0JeyAiaWE2NC9pdGFuaXVtIiwgQ1BVX0lBNjRfMSB9LAotCXsgImlhNjQvaXRhbml1bTIiLCBDUFVfSUE2NF8yIH0sCi0JeyAieDg2LTY0L2hhbW1lciIsIENQVV9IQU1NRVIgfSwKLQl7ICJpMzg2L3A0LWh0IiwgQ1BVX1A0X0hUMiB9LAotCXsgImFscGhhL2V2NCIsIENQVV9BWFBfRVY0IH0sCi0JeyAiYWxwaGEvZXY1IiwgQ1BVX0FYUF9FVjUgfSwKLQl7ICJhbHBoYS9wY2E1NiIsIENQVV9BWFBfUENBNTYgfSwKLQl7ICJhbHBoYS9ldjYiLCBDUFVfQVhQX0VWNiB9LAotCXsgImFscGhhL2V2NjciLCBDUFVfQVhQX0VWNjcgfSwKLQl7ICJmb28iLCBDUFVfTk9fR09PRCB9LAotCXsgIi0zIiwgQ1BVX05PX0dPT0QgfSwKLQl7ICIyOTI3IiwgQ1BVX05PX0dPT0QgfSwKLQl7ICIiLCBDUFVfTk9fR09PRCB9LAotCXsgTlVMTCwgQ1BVX05PX0dPT0QgfQotfTsKLQotCi1zdGF0aWMgdm9pZCB0ZXN0KHN0cnVjdCBjcHVfdHlwZSBjb25zdCAqIGNwdSkKLXsKLQljaGFyIGNvbnN0ICogbmFtZTsKLQlvcF9jcHUgdHlwZTsKLQotCW5hbWUgPSBvcF9nZXRfY3B1X25hbWUoY3B1LT50eXBlKTsKLQlpZiAoY3B1LT50eXBlICE9IENQVV9OT19HT09EICYmIHN0cmNtcChjcHUtPm5hbWUsIG5hbWUpKSB7Ci0JCXByaW50ZigiZm9yICVkIGV4cGVjdCAlcyBmb3VuZCAlc1xuIiwgY3B1LT50eXBlLCBjcHUtPm5hbWUsCi0JCSAgICAgICBuYW1lKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoY3B1LT50eXBlID09IENQVV9OT19HT09EICYmIHN0cmNtcCgiaW52YWxpZCBjcHUgdHlwZSIsIG5hbWUpKSB7Ci0JCXByaW50ZigiZm9yICVkIGV4cGVjdCAlcyBmb3VuZCAlc1xuIiwgY3B1LT50eXBlLAotCQkgICAgICAgImludmFsaWQgY3B1IHR5cGUiLCBuYW1lKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCXR5cGUgPSBvcF9nZXRfY3B1X251bWJlcihjcHUtPm5hbWUpOwotCWlmICh0eXBlICE9IGNwdS0+dHlwZSkgewotCQlwcmludGYoImZvciAlcyBleHBlY3QgJWQgZm91bmQgJWRcbiIsIGNwdS0+bmFtZSwgY3B1LT50eXBlLAotCQkgICAgICAgdHlwZSk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci19Ci0KLQotaW50IG1haW4odm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X3R5cGUgKiBjcHU7Ci0JZm9yIChjcHUgPSBjcHVfc3RyOyBjcHUtPm5hbWU7ICsrY3B1KQotCQl0ZXN0KGNwdSk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJvcC90ZXN0cy9sb2FkX2V2ZW50c19maWxlc190ZXN0cy5jIGIvbGlib3AvdGVzdHMvbG9hZF9ldmVudHNfZmlsZXNfdGVzdHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU1NDhlNS4uMDAwMDAwMAotLS0gYS9saWJvcC90ZXN0cy9sb2FkX2V2ZW50c19maWxlc190ZXN0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBsb2FkX2V2ZW50c19maWxlc190ZXN0cy5jCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJvcF9ldmVudHMuaCIKLSNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgotCi1pbnQgbWFpbih2b2lkKQotewotCW9wX2NwdSBjcHVfdHlwZTsKLQotCXNldGVudigiT1BST0ZJTEVfRVZFTlRTX0RJUiIsIE9QUk9GSUxFX1NSQ0RJUiAiL2V2ZW50cyIsIDEpOwotCi0JZm9yIChjcHVfdHlwZSA9IENQVV9OT19HT09EICsgMTsgY3B1X3R5cGUgPCBNQVhfQ1BVX1RZUEU7ICsrY3B1X3R5cGUpIHsKLQkJaWYgKGNwdV90eXBlICE9IENQVV9USU1FUl9JTlQpIHsKLQkJCW9wX2V2ZW50cyhjcHVfdHlwZSk7Ci0JCQlvcF9mcmVlX2V2ZW50cygpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJvcC90ZXN0cy9tYW5nbGVfdGVzdHMuYyBiL2xpYm9wL3Rlc3RzL21hbmdsZV90ZXN0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDYwN2JmLi4wMDAwMDAwCi0tLSBhL2xpYm9wL3Rlc3RzL21hbmdsZV90ZXN0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBtYW5nbGVfdGVzdHMuYwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCi0jaW5jbHVkZSAib3BfbWFuZ2xlLmgiCi0jaW5jbHVkZSAib3BfY29uZmlnLmgiCi0KLXN0cnVjdCB0ZXN0X2lucHV0IHsKLQlzdHJ1Y3QgbWFuZ2xlX3ZhbHVlcyB2YWx1ZXM7Ci0JY2hhciBjb25zdCAqIHJlc3VsdDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGVzdF9pbnB1dCBjb25zdCB0ZXN0c1tdID0gewotCXsgeyBNQU5HTEVfTk9ORSwgImZvbyIsICJiYXIiLCBOVUxMLCAiRVZFTlQiLCAwLCAwLCAwLCAwLCAwIH0sCi0JICAie3Jvb3R9L2Jhci97ZGVwfS97cm9vdH0vZm9vL0VWRU5ULjAuMC5hbGwuYWxsLmFsbCIgfSwKLQl7IHsgTUFOR0xFX0NQVSwgImZvbyIsICJiYXIiLCBOVUxMLCAiRVZFTlQiLCAwLCAwLCAwLCAwLCAyIH0sCi0JICAie3Jvb3R9L2Jhci97ZGVwfS97cm9vdH0vZm9vL0VWRU5ULjAuMC5hbGwuYWxsLjIiIH0sCi0JeyB7IE1BTkdMRV9USUQsICJmb28iLCAiYmFyIiwgTlVMTCwgIkVWRU5UIiwgMCwgMCwgMCwgMzMsIDAgfSwKLQkgICJ7cm9vdH0vYmFyL3tkZXB9L3tyb290fS9mb28vRVZFTlQuMC4wLmFsbC4zMy5hbGwiIH0sCi0JeyB7IE1BTkdMRV9UR0lELCAiZm9vIiwgImJhciIsIE5VTEwsICJFVkVOVCIsIDAsIDAsIDM0LCAwLCAwIH0sCi0JICAie3Jvb3R9L2Jhci97ZGVwfS97cm9vdH0vZm9vL0VWRU5ULjAuMC4zNC5hbGwuYWxsIiB9LAotCXsgeyBNQU5HTEVfS0VSTkVMLCAiZm9vIiwgImJhciIsIE5VTEwsICJFVkVOVCIsIDAsIDAsIDAsIDAsIDAgfSwKLQkgICJ7a2Vybn0vYmFyL3tkZXB9L3trZXJufS9mb28vRVZFTlQuMC4wLmFsbC5hbGwuYWxsIiB9LAotCXsgeyBNQU5HTEVfQ0FMTEdSQVBILCAiZm9vLWZyb20iLCAiYmFyLWZyb20iLCAiZm9vLXRvIiwgIkVWRU5UIiwgMCwgMCwgMCwgMCwgMCB9LAotCSAgIntyb290fS9iYXItZnJvbS97ZGVwfS97cm9vdH0vZm9vLWZyb20ve2NnfS97cm9vdH0vZm9vLXRvL0VWRU5ULjAuMC5hbGwuYWxsLmFsbCIgfSwKLQl7IHsgTUFOR0xFX0NQVXxNQU5HTEVfVElEfE1BTkdMRV9USUR8TUFOR0xFX1RHSUR8TUFOR0xFX0tFUk5FTCwgImZvbyIsICJiYXIiLCBOVUxMLCAiRVZFTlQiLCAxMjM0LCA4MTkyLCAzNCwgMzUsIDIgfSwKLQkgICJ7a2Vybn0vYmFyL3tkZXB9L3trZXJufS9mb28vRVZFTlQuMTIzNC44MTkyLjM0LjM1LjIiIH0sCi0JeyB7IE1BTkdMRV9DUFV8TUFOR0xFX1RJRHxNQU5HTEVfVElEfE1BTkdMRV9UR0lEfE1BTkdMRV9LRVJORUwsICJmb28xL2ZvbzIiLCAiYmFyMS9iYXIyIiwgTlVMTCwgIkVWRU5UIiwgMTIzNCwgODE5MiwgMzQsIDM1LCAyIH0sCi0JICAie3Jvb3R9L2JhcjEvYmFyMi97ZGVwfS97cm9vdH0vZm9vMS9mb28yL0VWRU5ULjEyMzQuODE5Mi4zNC4zNS4yIiB9LAotCXsgeyBNQU5HTEVfQ0FMTEdSQVBIfE1BTkdMRV9DUFV8TUFOR0xFX1RJRHxNQU5HTEVfVElEfE1BTkdMRV9UR0lEfE1BTkdMRV9LRVJORUwsICJiYXIxL2JhcjIiLCAiYmFyMS9iYXIyIiwgImJhcjEvYmFyMi10byIsICJFVkVOVCIsIDEyMzQsIDgxOTIsIDM0LCAzNSwgMiB9LAotCSAgIntyb290fS9iYXIxL2JhcjIve2RlcH0ve3Jvb3R9L2JhcjEvYmFyMi97Y2d9L3tyb290fS9iYXIxL2JhcjItdG8vRVZFTlQuMTIzNC44MTkyLjM0LjM1LjIiIH0sCi0KLQl7IHsgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgMCwgMCwgMCwgMCB9LCBOVUxMIH0KLX07Ci0KLQotaW50IG1haW4odm9pZCkKLXsKLQlzdHJ1Y3QgdGVzdF9pbnB1dCBjb25zdCAqIHRlc3Q7Ci0JZm9yICh0ZXN0ID0gdGVzdHM7IHRlc3QtPnJlc3VsdDsgKyt0ZXN0KSB7Ci0JCWNoYXIgKiByZXN1bHQgPSBvcF9tYW5nbGVfZmlsZW5hbWUoJnRlc3QtPnZhbHVlcyk7Ci0JCWNoYXIgKiBleHBlY3QgPSB4bWFsbG9jKHN0cmxlbih0ZXN0LT5yZXN1bHQpICsKLQkJCQkJc3RybGVuKE9QX1NBTVBMRVNfQ1VSUkVOVF9ESVIpICsgMSk7Ci0JCXN0cmNweShleHBlY3QsIE9QX1NBTVBMRVNfQ1VSUkVOVF9ESVIpOwotCQlzdHJjYXQoZXhwZWN0LCB0ZXN0LT5yZXN1bHQpOwotCQlpZiAoc3RyY21wKHJlc3VsdCwgZXhwZWN0KSkgewotCQkJZnByaW50ZihzdGRlcnIsICJ0ZXN0ICVkOlxuZm91bmQ6ICVzXG5leHBlY3Q6ICVzXG4iLAotCQkJCShpbnQpKHRlc3QgLSB0ZXN0cyksIHJlc3VsdCwgZXhwZWN0KTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCQlmcmVlKGV4cGVjdCk7Ci0JCWZyZWUocmVzdWx0KTsKLQl9Ci0KLQlyZXR1cm4gRVhJVF9TVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvbGlib3AvdGVzdHMvcGFyc2VfZXZlbnRfdGVzdHMuYyBiL2xpYm9wL3Rlc3RzL3BhcnNlX2V2ZW50X3Rlc3RzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYzMzOTQuLjAwMDAwMDAKLS0tIGEvbGlib3AvdGVzdHMvcGFyc2VfZXZlbnRfdGVzdHMuYworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKgotICogQGZpbGUgcGFyc2VfZXZlbnRfdGVzdHMuYwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAib3BfcGFyc2VfZXZlbnQuaCIKLQotc3RydWN0IGV2ZW50c190ZXN0IHsKLQkvKiBzZWNvbmQgcG9pbnRlciBpcyB0aGUgbnVsbCB0ZXJtaW5hdGluZyBhcnJheSBtYXJrZXIgKi8KLQljaGFyIGNvbnN0ICogY29uc3QgdGVzdHNbMl07Ci0Jc3RydWN0IHBhcnNlZF9ldmVudCBleHBlY3RlZDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZXZlbnRzX3Rlc3QgY29uc3QgZXZlbnRzW10gPSAKLXsKLQl7IHsgIkZPTzozMDAwOjA6MDowIiwgMCB9LCAgICB7ICJGT08iLCAzMDAwLCAwLCAwLCAwIH0gfSwKLQl7IHsgIkJBUjozMDAwIiwgMCB9LCAgICAgICAgICB7ICJCQVIiLCAzMDAwLCAwLCAxLCAxIH0gfSwKLQl7IHsgIkZPT0JBUjozMDAwOjE6MToxIiwgMCB9LCB7ICJGT09CQVIiLCAzMDAwLCAxLCAxLCAxIH0gfSwKLQl7IHsgTlVMTCwgTlVMTCB9LCAgICAgICAgICAgICB7IDAsIDAsIDAsIDAsIDAgfSB9Ci19OwotCi1zdGF0aWMgdm9pZCBkb190ZXN0KHN0cnVjdCBldmVudHNfdGVzdCBjb25zdCAqIGV2KQotewotCXN0cnVjdCBwYXJzZWRfZXZlbnQgcGFyc2VkOwotCi0JcGFyc2VfZXZlbnRzKCZwYXJzZWQsIDEsIGV2LT50ZXN0cyk7Ci0KLQlpZiAoc3RyY21wKGV2LT5leHBlY3RlZC5uYW1lLCBwYXJzZWQubmFtZSkgfHwKLQkgICAgZXYtPmV4cGVjdGVkLmNvdW50ICE9IHBhcnNlZC5jb3VudCB8fAotCSAgICBldi0+ZXhwZWN0ZWQudW5pdF9tYXNrICE9IHBhcnNlZC51bml0X21hc2sgfHwKLQkgICAgZXYtPmV4cGVjdGVkLmtlcm5lbCAhPSBwYXJzZWQua2VybmVsIHx8Ci0JICAgIGV2LT5leHBlY3RlZC51c2VyICE9IHBhcnNlZC51c2VyKSB7Ci0JCXByaW50ZigiZm9yICVzIGV4cGVjdCB7ICVzLCAlZCwgJWQsICVkLCAlZCB9IGZvdW5kICIKLQkJICAgICAgICJ7ICVzLCAlZCwgJWQsICVkLCAlZCB9XG4iLAotICAgICAgICAgICAgICAgICAgICAgICBldi0+dGVzdHNbMF0sIGV2LT5leHBlY3RlZC5uYW1lLCBldi0+ZXhwZWN0ZWQuY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgIGV2LT5leHBlY3RlZC51bml0X21hc2ssIGV2LT5leHBlY3RlZC5rZXJuZWwsCi0gICAgICAgICAgICAgICAgICAgICAgIGV2LT5leHBlY3RlZC51c2VyLCBwYXJzZWQubmFtZSwgcGFyc2VkLmNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQudW5pdF9tYXNrLCBwYXJzZWQua2VybmVsLCBwYXJzZWQudXNlcik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci19Ci0KLWludCBtYWluKHZvaWQpCi17Ci0Jc3RydWN0IGV2ZW50c190ZXN0IGNvbnN0ICogZXY7Ci0JZm9yIChldiA9IGV2ZW50czsgZXYtPnRlc3RzWzBdOyArK2V2KSB7Ci0JCWRvX3Rlc3QoZXYpOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlib3B0KysvTWFrZWZpbGUuYW0gYi9saWJvcHQrKy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE3NWNlNy4uMDAwMDAwMAotLS0gYS9saWJvcHQrKy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQU1fQ1BQRkxBR1M9LUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCi1BTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLQotbm9pbnN0X0xJQlJBUklFUyA9IGxpYm9wdCsrLmEKLWxpYm9wdF9fX2FfU09VUkNFUyA9IHBvcHRfb3B0aW9ucy5jcHAgcG9wdF9vcHRpb25zLmgKZGlmZiAtLWdpdCBhL2xpYm9wdCsrL01ha2VmaWxlLmluIGIvbGlib3B0KysvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZjdhOGQuLjAwMDAwMDAKLS0tIGEvbGlib3B0KysvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0MzkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1TT1VSQ0VTID0gJChsaWJvcHRfX19hX1NPVVJDRVMpCi0KLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSBASU5TVEFMTEAKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLXN1YmRpciA9IGxpYm9wdCsrCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1MSUJSQVJJRVMgPSAkKG5vaW5zdF9MSUJSQVJJRVMpCi1BUiA9IGFyCi1BUkZMQUdTID0gY3J1Ci1saWJvcHRfX19hX0FSID0gJChBUikgJChBUkZMQUdTKQotbGlib3B0X19fYV9MSUJBREQgPQotYW1fbGlib3B0X19fYV9PQkpFQ1RTID0gcG9wdF9vcHRpb25zLiQoT0JKRVhUKQotbGlib3B0X19fYV9PQkpFQ1RTID0gJChhbV9saWJvcHRfX19hX09CSkVDVFMpCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAotCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCi1DWFhMRCA9ICQoQ1hYKQotQ1hYTElOSyA9ICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLVNPVVJDRVMgPSAkKGxpYm9wdF9fX2FfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGlib3B0X19fYV9TT1VSQ0VTKQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1PQyA9IEBNT0NACi1NT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACi1PQkpFWFQgPSBAT0JKRVhUQAotT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKLU9QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAotT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLU9QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBPUFRfTElCUyA9IEBQT1BUX0xJQlNACi1QVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKLVFUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAotUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAotUVRfTElCID0gQFFUX0xJQkAKLVFUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACi1TVFJJUCA9IEBTVFJJUEAKLVVJQyA9IEBVSUNACi1WRVJTSU9OID0gQFZFUlNJT05ACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACi1YX0xJQlMgPSBAWF9MSUJTQAotWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1kYXRhZGlyID0gQGRhdGFkaXJACi1lbmFibGVfYWJpX0ZBTFNFID0gQGVuYWJsZV9hYmlfRkFMU0VACi1lbmFibGVfYWJpX1RSVUUgPSBAZW5hYmxlX2FiaV9UUlVFQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1oYXZlX3F0X0ZBTFNFID0gQGhhdmVfcXRfRkFMU0VACi1oYXZlX3F0X1RSVUUgPSBAaGF2ZV9xdF9UUlVFQAotaGF2ZV94c2x0cHJvY19GQUxTRSA9IEBoYXZlX3hzbHRwcm9jX0ZBTFNFQAotaGF2ZV94c2x0cHJvY19UUlVFID0gQGhhdmVfeHNsdHByb2NfVFJVRUAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWtlcm5lbF9zdXBwb3J0X0ZBTFNFID0gQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAota2VybmVsX3N1cHBvcnRfVFJVRSA9IEBrZXJuZWxfc3VwcG9ydF9UUlVFQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdG9wZGlyID0gQHRvcGRpckAKLUFNX0NQUEZMQUdTID0gLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCi1BTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLW5vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcHQrKy5hCi1saWJvcHRfX19hX1NPVVJDRVMgPSBwb3B0X29wdGlvbnMuY3BwIHBvcHRfb3B0aW9ucy5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jcHAgLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgbGlib3B0KysvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYm9wdCsrL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi1jbGVhbi1ub2luc3RMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQobm9pbnN0X0xJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xJQlJBUklFUykKLWxpYm9wdCsrLmE6ICQobGlib3B0X19fYV9PQkpFQ1RTKSAkKGxpYm9wdF9fX2FfREVQRU5ERU5DSUVTKSAKLQktcm0gLWYgbGlib3B0KysuYQotCSQobGlib3B0X19fYV9BUikgbGlib3B0KysuYSAkKGxpYm9wdF9fX2FfT0JKRUNUUykgJChsaWJvcHRfX19hX0xJQkFERCkKLQkkKFJBTkxJQikgbGlib3B0KysuYQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcG9wdF9vcHRpb25zLlBvQGFtX19xdW90ZUAKLQotLmNwcC5vOgotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACWlmICQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jcHAub2JqOgotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACWlmICQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotdW5pbnN0YWxsLWluZm8tYW06Ci0KLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKLQotVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKLQlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKLQkgICAgZGlyPSIvJCRkaXIiOyBcCi0JICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKLQkgIGVsc2UgXAotCSAgICBkaXI9Jyc7IFwKLQkgIGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbm9pbnN0TElCUkFSSUVTIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1ub2luc3RMSUJSQVJJRVMgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKLQlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIFwKLQl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcCBiL2xpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NjBlMmUuLjAwMDAwMDAKLS0tIGEvbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyMSArMCwwIEBACi0vKioKLSAqIEBmaWxlIHBvcHRfb3B0aW9ucy5jcHAKLSAqIG9wdGlvbiBwYXJzaW5nCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi0jaW5jbHVkZSAib3BfcG9wdC5oIgotI2luY2x1ZGUgIm9wX3ZlcnNpb24uaCIKLQotI2luY2x1ZGUgInBvcHRfb3B0aW9ucy5oIgotI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgcG9wdCB7Ci0gCi0vKioKLSAqIG9wdGlvbl9iYXNlIC0gYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50YXRpb24gb2YgYSBjb21tYW5kIGxpbmUgb3B0aW9uCi0gKgotICogRXZlcnkgY29tbWFuZCBsaW5lIG9wdGlvbiBhZGRlZCBiZWZvcmUgY2FsbGluZyBwYXJzZV9vcHRpb25zKCkKLSAqIGlzIG9mIHRoaXMgdHlwZS4KLSAqLwotY2xhc3Mgb3B0aW9uX2Jhc2UgewotcHVibGljOgotCS8qKgotCSAqIG9wdGlvbl9iYXNlIC0gY29uc3RydWN0IGFuIG9wdGlvbiB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLgotCSAqIEBwYXJhbSBvcHRpb25fbmFtZSBuYW1lIHBhcnQgb2YgbG9uZyBmb3JtIGUuZy4gLS1vcHRpb24KLQkgKiBAcGFyYW0gc2hvcnRfbmFtZSBzaG9ydCBmb3JtIG5hbWUgZS5nLiAtbwotCSAqIEBwYXJhbSBoZWxwX3N0ciBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9uCi0JICogQHBhcmFtIGFyZ19oZWxwX3N0ciBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnQgKGlmIGFueSkKLQkgKiBAcGFyYW0gZGF0YSBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gZmlsbCBpbgotCSAqIEBwYXJhbSBwb3B0X2ZsYWdzIHRoZSBwb3B0IGxpYnJhcnkgZGF0YSB0eXBlCi0JICovCi0Jb3B0aW9uX2Jhc2UoY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLCBjaGFyIHNob3J0X25hbWUsCi0JCSAgICBjaGFyIGNvbnN0ICogaGVscF9zdHIsIGNoYXIgY29uc3QgKiBhcmdfaGVscF9zdHIsCi0JCSAgICB2b2lkICogZGF0YSwgaW50IHBvcHRfZmxhZ3MpOwotCi0JdmlydHVhbCB+b3B0aW9uX2Jhc2UoKSB7fQotCi0JLyoqCi0JICogcG9zdF9wcm9jZXNzIC0gcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IHBvc3QtcHJvY2Vzc2luZwotCSAqLwotCXZpcnR1YWwgdm9pZCBwb3N0X3Byb2Nlc3MoKSB7fQotCi1wcm90ZWN0ZWQ6Ci0JY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lOwotfTsKLQotCi0vKiogdGhlIHBvcHQgYXJyYXkgc2luZ2xldG9uIG9wdGlvbnMgKi8KLXN0YXRpYyB2ZWN0b3I8cG9wdE9wdGlvbj4gcG9wdF9vcHRpb25zOwotc3RhdGljIHZlY3RvcjxvcHRpb25fYmFzZSAqPiBvcHRpb25zX2xpc3Q7Ci0KLXN0YXRpYyBpbnQgc2hvd3ZlcnM7Ci0KLXN0YXRpYyBzdHJ1Y3QgcG9wdE9wdGlvbiBhcHBlbmRlZF9vcHRpb25zW10gPSB7Ci0JeyAidmVyc2lvbiIsICd2JywgUE9QVF9BUkdfTk9ORSwgJnNob3d2ZXJzLCAwLCAic2hvdyB2ZXJzaW9uIiwgTlVMTCwgfSwKLQlQT1BUX0FVVE9IRUxQCi0JUE9QVF9UQUJMRUVORAotCX07Ci0KLQotLyogb3B0aW9ucyBwYXJhbWV0ZXIgY2FuJ3QgYmUgYSBsb2NhbCB2YXJpYWJsZSBiZWNhdXNlIGNhbGxlciBjYW4gdXNlIHRoZQotICogcmV0dXJuZWQgcG9wdENvbnRleHQgd2hpY2ggY29udGFpbnMgIHBvaW50ZXIgaW5zaWRlIHRoZSBvcHRpb25zIGFycmF5ICovCi1zdGF0aWMgcG9wdENvbnRleHQgZG9fcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhciBjb25zdCAqKiBhcmd2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHBvcHRPcHRpb24+ICYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+ICYgYWRkaXRpb25hbF9wYXJhbXMpCi17Ci0Jb3B0aW9ucyA9IHBvcHRfb3B0aW9uczsKLQotCWludCBjb25zdCBucl9hcHBlbmRlZF9vcHRpb25zID0KLQkJc2l6ZW9mKGFwcGVuZGVkX29wdGlvbnMpIC8gc2l6ZW9mKGFwcGVuZGVkX29wdGlvbnNbMF0pOwotCi0Jb3B0aW9ucy5pbnNlcnQob3B0aW9ucy5lbmQoKSwgYXBwZW5kZWRfb3B0aW9ucywKLQkJICAgICAgIGFwcGVuZGVkX29wdGlvbnMgKyBucl9hcHBlbmRlZF9vcHRpb25zKTsKLQotCXBvcHRDb250ZXh0IGNvbiA9IG9wX3BvcHRHZXRDb250ZXh0KE5VTEwsIGFyZ2MsIGFyZ3YsICZvcHRpb25zWzBdLCAwKTsKLQotCWlmIChzaG93dmVycykgewotCQlzaG93X3ZlcnNpb24oYXJndlswXSk7Ci0JfQotCi0JY2hhciBjb25zdCAqIGZpbGU7Ci0Jd2hpbGUgKChmaWxlID0gcG9wdEdldEFyZyhjb24pKSAhPSAwKSB7Ci0JCWFkZGl0aW9uYWxfcGFyYW1zLnB1c2hfYmFjayhmaWxlKTsKLQl9Ci0KLQlmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBvcHRpb25zX2xpc3Quc2l6ZSgpIDsgKytpKSB7Ci0JCW9wdGlvbnNfbGlzdFtpXS0+cG9zdF9wcm9jZXNzKCk7Ci0JfQotCi0JcmV0dXJuIGNvbjsKLX0KLQotCi12b2lkIHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIgY29uc3QgKiogYXJndiwKLSAgICAgICAgICAgICAgICAgICB2ZWN0b3I8c3RyaW5nPiAmIGFkZGl0aW9uYWxfcGFyYW1zKQotewotCXZlY3Rvcjxwb3B0T3B0aW9uPiBvcHRpb25zOwotCi0JcG9wdENvbnRleHQgY29uID0KLQkJZG9fcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBhZGRpdGlvbmFsX3BhcmFtcyk7Ci0KLQlwb3B0RnJlZUNvbnRleHQoY29uKTsKLX0KLQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mgb3B0aW9uX2ltcDsKLQotCi0vKioKLSAqIG9wdGlvbjx2b2lkPiAtIGEgYmluYXJ5IG9wdGlvbgotICoKLSAqIFVzZSB0aGlzIG9wdGlvbiB0eXBlIGZvciBjb25zdHJ1Y3Rpbmcgc3BlY2lmaWVkIC8gbm90LXNwZWNpZmllZAotICogb3B0aW9ucyBlLmcuIC0tZnJvYgotICovCi10ZW1wbGF0ZSA8PiBjbGFzcyBvcHRpb25faW1wPHZvaWQ+IDogcHVibGljIG9wdGlvbl9iYXNlIHsKLXB1YmxpYzoKLQlvcHRpb25faW1wKGJvb2wgJiB2YWx1ZSwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLCBjaGFyIHNob3J0X25hbWUsCi0JICAgICAgICAgICBjaGFyIGNvbnN0ICogaGVscF9zdHIpOwotCi0Jfm9wdGlvbl9pbXAoKSB7fQotCi0Jdm9pZCBwb3N0X3Byb2Nlc3MoKTsKLQotcHJpdmF0ZToKLQlib29sICYgdmFsdWU7Ci0JaW50IHBvcHRfdmFsdWU7Ci19OwotCi0KLS8qKgotICogb3B0aW9uPGludD4gLSBhIGludGVnZXIgb3B0aW9uCi0gKgotICogVXNlIHRoaXMgZm9yIG9wdGlvbnMgdGFraW5nIGFuIGludGVnZXIgZS5nLiAtLWZyb2IgNgotICovCi10ZW1wbGF0ZSA8PiBjbGFzcyBvcHRpb25faW1wPGludD4gOiBwdWJsaWMgb3B0aW9uX2Jhc2UgewotcHVibGljOgotCW9wdGlvbl9pbXAoaW50ICYgdmFsdWUsIGNoYXIgY29uc3QgKiBvcHRpb25fbmFtZSwgY2hhciBzaG9ydF9uYW1lLAotCSAgICAgICAgICAgY2hhciBjb25zdCAqIGhlbHBfc3RyLCBjaGFyIGNvbnN0ICogYXJnX2hlbHBfc3RyKTsKLQotCX5vcHRpb25faW1wKCkge30KLX07Ci0KLQotLyoqCi0gKiBvcHRpb248c3RyaW5nPiAtIGEgc3RyaW5nIG9wdGlvbgotICoKLSAqIFVzZSB0aGlzIGZvciBvcHRpb25zIHRha2luZyBhIHN0cmluZyBlLmcuIC0tZnJvYiBwYXJzbGV5Ci0gKi8KLXRlbXBsYXRlIDw+IGNsYXNzIG9wdGlvbl9pbXA8c3RyaW5nPiA6IHB1YmxpYyBvcHRpb25fYmFzZSB7Ci1wdWJsaWM6Ci0Jb3B0aW9uX2ltcChzdHJpbmcgJiB2YWx1ZSwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLAotCSAgICAgICAgICAgY2hhciBzaG9ydF9uYW1lLCBjaGFyIGNvbnN0ICogaGVscF9zdHIsCi0JICAgICAgICAgICBjaGFyIGNvbnN0ICogYXJnX2hlbHBfc3RyKTsKLQotCXZvaWQgcG9zdF9wcm9jZXNzKCk7Ci0KLQl+b3B0aW9uX2ltcCgpIHt9Ci0KLXByaXZhdGU6Ci0JLy8gd2UgbmVlZCBhbiBpbnRlcm1lZGlhdGUgY2hhciBhcnJheSB0byBwYXNzIHRvIHBvcHQgbGlicwotCWNoYXIgKiBwb3B0X3ZhbHVlOwotCXN0cmluZyAmIHZhbHVlOwotfTsKLQotCi0vKioKLSAqIG9wdGlvbjwgdmVjdG9yPHN0cmluZz4gPiAtIGEgc3RyaW5nIHZlY3RvciBvcHRpb24KLSAqCi0gKiBVc2UgdGhpcyBmb3Igb3B0aW9ucyB0YWtpbmcgYSBudW1iZXIgb2Ygc3RyaW5nIGFyZ3VtZW50cywKLSAqIHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4gc2VwYXJhdG9yLgotICovCi10ZW1wbGF0ZSA8PiBjbGFzcyBvcHRpb25faW1wPCB2ZWN0b3I8c3RyaW5nPiA+IDogcHVibGljIG9wdGlvbl9iYXNlIHsKLXB1YmxpYzoKLQlvcHRpb25faW1wKHZlY3RvcjxzdHJpbmc+ICYgdmFsdWUsCi0JICAgICAgICAgICBjaGFyIGNvbnN0ICogb3B0aW9uX25hbWUsIGNoYXIgc2hvcnRfbmFtZSwKLQkgICAgICAgICAgIGNoYXIgY29uc3QgKiBoZWxwX3N0ciwgY2hhciBjb25zdCAqIGFyZ19oZWxwX3N0ciwKLQkgICAgICAgICAgIGNoYXIgc2VwYXJhdG9yID0gJywnKTsKLQotCXZvaWQgcG9zdF9wcm9jZXNzKCk7Ci0KLQl+b3B0aW9uX2ltcCgpIHt9Ci0KLXByaXZhdGU6Ci0JdmVjdG9yPHN0cmluZz4gJiB2YWx1ZTsKLQkvLyB3ZSBuZWVkIGFuIGludGVybWVkaWF0ZSBjaGFyIGFycmF5IHRvIHBhc3MgdG8gcG9wdCBsaWJzCi0JY2hhciAqIHBvcHRfdmFsdWU7Ci0JY2hhciBjb25zdCBzZXBhcmF0b3I7Ci19OwotCi0KLW9wdGlvbjo6fm9wdGlvbigpCi17Ci0JZGVsZXRlIHRoZV9vcHRpb247Ci19Ci0KLQotLy8vIG5vbiB0ZW1wbGF0aXplZCBjdG9yIGZvciBib29sZWFuIG9wdGlvbgotb3B0aW9uOjpvcHRpb24oYm9vbCAmIHZhbHVlLCBjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLCBjaGFyIGNvbnN0ICogaGVscCkKLQk6IHRoZV9vcHRpb24obmV3IG9wdGlvbl9pbXA8dm9pZD4odmFsdWUsIG5hbWUsIHNob3J0X25hbWUsIGhlbHApKQotewotfQotCi0KLS8vLyBzcGVjaWFsaXphdGlvbiBvZiBvcHRpb24gY3RvciBmb3IgaW50ZWdlciBvcHRpb24KLXRlbXBsYXRlIDw+Ci1vcHRpb246Om9wdGlvbihpbnQgJiB2YWx1ZSwgY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgc2hvcnRfbmFtZSwKLSAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBoZWxwLCBjaGFyIGNvbnN0ICogYXJnX2hlbHApCi0JOiB0aGVfb3B0aW9uKG5ldyBvcHRpb25faW1wPGludD4KLQkJCSh2YWx1ZSwgbmFtZSwgc2hvcnRfbmFtZSwgaGVscCwgYXJnX2hlbHApKQotewotfQotCi0KLS8vLyBzcGVjaWFsaXphdGlvbiBvZiBvcHRpb24gY3RvciBmb3Igc3RyaW5nIG9wdGlvbgotdGVtcGxhdGUgPD4KLW9wdGlvbjo6b3B0aW9uKHN0cmluZyAmIHZhbHVlLCBjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLAotICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGhlbHAsIGNoYXIgY29uc3QgKiBhcmdfaGVscCkKLQk6IHRoZV9vcHRpb24obmV3IG9wdGlvbl9pbXA8c3RyaW5nPgotCQkJKHZhbHVlLCBuYW1lLCBzaG9ydF9uYW1lLCBoZWxwLCBhcmdfaGVscCkpCi17Ci19Ci0KLQotLy8vIHNwZWNpYWxpemF0aW9uIG9mIG9wdGlvbiBjdG9yIGZvciB2ZWN0b3I8c3RyaW5nPiBvcHRpb24KLXRlbXBsYXRlIDw+Ci1vcHRpb246Om9wdGlvbih2ZWN0b3I8c3RyaW5nPiAmIHZhbHVlLCBjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLAotICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGhlbHAsIGNoYXIgY29uc3QgKiBhcmdfaGVscCkKLQk6IHRoZV9vcHRpb24obmV3IG9wdGlvbl9pbXA8IHZlY3RvcjxzdHJpbmc+ID4KLQkJCSh2YWx1ZSwgbmFtZSwgc2hvcnRfbmFtZSwgaGVscCwgYXJnX2hlbHApKQotewotfQotCi0KLW9wdGlvbl9iYXNlOjpvcHRpb25fYmFzZShjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBoZWxwLCBjaGFyIGNvbnN0ICogYXJnX2hlbHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIGRhdGEsIGludCBwb3B0X2ZsYWdzKQotCTogb3B0aW9uX25hbWUobmFtZSkKLXsKLQlwb3B0T3B0aW9uIGNvbnN0IG9wdCA9IHsgbmFtZSwgc2hvcnRfbmFtZSwgcG9wdF9mbGFncywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgMCwgaGVscCwgYXJnX2hlbHAgfTsKLQotCXBvcHRfb3B0aW9ucy5wdXNoX2JhY2sob3B0KTsKLQotCW9wdGlvbnNfbGlzdC5wdXNoX2JhY2sodGhpcyk7Ci19Ci0KLQotb3B0aW9uX2ltcDx2b2lkPjo6b3B0aW9uX2ltcChib29sICYgdmFsLCBjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogaGVscCkKLQk6IG9wdGlvbl9iYXNlKG5hbWUsIHNob3J0X25hbWUsIGhlbHAsIDAsICZwb3B0X3ZhbHVlLCBQT1BUX0FSR19OT05FKSwKLQkgIHZhbHVlKHZhbCksIHBvcHRfdmFsdWUoMCkKLXsKLX0KLQotCi12b2lkIG9wdGlvbl9pbXA8dm9pZD46OnBvc3RfcHJvY2VzcygpCi17Ci0JaWYgKHBvcHRfdmFsdWUpIHsKLQkJaWYgKGlzX3ByZWZpeChvcHRpb25fbmFtZSwgIm5vLSIpKQotCQkJdmFsdWUgPSAhcG9wdF92YWx1ZTsKLQkJZWxzZSAKLQkJCXZhbHVlID0gcG9wdF92YWx1ZTsKLQl9Ci19Ci0KLQotb3B0aW9uX2ltcDxpbnQ+OjpvcHRpb25faW1wKGludCAmIHZhbHVlLCBjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBoZWxwLCBjaGFyIGNvbnN0ICogYXJnX2hlbHApCi0JOiBvcHRpb25fYmFzZShuYW1lLCBzaG9ydF9uYW1lLCBoZWxwLCBhcmdfaGVscCwgJnZhbHVlLCBQT1BUX0FSR19JTlQpCi17Ci19Ci0KLQotb3B0aW9uX2ltcDxzdHJpbmc+OjpvcHRpb25faW1wKHN0cmluZyAmIHZhbCwgY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgc2hvcnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogaGVscCwgY2hhciBjb25zdCAqIGFyZ19oZWxwKQotCTogb3B0aW9uX2Jhc2UobmFtZSwgc2hvcnRfbmFtZSwgaGVscCwgYXJnX2hlbHAsCi0gICAgICAgICAgICAgICAgICAgICAgJnBvcHRfdmFsdWUsIFBPUFRfQVJHX1NUUklORyksCi0JICBwb3B0X3ZhbHVlKDApLCB2YWx1ZSh2YWwpCi17Ci19Ci0KLQotdm9pZCBvcHRpb25faW1wPHN0cmluZz46OnBvc3RfcHJvY2VzcygpCi17Ci0JaWYgKHBvcHRfdmFsdWUpIHsKLQkJdmFsdWUgPSBwb3B0X3ZhbHVlOwotCQlwb3B0X3ZhbHVlID0gMDsKLQl9Ci19Ci0KLQotb3B0aW9uX2ltcDwgdmVjdG9yPHN0cmluZz4gPjo6b3B0aW9uX2ltcCh2ZWN0b3I8c3RyaW5nPiAmIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgc2hvcnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGhlbHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBhcmdfaGVscCwgY2hhciBzZXBjaGFyKQotCTogb3B0aW9uX2Jhc2UobmFtZSwgc2hvcnRfbmFtZSwgaGVscCwgYXJnX2hlbHAsCi0JICAgICAgICAgICAgICAmcG9wdF92YWx1ZSwgUE9QVF9BUkdfU1RSSU5HKSwKLQkgIHZhbHVlKHZhbCksIHBvcHRfdmFsdWUoMCksIHNlcGFyYXRvcihzZXBjaGFyKQotewotfQotCi0KLXZvaWQgb3B0aW9uX2ltcDwgdmVjdG9yPHN0cmluZz4gPjo6cG9zdF9wcm9jZXNzKCkKLXsKLQlpZiAocG9wdF92YWx1ZSkgewotCQl2YWx1ZSA9IHNlcGFyYXRlX3Rva2VuKHBvcHRfdmFsdWUsIHNlcGFyYXRvcik7Ci0KLQkJcG9wdF92YWx1ZSA9IDA7Ci0JfQotfQotCi19IC8vIG5hbWVzcGFjZSBwb3B0CmRpZmYgLS1naXQgYS9saWJvcHQrKy9wb3B0X29wdGlvbnMuaCBiL2xpYm9wdCsrL3BvcHRfb3B0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjcyYWE2Li4wMDAwMDAwCi0tLSBhL2xpYm9wdCsrL3BvcHRfb3B0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKgotICogQGZpbGUgcG9wdF9vcHRpb25zLmgKLSAqIG9wdGlvbiBwYXJzaW5nCi0gKgotICogVGhpcyBwcm92aWRlcyBhIHNpbXBsZSBmYWNpbGl0eSBmb3IgYWRkaW5nIGNvbW1hbmQtbGluZQotICogb3B0aW9ucywgYW5kIHBhcnNpbmcgdGhlbS4KLSAqCi0gKiBZb3UgY2FuIGFkZCBhIG51bWJlciBvZiBvcHRpb25zIGFuZCB0aGVuIGNhbGwgcGFyc2Vfb3B0aW9ucygpCi0gKiB0byBwcm9jZXNzIHRoZW0sIGZvciBleGFtcGxlIDoKLSAqCi0gKiBcY29kZQotICogYm9vbCBhbGxvd19mcm9iOwotICogc3RyaW5nIGZyb2I7Ci0gKiBzdGF0aWMgcG9wdDo6b3B0aW9uIGFsbG93X2Zyb2Jfb3B0KGFsbG93X2Zyb2IsICJhbGxvdy1mcm9iIiwgJ2EnLCAiYWxsb3cgZnJvYnMiKTsKLSAqIHN0YXRpYyBwb3B0OjpvcHRpb24gZnJvYl9vcHQoZnJvYiwgImZyb2IiLCAnZicsICJ3aGF0IHRvIGZyb2IiLCAibmFtZSIpOwotICoKLSAqIC4uLgotICogcG9wdDo6cGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBhZGRfcGFyYW1zKTsKLSAqIFxlbmRjb2RlCi0gKgotICogTm90ZSB0aGFuIGlmIHlvdSB0cnkgdG8gaW1wbGVtZW50IGFuIG9wdGlvbiBmb3IgYW4gdW5zdXBwb3J0ZWQgdHlwZSAgbGlrZSA6Ci0gKiBcY29kZQotICogc3RhdGljIHVuc2lnbmVkIGludCBpOwotICogc3RhdGljIHBvcHQ6Om9wdGlvbiBpX29wdChpLCAuLi4uKTsKLSAqIFxlbmRjb2RlCi0gKiB5b3UgZG9uJ3QgZ2V0IGEgY29tcGlsZSB0aW1lIGVycm9yIGJ1dCBhIGxpbmsgdGltZSBlcnJvci4KLSAqCi0gKiBUaGUgY2FsbCB0byBwYXJzZV9vcHRpb25zKCkgd2lsbCBmaWxsIGluIGFsbG93X2Zyb2IgYW5kIGZyb2IsIGlmIHRoZXkKLSAqIGFyZSBwYXNzZWQgdG8gdGhlIHByb2dyYW0gKG15ZnJvYmJlciAtLWFsbG93LWZyb2IgLS1mcm9iIGZvbyksIGFuZCBwbGFjZQotICogYW55IGxlZnQgb3ZlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGluIHRoZSBhZGRfcGFyYW1zIHZlY3Rvci4gTm90ZQotICogdGhhdCB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyIGRlbm90ZXMgdGhlIHR5cGUgb2YgdGhlIG9wdGlvbiBhcmd1bWVudC4KLSAqCi0gKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdHlwZSBpcyBib29sLCBvcHRpb24gc3RhcnRpbmcgd2l0aCAibm8tIiBwcmVmaXgKLSAqIGFyZSBpbXBsaWNpdGVseSBjb25zaWRlcmVkIGFzIG5lZ2F0ZWQgYmVmb3JlIHdyaXRpbmcgdGhlIGFzc29jaWF0ZWQgYm9vbCBzbwotICogdGhpcyB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQ6Ci0gKiBcY29kZQotICogYm9vbCBkZW1hbmdsZTsKLSAqIHBvcHQ6Om9wdGlvbihkZW1hbmdsZSwgImRlbWFuZ2xlIiwgJ2QnLCAiZGVtYW5nbGUgQysrIHN5bWJvbHMiKSwKLSAqIHBvcHQ6Om9wdGlvbihkZW1hbmdsZSwgIm5vLWRlbWFuZ2xlIiwgJ1wwJywgImRvbid0IGRlbWFuZ2xlIEMrKyBzeW1ib2xzIiksCi0gKiBcZW5kY29kZQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgUE9QVF9PUFRJT05TX0gKLSNkZWZpbmUgUE9QVF9PUFRJT05TX0gKLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBwb3B0IHsKLSAKLS8qKgotICogcGFyc2Vfb3B0aW9ucyAtIHBhcnNlIGNvbW1hbmQgbGluZSBvcHRpb25zCi0gKiBAcGFyYW0gYXJnYyBsaWtlIHRoZSBwYXJhbWV0ZXIgb2YgbWFpbigpCi0gKiBAcGFyYW0gYXJndiBsaWtlIHRoZSBwYXJhbWV0ZXIgb2YgbWFpbigpCi0gKiBAcGFyYW0gYWRkaXRpb25hbF9wYXJhbXMgYWRkaXRpb25hbCBvcHRpb25zIGFyZSBzdG9yZWQgaGVyZQotICoKLSAqIFBhcnNlIHRoZSBnaXZlbiBjb21tYW5kIGxpbmUgd2l0aCB0aGUgcHJldmlvdXMKLSAqIG9wdGlvbnMgY3JlYXRlZC4gTXVsdGlwbGUgYWRkaXRpb25hbCBhcmd1bWVudHMKLSAqIHRoYXQgYXJlIG5vdCByZWNvZ25pc2VkIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGFkZGl0aW9uYWxfcGFyYW1zCi0gKiB2ZWN0b3IuCi0gKi8KLXZvaWQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhciBjb25zdCAqKiBhcmd2LAotICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmIGFkZGl0aW9uYWxfcGFyYW1zKTsKLQotY2xhc3Mgb3B0aW9uX2Jhc2U7Ci0KLS8qKgotICogb3B0aW9uIC0gYmFzZSBjbGFzcyBmb3IgYSBjb21tYW5kIGxpbmUgb3B0aW9uCi0gKgotICogRXZlcnkgY29tbWFuZCBsaW5lIG9wdGlvbiBhZGRlZCBiZWZvcmUgY2FsbGluZyBwYXJzZV9vcHRpb25zKCkKLSAqIGlzIG9mIHRoaXMgdHlwZS4KLSAqLwotY2xhc3Mgb3B0aW9uIHsKLXB1YmxpYzoKLQkvKioKLQkgKiBUZW1wbGF0aXplZCBjb25zdHJ1Y3RvciBmb3IgYW4gb3B0aW9uLiBUaGlzIGFkZHMgdGhlIG9wdGlvbgotCSAqIHRvIHRoZSBvcHRpb24gbGlzdCBvbiBjb25zdHJ1Y3Rpb24uIFRoaXMgaXMgc3BlY2lhbGl6ZWQgZm9yCi0JICogZWFjaCByZWNvZ25pc2VkIG9wdGlvbiB2YWx1ZSB0eXBlIGJlbG93LgotCSAqLwotCXRlbXBsYXRlIDxjbGFzcyBUPiBvcHRpb24oVCAmLCBjaGFyIGNvbnN0ICogb3B0aW9uX25hbWUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHNob3J0X25hbWUsIGNoYXIgY29uc3QgKiBoZWxwX3N0ciwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBhcmdfaGVscF9zdHIpOwotCi0JLyoqCi0JICogYm9vbGVhbiBvcGVyYXRpb25zIGRvbid0IGdldCB0aGUgc2FtZSBzZXQgb2YgcGFyYW1ldGVycyBhcyBvdGhlcgotCSAqIG9wdGlvbiwgYXMgdGhlcmUgaXMgbm8gYXJndW1lbnQgdG8gZ2l2ZSBoZWxwIGZvci4KLQkgKiBEdWUgdG8gYSBidWcgaW4gZ2NjIDIuOTUgd2UgY2FuJ3QgdXNlIGEgZGVmYXVsdCBwYXJhbWV0ZXIKLQkgKiBpbiB0aGUgdGVtcGxhdGl6ZWQgY3RvciBhYm92ZSBiZWNhdXNlIDIuOTUgaXMgdW5hYmxlIHRvIG1hdGNoCi0JICogdGhlIHJpZ2h0IGN0b3IuIFNvIG9uIHdlIGFkZCBhIG5vbi10ZW1wbGF0aXplZCBjdG9yIHdpdGggYW4gZXhhY3QKLQkgKiBtYXRjaCBmb3IgYm9vbGVhbiBvcHRpb24uCi0JICovCi0Jb3B0aW9uKGJvb2wgJiwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLAotCSAgICAgICBjaGFyIHNob3J0X25hbWUsIGNoYXIgY29uc3QgKiBoZWxwX3N0cik7Ci0KLQl+b3B0aW9uKCk7Ci0KLXByaXZhdGU6Ci0Jb3B0aW9uX2Jhc2UgKiB0aGVfb3B0aW9uOwotfTsKLQotCi0vKioKLSAqIFRoZSBzdXBwb3J0ZWQgb3B0aW9uIHR5cGUsIGJvb2xlYW4gb3B0aW9uIGFyZSBtYXRjaGVkIGJ5IGEgbm9uIHRlbXBsYXRpemVkCi0gKiBjdG9yIGFib3ZlLgotICovCi10ZW1wbGF0ZSA8PiBvcHRpb246Om9wdGlvbihpbnQgJiwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLCBjaGFyIHNob3J0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogaGVscF9zdHIsIGNoYXIgY29uc3QgKiBhcmdfaGVscF9zdHIpOwotdGVtcGxhdGUgPD4gb3B0aW9uOjpvcHRpb24oc3RkOjpzdHJpbmcgJiwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBzaG9ydF9uYW1lLCBjaGFyIGNvbnN0ICogaGVscF9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogYXJnX2hlbHBfc3RyKTsKLXRlbXBsYXRlIDw+IG9wdGlvbjo6b3B0aW9uKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLCBjaGFyIHNob3J0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogaGVscF9zdHIsIGNoYXIgY29uc3QgKiBhcmdfaGVscF9zdHIpOwotCi19IC8vIG5hbWVzcGFjZSBwb3B0Ci0KLSNlbmRpZiAvLyBQT1BUX09QVElPTlNfSApkaWZmIC0tZ2l0IGEvbGlicG9wdC9BbmRyb2lkLm1rIGIvbGlicG9wdC9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMGNmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJwb3B0L0FuZHJvaWQubWsKQEAgLTAsMCArMSwxNSBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTOj0gXAorCWZpbmRtZS5jIFwKKwlwb3B0LmMgXAorCXBvcHRjb25maWcuYyBcCisJcG9wdGhlbHAuYyBcCisJcG9wdHBhcnNlLmMKKworTE9DQUxfQ0ZMQUdTICs9IC1ESEFWRV9DT05GSUdfSAorCitMT0NBTF9NT0RVTEUgOj0gbGlicG9wdAorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9saWJwb3B0L2NvbmZpZy5oIGIvbGlicG9wdC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2EwODE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicG9wdC9jb25maWcuaApAQCAtMCwwICsxLDMyOSBAQAorLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKy8qIERlZmluZSB0byBvbmUgb2YgYF9nZXRiNjcnLCBgR0VUQjY3JywgYGdldGI2NycgZm9yIENyYXktMiBhbmQgQ3JheS1ZTVAKKyAgIHN5c3RlbXMuIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGBhbGxvY2EuYycgc3VwcG9ydCBvbiB0aG9zZSBzeXN0ZW1zLgorICAgKi8KKyN1bmRlZiBDUkFZX1NUQUNLU0VHX0VORAorCisvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyBgYWxsb2NhLmMnLiAqLworI3VuZGVmIENfQUxMT0NBCisKKy8qIERlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUKKyAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KKyN1bmRlZiBFTkFCTEVfTkxTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGBhbGxvY2EnLCBhcyBhIGZ1bmN0aW9uIG9yIG1hY3JvLiAqLworI3VuZGVmIEhBVkVfQUxMT0NBCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIDxhbGxvY2EuaD4gYW5kIGl0IHNob3VsZCBiZSB1c2VkIChub3Qgb24gVWx0cml4KS4KKyAgICovCisjdW5kZWYgSEFWRV9BTExPQ0FfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFyZ3ouaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BUkdaX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhc3ByaW50ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BU1BSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZQorICAgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworI3VuZGVmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluCisgICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworI3VuZGVmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRQorCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLgorICAgKi8KKyN1bmRlZiBIQVZFX0RDR0VUVEVYVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZlb2ZfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9GRU9GX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZmdldHNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGdldGNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgX3NucHJpbnRmJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgX3Nud3ByaW50ZicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX19TTldQUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RMRkNOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmbG9hdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GTE9BVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmd3ByaW50ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GV1BSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGN3ZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRDV0QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRlZ2lkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEVHSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRldWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEVVSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRnaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUR0lECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGFnZXNpemUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUEFHRVNJWkUKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuICovCisjdW5kZWYgSEFWRV9HRVRURVhUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFVJRAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JQ09OVgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi4gKi8KKyN1bmRlZiBIQVZFX0lOVE1BWF9UCisKKy8qIERlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPi4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKworLyogRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQKKyAgIGRlY2xhcmVzIHVpbnRtYXhfdC4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLiAqLworI3VuZGVmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorCisvKiBEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy4gKi8KKyN1bmRlZiBIQVZFX0xDX01FU1NBR0VTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliaW50bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJQklOVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTE9DQUxFX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnbG9uZyBkb3VibGUnIHR5cGUuICovCisjdW5kZWYgSEFWRV9MT05HX0RPVUJMRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGxvbmcnIHR5cGUuICovCisjZGVmaW5lIEhBVkVfTE9OR19MT05HIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWxsb2MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUFMTE9DX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1jaGVjay5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01DSEVDS19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1wY3B5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NRU1QQ1BZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGBtbWFwJyBzeXN0ZW0gY2FsbC4gKi8KKyNkZWZpbmUgSEFWRV9NTUFQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtdHJhY2UnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTVRSQUNFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbXVubWFwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NVU5NQVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5sX3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkxfVFlQRVNfSAorCisvKiBEZWZpbmUgaWYgeW91ciBwcmludGYoKSBmdW5jdGlvbiBzdXBwb3J0cyBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy4gKi8KKyNkZWZpbmUgSEFWRV9QT1NJWF9QUklOVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB1dGVudicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QVVRFTlYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlbnYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VURU5WCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVExPQ0FMRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJlZ2lkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVFJFR0lECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc25wcmludGYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NOUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRkZWYuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1REREVGX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisKKy8qIERlZmluZSBpZiA8c3RkaW50Lmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcworICAgdWludG1heF90LiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHBjcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RQQ1BZCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkRVUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJFUlJPUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG91bCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJUT1VMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1BBUkFNX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRzZWFyY2gnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVFNFQVJDSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1aW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uICovCisjdW5kZWYgSEFWRV9VSU5UTUFYX1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1bnNpZ25lZCBsb25nIGxvbmcnIHR5cGUuICovCisjdW5kZWYgSEFWRV9VTlNJR05FRF9MT05HX0xPTkcKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2NoYXJfdCcgdHlwZS4gKi8KKyN1bmRlZiBIQVZFX1dDSEFSX1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3NsZW4nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV0NTTEVOCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS4gKi8KKyN1bmRlZiBIQVZFX1dJTlRfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9fYXJnel9jb3VudCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9fX0FSR1pfQ09VTlQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX2FyZ3pfbmV4dCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9fX0FSR1pfTkVYVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9fYXJnel9zdHJpbmdpZnknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfX19BUkdaX1NUUklOR0lGWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9fZnNldGxvY2tpbmcnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfX19GU0VUTE9DS0lORworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9fc2VjdXJlX2dldGVudicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9fX1NFQ1VSRV9HRVRFTlYKKworLyogRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0LiAqLworI3VuZGVmIElDT05WX0NPTlNUCisKKy8qIERlZmluZSBpZiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuICovCisjdW5kZWYgSU5URElWMF9SQUlTRVNfU0lHRlBFCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJwb3B0IgorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1NUUklORworCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisKKy8qIEZ1bGwgcGF0aCB0byBwb3B0IHRvcF9zcmNkaXIuICovCisjdW5kZWYgUE9QVF9TT1VSQ0VfUEFUSAorCisvKiBEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy4gKi8KKyN1bmRlZiBQUklfTUFDUk9TX0JST0tFTgorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgQyBjb21waWxlciBzdXBwb3J0cyBmdW5jdGlvbiBwcm90b3R5cGVzLiAqLworI3VuZGVmIFBST1RPVFlQRVMKKworLyogRGVmaW5lIGFzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHR5cGUgJ3NpemVfdCcsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUKKyAgIGl0LiAqLworI3VuZGVmIFNJWkVfTUFYCisKKy8qIElmIHVzaW5nIHRoZSBDIGltcGxlbWVudGF0aW9uIG9mIGFsbG9jYSwgZGVmaW5lIGlmIHlvdSBrbm93IHRoZQorICAgZGlyZWN0aW9uIG9mIHN0YWNrIGdyb3d0aCBmb3IgeW91ciBzeXN0ZW07IG90aGVyd2lzZSBpdCB3aWxsIGJlCisgICBhdXRvbWF0aWNhbGx5IGRlZHVjZWQgYXQgcnVuLXRpbWUuCisJU1RBQ0tfRElSRUNUSU9OID4gMCA9PiBncm93cyB0b3dhcmQgaGlnaGVyIGFkZHJlc3NlcworCVNUQUNLX0RJUkVDVElPTiA8IDAgPT4gZ3Jvd3MgdG93YXJkIGxvd2VyIGFkZHJlc3NlcworCVNUQUNLX0RJUkVDVElPTiA9IDAgPT4gZGlyZWN0aW9uIG9mIGdyb3d0aCB1bmtub3duICovCisjdW5kZWYgU1RBQ0tfRElSRUNUSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyN1bmRlZiBfTEFSR0VfRklMRVMKKworLyogRGVmaW5lIGxpa2UgUFJPVE9UWVBFUzsgdGhpcyBjYW4gYmUgdXNlZCBieSBzeXN0ZW0gaGVhZGVycy4gKi8KKyN1bmRlZiBfX1BST1RPVFlQRVMKKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisjdW5kZWYgY29uc3QKKworLyogRGVmaW5lIHRvIGBfX2lubGluZV9fJyBvciBgX19pbmxpbmUnIGlmIHRoYXQncyB3aGF0IHRoZSBDIGNvbXBpbGVyCisgICBjYWxscyBpdCwgb3IgdG8gbm90aGluZyBpZiAnaW5saW5lJyBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIGFueSBuYW1lLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyN1bmRlZiBpbmxpbmUKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIG9mZl90CisKKy8qIERlZmluZSBhcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIHR3byBwb2ludGVycywgaWYgdGhlIHN5c3RlbQorICAgZG9lc24ndCBkZWZpbmUgaXQuICovCisjdW5kZWYgcHRyZGlmZl90CisKKy8qIERlZmluZSB0byBlbXB0eSBpZiB0aGUgQyBjb21waWxlciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBrZXl3b3JkLiAqLworI3VuZGVmIHNpZ25lZAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKKworLyogRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nIGlmIDxzdGRpbnQuaD4gYW5kCisgICA8aW50dHlwZXMuaD4gZG9uJ3QgZGVmaW5lLiAqLworI3VuZGVmIHVpbnRtYXhfdApkaWZmIC0tZ2l0IGEvbGlicG9wdC9maW5kbWUuYyBiL2xpYnBvcHQvZmluZG1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzNjNlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnBvcHQvZmluZG1lLmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxmaWxlIHBvcHQvZmluZG1lLmMKKyAqLworCisvKiAoQykgMTk5OC0yMDAyIFJlZCBIYXQsIEluYy4gLS0gTGljZW5zaW5nIGRldGFpbHMgYXJlIGluIHRoZSBDT1BZSU5HCisgICBmaWxlIGFjY29tcGFueWluZyBwb3B0IHNvdXJjZSBkaXN0cmlidXRpb25zLCBhdmFpbGFibGUgZnJvbSAKKyAgIGZ0cDovL2Z0cC5ycG0ub3JnL3B1Yi9ycG0vZGlzdC4gKi8KKworI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgImZpbmRtZS5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitjb25zdCBjaGFyICogZmluZFByb2dyYW1QYXRoKGNvbnN0IGNoYXIgKiBhcmd2MCkKK3sKKyAgICBjaGFyICogcGF0aCA9IGdldGVudigiUEFUSCIpOworICAgIGNoYXIgKiBwYXRoYnVmOworICAgIGNoYXIgKiBzdGFydCwgKiBjaHB0cjsKKyAgICBjaGFyICogYnVmOworCisgICAgaWYgKGFyZ3YwID09IE5VTEwpIHJldHVybiBOVUxMOwkvKiBYWFggY2FuJ3QgaGFwcGVuICovCisgICAgLyogSWYgdGhlcmUgaXMgYSAvIGluIHRoZSBhcmd2WzBdLCBpdCBoYXMgdG8gYmUgYW4gYWJzb2x1dGUgcGF0aCAqLworICAgIGlmIChzdHJjaHIoYXJndjAsICcvJykpCisJcmV0dXJuIHhzdHJkdXAoYXJndjApOworCisgICAgaWYgKHBhdGggPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgICBzdGFydCA9IHBhdGhidWYgPSBhbGxvY2Eoc3RybGVuKHBhdGgpICsgMSk7CisgICAgYnVmID0gbWFsbG9jKHN0cmxlbihwYXRoKSArIHN0cmxlbihhcmd2MCkgKyBzaXplb2YoIi8iKSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKSByZXR1cm4gTlVMTDsJLyogWFhYIGNhbid0IGhhcHBlbiAqLworICAgIHN0cmNweShwYXRoYnVmLCBwYXRoKTsKKworICAgIGNocHRyID0gTlVMTDsKKyAgICAvKkAtYnJhbmNoc3RhdGVAKi8KKyAgICBkbyB7CisJaWYgKChjaHB0ciA9IHN0cmNocihzdGFydCwgJzonKSkpCisJICAgICpjaHB0ciA9ICdcMCc7CisJc3ByaW50ZihidWYsICIlcy8lcyIsIHN0YXJ0LCBhcmd2MCk7CisKKwlpZiAoIWFjY2VzcyhidWYsIFhfT0spKQorCSAgICByZXR1cm4gYnVmOworCisJaWYgKGNocHRyKSAKKwkgICAgc3RhcnQgPSBjaHB0ciArIDE7CisJZWxzZQorCSAgICBzdGFydCA9IE5VTEw7CisgICAgfSB3aGlsZSAoc3RhcnQgJiYgKnN0YXJ0KTsKKyAgICAvKkA9YnJhbmNoc3RhdGVAKi8KKworICAgIGZyZWUoYnVmKTsKKworICAgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbGlicG9wdC9maW5kbWUuaCBiL2xpYnBvcHQvZmluZG1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxNmI4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnBvcHQvZmluZG1lLmgKQEAgLTAsMCArMSwyMCBAQAorLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxmaWxlIHBvcHQvZmluZG1lLmgKKyAqLworCisvKiAoQykgMTk5OC0yMDAwIFJlZCBIYXQsIEluYy4gLS0gTGljZW5zaW5nIGRldGFpbHMgYXJlIGluIHRoZSBDT1BZSU5HCisgICBmaWxlIGFjY29tcGFueWluZyBwb3B0IHNvdXJjZSBkaXN0cmlidXRpb25zLCBhdmFpbGFibGUgZnJvbSAKKyAgIGZ0cDovL2Z0cC5ycG0ub3JnL3B1Yi9ycG0vZGlzdC4gKi8KKworI2lmbmRlZiBIX0ZJTkRNRQorI2RlZmluZSBIX0ZJTkRNRQorCisvKioKKyAqIFJldHVybiBhYnNvbHV0ZSBwYXRoIHRvIGV4ZWN1dGFibGUgYnkgc2VhcmNoaW5nIFBBVEguCisgKiBAcGFyYW0gYXJndjAJCW5hbWUgb2YgZXhlY3V0YWJsZQorICogQHJldHVybgkJKG1hbGxvYydkKSBhYnNvbHV0ZSBwYXRoIHRvIGV4ZWN1dGFibGUgKG9yIE5VTEwpCisgKi8KKy8qQG51bGxAKi8gY29uc3QgY2hhciAqIGZpbmRQcm9ncmFtUGF0aCgvKkBudWxsQCovIGNvbnN0IGNoYXIgKiBhcmd2MCkKKwkvKkAqLzsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJwb3B0L3BvcHQuYyBiL2xpYnBvcHQvcG9wdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWUzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJwb3B0L3BvcHQuYwpAQCAtMCwwICsxLDEyNjIgQEAKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcZmlsZSBwb3B0L3BvcHQuYworICovCisKKy8qIChDKSAxOTk4LTIwMDIgUmVkIEhhdCwgSW5jLiAtLSBMaWNlbnNpbmcgZGV0YWlscyBhcmUgaW4gdGhlIENPUFlJTkcKKyAgIGZpbGUgYWNjb21wYW55aW5nIHBvcHQgc291cmNlIGRpc3RyaWJ1dGlvbnMsIGF2YWlsYWJsZSBmcm9tCisgICBmdHA6Ly9mdHAucnBtLm9yZy9wdWIvcnBtL2Rpc3QgKi8KKworI3VuZGVmCU1ZREVCVUcKKworI2luY2x1ZGUgInN5c3RlbS5oIgorCisjaWYgSEFWRV9GTE9BVF9ICisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZpbmRtZS5oIgorI2luY2x1ZGUgInBvcHRpbnQuaCIKKworI2lmZGVmCU1ZREVCVUcKKy8qQHVuY2hlY2tlZEAqLworaW50IF9wb3B0X2RlYnVnID0gMDsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSEFWRV9TVFJFUlJPUikgJiYgIWRlZmluZWQoX19MQ0xJTlRfXykKK3N0YXRpYyBjaGFyICogc3RyZXJyb3IoaW50IGVycm5vKQoreworICAgIGV4dGVybiBpbnQgc3lzX25lcnI7CisgICAgZXh0ZXJuIGNoYXIgKiBzeXNfZXJybGlzdFtdOworCisgICAgaWYgKCgwIDw9IGVycm5vKSAmJiAoZXJybm8gPCBzeXNfbmVycikpCisJcmV0dXJuIHN5c19lcnJsaXN0W2Vycm5vXTsKKyAgICBlbHNlCisJcmV0dXJuIFBPUFRfKCJ1bmtub3duIGVycm5vIik7Cit9CisjZW5kaWYKKworI2lmZGVmIE1ZREVCVUcKKy8qQHVudXNlZEAqLworc3RhdGljIHZvaWQgcHJ0Y29uKGNvbnN0IGNoYXIgKm1zZywgcG9wdENvbnRleHQgY29uKQoreworICAgIGlmIChtc2cpIGZwcmludGYoc3RkZXJyLCAiJXMiLCBtc2cpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHRjb24gJXAgb3MgJXAgbmV4dENoYXJBcmcgXCIlc1wiIG5leHRBcmcgXCIlc1wiIGFyZ3ZbJWRdIFwiJXNcIlxuIiwKKwljb24sIGNvbi0+b3MsCisJKGNvbi0+b3MtPm5leHRDaGFyQXJnID8gY29uLT5vcy0+bmV4dENoYXJBcmcgOiAiIiksCisJKGNvbi0+b3MtPm5leHRBcmcgPyBjb24tPm9zLT5uZXh0QXJnIDogIiIpLAorCWNvbi0+b3MtPm5leHQsCisJKGNvbi0+b3MtPmFyZ3YgJiYgY29uLT5vcy0+YXJndltjb24tPm9zLT5uZXh0XQorCQk/IGNvbi0+b3MtPmFyZ3ZbY29uLT5vcy0+bmV4dF0gOiAiIikpOworfQorI2VuZGlmCisKK3ZvaWQgcG9wdFNldEV4ZWNQYXRoKHBvcHRDb250ZXh0IGNvbiwgY29uc3QgY2hhciAqIHBhdGgsIGludCBhbGxvd0Fic29sdXRlKQoreworICAgIGNvbi0+ZXhlY1BhdGggPSBfZnJlZShjb24tPmV4ZWNQYXRoKTsKKyAgICBjb24tPmV4ZWNQYXRoID0geHN0cmR1cChwYXRoKTsKKyAgICBjb24tPmV4ZWNBYnNvbHV0ZSA9IGFsbG93QWJzb2x1dGU7CisgICAgLypALW51bGxzdGF0ZUAqLyAvKiBMQ0w6IGNvbi0+ZXhlY1BhdGggbm90IE5VTEwgKi8KKyAgICByZXR1cm47CisgICAgLypAPW51bGxzdGF0ZUAqLworfQorCitzdGF0aWMgdm9pZCBpbnZva2VDYWxsYmFja3NQUkUocG9wdENvbnRleHQgY29uLCBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCkKKwkvKkBnbG9iYWxzIGludGVybmFsU3RhdGVAKi8KKwkvKkBtb2RpZmllcyBpbnRlcm5hbFN0YXRlQCovCit7CisgICAgaWYgKG9wdCAhPSBOVUxMKQorICAgIGZvciAoOyBvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lIHx8IG9wdC0+YXJnOyBvcHQrKykgeworCWlmIChvcHQtPmFyZyA9PSBOVUxMKSBjb250aW51ZTsJCS8qIFhYWCBwcm9ncmFtIGVycm9yLiAqLworCWlmICgob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgPT0gUE9QVF9BUkdfSU5DTFVERV9UQUJMRSkgeworCSAgICB2b2lkICogYXJnID0gb3B0LT5hcmc7CisvKkAtYnJhbmNoc3RhdGVAKi8KKwkgICAgLyogWFhYIHNpY2sgaGFjayB0byBwcmVzZXJ2ZSBwcmV0ZW5zZSBvZiBBQkkuICovCisJICAgIGlmIChhcmcgPT0gcG9wdEhlbHBPcHRpb25zKSBhcmcgPSBwb3B0SGVscE9wdGlvbnNJMThOOworLypAPWJyYW5jaHN0YXRlQCovCisJICAgIC8qIFJlY3Vyc2Ugb24gaW5jbHVkZWQgc3ViLXRhYmxlcy4gKi8KKwkgICAgaW52b2tlQ2FsbGJhY2tzUFJFKGNvbiwgYXJnKTsKKwl9IGVsc2UgaWYgKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSA9PSBQT1BUX0FSR19DQUxMQkFDSyAmJgorCQkgICAob3B0LT5hcmdJbmZvICYgUE9QVF9DQkZMQUdfUFJFKSkKKwl7ICAgLypALWNhc3RmY25wdHJAKi8KKwkgICAgcG9wdENhbGxiYWNrVHlwZSBjYiA9IChwb3B0Q2FsbGJhY2tUeXBlKW9wdC0+YXJnOworCSAgICAvKkA9Y2FzdGZjbnB0ckAqLworCSAgICAvKiBQZXJmb3JtIGNhbGxiYWNrLiAqLworCSAgICAvKkAtbm9lZmZlY3R1bmNvbiBAKi8KKwkgICAgY2IoY29uLCBQT1BUX0NBTExCQUNLX1JFQVNPTl9QUkUsIE5VTEwsIE5VTEwsIG9wdC0+ZGVzY3JpcCk7CisJICAgIC8qQD1ub2VmZmVjdHVuY29uIEAqLworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGludm9rZUNhbGxiYWNrc1BPU1QocG9wdENvbnRleHQgY29uLCBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCkKKwkvKkBnbG9iYWxzIGludGVybmFsU3RhdGVAKi8KKwkvKkBtb2RpZmllcyBpbnRlcm5hbFN0YXRlQCovCit7CisgICAgaWYgKG9wdCAhPSBOVUxMKQorICAgIGZvciAoOyBvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lIHx8IG9wdC0+YXJnOyBvcHQrKykgeworCWlmIChvcHQtPmFyZyA9PSBOVUxMKSBjb250aW51ZTsJCS8qIFhYWCBwcm9ncmFtIGVycm9yLiAqLworCWlmICgob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgPT0gUE9QVF9BUkdfSU5DTFVERV9UQUJMRSkgeworCSAgICB2b2lkICogYXJnID0gb3B0LT5hcmc7CisvKkAtYnJhbmNoc3RhdGVAKi8KKwkgICAgLyogWFhYIHNpY2sgaGFjayB0byBwcmVzZXJ2ZSBwcmV0ZW5zZSBvZiBBQkkuICovCisJICAgIGlmIChhcmcgPT0gcG9wdEhlbHBPcHRpb25zKSBhcmcgPSBwb3B0SGVscE9wdGlvbnNJMThOOworLypAPWJyYW5jaHN0YXRlQCovCisJICAgIC8qIFJlY3Vyc2Ugb24gaW5jbHVkZWQgc3ViLXRhYmxlcy4gKi8KKwkgICAgaW52b2tlQ2FsbGJhY2tzUE9TVChjb24sIGFyZyk7CisJfSBlbHNlIGlmICgob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgPT0gUE9QVF9BUkdfQ0FMTEJBQ0sgJiYKKwkJICAgKG9wdC0+YXJnSW5mbyAmIFBPUFRfQ0JGTEFHX1BPU1QpKQorCXsgICAvKkAtY2FzdGZjbnB0ckAqLworCSAgICBwb3B0Q2FsbGJhY2tUeXBlIGNiID0gKHBvcHRDYWxsYmFja1R5cGUpb3B0LT5hcmc7CisJICAgIC8qQD1jYXN0ZmNucHRyQCovCisJICAgIC8qIFBlcmZvcm0gY2FsbGJhY2suICovCisJICAgIC8qQC1ub2VmZmVjdHVuY29uIEAqLworCSAgICBjYihjb24sIFBPUFRfQ0FMTEJBQ0tfUkVBU09OX1BPU1QsIE5VTEwsIE5VTEwsIG9wdC0+ZGVzY3JpcCk7CisJICAgIC8qQD1ub2VmZmVjdHVuY29uIEAqLworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGludm9rZUNhbGxiYWNrc09QVElPTihwb3B0Q29udGV4dCBjb24sCisJCQkJICBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogbXlPcHQsCisJCQkJICAvKkBudWxsQCovIGNvbnN0IHZvaWQgKiBteURhdGEsIGludCBzaG9ydHkpCisJLypAZ2xvYmFscyBpbnRlcm5hbFN0YXRlQCovCisJLypAbW9kaWZpZXMgaW50ZXJuYWxTdGF0ZUAqLworeworICAgIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogY2JvcHQgPSBOVUxMOworCisgICAgaWYgKG9wdCAhPSBOVUxMKQorICAgIGZvciAoOyBvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lIHx8IG9wdC0+YXJnOyBvcHQrKykgeworCWlmICgob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgPT0gUE9QVF9BUkdfSU5DTFVERV9UQUJMRSkgeworCSAgICB2b2lkICogYXJnID0gb3B0LT5hcmc7CisvKkAtYnJhbmNoc3RhdGVAKi8KKwkgICAgLyogWFhYIHNpY2sgaGFjayB0byBwcmVzZXJ2ZSBwcmV0ZW5zZSBvZiBBQkkuICovCisJICAgIGlmIChhcmcgPT0gcG9wdEhlbHBPcHRpb25zKSBhcmcgPSBwb3B0SGVscE9wdGlvbnNJMThOOworLypAPWJyYW5jaHN0YXRlQCovCisJICAgIC8qIFJlY3Vyc2Ugb24gaW5jbHVkZWQgc3ViLXRhYmxlcy4gKi8KKwkgICAgaWYgKG9wdC0+YXJnICE9IE5VTEwpCS8qIFhYWCBwcm9ncmFtIGVycm9yICovCisJCWludm9rZUNhbGxiYWNrc09QVElPTihjb24sIG9wdC0+YXJnLCBteU9wdCwgbXlEYXRhLCBzaG9ydHkpOworCX0gZWxzZSBpZiAoKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHX01BU0spID09IFBPUFRfQVJHX0NBTExCQUNLICYmCisJCSAgIShvcHQtPmFyZ0luZm8gJiBQT1BUX0NCRkxBR19TS0lQT1BUSU9OKSkgeworCSAgICAvKiBTYXZlIGNhbGxiYWNrIGluZm8uICovCisJICAgIGNib3B0ID0gb3B0OworCX0gZWxzZSBpZiAoY2JvcHQgIT0gTlVMTCAmJgorCQkgICAoKG15T3B0LT5zaG9ydE5hbWUgJiYgb3B0LT5zaG9ydE5hbWUgJiYgc2hvcnR5ICYmCisJCQlteU9wdC0+c2hvcnROYW1lID09IG9wdC0+c2hvcnROYW1lKSB8fAorCQkgICAgKG15T3B0LT5sb25nTmFtZSAmJiBvcHQtPmxvbmdOYW1lICYmCisJCS8qQC1udWxscGFzc0AqLwkJLyogTENMOiBvcHQtPmxvbmdOYW1lICE9IE5VTEwgKi8KKwkJCSFzdHJjbXAobXlPcHQtPmxvbmdOYW1lLCBvcHQtPmxvbmdOYW1lKSkpCisJCS8qQD1udWxscGFzc0AqLworCQkgICApCisJeyAgIC8qQC1jYXN0ZmNucHRyQCovCisJICAgIHBvcHRDYWxsYmFja1R5cGUgY2IgPSAocG9wdENhbGxiYWNrVHlwZSljYm9wdC0+YXJnOworCSAgICAvKkA9Y2FzdGZjbnB0ckAqLworCSAgICBjb25zdCB2b2lkICogY2JEYXRhID0gKGNib3B0LT5kZXNjcmlwID8gY2JvcHQtPmRlc2NyaXAgOiBteURhdGEpOworCSAgICAvKiBQZXJmb3JtIGNhbGxiYWNrLiAqLworCSAgICBpZiAoY2IgIT0gTlVMTCkgewkvKiBYWFggcHJvZ3JhbSBlcnJvciAqLworCQkvKkAtbm9lZmZlY3R1bmNvbiBAKi8KKwkJY2IoY29uLCBQT1BUX0NBTExCQUNLX1JFQVNPTl9PUFRJT04sIG15T3B0LAorCQkJY29uLT5vcy0+bmV4dEFyZywgY2JEYXRhKTsKKwkJLypAPW5vZWZmZWN0dW5jb24gQCovCisJICAgIH0KKwkgICAgLyogVGVybWluYXRlICh1bmxlc3MgZXhwbGNpdGx5IGNvbnRpbnVpbmcpLiAqLworCSAgICBpZiAoIShjYm9wdC0+YXJnSW5mbyAmIFBPUFRfQ0JGTEFHX0NPTlRJTlVFKSkKKwkJcmV0dXJuOworCX0KKyAgICB9Cit9CisKK3BvcHRDb250ZXh0IHBvcHRHZXRDb250ZXh0KGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2LAorCQkJICAgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHRpb25zLCBpbnQgZmxhZ3MpCit7CisgICAgcG9wdENvbnRleHQgY29uID0gbWFsbG9jKHNpemVvZigqY29uKSk7CisKKyAgICBpZiAoY29uID09IE5VTEwpIHJldHVybiBOVUxMOwkvKiBYWFggY2FuJ3QgaGFwcGVuICovCisgICAgbWVtc2V0KGNvbiwgMCwgc2l6ZW9mKCpjb24pKTsKKworICAgIGNvbi0+b3MgPSBjb24tPm9wdGlvblN0YWNrOworICAgIGNvbi0+b3MtPmFyZ2MgPSBhcmdjOworICAgIC8qQC1kZXBlbmRlbnR0cmFucyAtYXNzaWduZXhwb3NlQCovCS8qIEZJWDogVzJETz8gKi8KKyAgICBjb24tPm9zLT5hcmd2ID0gYXJndjsKKyAgICAvKkA9ZGVwZW5kZW50dHJhbnMgPWFzc2lnbmV4cG9zZUAqLworICAgIGNvbi0+b3MtPmFyZ2IgPSBOVUxMOworCisgICAgaWYgKCEoZmxhZ3MgJiBQT1BUX0NPTlRFWFRfS0VFUF9GSVJTVCkpCisJY29uLT5vcy0+bmV4dCA9IDE7CQkJLyogc2tpcCBhcmd2WzBdICovCisKKyAgICBjb24tPmxlZnRvdmVycyA9IGNhbGxvYyggKGFyZ2MgKyAxKSwgc2l6ZW9mKCpjb24tPmxlZnRvdmVycykgKTsKKyAgICAvKkAtZGVwZW5kZW50dHJhbnMgLWFzc2lnbmV4cG9zZUAqLwkvKiBGSVg6IFcyRE8/ICovCisgICAgY29uLT5vcHRpb25zID0gb3B0aW9uczsKKyAgICAvKkA9ZGVwZW5kZW50dHJhbnMgPWFzc2lnbmV4cG9zZUAqLworICAgIGNvbi0+YWxpYXNlcyA9IE5VTEw7CisgICAgY29uLT5udW1BbGlhc2VzID0gMDsKKyAgICBjb24tPmZsYWdzID0gZmxhZ3M7CisgICAgY29uLT5leGVjcyA9IE5VTEw7CisgICAgY29uLT5udW1FeGVjcyA9IDA7CisgICAgY29uLT5maW5hbEFyZ3ZBbGxvY2VkID0gYXJnYyAqIDI7CisgICAgY29uLT5maW5hbEFyZ3YgPSBjYWxsb2MoIGNvbi0+ZmluYWxBcmd2QWxsb2NlZCwgc2l6ZW9mKCpjb24tPmZpbmFsQXJndikgKTsKKyAgICBjb24tPmV4ZWNBYnNvbHV0ZSA9IDE7CisgICAgY29uLT5hcmdfc3RyaXAgPSBOVUxMOworCisgICAgaWYgKGdldGVudigiUE9TSVhMWV9DT1JSRUNUIikgfHwgZ2V0ZW52KCJQT1NJWF9NRV9IQVJERVIiKSkKKwljb24tPmZsYWdzIHw9IFBPUFRfQ09OVEVYVF9QT1NJWE1FSEFSREVSOworCisgICAgaWYgKG5hbWUpIHsKKwljaGFyICogdCA9IG1hbGxvYyhzdHJsZW4obmFtZSkgKyAxKTsKKwlpZiAodCkgY29uLT5hcHBOYW1lID0gc3RyY3B5KHQsIG5hbWUpOworICAgIH0KKworICAgIC8qQC1pbnRlcm5hbGdsb2JzQCovCisgICAgaW52b2tlQ2FsbGJhY2tzUFJFKGNvbiwgY29uLT5vcHRpb25zKTsKKyAgICAvKkA9aW50ZXJuYWxnbG9ic0AqLworCisgICAgcmV0dXJuIGNvbjsKK30KKworc3RhdGljIHZvaWQgY2xlYW5PU0UoLypAc3BlY2lhbEAqLyBzdHJ1Y3Qgb3B0aW9uU3RhY2tFbnRyeSAqb3MpCisJLypAdXNlcyBvcyBAKi8KKwkvKkByZWxlYXNlcyBvcy0+bmV4dEFyZywgb3MtPmFyZ3YsIG9zLT5hcmdiIEAqLworCS8qQG1vZGlmaWVzIG9zIEAqLworeworICAgIG9zLT5uZXh0QXJnID0gX2ZyZWUob3MtPm5leHRBcmcpOworICAgIG9zLT5hcmd2ID0gX2ZyZWUob3MtPmFyZ3YpOworICAgIG9zLT5hcmdiID0gUEJNX0ZSRUUob3MtPmFyZ2IpOworfQorCisvKkAtYm91bmRzd3JpdGVAKi8KK3ZvaWQgcG9wdFJlc2V0Q29udGV4dChwb3B0Q29udGV4dCBjb24pCit7CisgICAgaW50IGk7CisKKyAgICBpZiAoY29uID09IE5VTEwpIHJldHVybjsKKyAgICB3aGlsZSAoY29uLT5vcyA+IGNvbi0+b3B0aW9uU3RhY2spIHsKKwljbGVhbk9TRShjb24tPm9zLS0pOworICAgIH0KKyAgICBjb24tPm9zLT5hcmdiID0gUEJNX0ZSRUUoY29uLT5vcy0+YXJnYik7CisgICAgY29uLT5vcy0+Y3VyckFsaWFzID0gTlVMTDsKKyAgICBjb24tPm9zLT5uZXh0Q2hhckFyZyA9IE5VTEw7CisgICAgY29uLT5vcy0+bmV4dEFyZyA9IE5VTEw7CisgICAgY29uLT5vcy0+bmV4dCA9IDE7CQkJLyogc2tpcCBhcmd2WzBdICovCisKKyAgICBjb24tPm51bUxlZnRvdmVycyA9IDA7CisgICAgY29uLT5uZXh0TGVmdG92ZXIgPSAwOworICAgIGNvbi0+cmVzdExlZnRvdmVyID0gMDsKKyAgICBjb24tPmRvRXhlYyA9IE5VTEw7CisKKyAgICBpZiAoY29uLT5maW5hbEFyZ3YgIT0gTlVMTCkKKyAgICBmb3IgKGkgPSAwOyBpIDwgY29uLT5maW5hbEFyZ3ZDb3VudDsgaSsrKSB7CisJLypALXVucXVhbGlmaWVkdHJhbnNAKi8JCS8qIEZJWDogdHlwZWRlZiBkb3VibGUgaW5kaXJlY3Rpb24uICovCisJY29uLT5maW5hbEFyZ3ZbaV0gPSBfZnJlZShjb24tPmZpbmFsQXJndltpXSk7CisJLypAPXVucXVhbGlmaWVkdHJhbnNAKi8KKyAgICB9CisKKyAgICBjb24tPmZpbmFsQXJndkNvdW50ID0gMDsKKyAgICBjb24tPmFyZ19zdHJpcCA9IFBCTV9GUkVFKGNvbi0+YXJnX3N0cmlwKTsKKyAgICAvKkAtbnVsbHN0YXRlQCovCS8qIEZJWDogY29uLT5maW5hbEFyZ3YgIT0gTlVMTCAqLworICAgIHJldHVybjsKKyAgICAvKkA9bnVsbHN0YXRlQCovCit9CisvKkA9Ym91bmRzd3JpdGVAKi8KKworLyogT25seSBvbmUgb2YgbG9uZ05hbWUsIHNob3J0TmFtZSBzaG91bGQgYmUgc2V0LCBub3QgYm90aC4gKi8KKy8qQC1ib3VuZHN3cml0ZUAqLworc3RhdGljIGludCBoYW5kbGVFeGVjKC8qQHNwZWNpYWxAKi8gcG9wdENvbnRleHQgY29uLAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiBsb25nTmFtZSwgY2hhciBzaG9ydE5hbWUpCisJLypAdXNlcyBjb24tPmV4ZWNzLCBjb24tPm51bUV4ZWNzLCBjb24tPmZsYWdzLCBjb24tPmRvRXhlYywKKwkJY29uLT5maW5hbEFyZ3YsIGNvbi0+ZmluYWxBcmd2QWxsb2NlZCwgY29uLT5maW5hbEFyZ3ZDb3VudCBAKi8KKwkvKkBtb2RpZmllcyBjb24gQCovCit7CisgICAgcG9wdEl0ZW0gaXRlbTsKKyAgICBpbnQgaTsKKworICAgIGlmIChjb24tPmV4ZWNzID09IE5VTEwgfHwgY29uLT5udW1FeGVjcyA8PSAwKSAvKiBYWFggY2FuJ3QgaGFwcGVuICovCisJcmV0dXJuIDA7CisKKyAgICBmb3IgKGkgPSBjb24tPm51bUV4ZWNzIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwlpdGVtID0gY29uLT5leGVjcyArIGk7CisJaWYgKGxvbmdOYW1lICYmICEoaXRlbS0+b3B0aW9uLmxvbmdOYW1lICYmCisJCQkhc3RyY21wKGxvbmdOYW1lLCBpdGVtLT5vcHRpb24ubG9uZ05hbWUpKSkKKwkgICAgY29udGludWU7CisJZWxzZSBpZiAoc2hvcnROYW1lICE9IGl0ZW0tPm9wdGlvbi5zaG9ydE5hbWUpCisJICAgIGNvbnRpbnVlOworCWJyZWFrOworICAgIH0KKyAgICBpZiAoaSA8IDApIHJldHVybiAwOworCisKKyAgICBpZiAoY29uLT5mbGFncyAmIFBPUFRfQ09OVEVYVF9OT19FWEVDKQorCXJldHVybiAxOworCisgICAgaWYgKGNvbi0+ZG9FeGVjID09IE5VTEwpIHsKKwljb24tPmRvRXhlYyA9IGNvbi0+ZXhlY3MgKyBpOworCXJldHVybiAxOworICAgIH0KKworICAgIC8qIFdlIGFscmVhZHkgaGF2ZSBhbiBleGVjIHRvIGRvOyByZW1lbWJlciB0aGlzIG9wdGlvbiBmb3IgbmV4dAorICAgICAgIHRpbWUgJ3JvdW5kICovCisgICAgaWYgKChjb24tPmZpbmFsQXJndkNvdW50ICsgMSkgPj0gKGNvbi0+ZmluYWxBcmd2QWxsb2NlZCkpIHsKKwljb24tPmZpbmFsQXJndkFsbG9jZWQgKz0gMTA7CisJY29uLT5maW5hbEFyZ3YgPSByZWFsbG9jKGNvbi0+ZmluYWxBcmd2LAorCQkJc2l6ZW9mKCpjb24tPmZpbmFsQXJndikgKiBjb24tPmZpbmFsQXJndkFsbG9jZWQpOworICAgIH0KKworICAgIGkgPSBjb24tPmZpbmFsQXJndkNvdW50Kys7CisgICAgaWYgKGNvbi0+ZmluYWxBcmd2ICE9IE5VTEwpCS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKyAgICB7CWNoYXIgKnMgID0gbWFsbG9jKChsb25nTmFtZSA/IHN0cmxlbihsb25nTmFtZSkgOiAwKSArIDMpOworCWlmIChzICE9IE5VTEwpIHsJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCSAgICBpZiAobG9uZ05hbWUpCisJCXNwcmludGYocywgIi0tJXMiLCBsb25nTmFtZSk7CisJICAgIGVsc2UKKwkJc3ByaW50ZihzLCAiLSVjIiwgc2hvcnROYW1lKTsKKwkgICAgY29uLT5maW5hbEFyZ3ZbaV0gPSBzOworCX0gZWxzZQorCSAgICBjb24tPmZpbmFsQXJndltpXSA9IE5VTEw7CisgICAgfQorCisgICAgLypALW51bGxzdGF0ZUAqLwkvKiBGSVg6IGNvbi0+ZmluYWxBcmd2W10gPT0gTlVMTCAqLworICAgIHJldHVybiAxOworICAgIC8qQD1udWxsc3RhdGVAKi8KK30KKy8qQD1ib3VuZHN3cml0ZUAqLworCisvKiBPbmx5IG9uZSBvZiBsb25nTmFtZSwgc2hvcnROYW1lIG1heSBiZSBzZXQgYXQgYSB0aW1lICovCitzdGF0aWMgaW50IGhhbmRsZUFsaWFzKC8qQHNwZWNpYWxAKi8gcG9wdENvbnRleHQgY29uLAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiBsb25nTmFtZSwgY2hhciBzaG9ydE5hbWUsCisJCS8qQGV4cG9zZWRAKi8gLypAbnVsbEAqLyBjb25zdCBjaGFyICogbmV4dENoYXJBcmcpCisJLypAdXNlcyBjb24tPmFsaWFzZXMsIGNvbi0+bnVtQWxpYXNlcywgY29uLT5vcHRpb25TdGFjaywgY29uLT5vcywKKwkJY29uLT5vcy0+Y3VyckFsaWFzLCBjb24tPm9zLT5jdXJyQWxpYXMtPm9wdGlvbi5sb25nTmFtZSBAKi8KKwkvKkBtb2RpZmllcyBjb24gQCovCit7CisgICAgcG9wdEl0ZW0gaXRlbSA9IGNvbi0+b3MtPmN1cnJBbGlhczsKKyAgICBpbnQgcmM7CisgICAgaW50IGk7CisKKyAgICBpZiAoaXRlbSkgeworCWlmIChsb25nTmFtZSAmJiAoaXRlbS0+b3B0aW9uLmxvbmdOYW1lICYmCisJCSFzdHJjbXAobG9uZ05hbWUsIGl0ZW0tPm9wdGlvbi5sb25nTmFtZSkpKQorCSAgICByZXR1cm4gMDsKKwlpZiAoc2hvcnROYW1lICYmIHNob3J0TmFtZSA9PSBpdGVtLT5vcHRpb24uc2hvcnROYW1lKQorCSAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoY29uLT5hbGlhc2VzID09IE5VTEwgfHwgY29uLT5udW1BbGlhc2VzIDw9IDApIC8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwlyZXR1cm4gMDsKKworICAgIGZvciAoaSA9IGNvbi0+bnVtQWxpYXNlcyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJaXRlbSA9IGNvbi0+YWxpYXNlcyArIGk7CisJaWYgKGxvbmdOYW1lICYmICEoaXRlbS0+b3B0aW9uLmxvbmdOYW1lICYmCisJCQkhc3RyY21wKGxvbmdOYW1lLCBpdGVtLT5vcHRpb24ubG9uZ05hbWUpKSkKKwkgICAgY29udGludWU7CisJZWxzZSBpZiAoc2hvcnROYW1lICE9IGl0ZW0tPm9wdGlvbi5zaG9ydE5hbWUpCisJICAgIGNvbnRpbnVlOworCWJyZWFrOworICAgIH0KKyAgICBpZiAoaSA8IDApIHJldHVybiAwOworCisgICAgaWYgKChjb24tPm9zIC0gY29uLT5vcHRpb25TdGFjayArIDEpID09IFBPUFRfT1BUSU9OX0RFUFRIKQorCXJldHVybiBQT1BUX0VSUk9SX09QVFNUT09ERUVQOworCisvKkAtYm91bmRzcmVhZEAqLworICAgIGlmIChuZXh0Q2hhckFyZyAmJiAqbmV4dENoYXJBcmcpCisJY29uLT5vcy0+bmV4dENoYXJBcmcgPSBuZXh0Q2hhckFyZzsKKy8qQD1ib3VuZHNyZWFkQCovCisKKyAgICBjb24tPm9zKys7CisgICAgY29uLT5vcy0+bmV4dCA9IDA7CisgICAgY29uLT5vcy0+c3R1ZmZlZCA9IDA7CisgICAgY29uLT5vcy0+bmV4dEFyZyA9IE5VTEw7CisgICAgY29uLT5vcy0+bmV4dENoYXJBcmcgPSBOVUxMOworICAgIGNvbi0+b3MtPmN1cnJBbGlhcyA9IGNvbi0+YWxpYXNlcyArIGk7CisgICAgcmMgPSBwb3B0RHVwQXJndihjb24tPm9zLT5jdXJyQWxpYXMtPmFyZ2MsIGNvbi0+b3MtPmN1cnJBbGlhcy0+YXJndiwKKwkJJmNvbi0+b3MtPmFyZ2MsICZjb24tPm9zLT5hcmd2KTsKKyAgICBjb24tPm9zLT5hcmdiID0gTlVMTDsKKworICAgIHJldHVybiAocmMgPyByYyA6IDEpOworfQorCisvKkAtYm91bmRzIC1ib3VuZHN3cml0ZSBAKi8KK3N0YXRpYyBpbnQgZXhlY0NvbW1hbmQocG9wdENvbnRleHQgY29uKQorCS8qQGdsb2JhbHMgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyBpbnRlcm5hbFN0YXRlIEAqLworeworICAgIHBvcHRJdGVtIGl0ZW0gPSBjb24tPmRvRXhlYzsKKyAgICBjb25zdCBjaGFyICoqIGFyZ3Y7CisgICAgaW50IGFyZ2MgPSAwOworICAgIGludCByYzsKKworICAgIGlmIChpdGVtID09IE5VTEwpIC8qWFhYIGNhbid0IGhhcHBlbiovCisJcmV0dXJuIFBPUFRfRVJST1JfTk9BUkc7CisKKyAgICBpZiAoaXRlbS0+YXJndiA9PSBOVUxMIHx8IGl0ZW0tPmFyZ2MgPCAxIHx8CisJKCFjb24tPmV4ZWNBYnNvbHV0ZSAmJiBzdHJjaHIoaXRlbS0+YXJndlswXSwgJy8nKSkpCisJICAgIHJldHVybiBQT1BUX0VSUk9SX05PQVJHOworCisgICAgYXJndiA9IG1hbGxvYyhzaXplb2YoKmFyZ3YpICoKKwkJCSg2ICsgaXRlbS0+YXJnYyArIGNvbi0+bnVtTGVmdG92ZXJzICsgY29uLT5maW5hbEFyZ3ZDb3VudCkpOworICAgIGlmIChhcmd2ID09IE5VTEwpIHJldHVybiBQT1BUX0VSUk9SX01BTExPQzsKKworICAgIGlmICghc3RyY2hyKGl0ZW0tPmFyZ3ZbMF0sICcvJykgJiYgY29uLT5leGVjUGF0aCAhPSBOVUxMKSB7CisJY2hhciAqcyA9IGFsbG9jYShzdHJsZW4oY29uLT5leGVjUGF0aCkgKyBzdHJsZW4oaXRlbS0+YXJndlswXSkgKyBzaXplb2YoIi8iKSk7CisJc3ByaW50ZihzLCAiJXMvJXMiLCBjb24tPmV4ZWNQYXRoLCBpdGVtLT5hcmd2WzBdKTsKKwlhcmd2W2FyZ2NdID0gczsKKyAgICB9IGVsc2UKKwlhcmd2W2FyZ2NdID0gZmluZFByb2dyYW1QYXRoKGl0ZW0tPmFyZ3ZbMF0pOworICAgIGlmIChhcmd2W2FyZ2MrK10gPT0gTlVMTCkgcmV0dXJuIFBPUFRfRVJST1JfTk9BUkc7CisKKyAgICBpZiAoaXRlbS0+YXJnYyA+IDEpIHsKKwltZW1jcHkoYXJndiArIGFyZ2MsIGl0ZW0tPmFyZ3YgKyAxLCBzaXplb2YoKmFyZ3YpICogKGl0ZW0tPmFyZ2MgLSAxKSk7CisJYXJnYyArPSAoaXRlbS0+YXJnYyAtIDEpOworICAgIH0KKworICAgIGlmIChjb24tPmZpbmFsQXJndiAhPSBOVUxMICYmIGNvbi0+ZmluYWxBcmd2Q291bnQgPiAwKSB7CisJbWVtY3B5KGFyZ3YgKyBhcmdjLCBjb24tPmZpbmFsQXJndiwKKwkJc2l6ZW9mKCphcmd2KSAqIGNvbi0+ZmluYWxBcmd2Q291bnQpOworCWFyZ2MgKz0gY29uLT5maW5hbEFyZ3ZDb3VudDsKKyAgICB9CisKKyAgICBpZiAoY29uLT5sZWZ0b3ZlcnMgIT0gTlVMTCAmJiBjb24tPm51bUxlZnRvdmVycyA+IDApIHsKKwltZW1jcHkoYXJndiArIGFyZ2MsIGNvbi0+bGVmdG92ZXJzLCBzaXplb2YoKmFyZ3YpICogY29uLT5udW1MZWZ0b3ZlcnMpOworCWFyZ2MgKz0gY29uLT5udW1MZWZ0b3ZlcnM7CisgICAgfQorCisgICAgYXJndlthcmdjXSA9IE5VTEw7CisKKyNpZiBkZWZpbmVkKGhwdXgpIHx8IGRlZmluZWQoX19ocHV4KQorICAgIHJjID0gc2V0cmVzZ2lkKGdldGdpZCgpLCBnZXRnaWQoKSwtMSk7CisgICAgaWYgKHJjKSByZXR1cm4gUE9QVF9FUlJPUl9FUlJOTzsKKyAgICByYyA9IHNldHJlc3VpZChnZXR1aWQoKSwgZ2V0dWlkKCksLTEpOworICAgIGlmIChyYykgcmV0dXJuIFBPUFRfRVJST1JfRVJSTk87CisjZWxzZQorLyoKKyAqIFhYWCAiIC4uLiBvbiBCU0Qgc3lzdGVtcyBzZXR1aWQoKSBzaG91bGQgYmUgcHJlZmVycmVkIG92ZXIgc2V0cmV1aWQoKSIKKyAqIFhYWCAJc2V6JyBUaW11ciBCYWtleWV2IDxtY0BiYXQucnU+CisgKiBYWFgJZnJvbSBOb3JiZXJ0IFdhcm11dGggPG53YXJtdXRoQHByaXZhdC5jaXJjdWxhci5kZT4KKyAqLworI2lmIGRlZmluZWQoSEFWRV9TRVRVSUQpCisgICAgcmMgPSBzZXRnaWQoZ2V0Z2lkKCkpOworICAgIGlmIChyYykgcmV0dXJuIFBPUFRfRVJST1JfRVJSTk87CisgICAgcmMgPSBzZXR1aWQoZ2V0dWlkKCkpOworICAgIGlmIChyYykgcmV0dXJuIFBPUFRfRVJST1JfRVJSTk87CisjZWxpZiBkZWZpbmVkIChIQVZFX1NFVFJFVUlEKQorICAgIHJjID0gc2V0cmVnaWQoZ2V0Z2lkKCksIGdldGdpZCgpKTsKKyAgICBpZiAocmMpIHJldHVybiBQT1BUX0VSUk9SX0VSUk5POworICAgIHJjID0gc2V0cmV1aWQoZ2V0dWlkKCksIGdldHVpZCgpKTsKKyAgICBpZiAocmMpIHJldHVybiBQT1BUX0VSUk9SX0VSUk5POworI2Vsc2UKKyAgICA7IC8qIENhbid0IGRyb3AgcHJpdmlsZWdlcyAqLworI2VuZGlmCisjZW5kaWYKKworICAgIGlmIChhcmd2WzBdID09IE5VTEwpCisJcmV0dXJuIFBPUFRfRVJST1JfTk9BUkc7CisKKyNpZmRlZglNWURFQlVHCitpZiAoX3BvcHRfZGVidWcpCisgICAgewljb25zdCBjaGFyICoqIGF2cDsKKwlmcHJpbnRmKHN0ZGVyciwgIj09PiBleGVjdnAoJXMpIGFyZ3ZbJWRdOiIsIGFyZ3ZbMF0sIGFyZ2MpOworCWZvciAoYXZwID0gYXJndjsgKmF2cDsgYXZwKyspCisJICAgIGZwcmludGYoc3RkZXJyLCAiICclcyciLCAqYXZwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgfQorI2VuZGlmCisKKyAgICByYyA9IGV4ZWN2cChhcmd2WzBdLCAoY2hhciAqY29uc3QgKilhcmd2KTsKKworICAgIHJldHVybiBQT1BUX0VSUk9SX0VSUk5POworfQorLypAPWJvdW5kcyA9Ym91bmRzd3JpdGUgQCovCisKKy8qQC1ib3VuZHN3cml0ZUAqLworLypAb2JzZXJ2ZXJAKi8gLypAbnVsbEAqLyBzdGF0aWMgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKgorZmluZE9wdGlvbihjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwgLypAbnVsbEAqLyBjb25zdCBjaGFyICogbG9uZ05hbWUsCisJCWNoYXIgc2hvcnROYW1lLAorCQkvKkBudWxsQCovIC8qQG91dEAqLyBwb3B0Q2FsbGJhY2tUeXBlICogY2FsbGJhY2ssCisJCS8qQG51bGxAKi8gLypAb3V0QCovIGNvbnN0IHZvaWQgKiogY2FsbGJhY2tEYXRhLAorCQlpbnQgc2luZ2xlRGFzaCkKKwkvKkBtb2RpZmllcyAqY2FsbGJhY2ssICpjYWxsYmFja0RhdGEgKi8KK3sKKyAgICBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIGNiID0gTlVMTDsKKworICAgIC8qIFRoaXMgaGFwcGVucyB3aGVuIGEgc2luZ2xlIC0gaXMgZ2l2ZW4gKi8KKyAgICBpZiAoc2luZ2xlRGFzaCAmJiAhc2hvcnROYW1lICYmIChsb25nTmFtZSAmJiAqbG9uZ05hbWUgPT0gJ1wwJykpCisJc2hvcnROYW1lID0gJy0nOworCisgICAgZm9yICg7IG9wdC0+bG9uZ05hbWUgfHwgb3B0LT5zaG9ydE5hbWUgfHwgb3B0LT5hcmc7IG9wdCsrKSB7CisKKwlpZiAoKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHX01BU0spID09IFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUpIHsKKwkgICAgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQyOworCSAgICB2b2lkICogYXJnID0gb3B0LT5hcmc7CisKKy8qQC1icmFuY2hzdGF0ZUAqLworCSAgICAvKiBYWFggc2ljayBoYWNrIHRvIHByZXNlcnZlIHByZXRlbnNlIG9mIEFCSS4gKi8KKwkgICAgaWYgKGFyZyA9PSBwb3B0SGVscE9wdGlvbnMpIGFyZyA9IHBvcHRIZWxwT3B0aW9uc0kxOE47CisvKkA9YnJhbmNoc3RhdGVAKi8KKwkgICAgLyogUmVjdXJzZSBvbiBpbmNsdWRlZCBzdWItdGFibGVzLiAqLworCSAgICBpZiAoYXJnID09IE5VTEwpIGNvbnRpbnVlOwkvKiBYWFggcHJvZ3JhbSBlcnJvciAqLworCSAgICBvcHQyID0gZmluZE9wdGlvbihhcmcsIGxvbmdOYW1lLCBzaG9ydE5hbWUsIGNhbGxiYWNrLAorCQkJICAgICAgY2FsbGJhY2tEYXRhLCBzaW5nbGVEYXNoKTsKKwkgICAgaWYgKG9wdDIgPT0gTlVMTCkgY29udGludWU7CisJICAgIC8qIFN1Yi10YWJsZSBkYXRhIHdpbGwgYmUgaW5oZWlyaXRlZCBpZiBubyBkYXRhIHlldC4gKi8KKwkgICAgaWYgKCEoY2FsbGJhY2sgJiYgKmNhbGxiYWNrKSkgcmV0dXJuIG9wdDI7CisJICAgIGlmICghKGNhbGxiYWNrRGF0YSAmJiAqY2FsbGJhY2tEYXRhID09IE5VTEwpKSByZXR1cm4gb3B0MjsKKwkgICAgLypALW9ic2VydmVydHJhbnMgLWRlcGVuZGVudHRyYW5zIEAqLworCSAgICAqY2FsbGJhY2tEYXRhID0gb3B0LT5kZXNjcmlwOworCSAgICAvKkA9b2JzZXJ2ZXJ0cmFucyA9ZGVwZW5kZW50dHJhbnMgQCovCisJICAgIHJldHVybiBvcHQyOworCX0gZWxzZSBpZiAoKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHX01BU0spID09IFBPUFRfQVJHX0NBTExCQUNLKSB7CisJICAgIGNiID0gb3B0OworCX0gZWxzZSBpZiAobG9uZ05hbWUgJiYgb3B0LT5sb25nTmFtZSAmJgorCQkgICAoIXNpbmdsZURhc2ggfHwgKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHRkxBR19PTkVEQVNIKSkgJiYKKwkJLypALW51bGxwYXNzQCovCQkvKiBMQ0w6IG9wdC0+bG9uZ05hbWUgIT0gTlVMTCAqLworCQkgICAhc3RyY21wKGxvbmdOYW1lLCBvcHQtPmxvbmdOYW1lKSkKKwkJLypAPW51bGxwYXNzQCovCisJeworCSAgICBicmVhazsKKwl9IGVsc2UgaWYgKHNob3J0TmFtZSAmJiBzaG9ydE5hbWUgPT0gb3B0LT5zaG9ydE5hbWUpIHsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIGlmICghb3B0LT5sb25nTmFtZSAmJiAhb3B0LT5zaG9ydE5hbWUpCisJcmV0dXJuIE5VTEw7CisgICAgLypALW1vZG9ic2VydmVyIC1tb2RzIEAqLworICAgIGlmIChjYWxsYmFjaykgKmNhbGxiYWNrID0gTlVMTDsKKyAgICBpZiAoY2FsbGJhY2tEYXRhKSAqY2FsbGJhY2tEYXRhID0gTlVMTDsKKyAgICBpZiAoY2IpIHsKKwlpZiAoY2FsbGJhY2spCisJLypALWNhc3RmY25wdHJAKi8KKwkgICAgKmNhbGxiYWNrID0gKHBvcHRDYWxsYmFja1R5cGUpY2ItPmFyZzsKKwkvKkA9Y2FzdGZjbnB0ckAqLworCWlmICghKGNiLT5hcmdJbmZvICYgUE9QVF9DQkZMQUdfSU5DX0RBVEEpKSB7CisJICAgIGlmIChjYWxsYmFja0RhdGEpCisJCS8qQC1vYnNlcnZlcnRyYW5zQCovCS8qIEZJWDogdHlwZWRlZiBkb3VibGUgaW5kaXJlY3Rpb24uICovCisJCSpjYWxsYmFja0RhdGEgPSBjYi0+ZGVzY3JpcDsKKwkJLypAPW9ic2VydmVydHJhbnNAKi8KKwl9CisgICAgfQorICAgIC8qQD1tb2RvYnNlcnZlciA9bW9kcyBAKi8KKworICAgIHJldHVybiBvcHQ7Cit9CisvKkA9Ym91bmRzd3JpdGVAKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKiBmaW5kTmV4dEFyZygvKkBzcGVjaWFsQCovIHBvcHRDb250ZXh0IGNvbiwKKwkJdW5zaWduZWQgYXJneCwgaW50IGRlbGV0ZV9hcmcpCisJLypAdXNlcyBjb24tPm9wdGlvblN0YWNrLCBjb24tPm9zLAorCQljb24tPm9zLT5uZXh0LCBjb24tPm9zLT5hcmdiLCBjb24tPm9zLT5hcmdjLCBjb24tPm9zLT5hcmd2IEAqLworCS8qQG1vZGlmaWVzIGNvbiBAKi8KK3sKKyAgICBzdHJ1Y3Qgb3B0aW9uU3RhY2tFbnRyeSAqIG9zID0gY29uLT5vczsKKyAgICBjb25zdCBjaGFyICogYXJnOworCisgICAgZG8geworCWludCBpOworCWFyZyA9IE5VTEw7CisJd2hpbGUgKG9zLT5uZXh0ID09IG9zLT5hcmdjICYmIG9zID4gY29uLT5vcHRpb25TdGFjaykgb3MtLTsKKwlpZiAob3MtPm5leHQgPT0gb3MtPmFyZ2MgJiYgb3MgPT0gY29uLT5vcHRpb25TdGFjaykgYnJlYWs7CisJaWYgKG9zLT5hcmd2ICE9IE5VTEwpCisJZm9yIChpID0gb3MtPm5leHQ7IGkgPCBvcy0+YXJnYzsgaSsrKSB7CisJICAgIC8qQC1zaXplb2Z0eXBlQCovCisJICAgIGlmIChvcy0+YXJnYiAmJiBQQk1fSVNTRVQoaSwgb3MtPmFyZ2IpKQorCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworCSAgICBpZiAoKm9zLT5hcmd2W2ldID09ICctJykKKwkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKwkgICAgaWYgKC0tYXJneCA+IDApCisJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CisJICAgIGFyZyA9IG9zLT5hcmd2W2ldOworCSAgICBpZiAoZGVsZXRlX2FyZykgeworCQlpZiAob3MtPmFyZ2IgPT0gTlVMTCkgb3MtPmFyZ2IgPSBQQk1fQUxMT0Mob3MtPmFyZ2MpOworCQlpZiAob3MtPmFyZ2IgIT0gTlVMTCkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCQlQQk1fU0VUKGksIG9zLT5hcmdiKTsKKwkgICAgfQorCSAgICAvKkBpbm5lcmJyZWFrQCovIGJyZWFrOworCSAgICAvKkA9c2l6ZW9mdHlwZUAqLworCX0KKwlpZiAob3MgPiBjb24tPm9wdGlvblN0YWNrKSBvcy0tOworICAgIH0gd2hpbGUgKGFyZyA9PSBOVUxMKTsKKyAgICByZXR1cm4gYXJnOworfQorCisvKkAtYm91bmRzd3JpdGVAKi8KK3N0YXRpYyAvKkBvbmx5QCovIC8qQG51bGxAKi8gY29uc3QgY2hhciAqCitleHBhbmROZXh0QXJnKC8qQHNwZWNpYWxAKi8gcG9wdENvbnRleHQgY29uLCBjb25zdCBjaGFyICogcykKKwkvKkB1c2VzIGNvbi0+b3B0aW9uU3RhY2ssIGNvbi0+b3MsCisJCWNvbi0+b3MtPm5leHQsIGNvbi0+b3MtPmFyZ2IsIGNvbi0+b3MtPmFyZ2MsIGNvbi0+b3MtPmFyZ3YgQCovCisJLypAbW9kaWZpZXMgY29uIEAqLworeworICAgIGNvbnN0IGNoYXIgKiBhID0gTlVMTDsKKyAgICBzaXplX3QgYWxlbjsKKyAgICBjaGFyICp0LCAqdGU7CisgICAgc2l6ZV90IHRuID0gc3RybGVuKHMpICsgMTsKKyAgICBjaGFyIGM7CisKKyAgICB0ZSA9IHQgPSBtYWxsb2ModG4pOzsKKyAgICBpZiAodCA9PSBOVUxMKSByZXR1cm4gTlVMTDsJCS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKyAgICB3aGlsZSAoKGMgPSAqcysrKSAhPSAnXDAnKSB7CisJc3dpdGNoIChjKSB7CisjaWYgMAkvKiBYWFggY2FuJ3QgZG8gdGhpcyAqLworCWNhc2UgJ1xcJzoJLyogZXNjYXBlICovCisJICAgIGMgPSAqcysrOworCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKyNlbmRpZgorCWNhc2UgJyEnOgorCSAgICBpZiAoIShzWzBdID09ICcjJyAmJiBzWzFdID09ICc6JyAmJiBzWzJdID09ICcrJykpCisJCS8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCSAgICAvKiBYWFggTWFrZSBzdXJlIHRoYXQgZmluZE5leHRBcmcgZGVsZXRlcyBvbmx5IG5leHQgYXJnLiAqLworCSAgICBpZiAoYSA9PSBOVUxMKSB7CisJCWlmICgoYSA9IGZpbmROZXh0QXJnKGNvbiwgMSwgMSkpID09IE5VTEwpCisJCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwkgICAgfQorCSAgICBzICs9IDM7CisKKwkgICAgYWxlbiA9IHN0cmxlbihhKTsKKwkgICAgdG4gKz0gYWxlbjsKKwkgICAgKnRlID0gJ1wwJzsKKwkgICAgdCA9IHJlYWxsb2ModCwgdG4pOworCSAgICB0ZSA9IHQgKyBzdHJsZW4odCk7CisJICAgIHN0cm5jcHkodGUsIGEsIGFsZW4pOyB0ZSArPSBhbGVuOworCSAgICBjb250aW51ZTsKKwkgICAgLypAbm90cmVhY2hlZEAqLyAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwlkZWZhdWx0OgorCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwl9CisJKnRlKysgPSBjOworICAgIH0KKyAgICAqdGUgPSAnXDAnOworICAgIHQgPSByZWFsbG9jKHQsIHN0cmxlbih0KSArIDEpOwkvKiBYWFggbWVtb3J5IGxlYWssIGhhcmQgdG8gcGx1ZyAqLworICAgIHJldHVybiB0OworfQorLypAPWJvdW5kc3dyaXRlQCovCisKK3N0YXRpYyB2b2lkIHBvcHRTdHJpcEFyZygvKkBzcGVjaWFsQCovIHBvcHRDb250ZXh0IGNvbiwgaW50IHdoaWNoKQorCS8qQHVzZXMgY29uLT5hcmdfc3RyaXAsIGNvbi0+b3B0aW9uU3RhY2sgQCovCisJLypAZGVmaW5lcyBjb24tPmFyZ19zdHJpcCBAKi8KKwkvKkBtb2RpZmllcyBjb24gQCovCit7CisgICAgLypALXNpemVvZnR5cGVAKi8KKyAgICBpZiAoY29uLT5hcmdfc3RyaXAgPT0gTlVMTCkKKwljb24tPmFyZ19zdHJpcCA9IFBCTV9BTExPQyhjb24tPm9wdGlvblN0YWNrWzBdLmFyZ2MpOworICAgIGlmIChjb24tPmFyZ19zdHJpcCAhPSBOVUxMKQkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworICAgIFBCTV9TRVQod2hpY2gsIGNvbi0+YXJnX3N0cmlwKTsKKyAgICAvKkA9c2l6ZW9mdHlwZUAqLworICAgIC8qQC1jb21wZGVmQCovIC8qIExDTDogY29uLT5hcmdfc3RyaXAgdWRlZmluZWQ/ICovCisgICAgcmV0dXJuOworICAgIC8qQD1jb21wZGVmQCovCit9CisKK2ludCBwb3B0U2F2ZUxvbmcobG9uZyAqIGFyZywgaW50IGFyZ0luZm8sIGxvbmcgYUxvbmcpCit7CisgICAgLyogWFhYIENoZWNrIGFsaWdubWVudCwgbWF5IGZhaWwgb24gZnVua3kgcGxhdGZvcm1zLiAqLworICAgIGlmIChhcmcgPT0gTlVMTCB8fCAoKCh1bnNpZ25lZCBsb25nKWFyZykgJiAoc2l6ZW9mKCphcmcpLTEpKSkKKwlyZXR1cm4gUE9QVF9FUlJPUl9OVUxMQVJHOworCisgICAgaWYgKGFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfTk9UKQorCWFMb25nID0gfmFMb25nOworICAgIHN3aXRjaCAoYXJnSW5mbyAmIFBPUFRfQVJHRkxBR19MT0dJQ0FMT1BTKSB7CisgICAgY2FzZSAwOgorCSphcmcgPSBhTG9uZzsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHRkxBR19PUjoKKwkqYXJnIHw9IGFMb25nOworCWJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdGTEFHX0FORDoKKwkqYXJnICY9IGFMb25nOworCWJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdGTEFHX1hPUjoKKwkqYXJnIF49IGFMb25nOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJcmV0dXJuIFBPUFRfRVJST1JfQkFET1BFUkFUSU9OOworCS8qQG5vdHJlYWNoZWRAKi8gYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgcG9wdFNhdmVJbnQoLypAbnVsbEAqLyBpbnQgKiBhcmcsIGludCBhcmdJbmZvLCBsb25nIGFMb25nKQoreworICAgIC8qIFhYWCBDaGVjayBhbGlnbm1lbnQsIG1heSBmYWlsIG9uIGZ1bmt5IHBsYXRmb3Jtcy4gKi8KKyAgICBpZiAoYXJnID09IE5VTEwgfHwgKCgodW5zaWduZWQgbG9uZylhcmcpICYgKHNpemVvZigqYXJnKS0xKSkpCisJcmV0dXJuIFBPUFRfRVJST1JfTlVMTEFSRzsKKworICAgIGlmIChhcmdJbmZvICYgUE9QVF9BUkdGTEFHX05PVCkKKwlhTG9uZyA9IH5hTG9uZzsKKyAgICBzd2l0Y2ggKGFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfTE9HSUNBTE9QUykgeworICAgIGNhc2UgMDoKKwkqYXJnID0gYUxvbmc7CisJYnJlYWs7CisgICAgY2FzZSBQT1BUX0FSR0ZMQUdfT1I6CisJKmFyZyB8PSBhTG9uZzsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHRkxBR19BTkQ6CisJKmFyZyAmPSBhTG9uZzsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHRkxBR19YT1I6CisJKmFyZyBePSBhTG9uZzsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCXJldHVybiBQT1BUX0VSUk9SX0JBRE9QRVJBVElPTjsKKwkvKkBub3RyZWFjaGVkQCovIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLypALWJvdW5kc3dyaXRlQCovCisvKiByZXR1cm5zICd2YWwnIGVsZW1lbnQsIC0xIG9uIGxhc3QgaXRlbSwgUE9QVF9FUlJPUl8qIG9uIGVycm9yICovCitpbnQgcG9wdEdldE5leHRPcHQocG9wdENvbnRleHQgY29uKQoreworICAgIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogb3B0ID0gTlVMTDsKKyAgICBpbnQgZG9uZSA9IDA7CisKKyAgICBpZiAoY29uID09IE5VTEwpCisJcmV0dXJuIC0xOworICAgIHdoaWxlICghZG9uZSkgeworCWNvbnN0IGNoYXIgKiBvcmlnT3B0U3RyaW5nID0gTlVMTDsKKwlwb3B0Q2FsbGJhY2tUeXBlIGNiID0gTlVMTDsKKwljb25zdCB2b2lkICogY2JEYXRhID0gTlVMTDsKKwljb25zdCBjaGFyICogbG9uZ0FyZyA9IE5VTEw7CisJaW50IGNhbnN0cmlwID0gMDsKKwlpbnQgc2hvcnR5ID0gMDsKKworCXdoaWxlICghY29uLT5vcy0+bmV4dENoYXJBcmcgJiYgY29uLT5vcy0+bmV4dCA9PSBjb24tPm9zLT5hcmdjCisJCSYmIGNvbi0+b3MgPiBjb24tPm9wdGlvblN0YWNrKSB7CisJICAgIGNsZWFuT1NFKGNvbi0+b3MtLSk7CisJfQorCWlmICghY29uLT5vcy0+bmV4dENoYXJBcmcgJiYgY29uLT5vcy0+bmV4dCA9PSBjb24tPm9zLT5hcmdjKSB7CisJICAgIC8qQC1pbnRlcm5hbGdsb2JzQCovCisJICAgIGludm9rZUNhbGxiYWNrc1BPU1QoY29uLCBjb24tPm9wdGlvbnMpOworCSAgICAvKkA9aW50ZXJuYWxnbG9ic0AqLworCSAgICBpZiAoY29uLT5kb0V4ZWMpIHJldHVybiBleGVjQ29tbWFuZChjb24pOworCSAgICByZXR1cm4gLTE7CisJfQorCisJLyogUHJvY2VzcyBuZXh0IGxvbmcgb3B0aW9uICovCisJaWYgKCFjb24tPm9zLT5uZXh0Q2hhckFyZykgeworCSAgICBjaGFyICogbG9jYWxPcHRTdHJpbmcsICogb3B0U3RyaW5nOworCSAgICBpbnQgdGhpc29wdDsKKworCSAgICAvKkAtc2l6ZW9mdHlwZUAqLworCSAgICBpZiAoY29uLT5vcy0+YXJnYiAmJiBQQk1fSVNTRVQoY29uLT5vcy0+bmV4dCwgY29uLT5vcy0+YXJnYikpIHsKKwkJY29uLT5vcy0+bmV4dCsrOworCQljb250aW51ZTsKKwkgICAgfQorCSAgICAvKkA9c2l6ZW9mdHlwZUAqLworCSAgICB0aGlzb3B0ID0gY29uLT5vcy0+bmV4dDsKKwkgICAgaWYgKGNvbi0+b3MtPmFyZ3YgIT0gTlVMTCkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCSAgICBvcmlnT3B0U3RyaW5nID0gY29uLT5vcy0+YXJndltjb24tPm9zLT5uZXh0KytdOworCisJICAgIGlmIChvcmlnT3B0U3RyaW5nID09IE5VTEwpCS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwkJcmV0dXJuIFBPUFRfRVJST1JfQkFET1BUOworCisJICAgIGlmIChjb24tPnJlc3RMZWZ0b3ZlciB8fCAqb3JpZ09wdFN0cmluZyAhPSAnLScgfHwKKwkJKCpvcmlnT3B0U3RyaW5nID09ICctJyAmJiBvcmlnT3B0U3RyaW5nWzFdID09ICdcMCcpKQorCSAgICB7CisJCWlmIChjb24tPmZsYWdzICYgUE9QVF9DT05URVhUX1BPU0lYTUVIQVJERVIpCisJCSAgICBjb24tPnJlc3RMZWZ0b3ZlciA9IDE7CisJCWlmIChjb24tPmZsYWdzICYgUE9QVF9DT05URVhUX0FSR19PUFRTKSB7CisJCSAgICBjb24tPm9zLT5uZXh0QXJnID0geHN0cmR1cChvcmlnT3B0U3RyaW5nKTsKKwkJICAgIHJldHVybiAwOworCQl9CisJCWlmIChjb24tPmxlZnRvdmVycyAhPSBOVUxMKQkvKiBYWFggY2FuJ3QgaGFwcGVuICovCisJCSAgICBjb24tPmxlZnRvdmVyc1tjb24tPm51bUxlZnRvdmVycysrXSA9IG9yaWdPcHRTdHJpbmc7CisJCWNvbnRpbnVlOworCSAgICB9CisKKwkgICAgLyogTWFrZSBhIGNvcHkgd2UgY2FuIGhhY2sgYXQgKi8KKwkgICAgbG9jYWxPcHRTdHJpbmcgPSBvcHRTdHJpbmcgPQorCQlzdHJjcHkoYWxsb2NhKHN0cmxlbihvcmlnT3B0U3RyaW5nKSArIDEpLCBvcmlnT3B0U3RyaW5nKTsKKworCSAgICBpZiAob3B0U3RyaW5nWzBdID09ICdcMCcpCisJCXJldHVybiBQT1BUX0VSUk9SX0JBRE9QVDsKKworCSAgICBpZiAob3B0U3RyaW5nWzFdID09ICctJyAmJiAhb3B0U3RyaW5nWzJdKSB7CisJCWNvbi0+cmVzdExlZnRvdmVyID0gMTsKKwkJY29udGludWU7CisJICAgIH0gZWxzZSB7CisJCWNoYXIgKm9lOworCQlpbnQgc2luZ2xlRGFzaDsKKworCQlvcHRTdHJpbmcrKzsKKwkJaWYgKCpvcHRTdHJpbmcgPT0gJy0nKQorCQkgICAgc2luZ2xlRGFzaCA9IDAsIG9wdFN0cmluZysrOworCQllbHNlCisJCSAgICBzaW5nbGVEYXNoID0gMTsKKworCQkvKiBYWFggYWxpYXNlcyB3aXRoIGFyZyBzdWJzdGl0dXRpb24gbmVlZCAiLS1hbGlhcz1hcmciICovCisJCWlmIChoYW5kbGVBbGlhcyhjb24sIG9wdFN0cmluZywgJ1wwJywgTlVMTCkpCisJCSAgICBjb250aW51ZTsKKworCQlpZiAoaGFuZGxlRXhlYyhjb24sIG9wdFN0cmluZywgJ1wwJykpCisJCSAgICBjb250aW51ZTsKKworCQkvKiBDaGVjayBmb3IgIi0tbG9uZz1hcmciIG9wdGlvbi4gKi8KKwkJZm9yIChvZSA9IG9wdFN0cmluZzsgKm9lICYmICpvZSAhPSAnPSc7IG9lKyspCisJCSAgICB7fTsKKwkJaWYgKCpvZSA9PSAnPScpIHsKKwkJICAgICpvZSsrID0gJ1wwJzsKKwkJICAgIC8qIFhYWCBsb25nQXJnIGlzIG1hcHBlZCBiYWNrIHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4gKi8KKwkJICAgIGxvbmdBcmcgPSBvcmlnT3B0U3RyaW5nICsgKG9lIC0gbG9jYWxPcHRTdHJpbmcpOworCQl9CisKKwkJb3B0ID0gZmluZE9wdGlvbihjb24tPm9wdGlvbnMsIG9wdFN0cmluZywgJ1wwJywgJmNiLCAmY2JEYXRhLAorCQkJCSBzaW5nbGVEYXNoKTsKKwkJaWYgKCFvcHQgJiYgIXNpbmdsZURhc2gpCisJCSAgICByZXR1cm4gUE9QVF9FUlJPUl9CQURPUFQ7CisJICAgIH0KKworCSAgICBpZiAoIW9wdCkgeworCQljb24tPm9zLT5uZXh0Q2hhckFyZyA9IG9yaWdPcHRTdHJpbmcgKyAxOworCSAgICB9IGVsc2UgeworCQlpZiAoY29uLT5vcyA9PSBjb24tPm9wdGlvblN0YWNrICYmCisJCSAgIG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHRkxBR19TVFJJUCkKKwkJeworCQkgICAgY2Fuc3RyaXAgPSAxOworCQkgICAgcG9wdFN0cmlwQXJnKGNvbiwgdGhpc29wdCk7CisJCX0KKwkJc2hvcnR5ID0gMDsKKwkgICAgfQorCX0KKworCS8qIFByb2Nlc3MgbmV4dCBzaG9ydCBvcHRpb24gKi8KKwkvKkAtYnJhbmNoc3RhdGVAKi8JCS8qIEZJWDogVzJETz8gKi8KKwlpZiAoY29uLT5vcy0+bmV4dENoYXJBcmcpIHsKKwkgICAgb3JpZ09wdFN0cmluZyA9IGNvbi0+b3MtPm5leHRDaGFyQXJnOworCisJICAgIGNvbi0+b3MtPm5leHRDaGFyQXJnID0gTlVMTDsKKworCSAgICBpZiAoaGFuZGxlQWxpYXMoY29uLCBOVUxMLCAqb3JpZ09wdFN0cmluZywgb3JpZ09wdFN0cmluZyArIDEpKQorCQljb250aW51ZTsKKworCSAgICBpZiAoaGFuZGxlRXhlYyhjb24sIE5VTEwsICpvcmlnT3B0U3RyaW5nKSkgeworCQkvKiBSZXN0b3JlIHJlc3Qgb2Ygc2hvcnQgb3B0aW9ucyBmb3IgZnVydGhlciBwcm9jZXNzaW5nICovCisJCW9yaWdPcHRTdHJpbmcrKzsKKwkJaWYgKCpvcmlnT3B0U3RyaW5nICE9ICdcMCcpCisJCSAgICBjb24tPm9zLT5uZXh0Q2hhckFyZyA9IG9yaWdPcHRTdHJpbmc7CisJCWNvbnRpbnVlOworCSAgICB9CisKKwkgICAgb3B0ID0gZmluZE9wdGlvbihjb24tPm9wdGlvbnMsIE5VTEwsICpvcmlnT3B0U3RyaW5nLCAmY2IsCisJCQkgICAgICZjYkRhdGEsIDApOworCSAgICBpZiAoIW9wdCkKKwkJcmV0dXJuIFBPUFRfRVJST1JfQkFET1BUOworCSAgICBzaG9ydHkgPSAxOworCisJICAgIG9yaWdPcHRTdHJpbmcrKzsKKwkgICAgaWYgKCpvcmlnT3B0U3RyaW5nICE9ICdcMCcpCisJCWNvbi0+b3MtPm5leHRDaGFyQXJnID0gb3JpZ09wdFN0cmluZzsKKwl9CisJLypAPWJyYW5jaHN0YXRlQCovCisKKwlpZiAob3B0ID09IE5VTEwpIHJldHVybiBQT1BUX0VSUk9SX0JBRE9QVDsJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCWlmIChvcHQtPmFyZyAmJiAob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgPT0gUE9QVF9BUkdfTk9ORSkgeworCSAgICBpZiAocG9wdFNhdmVJbnQoKGludCAqKW9wdC0+YXJnLCBvcHQtPmFyZ0luZm8sIDFMKSkKKwkJcmV0dXJuIFBPUFRfRVJST1JfQkFET1BFUkFUSU9OOworCX0gZWxzZSBpZiAoKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHX01BU0spID09IFBPUFRfQVJHX1ZBTCkgeworCSAgICBpZiAob3B0LT5hcmcpIHsKKwkJaWYgKHBvcHRTYXZlSW50KChpbnQgKilvcHQtPmFyZywgb3B0LT5hcmdJbmZvLCAobG9uZylvcHQtPnZhbCkpCisJCSAgICByZXR1cm4gUE9QVF9FUlJPUl9CQURPUEVSQVRJT047CisJICAgIH0KKwl9IGVsc2UgaWYgKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSAhPSBQT1BUX0FSR19OT05FKSB7CisJICAgIGNvbi0+b3MtPm5leHRBcmcgPSBfZnJlZShjb24tPm9zLT5uZXh0QXJnKTsKKwkgICAgLypALXVzZWRlZkAqLwkvKiBGSVg6IFcyRE8/ICovCisJICAgIGlmIChsb25nQXJnKSB7CisJICAgIC8qQD11c2VkZWZAKi8KKwkJbG9uZ0FyZyA9IGV4cGFuZE5leHRBcmcoY29uLCBsb25nQXJnKTsKKwkJY29uLT5vcy0+bmV4dEFyZyA9IGxvbmdBcmc7CisJICAgIH0gZWxzZSBpZiAoY29uLT5vcy0+bmV4dENoYXJBcmcpIHsKKwkJbG9uZ0FyZyA9IGV4cGFuZE5leHRBcmcoY29uLCBjb24tPm9zLT5uZXh0Q2hhckFyZyk7CisJCWNvbi0+b3MtPm5leHRBcmcgPSBsb25nQXJnOworCQljb24tPm9zLT5uZXh0Q2hhckFyZyA9IE5VTEw7CisJICAgIH0gZWxzZSB7CisJCXdoaWxlIChjb24tPm9zLT5uZXh0ID09IGNvbi0+b3MtPmFyZ2MgJiYKKwkJICAgICAgIGNvbi0+b3MgPiBjb24tPm9wdGlvblN0YWNrKSB7CisJCSAgICBjbGVhbk9TRShjb24tPm9zLS0pOworCQl9CisJCWlmIChjb24tPm9zLT5uZXh0ID09IGNvbi0+b3MtPmFyZ2MpIHsKKwkJICAgIGlmICghKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHRkxBR19PUFRJT05BTCkpCisJCQkvKkAtY29tcGRlZkAqLwkvKiBGSVg6IGNvbi0+b3MtPmFyZ3Ygbm90IGRlZmluZWQgKi8KKwkJCXJldHVybiBQT1BUX0VSUk9SX05PQVJHOworCQkJLypAPWNvbXBkZWZAKi8KKwkJICAgIGNvbi0+b3MtPm5leHRBcmcgPSBOVUxMOworCQl9IGVsc2UgeworCisJCSAgICAvKgorCQkgICAgICogTWFrZSBzdXJlIHRoaXMgaXNuJ3QgcGFydCBvZiBhIHNob3J0IGFyZyBvciB0aGUKKwkJICAgICAqIHJlc3VsdCBvZiBhbiBhbGlhcyBleHBhbnNpb24uCisJCSAgICAgKi8KKwkJICAgIGlmIChjb24tPm9zID09IGNvbi0+b3B0aW9uU3RhY2sgJiYKKwkJCShvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfU1RSSVApICYmCisJCQljYW5zdHJpcCkgeworCQkJcG9wdFN0cmlwQXJnKGNvbiwgY29uLT5vcy0+bmV4dCk7CisJCSAgICB9CisJCQorCQkgICAgaWYgKGNvbi0+b3MtPmFyZ3YgIT0gTlVMTCkgewkvKiBYWFggY2FuJ3QgaGFwcGVuICovCisJCQkvKiBYWFggd2F0Y2hvdXQ6IHN1YnRsZSBzaWRlLWVmZmVjdHMgbGl2ZSBoZXJlLiAqLworCQkJbG9uZ0FyZyA9IGNvbi0+b3MtPmFyZ3ZbY29uLT5vcy0+bmV4dCsrXTsKKwkJCWxvbmdBcmcgPSBleHBhbmROZXh0QXJnKGNvbiwgbG9uZ0FyZyk7CisJCQljb24tPm9zLT5uZXh0QXJnID0gbG9uZ0FyZzsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGxvbmdBcmcgPSBOVUxMOworCisJICAgIGlmIChvcHQtPmFyZykgeworCQlzd2l0Y2ggKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHX01BU0spIHsKKwkJY2FzZSBQT1BUX0FSR19TVFJJTkc6CisJCSAgICAvKiBYWFggbWVtb3J5IGxlYWssIGhhcmQgdG8gcGx1ZyAqLworCQkgICAgKigoY29uc3QgY2hhciAqKikgb3B0LT5hcmcpID0gKGNvbi0+b3MtPm5leHRBcmcpCisJCQk/IHhzdHJkdXAoY29uLT5vcy0+bmV4dEFyZykgOiBOVUxMOworCQkgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisKKwkJY2FzZSBQT1BUX0FSR19JTlQ6CisJCWNhc2UgUE9QVF9BUkdfTE9ORzoKKwkJeyAgIGxvbmcgYUxvbmcgPSAwOworCQkgICAgY2hhciAqZW5kOworCisJCSAgICBpZiAoY29uLT5vcy0+bmV4dEFyZykgeworCQkJYUxvbmcgPSBzdHJ0b2woY29uLT5vcy0+bmV4dEFyZywgJmVuZCwgMCk7CisJCQlpZiAoIShlbmQgJiYgKmVuZCA9PSAnXDAnKSkKKwkJCSAgICByZXR1cm4gUE9QVF9FUlJPUl9CQUROVU1CRVI7CisJCSAgICB9CisKKwkJICAgIGlmICgob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgPT0gUE9QVF9BUkdfTE9ORykgeworCQkJaWYgKGFMb25nID09IExPTkdfTUlOIHx8IGFMb25nID09IExPTkdfTUFYKQorCQkJICAgIHJldHVybiBQT1BUX0VSUk9SX09WRVJGTE9XOworCQkJaWYgKHBvcHRTYXZlTG9uZygobG9uZyAqKW9wdC0+YXJnLCBvcHQtPmFyZ0luZm8sIGFMb25nKSkKKwkJCSAgICByZXR1cm4gUE9QVF9FUlJPUl9CQURPUEVSQVRJT047CisJCSAgICB9IGVsc2UgeworCQkJaWYgKGFMb25nID4gSU5UX01BWCB8fCBhTG9uZyA8IElOVF9NSU4pCisJCQkgICAgcmV0dXJuIFBPUFRfRVJST1JfT1ZFUkZMT1c7CisJCQlpZiAocG9wdFNhdmVJbnQoKGludCAqKW9wdC0+YXJnLCBvcHQtPmFyZ0luZm8sIGFMb25nKSkKKwkJCSAgICByZXR1cm4gUE9QVF9FUlJPUl9CQURPUEVSQVRJT047CisJCSAgICB9CisJCX0gICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKworCQljYXNlIFBPUFRfQVJHX0ZMT0FUOgorCQljYXNlIFBPUFRfQVJHX0RPVUJMRToKKwkJeyAgIGRvdWJsZSBhRG91YmxlID0gMC4wOworCQkgICAgY2hhciAqZW5kOworCisJCSAgICBpZiAoY29uLT5vcy0+bmV4dEFyZykgeworCQkJLypALW1vZHNAKi8KKwkJCWludCBzYXZlZXJybm8gPSBlcnJubzsKKwkJCWVycm5vID0gMDsKKwkJCWFEb3VibGUgPSBzdHJ0b2QoY29uLT5vcy0+bmV4dEFyZywgJmVuZCk7CisJCQlpZiAoZXJybm8gPT0gRVJBTkdFKQorCQkJICAgIHJldHVybiBQT1BUX0VSUk9SX09WRVJGTE9XOworCQkJZXJybm8gPSBzYXZlZXJybm87CisJCQkvKkA9bW9kc0AqLworCQkJaWYgKCplbmQgIT0gJ1wwJykKKwkJCSAgICByZXR1cm4gUE9QVF9FUlJPUl9CQUROVU1CRVI7CisJCSAgICB9CisKKwkJICAgIGlmICgob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgPT0gUE9QVF9BUkdfRE9VQkxFKSB7CisJCQkqKChkb3VibGUgKikgb3B0LT5hcmcpID0gYURvdWJsZTsKKwkJICAgIH0gZWxzZSB7CisjZGVmaW5lIF9BQlMoYSkJKCgoKGEpIC0gMC4wKSA8IERCTF9FUFNJTE9OKSA/IC0oYSkgOiAoYSkpCisJCQlpZiAoKF9BQlMoYURvdWJsZSkgLSBGTFRfTUFYKSA+IERCTF9FUFNJTE9OKQorCQkJICAgIHJldHVybiBQT1BUX0VSUk9SX09WRVJGTE9XOworCQkJaWYgKChGTFRfTUlOIC0gX0FCUyhhRG91YmxlKSkgPiBEQkxfRVBTSUxPTikKKwkJCSAgICByZXR1cm4gUE9QVF9FUlJPUl9PVkVSRkxPVzsKKwkJCSooKGZsb2F0ICopIG9wdC0+YXJnKSA9IGFEb3VibGU7CisJCSAgICB9CisJCX0gICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIGZwcmludGYoc3Rkb3V0LAorCQkJUE9QVF8oIm9wdGlvbiB0eXBlICglZCkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIpLAorCQkJKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHX01BU0spKTsKKwkJICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJICAgIC8qQG5vdHJlYWNoZWRAKi8gLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKworCWlmIChjYikgeworCSAgICAvKkAtaW50ZXJuYWxnbG9ic0AqLworCSAgICBpbnZva2VDYWxsYmFja3NPUFRJT04oY29uLCBjb24tPm9wdGlvbnMsIG9wdCwgY2JEYXRhLCBzaG9ydHkpOworCSAgICAvKkA9aW50ZXJuYWxnbG9ic0AqLworCX0gZWxzZSBpZiAob3B0LT52YWwgJiYgKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSAhPSBQT1BUX0FSR19WQUwpKQorCSAgICBkb25lID0gMTsKKworCWlmICgoY29uLT5maW5hbEFyZ3ZDb3VudCArIDIpID49IChjb24tPmZpbmFsQXJndkFsbG9jZWQpKSB7CisJICAgIGNvbi0+ZmluYWxBcmd2QWxsb2NlZCArPSAxMDsKKwkgICAgY29uLT5maW5hbEFyZ3YgPSByZWFsbG9jKGNvbi0+ZmluYWxBcmd2LAorCQkJICAgIHNpemVvZigqY29uLT5maW5hbEFyZ3YpICogY29uLT5maW5hbEFyZ3ZBbGxvY2VkKTsKKwl9CisKKwlpZiAoY29uLT5maW5hbEFyZ3YgIT0gTlVMTCkKKwl7ICAgY2hhciAqcyA9IG1hbGxvYygob3B0LT5sb25nTmFtZSA/IHN0cmxlbihvcHQtPmxvbmdOYW1lKSA6IDApICsgMyk7CisJICAgIGlmIChzICE9IE5VTEwpIHsJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCQlpZiAob3B0LT5sb25nTmFtZSkKKwkJICAgIHNwcmludGYocywgIiVzJXMiLAorCQkJKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfT05FREFTSCkgPyAiLSIgOiAiLS0iKSwKKwkJCW9wdC0+bG9uZ05hbWUpOworCQllbHNlCisJCSAgICBzcHJpbnRmKHMsICItJWMiLCBvcHQtPnNob3J0TmFtZSk7CisJCWNvbi0+ZmluYWxBcmd2W2Nvbi0+ZmluYWxBcmd2Q291bnQrK10gPSBzOworCSAgICB9IGVsc2UKKwkJY29uLT5maW5hbEFyZ3ZbY29uLT5maW5hbEFyZ3ZDb3VudCsrXSA9IE5VTEw7CisJfQorCisJaWYgKG9wdC0+YXJnICYmIChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSA9PSBQT1BUX0FSR19OT05FKQorCSAgICAvKkAtaWZlbXB0eUAqLyA7IC8qQD1pZmVtcHR5QCovCisJZWxzZSBpZiAoKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHX01BU0spID09IFBPUFRfQVJHX1ZBTCkKKwkgICAgLypALWlmZW1wdHlAKi8gOyAvKkA9aWZlbXB0eUAqLworCWVsc2UgaWYgKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSAhPSBQT1BUX0FSR19OT05FKSB7CisJICAgIGlmIChjb24tPmZpbmFsQXJndiAhPSBOVUxMICYmIGNvbi0+b3MtPm5leHRBcmcpCisJICAgICAgICBjb24tPmZpbmFsQXJndltjb24tPmZpbmFsQXJndkNvdW50KytdID0KKwkJCS8qQC1udWxscGFzc0AqLwkvKiBMQ0w6IGNvbi0+b3MtPm5leHRBcmcgIT0gTlVMTCAqLworCQkJeHN0cmR1cChjb24tPm9zLT5uZXh0QXJnKTsKKwkJCS8qQD1udWxscGFzc0AqLworCX0KKyAgICB9CisKKyAgICByZXR1cm4gKG9wdCA/IG9wdC0+dmFsIDogLTEpOwkvKiBYWFggY2FuJ3QgaGFwcGVuICovCit9CisvKkA9Ym91bmRzd3JpdGVAKi8KKworY29uc3QgY2hhciAqIHBvcHRHZXRPcHRBcmcocG9wdENvbnRleHQgY29uKQoreworICAgIGNvbnN0IGNoYXIgKiByZXQgPSBOVUxMOworICAgIC8qQC1icmFuY2hzdGF0ZUAqLworICAgIGlmIChjb24pIHsKKwlyZXQgPSBjb24tPm9zLT5uZXh0QXJnOworCWNvbi0+b3MtPm5leHRBcmcgPSBOVUxMOworICAgIH0KKyAgICAvKkA9YnJhbmNoc3RhdGVAKi8KKyAgICByZXR1cm4gcmV0OworfQorCitjb25zdCBjaGFyICogcG9wdEdldEFyZyhwb3B0Q29udGV4dCBjb24pCit7CisgICAgY29uc3QgY2hhciAqIHJldCA9IE5VTEw7CisgICAgaWYgKGNvbiAmJiBjb24tPmxlZnRvdmVycyAhPSBOVUxMICYmIGNvbi0+bmV4dExlZnRvdmVyIDwgY29uLT5udW1MZWZ0b3ZlcnMpCisJcmV0ID0gY29uLT5sZWZ0b3ZlcnNbY29uLT5uZXh0TGVmdG92ZXIrK107CisgICAgcmV0dXJuIHJldDsKK30KKworY29uc3QgY2hhciAqIHBvcHRQZWVrQXJnKHBvcHRDb250ZXh0IGNvbikKK3sKKyAgICBjb25zdCBjaGFyICogcmV0ID0gTlVMTDsKKyAgICBpZiAoY29uICYmIGNvbi0+bGVmdG92ZXJzICE9IE5VTEwgJiYgY29uLT5uZXh0TGVmdG92ZXIgPCBjb24tPm51bUxlZnRvdmVycykKKwlyZXQgPSBjb24tPmxlZnRvdmVyc1tjb24tPm5leHRMZWZ0b3Zlcl07CisgICAgcmV0dXJuIHJldDsKK30KKworLypALWJvdW5kc3dyaXRlQCovCitjb25zdCBjaGFyICoqIHBvcHRHZXRBcmdzKHBvcHRDb250ZXh0IGNvbikKK3sKKyAgICBpZiAoY29uID09IE5VTEwgfHwKKwljb24tPmxlZnRvdmVycyA9PSBOVUxMIHx8IGNvbi0+bnVtTGVmdG92ZXJzID09IGNvbi0+bmV4dExlZnRvdmVyKQorCXJldHVybiBOVUxMOworCisgICAgLyogc29tZSBhcHBzIGxpa2UgW2xpa2UgUlBNIDstKSBdIG5lZWQgdGhpcyBOVUxMIHRlcm1pbmF0ZWQgKi8KKyAgICBjb24tPmxlZnRvdmVyc1tjb24tPm51bUxlZnRvdmVyc10gPSBOVUxMOworCisgICAgLypALW51bGxyZXQgLW51bGxzdGF0ZSBAKi8JLyogRklYOiB0eXBlZGVmIGRvdWJsZSBpbmRpcmVjdGlvbi4gKi8KKyAgICByZXR1cm4gKGNvbi0+bGVmdG92ZXJzICsgY29uLT5uZXh0TGVmdG92ZXIpOworICAgIC8qQD1udWxscmV0ID1udWxsc3RhdGUgQCovCit9CisvKkA9Ym91bmRzd3JpdGVAKi8KKworcG9wdENvbnRleHQgcG9wdEZyZWVDb250ZXh0KHBvcHRDb250ZXh0IGNvbikKK3sKKyAgICBwb3B0SXRlbSBpdGVtOworICAgIGludCBpOworCisgICAgaWYgKGNvbiA9PSBOVUxMKSByZXR1cm4gY29uOworICAgIHBvcHRSZXNldENvbnRleHQoY29uKTsKKyAgICBjb24tPm9zLT5hcmdiID0gX2ZyZWUoY29uLT5vcy0+YXJnYik7CisKKyAgICBpZiAoY29uLT5hbGlhc2VzICE9IE5VTEwpCisgICAgZm9yIChpID0gMDsgaSA8IGNvbi0+bnVtQWxpYXNlczsgaSsrKSB7CisJaXRlbSA9IGNvbi0+YWxpYXNlcyArIGk7CisJLypALW1vZG9ic2VydmVyIC1vYnNlcnZlcnRyYW5zIC1kZXBlbmRlbnR0cmFuc0AqLworCWl0ZW0tPm9wdGlvbi5sb25nTmFtZSA9IF9mcmVlKGl0ZW0tPm9wdGlvbi5sb25nTmFtZSk7CisJaXRlbS0+b3B0aW9uLmRlc2NyaXAgPSBfZnJlZShpdGVtLT5vcHRpb24uZGVzY3JpcCk7CisJaXRlbS0+b3B0aW9uLmFyZ0Rlc2NyaXAgPSBfZnJlZShpdGVtLT5vcHRpb24uYXJnRGVzY3JpcCk7CisJLypAPW1vZG9ic2VydmVyID1vYnNlcnZlcnRyYW5zID1kZXBlbmRlbnR0cmFuc0AqLworCWl0ZW0tPmFyZ3YgPSBfZnJlZShpdGVtLT5hcmd2KTsKKyAgICB9CisgICAgY29uLT5hbGlhc2VzID0gX2ZyZWUoY29uLT5hbGlhc2VzKTsKKworICAgIGlmIChjb24tPmV4ZWNzICE9IE5VTEwpCisgICAgZm9yIChpID0gMDsgaSA8IGNvbi0+bnVtRXhlY3M7IGkrKykgeworCWl0ZW0gPSBjb24tPmV4ZWNzICsgaTsKKwkvKkAtbW9kb2JzZXJ2ZXIgLW9ic2VydmVydHJhbnMgLWRlcGVuZGVudHRyYW5zQCovCisJaXRlbS0+b3B0aW9uLmxvbmdOYW1lID0gX2ZyZWUoaXRlbS0+b3B0aW9uLmxvbmdOYW1lKTsKKwlpdGVtLT5vcHRpb24uZGVzY3JpcCA9IF9mcmVlKGl0ZW0tPm9wdGlvbi5kZXNjcmlwKTsKKwlpdGVtLT5vcHRpb24uYXJnRGVzY3JpcCA9IF9mcmVlKGl0ZW0tPm9wdGlvbi5hcmdEZXNjcmlwKTsKKwkvKkA9bW9kb2JzZXJ2ZXIgPW9ic2VydmVydHJhbnMgPWRlcGVuZGVudHRyYW5zQCovCisJaXRlbS0+YXJndiA9IF9mcmVlKGl0ZW0tPmFyZ3YpOworICAgIH0KKyAgICBjb24tPmV4ZWNzID0gX2ZyZWUoY29uLT5leGVjcyk7CisKKyAgICBjb24tPmxlZnRvdmVycyA9IF9mcmVlKGNvbi0+bGVmdG92ZXJzKTsKKyAgICBjb24tPmZpbmFsQXJndiA9IF9mcmVlKGNvbi0+ZmluYWxBcmd2KTsKKyAgICBjb24tPmFwcE5hbWUgPSBfZnJlZShjb24tPmFwcE5hbWUpOworICAgIGNvbi0+b3RoZXJIZWxwID0gX2ZyZWUoY29uLT5vdGhlckhlbHApOworICAgIGNvbi0+ZXhlY1BhdGggPSBfZnJlZShjb24tPmV4ZWNQYXRoKTsKKyAgICBjb24tPmFyZ19zdHJpcCA9IFBCTV9GUkVFKGNvbi0+YXJnX3N0cmlwKTsKKyAgICAKKyAgICBjb24gPSBfZnJlZShjb24pOworICAgIHJldHVybiBjb247Cit9CisKK2ludCBwb3B0QWRkQWxpYXMocG9wdENvbnRleHQgY29uLCBzdHJ1Y3QgcG9wdEFsaWFzIGFsaWFzLAorCQkvKkB1bnVzZWRAKi8gaW50IGZsYWdzKQoreworICAgIHBvcHRJdGVtIGl0ZW0gPSBhbGxvY2Eoc2l6ZW9mKCppdGVtKSk7CisgICAgbWVtc2V0KGl0ZW0sIDAsIHNpemVvZigqaXRlbSkpOworICAgIGl0ZW0tPm9wdGlvbi5sb25nTmFtZSA9IGFsaWFzLmxvbmdOYW1lOworICAgIGl0ZW0tPm9wdGlvbi5zaG9ydE5hbWUgPSBhbGlhcy5zaG9ydE5hbWU7CisgICAgaXRlbS0+b3B0aW9uLmFyZ0luZm8gPSBQT1BUX0FSR0ZMQUdfRE9DX0hJRERFTjsKKyAgICBpdGVtLT5vcHRpb24uYXJnID0gMDsKKyAgICBpdGVtLT5vcHRpb24udmFsID0gMDsKKyAgICBpdGVtLT5vcHRpb24uZGVzY3JpcCA9IE5VTEw7CisgICAgaXRlbS0+b3B0aW9uLmFyZ0Rlc2NyaXAgPSBOVUxMOworICAgIGl0ZW0tPmFyZ2MgPSBhbGlhcy5hcmdjOworICAgIGl0ZW0tPmFyZ3YgPSBhbGlhcy5hcmd2OworICAgIHJldHVybiBwb3B0QWRkSXRlbShjb24sIGl0ZW0sIDApOworfQorCisvKkAtYm91bmRzd3JpdGVAKi8KKy8qQC1tdXN0bW9kQCovIC8qIExDTDogY29uIG5vdCBtb2RpZmllZD8gKi8KK2ludCBwb3B0QWRkSXRlbShwb3B0Q29udGV4dCBjb24sIHBvcHRJdGVtIG5ld0l0ZW0sIGludCBmbGFncykKK3sKKyAgICBwb3B0SXRlbSAqIGl0ZW1zLCBpdGVtOworICAgIGludCAqIG5pdGVtczsKKworICAgIHN3aXRjaCAoZmxhZ3MpIHsKKyAgICBjYXNlIDE6CisJaXRlbXMgPSAmY29uLT5leGVjczsKKwluaXRlbXMgPSAmY29uLT5udW1FeGVjczsKKwlicmVhazsKKyAgICBjYXNlIDA6CisJaXRlbXMgPSAmY29uLT5hbGlhc2VzOworCW5pdGVtcyA9ICZjb24tPm51bUFsaWFzZXM7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlyZXR1cm4gMTsKKwkvKkBub3RyZWFjaGVkQCovIGJyZWFrOworICAgIH0KKworICAgICppdGVtcyA9IHJlYWxsb2MoKCppdGVtcyksICgoKm5pdGVtcykgKyAxKSAqIHNpemVvZigqKml0ZW1zKSk7CisgICAgaWYgKCgqaXRlbXMpID09IE5VTEwpCisJcmV0dXJuIDE7CisKKyAgICBpdGVtID0gKCppdGVtcykgKyAoKm5pdGVtcyk7CisKKyAgICBpdGVtLT5vcHRpb24ubG9uZ05hbWUgPQorCShuZXdJdGVtLT5vcHRpb24ubG9uZ05hbWUgPyB4c3RyZHVwKG5ld0l0ZW0tPm9wdGlvbi5sb25nTmFtZSkgOiBOVUxMKTsKKyAgICBpdGVtLT5vcHRpb24uc2hvcnROYW1lID0gbmV3SXRlbS0+b3B0aW9uLnNob3J0TmFtZTsKKyAgICBpdGVtLT5vcHRpb24uYXJnSW5mbyA9IG5ld0l0ZW0tPm9wdGlvbi5hcmdJbmZvOworICAgIGl0ZW0tPm9wdGlvbi5hcmcgPSBuZXdJdGVtLT5vcHRpb24uYXJnOworICAgIGl0ZW0tPm9wdGlvbi52YWwgPSBuZXdJdGVtLT5vcHRpb24udmFsOworICAgIGl0ZW0tPm9wdGlvbi5kZXNjcmlwID0KKwkobmV3SXRlbS0+b3B0aW9uLmRlc2NyaXAgPyB4c3RyZHVwKG5ld0l0ZW0tPm9wdGlvbi5kZXNjcmlwKSA6IE5VTEwpOworICAgIGl0ZW0tPm9wdGlvbi5hcmdEZXNjcmlwID0KKyAgICAgICAobmV3SXRlbS0+b3B0aW9uLmFyZ0Rlc2NyaXAgPyB4c3RyZHVwKG5ld0l0ZW0tPm9wdGlvbi5hcmdEZXNjcmlwKSA6IE5VTEwpOworICAgIGl0ZW0tPmFyZ2MgPSBuZXdJdGVtLT5hcmdjOworICAgIGl0ZW0tPmFyZ3YgPSBuZXdJdGVtLT5hcmd2OworCisgICAgKCpuaXRlbXMpKys7CisKKyAgICByZXR1cm4gMDsKK30KKy8qQD1tdXN0bW9kQCovCisvKkA9Ym91bmRzd3JpdGVAKi8KKworY29uc3QgY2hhciAqIHBvcHRCYWRPcHRpb24ocG9wdENvbnRleHQgY29uLCBpbnQgZmxhZ3MpCit7CisgICAgc3RydWN0IG9wdGlvblN0YWNrRW50cnkgKiBvcyA9IE5VTEw7CisKKyAgICBpZiAoY29uICE9IE5VTEwpCisJb3MgPSAoZmxhZ3MgJiBQT1BUX0JBRE9QVElPTl9OT0FMSUFTKSA/IGNvbi0+b3B0aW9uU3RhY2sgOiBjb24tPm9zOworCisgICAgLypALW51bGxkZXJlZkAqLwkvKiBMQ0w6IG9zLT5hcmd2ICE9IE5VTEwgKi8KKyAgICByZXR1cm4gKG9zICYmIG9zLT5hcmd2ID8gb3MtPmFyZ3Zbb3MtPm5leHQgLSAxXSA6IE5VTEwpOworICAgIC8qQD1udWxsZGVyZWZAKi8KK30KKworY29uc3QgY2hhciAqIHBvcHRTdHJlcnJvcihjb25zdCBpbnQgZXJyb3IpCit7CisgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgY2FzZSBQT1BUX0VSUk9SX05PQVJHOgorCXJldHVybiBQT1BUXygibWlzc2luZyBhcmd1bWVudCIpOworICAgICAgY2FzZSBQT1BUX0VSUk9SX0JBRE9QVDoKKwlyZXR1cm4gUE9QVF8oInVua25vd24gb3B0aW9uIik7CisgICAgICBjYXNlIFBPUFRfRVJST1JfQkFET1BFUkFUSU9OOgorCXJldHVybiBQT1BUXygibXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQiKTsKKyAgICAgIGNhc2UgUE9QVF9FUlJPUl9OVUxMQVJHOgorCXJldHVybiBQT1BUXygib3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMIik7CisgICAgICBjYXNlIFBPUFRfRVJST1JfT1BUU1RPT0RFRVA6CisJcmV0dXJuIFBPUFRfKCJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5Iik7CisgICAgICBjYXNlIFBPUFRfRVJST1JfQkFEUVVPVEU6CisJcmV0dXJuIFBPUFRfKCJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIpOworICAgICAgY2FzZSBQT1BUX0VSUk9SX0JBRE5VTUJFUjoKKwlyZXR1cm4gUE9QVF8oImludmFsaWQgbnVtZXJpYyB2YWx1ZSIpOworICAgICAgY2FzZSBQT1BUX0VSUk9SX09WRVJGTE9XOgorCXJldHVybiBQT1BUXygibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiKTsKKyAgICAgIGNhc2UgUE9QVF9FUlJPUl9NQUxMT0M6CisJcmV0dXJuIFBPUFRfKCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiKTsKKyAgICAgIGNhc2UgUE9QVF9FUlJPUl9FUlJOTzoKKwlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOworICAgICAgZGVmYXVsdDoKKwlyZXR1cm4gUE9QVF8oInVua25vd24gZXJyb3IiKTsKKyAgICB9Cit9CisKK2ludCBwb3B0U3R1ZmZBcmdzKHBvcHRDb250ZXh0IGNvbiwgY29uc3QgY2hhciAqKiBhcmd2KQoreworICAgIGludCBhcmdjOworICAgIGludCByYzsKKworICAgIGlmICgoY29uLT5vcyAtIGNvbi0+b3B0aW9uU3RhY2spID09IFBPUFRfT1BUSU9OX0RFUFRIKQorCXJldHVybiBQT1BUX0VSUk9SX09QVFNUT09ERUVQOworCisgICAgZm9yIChhcmdjID0gMDsgYXJndlthcmdjXTsgYXJnYysrKQorCXt9OworCisgICAgY29uLT5vcysrOworICAgIGNvbi0+b3MtPm5leHQgPSAwOworICAgIGNvbi0+b3MtPm5leHRBcmcgPSBOVUxMOworICAgIGNvbi0+b3MtPm5leHRDaGFyQXJnID0gTlVMTDsKKyAgICBjb24tPm9zLT5jdXJyQWxpYXMgPSBOVUxMOworICAgIHJjID0gcG9wdER1cEFyZ3YoYXJnYywgYXJndiwgJmNvbi0+b3MtPmFyZ2MsICZjb24tPm9zLT5hcmd2KTsKKyAgICBjb24tPm9zLT5hcmdiID0gTlVMTDsKKyAgICBjb24tPm9zLT5zdHVmZmVkID0gMTsKKworICAgIHJldHVybiByYzsKK30KKworY29uc3QgY2hhciAqIHBvcHRHZXRJbnZvY2F0aW9uTmFtZShwb3B0Q29udGV4dCBjb24pCit7CisgICAgcmV0dXJuIChjb24tPm9zLT5hcmd2ID8gY29uLT5vcy0+YXJndlswXSA6ICIiKTsKK30KKworLypALWJvdW5kc3dyaXRlQCovCitpbnQgcG9wdFN0cmlwcGVkQXJndihwb3B0Q29udGV4dCBjb24sIGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCit7CisgICAgaW50IG51bWFyZ3MgPSBhcmdjOworICAgIGludCBqID0gMTsKKyAgICBpbnQgaTsKKyAgICAKKyAgICAvKkAtc2l6ZW9mdHlwZUAqLworICAgIGlmIChjb24tPmFyZ19zdHJpcCkKKyAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJaWYgKFBCTV9JU1NFVChpLCBjb24tPmFyZ19zdHJpcCkpCisJICAgIG51bWFyZ3MtLTsKKyAgICB9CisgICAgCisgICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCWlmIChjb24tPmFyZ19zdHJpcCAmJiBQQk1fSVNTRVQoaSwgY29uLT5hcmdfc3RyaXApKQorCSAgICBjb250aW51ZTsKKwlhcmd2W2pdID0gKGogPCBudW1hcmdzKSA/IGFyZ3ZbaV0gOiBOVUxMOworCWorKzsKKyAgICB9CisgICAgLypAPXNpemVvZnR5cGVAKi8KKyAgICAKKyAgICByZXR1cm4gbnVtYXJnczsKK30KKy8qQD1ib3VuZHN3cml0ZUAqLwpkaWZmIC0tZ2l0IGEvbGlicG9wdC9wb3B0LmggYi9saWJwb3B0L3BvcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjg1ZDllCi0tLSAvZGV2L251bGwKKysrIGIvbGlicG9wdC9wb3B0LmgKQEAgLTAsMCArMSw1NjQgQEAKKy8qKiBcZmlsZSBwb3B0L3BvcHQuaAorICogXGluZ3JvdXAgcG9wdAorICovCisKKy8qIChDKSAxOTk4LTIwMDAgUmVkIEhhdCwgSW5jLiAtLSBMaWNlbnNpbmcgZGV0YWlscyBhcmUgaW4gdGhlIENPUFlJTkcKKyAgIGZpbGUgYWNjb21wYW55aW5nIHBvcHQgc291cmNlIGRpc3RyaWJ1dGlvbnMsIGF2YWlsYWJsZSBmcm9tIAorICAgZnRwOi8vZnRwLnJwbS5vcmcvcHViL3JwbS9kaXN0LiAqLworCisjaWZuZGVmIEhfUE9QVAorI2RlZmluZSBIX1BPUFQKKworI2luY2x1ZGUgPHN0ZGlvLmg+CQkJLyogZm9yIEZJTEUgKiAqLworCisjZGVmaW5lIFBPUFRfT1BUSU9OX0RFUFRICTEwCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcbmFtZSBBcmcgdHlwZSBpZGVudGlmaWVycworICovCisvKkB7Ki8KKyNkZWZpbmUgUE9QVF9BUkdfTk9ORQkJMAkvKiE8IG5vIGFyZyAqLworI2RlZmluZSBQT1BUX0FSR19TVFJJTkcJCTEJLyohPCBhcmcgd2lsbCBiZSBzYXZlZCBhcyBzdHJpbmcgKi8KKyNkZWZpbmUgUE9QVF9BUkdfSU5UCQkyCS8qITwgYXJnIHdpbGwgYmUgY29udmVydGVkIHRvIGludCAqLworI2RlZmluZSBQT1BUX0FSR19MT05HCQkzCS8qITwgYXJnIHdpbGwgYmUgY29udmVydGVkIHRvIGxvbmcgKi8KKyNkZWZpbmUgUE9QVF9BUkdfSU5DTFVERV9UQUJMRQk0CS8qITwgYXJnIHBvaW50cyB0byB0YWJsZSAqLworI2RlZmluZSBQT1BUX0FSR19DQUxMQkFDSwk1CS8qITwgdGFibGUtd2lkZSBjYWxsYmFjay4uLiBtdXN0IGJlCisJCQkJCSAgIHNldCBmaXJzdCBpbiB0YWJsZTsgYXJnIHBvaW50cyAKKwkJCQkJICAgdG8gY2FsbGJhY2ssIGRlc2NyaXAgcG9pbnRzIHRvIAorCQkJCQkgICBjYWxsYmFjayBkYXRhIHRvIHBhc3MgKi8KKyNkZWZpbmUgUE9QVF9BUkdfSU5UTF9ET01BSU4gICAgNiAgICAgICAvKiE8IHNldCB0aGUgdHJhbnNsYXRpb24gZG9tYWluCisJCQkJCSAgIGZvciB0aGlzIHRhYmxlIGFuZCBhbnkKKwkJCQkJICAgaW5jbHVkZWQgdGFibGVzOyBhcmcgcG9pbnRzCisJCQkJCSAgIHRvIHRoZSBkb21haW4gc3RyaW5nICovCisjZGVmaW5lIFBPUFRfQVJHX1ZBTAkJNwkvKiE8IGFyZyBzaG91bGQgdGFrZSB2YWx1ZSB2YWwgKi8KKyNkZWZpbmUJUE9QVF9BUkdfRkxPQVQJCTgJLyohPCBhcmcgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gZmxvYXQgKi8KKyNkZWZpbmUJUE9QVF9BUkdfRE9VQkxFCQk5CS8qITwgYXJnIHdpbGwgYmUgY29udmVydGVkIHRvIGRvdWJsZSAqLworCisjZGVmaW5lIFBPUFRfQVJHX01BU0sJCTB4MDAwMEZGRkYKKy8qQH0qLworCisvKiogXGluZ3JvdXAgcG9wdAorICogXG5hbWUgQXJnIG1vZGlmaWVycworICovCisvKkB7Ki8KKyNkZWZpbmUgUE9QVF9BUkdGTEFHX09ORURBU0gJMHg4MDAwMDAwMCAgLyohPCBhbGxvdyAtbG9uZ29wdGlvbiAqLworI2RlZmluZSBQT1BUX0FSR0ZMQUdfRE9DX0hJRERFTiAweDQwMDAwMDAwICAvKiE8IGRvbid0IHNob3cgaW4gaGVscC91c2FnZSAqLworI2RlZmluZSBQT1BUX0FSR0ZMQUdfU1RSSVAJMHgyMDAwMDAwMCAgLyohPCBzdHJpcCB0aGlzIGFyZyBmcm9tIGFyZ3Yob25seSBhcHBsaWVzIHRvIGxvbmcgYXJncykgKi8KKyNkZWZpbmUJUE9QVF9BUkdGTEFHX09QVElPTkFMCTB4MTAwMDAwMDAgIC8qITwgYXJnIG1heSBiZSBtaXNzaW5nICovCisKKyNkZWZpbmUJUE9QVF9BUkdGTEFHX09SCQkweDA4MDAwMDAwICAvKiE8IGFyZyB3aWxsIGJlIG9yJ2VkICovCisjZGVmaW5lCVBPUFRfQVJHRkxBR19OT1IJMHgwOTAwMDAwMCAgLyohPCBhcmcgd2lsbCBiZSBub3InZWQgKi8KKyNkZWZpbmUJUE9QVF9BUkdGTEFHX0FORAkweDA0MDAwMDAwICAvKiE8IGFyZyB3aWxsIGJlIGFuZCdlZCAqLworI2RlZmluZQlQT1BUX0FSR0ZMQUdfTkFORAkweDA1MDAwMDAwICAvKiE8IGFyZyB3aWxsIGJlIG5hbmQnZWQgKi8KKyNkZWZpbmUJUE9QVF9BUkdGTEFHX1hPUgkweDAyMDAwMDAwICAvKiE8IGFyZyB3aWxsIGJlIHhvcidlZCAqLworI2RlZmluZQlQT1BUX0FSR0ZMQUdfTk9UCTB4MDEwMDAwMDAgIC8qITwgYXJnIHdpbGwgYmUgbmVnYXRlZCAqLworI2RlZmluZSBQT1BUX0FSR0ZMQUdfTE9HSUNBTE9QUyBcCisgICAgICAgIChQT1BUX0FSR0ZMQUdfT1J8UE9QVF9BUkdGTEFHX0FORHxQT1BUX0FSR0ZMQUdfWE9SKQorCisjZGVmaW5lCVBPUFRfQklUX1NFVAkoUE9QVF9BUkdfVkFMfFBPUFRfQVJHRkxBR19PUikKKwkJCQkJLyohPCBzZXQgYXJnIGJpdChzKSAqLworI2RlZmluZQlQT1BUX0JJVF9DTFIJKFBPUFRfQVJHX1ZBTHxQT1BUX0FSR0ZMQUdfTkFORCkKKwkJCQkJLyohPCBjbGVhciBhcmcgYml0KHMpICovCisKKyNkZWZpbmUJUE9QVF9BUkdGTEFHX1NIT1dfREVGQVVMVCAweDAwODAwMDAwIC8qITwgc2hvdyBkZWZhdWx0IHZhbHVlIGluIC0taGVscCAqLworCisvKkB9Ki8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxuYW1lIENhbGxiYWNrIG1vZGlmaWVycworICovCisvKkB7Ki8KKyNkZWZpbmUgUE9QVF9DQkZMQUdfUFJFCQkweDgwMDAwMDAwICAvKiE8IGNhbGwgdGhlIGNhbGxiYWNrIGJlZm9yZSBwYXJzZSAqLworI2RlZmluZSBQT1BUX0NCRkxBR19QT1NUCTB4NDAwMDAwMDAgIC8qITwgY2FsbCB0aGUgY2FsbGJhY2sgYWZ0ZXIgcGFyc2UgKi8KKyNkZWZpbmUgUE9QVF9DQkZMQUdfSU5DX0RBVEEJMHgyMDAwMDAwMCAgLyohPCB1c2UgZGF0YSBmcm9tIHRoZSBpbmNsdWRlIGxpbmUsCisJCQkJCSAgICAgICBub3QgdGhlIHN1YnRhYmxlICovCisjZGVmaW5lIFBPUFRfQ0JGTEFHX1NLSVBPUFRJT04JMHgxMDAwMDAwMCAgLyohPCBkb24ndCBjYWxsYmFjayB3aXRoIG9wdGlvbiAqLworI2RlZmluZSBQT1BUX0NCRkxBR19DT05USU5VRQkweDA4MDAwMDAwICAvKiE8IGNvbnRpbnVlIGNhbGxiYWNrcyB3aXRoIG9wdGlvbiAqLworLypAfSovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcbmFtZSBFcnJvciByZXR1cm4gdmFsdWVzCisgKi8KKy8qQHsqLworI2RlZmluZSBQT1BUX0VSUk9SX05PQVJHCS0xMAkvKiE8IG1pc3NpbmcgYXJndW1lbnQgKi8KKyNkZWZpbmUgUE9QVF9FUlJPUl9CQURPUFQJLTExCS8qITwgdW5rbm93biBvcHRpb24gKi8KKyNkZWZpbmUgUE9QVF9FUlJPUl9PUFRTVE9PREVFUAktMTMJLyohPCBhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5ICovCisjZGVmaW5lIFBPUFRfRVJST1JfQkFEUVVPVEUJLTE1CS8qITwgZXJyb3IgaW4gcGFyYW10ZXIgcXVvdGluZyAqLworI2RlZmluZSBQT1BUX0VSUk9SX0VSUk5PCS0xNgkvKiE8IGVycm5vIHNldCwgdXNlIHN0cmVycm9yKGVycm5vKSAqLworI2RlZmluZSBQT1BUX0VSUk9SX0JBRE5VTUJFUgktMTcJLyohPCBpbnZhbGlkIG51bWVyaWMgdmFsdWUgKi8KKyNkZWZpbmUgUE9QVF9FUlJPUl9PVkVSRkxPVwktMTgJLyohPCBudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCAqLworI2RlZmluZQlQT1BUX0VSUk9SX0JBRE9QRVJBVElPTgktMTkJLyohPCBtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCAqLworI2RlZmluZQlQT1BUX0VSUk9SX05VTExBUkcJLTIwCS8qITwgb3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMICovCisjZGVmaW5lCVBPUFRfRVJST1JfTUFMTE9DCS0yMQkvKiE8IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworLypAfSovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcbmFtZSBwb3B0QmFkT3B0aW9uKCkgZmxhZ3MKKyAqLworLypAeyovCisjZGVmaW5lIFBPUFRfQkFET1BUSU9OX05PQUxJQVMgICgxIDw8IDApICAvKiE8IGRvbid0IGdvIGludG8gYW4gYWxpYXMgKi8KKy8qQH0qLworCisvKiogXGluZ3JvdXAgcG9wdAorICogXG5hbWUgcG9wdEdldENvbnRleHQoKSBmbGFncworICovCisvKkB7Ki8KKyNkZWZpbmUgUE9QVF9DT05URVhUX05PX0VYRUMJKDEgPDwgMCkgIC8qITwgaWdub3JlIGV4ZWMgZXhwYW5zaW9ucyAqLworI2RlZmluZSBQT1BUX0NPTlRFWFRfS0VFUF9GSVJTVAkoMSA8PCAxKSAgLyohPCBwYXkgYXR0ZW50aW9uIHRvIGFyZ3ZbMF0gKi8KKyNkZWZpbmUgUE9QVF9DT05URVhUX1BPU0lYTUVIQVJERVIgKDEgPDwgMikgLyohPCBvcHRpb25zIGNhbid0IGZvbGxvdyBhcmdzICovCisjZGVmaW5lIFBPUFRfQ09OVEVYVF9BUkdfT1BUUwkoMSA8PCA0KSAvKiE8IHJldHVybiBhcmdzIGFzIG9wdGlvbnMgd2l0aCB2YWx1ZSAwICovCisvKkB9Ki8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqLworc3RydWN0IHBvcHRPcHRpb24geworLypAb2JzZXJ2ZXJAKi8gLypAbnVsbEAqLworICAgIGNvbnN0IGNoYXIgKiBsb25nTmFtZTsJLyohPCBtYXkgYmUgTlVMTCAqLworICAgIGNoYXIgc2hvcnROYW1lOwkJLyohPCBtYXkgYmUgTlVMICovCisgICAgaW50IGFyZ0luZm87CisvKkBzaGFyZWRAKi8gLypAbnVsbEAqLworICAgIHZvaWQgKiBhcmc7CQkJLyohPCBkZXBlbmRzIG9uIGFyZ0luZm8gKi8KKyAgICBpbnQgdmFsOwkJCS8qITwgMCBtZWFucyBkb24ndCByZXR1cm4sIGp1c3QgdXBkYXRlIGZsYWcgKi8KKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8KKyAgICBjb25zdCBjaGFyICogZGVzY3JpcDsJLyohPCBkZXNjcmlwdGlvbiBmb3IgYXV0b2hlbHAgLS0gbWF5IGJlIE5VTEwgKi8KKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8KKyAgICBjb25zdCBjaGFyICogYXJnRGVzY3JpcDsJLyohPCBhcmd1bWVudCBkZXNjcmlwdGlvbiBmb3IgYXV0b2hlbHAgKi8KK307CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBBIHBvcHQgYWxpYXMgYXJndW1lbnQgZm9yIHBvcHRBZGRBbGlhcygpLgorICovCitzdHJ1Y3QgcG9wdEFsaWFzIHsKKy8qQG93bmVkQCovIC8qQG51bGxAKi8KKyAgICBjb25zdCBjaGFyICogbG9uZ05hbWU7CS8qITwgbWF5IGJlIE5VTEwgKi8KKyAgICBjaGFyIHNob3J0TmFtZTsJCS8qITwgbWF5IGJlIE5VTCAqLworICAgIGludCBhcmdjOworLypAb3duZWRAKi8KKyAgICBjb25zdCBjaGFyICoqIGFyZ3Y7CQkvKiE8IG11c3QgYmUgZnJlZSgpYWJsZSAqLworfTsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIEEgcG9wdCBhbGlhcyBvciBleGVjIGFyZ3VtZW50IGZvciBwb3B0QWRkSXRlbSgpLgorICovCisvKkAtZXhwb3J0dHlwZUAqLwordHlwZWRlZiBzdHJ1Y3QgcG9wdEl0ZW1fcyB7CisgICAgc3RydWN0IHBvcHRPcHRpb24gb3B0aW9uOwkvKiE8IGFsaWFzL2V4ZWMgbmFtZShzKSBhbmQgZGVzY3JpcHRpb24uICovCisgICAgaW50IGFyZ2M7CQkJLyohPCAoYWxpYXMpIG5vLiBvZiBhcmdzLiAqLworLypAb3duZWRAKi8KKyAgICBjb25zdCBjaGFyICoqIGFyZ3Y7CQkvKiE8IChhbGlhcykgYXJncywgbXVzdCBiZSBmcmVlKClhYmxlLiAqLworfSAqIHBvcHRJdGVtOworLypAPWV4cG9ydHR5cGVAKi8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxuYW1lIEF1dG8tZ2VuZXJhdGVkIGhlbHAvdXNhZ2UKKyAqLworLypAeyovCisKKy8qKgorICogRW1wdHkgdGFibGUgbWFya2VyIHRvIGVuYWJsZSBkaXNwbGF5aW5nIHBvcHQgYWxpYXMvZXhlYyBvcHRpb25zLgorICovCisvKkAtZXhwb3J0dmFyQCovCisvKkB1bmNoZWNrZWRAKi8gLypAb2JzZXJ2ZXJAKi8KK2V4dGVybiBzdHJ1Y3QgcG9wdE9wdGlvbiBwb3B0QWxpYXNPcHRpb25zW107CisvKkA9ZXhwb3J0dmFyQCovCisjZGVmaW5lIFBPUFRfQVVUT0FMSUFTIHsgTlVMTCwgJ1wwJywgUE9QVF9BUkdfSU5DTFVERV9UQUJMRSwgcG9wdEFsaWFzT3B0aW9ucywgXAorCQkJMCwgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiLCBOVUxMIH0sCisKKy8qKgorICogQXV0byBoZWxwIHRhYmxlIG9wdGlvbnMuCisgKi8KKy8qQC1leHBvcnR2YXJAKi8KKy8qQHVuY2hlY2tlZEAqLyAvKkBvYnNlcnZlckAqLworZXh0ZXJuIHN0cnVjdCBwb3B0T3B0aW9uIHBvcHRIZWxwT3B0aW9uc1tdOworLypAPWV4cG9ydHZhckAqLworCisvKkAtZXhwb3J0dmFyQCovCisvKkB1bmNoZWNrZWRAKi8gLypAb2JzZXJ2ZXJAKi8KK2V4dGVybiBzdHJ1Y3QgcG9wdE9wdGlvbiAqIHBvcHRIZWxwT3B0aW9uc0kxOE47CisvKkA9ZXhwb3J0dmFyQCovCisKKyNkZWZpbmUgUE9QVF9BVVRPSEVMUCB7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUsIHBvcHRIZWxwT3B0aW9ucywgXAorCQkJMCwgIkhlbHAgb3B0aW9uczoiLCBOVUxMIH0sCisKKyNkZWZpbmUgUE9QVF9UQUJMRUVORCB7IE5VTEwsICdcMCcsIDAsIDAsIDAsIE5VTEwsIE5VTEwgfQorLypAfSovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKi8KKy8qQC1leHBvcnR0eXBlQCovCit0eXBlZGVmIC8qQGFic3RyYWN0QCovIHN0cnVjdCBwb3B0Q29udGV4dF9zICogcG9wdENvbnRleHQ7CisvKkA9ZXhwb3J0dHlwZUAqLworCisvKiogXGluZ3JvdXAgcG9wdAorICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKkAtZXhwb3J0dHlwZSAtdHlwZXVzZUAqLwordHlwZWRlZiBzdHJ1Y3QgcG9wdE9wdGlvbiAqIHBvcHRPcHRpb247CisvKkA9ZXhwb3J0dHlwZSA9dHlwZXVzZUAqLworI2VuZGlmCisKKy8qQC1leHBvcnRjb25zdEAqLworZW51bSBwb3B0Q2FsbGJhY2tSZWFzb24geworICAgIFBPUFRfQ0FMTEJBQ0tfUkVBU09OX1BSRQk9IDAsIAorICAgIFBPUFRfQ0FMTEJBQ0tfUkVBU09OX1BPU1QJPSAxLAorICAgIFBPUFRfQ0FMTEJBQ0tfUkVBU09OX09QVElPTiA9IDIKK307CisvKkA9ZXhwb3J0Y29uc3RAKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorLypALXR5cGVAKi8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFRhYmxlIGNhbGxiYWNrIHByb3RvdHlwZS4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSByZWFzb24JcmVhc29uIGZvciBjYWxsYmFjaworICogQHBhcmFtIG9wdAkJb3B0aW9uIHRoYXQgdHJpZ2dlcmVkIGNhbGxiYWNrCisgKiBAcGFyYW0gYXJnCQlAdG9kbyBEb2N1bWVudC4KKyAqIEBwYXJhbSBkYXRhCQlAdG9kbyBEb2N1bWVudC4KKyAqLwordHlwZWRlZiB2b2lkICgqcG9wdENhbGxiYWNrVHlwZSkgKHBvcHRDb250ZXh0IGNvbiwgCisJCWVudW0gcG9wdENhbGxiYWNrUmVhc29uIHJlYXNvbiwKKwkJLypAbnVsbEAqLyBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICogYXJnLAorCQkvKkBudWxsQCovIGNvbnN0IHZvaWQgKiBkYXRhKQorCS8qQGdsb2JhbHMgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyBpbnRlcm5hbFN0YXRlIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIEluaXRpYWxpemUgcG9wdCBjb250ZXh0LgorICogQHBhcmFtIG5hbWUJCWNvbnRleHQgbmFtZSAodXN1YWxseSBhcmd2WzBdIHByb2dyYW0gbmFtZSkKKyAqIEBwYXJhbSBhcmdjCQluby4gb2YgYXJndW1lbnRzCisgKiBAcGFyYW0gYXJndgkJYXJndW1lbnQgYXJyYXkKKyAqIEBwYXJhbSBvcHRpb25zCWFkZHJlc3Mgb2YgcG9wdCBvcHRpb24gdGFibGUKKyAqIEBwYXJhbSBmbGFncwkJb3InZCBQT1BUX0NPTlRFWFRfKiBiaXRzCisgKiBAcmV0dXJuCQlpbml0aWFsaXplZCBwb3B0IGNvbnRleHQKKyAqLworLypAb25seUAqLyAvKkBudWxsQCovCitwb3B0Q29udGV4dCBwb3B0R2V0Q29udGV4dCgKKwkJLypAZGVwZW5kZW50QCovIC8qQGtlZXBAKi8gY29uc3QgY2hhciAqIG5hbWUsCisJCWludCBhcmdjLCAvKkBkZXBlbmRlbnRAKi8gLypAa2VlcEAqLyBjb25zdCBjaGFyICoqIGFyZ3YsCisJCS8qQGRlcGVuZGVudEAqLyAvKkBrZWVwQCovIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogb3B0aW9ucywKKwkJaW50IGZsYWdzKQorCS8qQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmVpbml0aWFsaXplIHBvcHQgY29udGV4dC4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqLworLypAdW51c2VkQCovCit2b2lkIHBvcHRSZXNldENvbnRleHQoLypAbnVsbEAqL3BvcHRDb250ZXh0IGNvbikKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmV0dXJuIHZhbHVlIG9mIG5leHQgb3B0aW9uIGZvdW5kLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHJldHVybgkJbmV4dCBvcHRpb24gdmFsLCAtMSBvbiBsYXN0IGl0ZW0sIFBPUFRfRVJST1JfKiBvbiBlcnJvcgorICovCitpbnQgcG9wdEdldE5leHRPcHQoLypAbnVsbEAqL3BvcHRDb250ZXh0IGNvbikKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgY29uLCBmaWxlU3lzdGVtLCBpbnRlcm5hbFN0YXRlIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFJldHVybiBuZXh0IG9wdGlvbiBhcmd1bWVudCAoaWYgYW55KS4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEByZXR1cm4JCW9wdGlvbiBhcmd1bWVudCwgTlVMTCBpZiBubyBhcmd1bWVudCBpcyBhdmFpbGFibGUKKyAqLworLypAb2JzZXJ2ZXJAKi8gLypAbnVsbEAqLyAvKkB1bnVzZWRAKi8KK2NvbnN0IGNoYXIgKiBwb3B0R2V0T3B0QXJnKC8qQG51bGxAKi9wb3B0Q29udGV4dCBjb24pCisJLypAbW9kaWZpZXMgY29uIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFJldHVybiBuZXh0IGFyZ3VtZW50LgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHJldHVybgkJbmV4dCBhcmd1bWVudCwgTlVMTCBpZiBubyBhcmd1bWVudCBpcyBhdmFpbGFibGUKKyAqLworLypAb2JzZXJ2ZXJAKi8gLypAbnVsbEAqLyAvKkB1bnVzZWRAKi8KK2NvbnN0IGNoYXIgKiBwb3B0R2V0QXJnKC8qQG51bGxAKi9wb3B0Q29udGV4dCBjb24pCisJLypAbW9kaWZpZXMgY29uIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFBlZWsgYXQgY3VycmVudCBhcmd1bWVudC4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEByZXR1cm4JCWN1cnJlbnQgYXJndW1lbnQsIE5VTEwgaWYgbm8gYXJndW1lbnQgaXMgYXZhaWxhYmxlCisgKi8KKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8gLypAdW51c2VkQCovCitjb25zdCBjaGFyICogcG9wdFBlZWtBcmcoLypAbnVsbEAqL3BvcHRDb250ZXh0IGNvbikKKwkvKkAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFJldHVybiByZW1haW5pbmcgYXJndW1lbnRzLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHJldHVybgkJYXJndW1lbnQgYXJyYXksIE5VTEwgdGVybWluYXRlZAorICovCisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovCitjb25zdCBjaGFyICoqIHBvcHRHZXRBcmdzKC8qQG51bGxAKi9wb3B0Q29udGV4dCBjb24pCisJLypAbW9kaWZpZXMgY29uIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFJldHVybiB0aGUgb3B0aW9uIHdoaWNoIGNhdXNlZCB0aGUgbW9zdCByZWNlbnQgZXJyb3IuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gZmxhZ3MKKyAqIEByZXR1cm4JCW9mZmVuZGluZyBvcHRpb24KKyAqLworLypAb2JzZXJ2ZXJAKi8KK2NvbnN0IGNoYXIgKiBwb3B0QmFkT3B0aW9uKC8qQG51bGxAKi9wb3B0Q29udGV4dCBjb24sIGludCBmbGFncykKKwkvKkAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIERlc3Ryb3kgY29udGV4dC4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEByZXR1cm4JCU5VTEwgYWx3YXlzCisgKi8KKy8qQG51bGxAKi8KK3BvcHRDb250ZXh0IHBvcHRGcmVlQ29udGV4dCggLypAb25seUAqLyAvKkBudWxsQCovIHBvcHRDb250ZXh0IGNvbikKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogQWRkIGFyZ3VtZW50cyB0byBjb250ZXh0LgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIGFyZ3YJCWFyZ3VtZW50IGFycmF5LCBOVUxMIHRlcm1pbmF0ZWQKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9PUFRTVE9PREVFUCBvbiBmYWlsdXJlCisgKi8KKy8qQHVudXNlZEAqLworaW50IHBvcHRTdHVmZkFyZ3MocG9wdENvbnRleHQgY29uLCAvKkBrZWVwQCovIGNvbnN0IGNoYXIgKiogYXJndikKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogQWRkIGFsaWFzIHRvIGNvbnRleHQuCisgKiBAdG9kbyBQYXNzIGFsaWFzIGJ5IHJlZmVyZW5jZSwgbm90IHZhbHVlLgorICogQGRlcHJlY2F0ZWQgVXNlIHBvcHRBZGRJdGVtIGluc3RlYWQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gYWxpYXMJCWFsaWFzIHRvIGFkZAorICogQHBhcmFtIGZsYWdzCQkodW51c2VkKQorICogQHJldHVybgkJMCBvbiBzdWNjZXNzCisgKi8KKy8qQHVudXNlZEAqLworaW50IHBvcHRBZGRBbGlhcyhwb3B0Q29udGV4dCBjb24sIHN0cnVjdCBwb3B0QWxpYXMgYWxpYXMsIGludCBmbGFncykKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogQWRkIGFsaWFzL2V4ZWMgaXRlbSB0byBjb250ZXh0LgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIG5ld0l0ZW0JYWxpYXMvZXhlYyBpdGVtIHRvIGFkZAorICogQHBhcmFtIGZsYWdzCQkwIGZvciBhbGlhcywgMSBmb3IgZXhlYworICogQHJldHVybgkJMCBvbiBzdWNjZXNzCisgKi8KK2ludCBwb3B0QWRkSXRlbShwb3B0Q29udGV4dCBjb24sIHBvcHRJdGVtIG5ld0l0ZW0sIGludCBmbGFncykKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmVhZCBjb25maWd1cmF0aW9uIGZpbGUuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gZm4JCWZpbGUgbmFtZSB0byByZWFkCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MsIFBPUFRfRVJST1JfRVJSTk8gb24gZmFpbHVyZQorICovCitpbnQgcG9wdFJlYWRDb25maWdGaWxlKHBvcHRDb250ZXh0IGNvbiwgY29uc3QgY2hhciAqIGZuKQorCS8qQGdsb2JhbHMgZXJybm8sIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgY29uLT5leGVjcywgY29uLT5udW1FeGVjcywKKwkJZXJybm8sIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmVhZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSAvZXRjL3BvcHQgYW5kICRIT01FLy5wb3B0LgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIHVzZUVudgkodW51c2VkKQorICogQHJldHVybgkJMCBvbiBzdWNjZXNzLCBQT1BUX0VSUk9SX0VSUk5PIG9uIGZhaWx1cmUKKyAqLworLypAdW51c2VkQCovCitpbnQgcG9wdFJlYWREZWZhdWx0Q29uZmlnKHBvcHRDb250ZXh0IGNvbiwgLypAdW51c2VkQCovIGludCB1c2VFbnYpCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtLCBpbnRlcm5hbFN0YXRlIEAqLworCS8qQG1vZGlmaWVzIGNvbi0+ZXhlY3MsIGNvbi0+bnVtRXhlY3MsCisJCWZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogRHVwbGljYXRlIGFuIGFyZ3VtZW50IGFycmF5LgorICogQG5vdGU6IFRoZSBhcmd1bWVudCBhcnJheSBpcyBtYWxsb2MnZCBhcyBhIHNpbmdsZSBhcmVhLCBzbyBvbmx5IGFyZ3YgbXVzdAorICogYmUgZnJlZSdkLgorICoKKyAqIEBwYXJhbSBhcmdjCQluby4gb2YgYXJndW1lbnRzCisgKiBAcGFyYW0gYXJndgkJYXJndW1lbnQgYXJyYXkKKyAqIEByZXR2YWwgYXJnY1B0cglhZGRyZXNzIG9mIHJldHVybmVkIG5vLiBvZiBhcmd1bWVudHMKKyAqIEByZXR2YWwgYXJndlB0cglhZGRyZXNzIG9mIHJldHVybmVkIGFyZ3VtZW50IGFycmF5CisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MsIFBPUFRfRVJST1JfTk9BUkcgb24gZmFpbHVyZQorICovCitpbnQgcG9wdER1cEFyZ3YoaW50IGFyZ2MsIC8qQG51bGxAKi8gY29uc3QgY2hhciAqKmFyZ3YsCisJCS8qQG51bGxAKi8gLypAb3V0QCovIGludCAqIGFyZ2NQdHIsCisJCS8qQG51bGxAKi8gLypAb3V0QCovIGNvbnN0IGNoYXIgKioqIGFyZ3ZQdHIpCisJLypAbW9kaWZpZXMgKmFyZ2NQdHIsICphcmd2UHRyIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFBhcnNlIGEgc3RyaW5nIGludG8gYW4gYXJndW1lbnQgYXJyYXkuCisgKiBUaGUgcGFyc2UgYWxsb3dzICcsICIsIGFuZCBcIHF1b3RpbmcsIGJ1dCAnIGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMgIiBhbmQKKyAqIGJvdGggbWF5IGluY2x1ZGUgXCBxdW90ZXMuCisgKiBAbm90ZTogVGhlIGFyZ3VtZW50IGFycmF5IGlzIG1hbGxvYydkIGFzIGEgc2luZ2xlIGFyZWEsIHNvIG9ubHkgYXJndiBtdXN0CisgKiBiZSBmcmVlJ2QuCisgKgorICogQHBhcmFtIHMJCXN0cmluZyB0byBwYXJzZQorICogQHJldHZhbCBhcmdjUHRyCWFkZHJlc3Mgb2YgcmV0dXJuZWQgbm8uIG9mIGFyZ3VtZW50cworICogQHJldHZhbCBhcmd2UHRyCWFkZHJlc3Mgb2YgcmV0dXJuZWQgYXJndW1lbnQgYXJyYXkKKyAqLworaW50IHBvcHRQYXJzZUFyZ3ZTdHJpbmcoY29uc3QgY2hhciAqIHMsCisJCS8qQG91dEAqLyBpbnQgKiBhcmdjUHRyLCAvKkBvdXRAKi8gY29uc3QgY2hhciAqKiogYXJndlB0cikKKwkvKkBtb2RpZmllcyAqYXJnY1B0ciwgKmFyZ3ZQdHIgQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUGFyc2VzIGFuIGlucHV0IGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgcmV0dXJucyBhbiBzdHJpbmcgdGhhdCBpcyBhIAorICogY29tbWFuZCBsaW5lLiAgRm9yIHVzZSB3aXRoIHBvcHQuICBZb3UgbXVzdCBmcmVlIHRoZSByZXR1cm4gdmFsdWUgd2hlbiBkb25lLgorICoKKyAqIEdpdmVuIHRoZSBmaWxlOgorXHZlcmJhdGltCisjIHRoaXMgbGluZSBpcyBpZ25vcmVkCisgICAgIyAgIHRoaXMgb25lIHRvbworYWFhCisgIGJiYgorICAgIGNjYyAgIAorYmxhPWJsYQorCit0aGlzX2lzICAgPSAgIGZkc2FmZGFzCisgICAgIGJhZF9saW5lPSAgICAgICAgCisgIHJlYWxsIGJhZCBsaW5lICAKKyAgcmVhbGwgYmFkIGxpbmUgID0gYWdhaW4KKzU1NTU9ICAgNTU1NTUgICAKKyAgdGVzdCA9IHdpdGggbG90cyBvZiBzcGFjZXMKK1xlbmR2ZXJiYXRpbQorKgorKiBUaGUgcmVzdWx0IGlzOgorXHZlcmJhdGltCistLWFhYSAtLWJiYiAtLWNjYyAtLWJsYT0iYmxhIiAtLXRoaXNfaXM9ImZkc2FmZGFzIiAtLTU1NTU9IjU1NTU1IiAtLXRlc3Q9IndpdGggbG90cyBvZiBzcGFjZXMiCitcZW5kdmVyYmF0aW0KKyoKKyogUGFzc2luZyB0aGlzIHRvIHBvcHRQYXJzZUFyZ3ZTdHJpbmcoKSB5aWVsZHMgYW4gYXJndiBvZjoKK1x2ZXJiYXRpbQorJy0tYWFhJworJy0tYmJiJyAKKyctLWNjYycgCisnLS1ibGE9YmxhJyAKKyctLXRoaXNfaXM9ZmRzYWZkYXMnIAorJy0tNTU1NT01NTU1NScgCisnLS10ZXN0PXdpdGggbG90cyBvZiBzcGFjZXMnIAorXGVuZHZlcmJhdGltCisgKgorICogQGJ1ZyBOVUxMIGlzIHJldHVybmVkIGlmIGZpbGUgbGluZSBpcyB0b28gbG9uZy4KKyAqIEBidWcgU2lsZW50bHkgaWdub3JlcyBpbnZhbGlkIGxpbmVzLgorICoKKyAqIEBwYXJhbSBmcAkJZmlsZSBoYW5kbGUgdG8gcmVhZAorICogQHBhcmFtICphcmdzdHJwCXJldHVybiBzdHJpbmcgb2Ygb3B0aW9ucyAobWFsbG9jJ2QpCisgKiBAcGFyYW0gZmxhZ3MJCXVudXNlZAorICogQHJldHVybgkJMCBvbiBzdWNjZXNzCisgKiBAc2VlCQkJcG9wdFBhcnNlQXJndlN0cmluZworICovCisvKkAtZmNudXNlQCovCitpbnQgcG9wdENvbmZpZ0ZpbGVUb1N0cmluZyhGSUxFICpmcCwgLypAb3V0QCovIGNoYXIgKiogYXJnc3RycCwgaW50IGZsYWdzKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSBAKi8KKwkvKkBtb2RpZmllcyAqZnAsICphcmdzdHJwLCBmaWxlU3lzdGVtIEAqLzsKKy8qQD1mY251c2VAKi8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFJldHVybiBmb3JtYXR0ZWQgZXJyb3Igc3RyaW5nIGZvciBwb3B0IGZhaWx1cmUuCisgKiBAcGFyYW0gZXJyb3IJCXBvcHQgZXJyb3IKKyAqIEByZXR1cm4JCWVycm9yIHN0cmluZworICovCisvKkBvYnNlcnZlckAqLworY29uc3QgY2hhciAqIHBvcHRTdHJlcnJvcihjb25zdCBpbnQgZXJyb3IpCisJLypAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBMaW1pdCBzZWFyY2ggZm9yIGV4ZWN1dGFibGVzLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIHBhdGgJCXNpbmdsZSBwYXRoIHRvIHNlYXJjaCBmb3IgZXhlY3V0YWJsZXMKKyAqIEBwYXJhbSBhbGxvd0Fic29sdXRlCWFic29sdXRlIHBhdGhzIG9ubHk/CisgKi8KKy8qQHVudXNlZEAqLwordm9pZCBwb3B0U2V0RXhlY1BhdGgocG9wdENvbnRleHQgY29uLCBjb25zdCBjaGFyICogcGF0aCwgaW50IGFsbG93QWJzb2x1dGUpCisJLypAbW9kaWZpZXMgY29uIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFByaW50IGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIG9wdGlvbnMuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gZnAJCW91cHV0IGZpbGUgaGFuZGxlCisgKiBAcGFyYW0gZmxhZ3MJCSh1bnVzZWQpCisgKi8KK3ZvaWQgcG9wdFByaW50SGVscChwb3B0Q29udGV4dCBjb24sIEZJTEUgKiBmcCwgLypAdW51c2VkQCovIGludCBmbGFncykKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCisJLypAbW9kaWZpZXMgKmZwLCBmaWxlU3lzdGVtIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFByaW50IHRlcnNlIGRlc2NyaXB0aW9uIG9mIG9wdGlvbnMuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gZnAJCW91cHV0IGZpbGUgaGFuZGxlCisgKiBAcGFyYW0gZmxhZ3MJCSh1bnVzZWQpCisgKi8KK3ZvaWQgcG9wdFByaW50VXNhZ2UocG9wdENvbnRleHQgY29uLCBGSUxFICogZnAsIC8qQHVudXNlZEAqLyBpbnQgZmxhZ3MpCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzICpmcCwgZmlsZVN5c3RlbSBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBQcm92aWRlIHRleHQgdG8gcmVwbGFjZSBkZWZhdWx0ICJbT1BUSU9OLi4uXSIgaW4gaGVscC91c2FnZSBvdXRwdXQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gdGV4dAkJcmVwbGFjZW1lbnQgdGV4dAorICovCisvKkAtZmNudXNlQCovCit2b2lkIHBvcHRTZXRPdGhlck9wdGlvbkhlbHAocG9wdENvbnRleHQgY29uLCBjb25zdCBjaGFyICogdGV4dCkKKwkvKkBtb2RpZmllcyBjb24gQCovOworLypAPWZjbnVzZUAqLworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmV0dXJuIGFyZ3ZbMF0gZnJvbSBjb250ZXh0LgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHJldHVybgkJYXJndlswXQorICovCisvKkAtZmNudXNlQCovCisvKkBvYnNlcnZlckAqLworY29uc3QgY2hhciAqIHBvcHRHZXRJbnZvY2F0aW9uTmFtZShwb3B0Q29udGV4dCBjb24pCisJLypAKi87CisvKkA9ZmNudXNlQCovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBTaHVmZmxlIGFyZ3YgcG9pbnRlcnMgdG8gcmVtb3ZlIHN0cmlwcGVkIGFyZ3MsIHJldHVybnMgbmV3IGFyZ2MuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gYXJnYwkJbm8uIG9mIGFyZ3MKKyAqIEBwYXJhbSBhcmd2CQlhcmcgdmVjdG9yCisgKiBAcmV0dXJuCQluZXcgYXJnYworICovCisvKkAtZmNudXNlQCovCitpbnQgcG9wdFN0cmlwcGVkQXJndihwb3B0Q29udGV4dCBjb24sIGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCisJLypAbW9kaWZpZXMgKmFyZ3YgQCovOworLypAPWZjbnVzZUAqLworCisvKioKKyAqIFNhdmUgYSBsb25nLCBwZXJmb3JtaW5nIGxvZ2ljYWwgb3BlcmF0aW9uIHdpdGggdmFsdWUuCisgKiBAd2FybmluZyBBbGlnbm1lbnQgY2hlY2sgbWF5IGJlIHRvbyBzdHJpY3Qgb24gY2VydGFpbiBwbGF0b3Jtcy4KKyAqIEBwYXJhbSBhcmcJCWludGVnZXIgcG9pbnRlciwgYWxpZ25lZCBvbiBpbnQgYm91bmRhcnkuCisgKiBAcGFyYW0gYXJnSW5mbwlsb2dpY2FsIG9wZXJhdGlvbiAoc2VlIFBPUFRfQVJHRkxBR18qKQorICogQHBhcmFtIGFMb25nCQl2YWx1ZSB0byB1c2UKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9OVUxMQVJHL1BPUFRfRVJST1JfQkFET1BFUkFUSU9OCisgKi8KKy8qQC1pbmNvbmRlZnNAKi8KKy8qQHVudXNlZEAqLworaW50IHBvcHRTYXZlTG9uZygvKkBudWxsQCovIGxvbmcgKiBhcmcsIGludCBhcmdJbmZvLCBsb25nIGFMb25nKQorCS8qQG1vZGlmaWVzICphcmcgQCovCisJLypAcmVxdWlyZXMgbWF4U2V0KGFyZykgPj0gMCAvXCBtYXhSZWFkKGFyZykgPT0gMCBAKi87CisvKkA9aW5jb25kZWZzQCovCisKKy8qKgorICogU2F2ZSBhbiBpbnRlZ2VyLCBwZXJmb3JtaW5nIGxvZ2ljYWwgb3BlcmF0aW9uIHdpdGggdmFsdWUuCisgKiBAd2FybmluZyBBbGlnbm1lbnQgY2hlY2sgbWF5IGJlIHRvbyBzdHJpY3Qgb24gY2VydGFpbiBwbGF0b3Jtcy4KKyAqIEBwYXJhbSBhcmcJCWludGVnZXIgcG9pbnRlciwgYWxpZ25lZCBvbiBpbnQgYm91bmRhcnkuCisgKiBAcGFyYW0gYXJnSW5mbwlsb2dpY2FsIG9wZXJhdGlvbiAoc2VlIFBPUFRfQVJHRkxBR18qKQorICogQHBhcmFtIGFMb25nCQl2YWx1ZSB0byB1c2UKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9OVUxMQVJHL1BPUFRfRVJST1JfQkFET1BFUkFUSU9OCisgKi8KKy8qQC1pbmNvbmRlZnNAKi8KKy8qQHVudXNlZEAqLworaW50IHBvcHRTYXZlSW50KC8qQG51bGxAKi8gaW50ICogYXJnLCBpbnQgYXJnSW5mbywgbG9uZyBhTG9uZykKKwkvKkBtb2RpZmllcyAqYXJnIEAqLworCS8qQHJlcXVpcmVzIG1heFNldChhcmcpID49IDAgL1wgbWF4UmVhZChhcmcpID09IDAgQCovOworLypAPWluY29uZGVmc0AqLworCisvKkA9dHlwZUAqLworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicG9wdC9wb3B0Y29uZmlnLmMgYi9saWJwb3B0L3BvcHRjb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWNiYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicG9wdC9wb3B0Y29uZmlnLmMKQEAgLTAsMCArMSwxODIgQEAKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcZmlsZSBwb3B0L3BvcHRjb25maWcuYworICovCisKKy8qIChDKSAxOTk4LTIwMDIgUmVkIEhhdCwgSW5jLiAtLSBMaWNlbnNpbmcgZGV0YWlscyBhcmUgaW4gdGhlIENPUFlJTkcKKyAgIGZpbGUgYWNjb21wYW55aW5nIHBvcHQgc291cmNlIGRpc3RyaWJ1dGlvbnMsIGF2YWlsYWJsZSBmcm9tIAorICAgZnRwOi8vZnRwLnJwbS5vcmcvcHViL3JwbS9kaXN0LiAqLworCisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAicG9wdGludC5oIgorLypAYWNjZXNzIHBvcHRDb250ZXh0IEAqLworCisvKkAtY29tcG1lbXBhc3NAKi8JLyogRklYOiBpdGVtLT5vcHRpb24ubG9uZ05hbWUga2VwdCwgbm90IGRlcGVuZGVudC4gKi8KK3N0YXRpYyB2b2lkIGNvbmZpZ0xpbmUocG9wdENvbnRleHQgY29uLCBjaGFyICogbGluZSkKKwkvKkBtb2RpZmllcyBjb24gQCovCit7CisgICAgc2l6ZV90IG5hbWVMZW5ndGg7CisgICAgY29uc3QgY2hhciAqIGVudHJ5VHlwZTsKKyAgICBjb25zdCBjaGFyICogb3B0OworICAgIHBvcHRJdGVtIGl0ZW0gPSBhbGxvY2Eoc2l6ZW9mKCppdGVtKSk7CisgICAgaW50IGksIGo7CisKKyAgICBpZiAoY29uLT5hcHBOYW1lID09IE5VTEwpCisJcmV0dXJuOworICAgIG5hbWVMZW5ndGggPSBzdHJsZW4oY29uLT5hcHBOYW1lKTsKKyAgICAKKy8qQC1ib3VuZHN3cml0ZUAqLworICAgIG1lbXNldChpdGVtLCAwLCBzaXplb2YoKml0ZW0pKTsKKworICAgIGlmIChzdHJuY21wKGxpbmUsIGNvbi0+YXBwTmFtZSwgbmFtZUxlbmd0aCkpIHJldHVybjsKKworICAgIGxpbmUgKz0gbmFtZUxlbmd0aDsKKyAgICBpZiAoKmxpbmUgPT0gJ1wwJyB8fCAhaXNzcGFjZSgqbGluZSkpIHJldHVybjsKKworICAgIHdoaWxlICgqbGluZSAhPSAnXDAnICYmIGlzc3BhY2UoKmxpbmUpKSBsaW5lKys7CisgICAgZW50cnlUeXBlID0gbGluZTsKKyAgICB3aGlsZSAoKmxpbmUgPT0gJ1wwJyB8fCAhaXNzcGFjZSgqbGluZSkpIGxpbmUrKzsKKyAgICAqbGluZSsrID0gJ1wwJzsKKworICAgIHdoaWxlICgqbGluZSAhPSAnXDAnICYmIGlzc3BhY2UoKmxpbmUpKSBsaW5lKys7CisgICAgaWYgKCpsaW5lID09ICdcMCcpIHJldHVybjsKKyAgICBvcHQgPSBsaW5lOworICAgIHdoaWxlICgqbGluZSA9PSAnXDAnIHx8ICFpc3NwYWNlKCpsaW5lKSkgbGluZSsrOworICAgICpsaW5lKysgPSAnXDAnOworCisgICAgd2hpbGUgKCpsaW5lICE9ICdcMCcgJiYgaXNzcGFjZSgqbGluZSkpIGxpbmUrKzsKKyAgICBpZiAoKmxpbmUgPT0gJ1wwJykgcmV0dXJuOworCisgICAgLypALXRlbXB0cmFuc0AqLyAvKiBGSVg6IGxpbmUgYWxpYXMgaXMgc2F2ZWQgKi8KKyAgICBpZiAob3B0WzBdID09ICctJyAmJiBvcHRbMV0gPT0gJy0nKQorCWl0ZW0tPm9wdGlvbi5sb25nTmFtZSA9IG9wdCArIDI7CisgICAgZWxzZSBpZiAob3B0WzBdID09ICctJyAmJiBvcHRbMl0gPT0gJ1wwJykKKwlpdGVtLT5vcHRpb24uc2hvcnROYW1lID0gb3B0WzFdOworICAgIC8qQD10ZW1wdHJhbnNAKi8KKworICAgIGlmIChwb3B0UGFyc2VBcmd2U3RyaW5nKGxpbmUsICZpdGVtLT5hcmdjLCAmaXRlbS0+YXJndikpIHJldHVybjsKKworICAgIC8qQC1tb2RvYnNlcnZlckAqLworICAgIGl0ZW0tPm9wdGlvbi5hcmdJbmZvID0gUE9QVF9BUkdGTEFHX0RPQ19ISURERU47CisgICAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBpdGVtLT5hcmdjOyBpKyssIGorKykgeworCWNvbnN0IGNoYXIgKiBmOworCWlmICghc3RybmNtcChpdGVtLT5hcmd2W2ldLCAiLS1QT1BUZGVzYz0iLCBzaXplb2YoIi0tUE9QVGRlc2M9IiktMSkpIHsKKwkgICAgZiA9IGl0ZW0tPmFyZ3ZbaV0gKyBzaXplb2YoIi0tUE9QVGRlc2M9Iik7CisJICAgIGlmIChmWzBdID09ICckJyAmJiBmWzFdID09ICciJykgZisrOworCSAgICBpdGVtLT5vcHRpb24uZGVzY3JpcCA9IGY7CisJICAgIGl0ZW0tPm9wdGlvbi5hcmdJbmZvICY9IH5QT1BUX0FSR0ZMQUdfRE9DX0hJRERFTjsKKwkgICAgai0tOworCX0gZWxzZQorCWlmICghc3RybmNtcChpdGVtLT5hcmd2W2ldLCAiLS1QT1BUYXJncz0iLCBzaXplb2YoIi0tUE9QVGFyZ3M9IiktMSkpIHsKKwkgICAgZiA9IGl0ZW0tPmFyZ3ZbaV0gKyBzaXplb2YoIi0tUE9QVGFyZ3M9Iik7CisJICAgIGlmIChmWzBdID09ICckJyAmJiBmWzFdID09ICciJykgZisrOworCSAgICBpdGVtLT5vcHRpb24uYXJnRGVzY3JpcCA9IGY7CisJICAgIGl0ZW0tPm9wdGlvbi5hcmdJbmZvICY9IH5QT1BUX0FSR0ZMQUdfRE9DX0hJRERFTjsKKwkgICAgaXRlbS0+b3B0aW9uLmFyZ0luZm8gfD0gUE9QVF9BUkdfU1RSSU5HOworCSAgICBqLS07CisJfSBlbHNlCisJaWYgKGogIT0gaSkKKwkgICAgaXRlbS0+YXJndltqXSA9IGl0ZW0tPmFyZ3ZbaV07CisgICAgfQorICAgIGlmIChqICE9IGkpIHsKKwlpdGVtLT5hcmd2W2pdID0gTlVMTDsKKwlpdGVtLT5hcmdjID0gajsKKyAgICB9CisgICAgLypAPW1vZG9ic2VydmVyQCovCisvKkA9Ym91bmRzd3JpdGVAKi8KKwkKKyAgICAvKkAtbnVsbHN0YXRlQCovIC8qIEZJWDogaXRlbS0+YXJndltdIG1heSBiZSBOVUxMICovCisgICAgaWYgKCFzdHJjbXAoZW50cnlUeXBlLCAiYWxpYXMiKSkKKwkodm9pZCkgcG9wdEFkZEl0ZW0oY29uLCBpdGVtLCAwKTsKKyAgICBlbHNlIGlmICghc3RyY21wKGVudHJ5VHlwZSwgImV4ZWMiKSkKKwkodm9pZCkgcG9wdEFkZEl0ZW0oY29uLCBpdGVtLCAxKTsKKyAgICAvKkA9bnVsbHN0YXRlQCovCit9CisvKkA9Y29tcG1lbXBhc3NAKi8KKworaW50IHBvcHRSZWFkQ29uZmlnRmlsZShwb3B0Q29udGV4dCBjb24sIGNvbnN0IGNoYXIgKiBmbikKK3sKKyAgICBjb25zdCBjaGFyICogZmlsZSwgKiBjaHB0ciwgKiBlbmQ7CisgICAgY2hhciAqIGJ1ZjsKKy8qQGRlcGVuZGVudEAqLyBjaGFyICogZHN0OworICAgIGludCBmZCwgcmM7CisgICAgb2ZmX3QgZmlsZUxlbmd0aDsKKworICAgIGZkID0gb3BlbihmbiwgT19SRE9OTFkpOworICAgIGlmIChmZCA8IDApCisJcmV0dXJuIChlcnJubyA9PSBFTk9FTlQgPyAwIDogUE9QVF9FUlJPUl9FUlJOTyk7CisKKyAgICBmaWxlTGVuZ3RoID0gbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKKyAgICBpZiAoZmlsZUxlbmd0aCA9PSAtMSB8fCBsc2VlayhmZCwgMCwgMCkgPT0gLTEpIHsKKwlyYyA9IGVycm5vOworCSh2b2lkKSBjbG9zZShmZCk7CisJZXJybm8gPSByYzsKKwlyZXR1cm4gUE9QVF9FUlJPUl9FUlJOTzsKKyAgICB9CisKKyAgICBmaWxlID0gYWxsb2NhKGZpbGVMZW5ndGggKyAxKTsKKyAgICBpZiAocmVhZChmZCwgKGNoYXIgKilmaWxlLCBmaWxlTGVuZ3RoKSAhPSBmaWxlTGVuZ3RoKSB7CisJcmMgPSBlcnJubzsKKwkodm9pZCkgY2xvc2UoZmQpOworCWVycm5vID0gcmM7CisJcmV0dXJuIFBPUFRfRVJST1JfRVJSTk87CisgICAgfQorICAgIGlmIChjbG9zZShmZCkgPT0gLTEpCisJcmV0dXJuIFBPUFRfRVJST1JfRVJSTk87CisKKy8qQC1ib3VuZHN3cml0ZUAqLworICAgIGRzdCA9IGJ1ZiA9IGFsbG9jYShmaWxlTGVuZ3RoICsgMSk7CisKKyAgICBjaHB0ciA9IGZpbGU7CisgICAgZW5kID0gKGZpbGUgKyBmaWxlTGVuZ3RoKTsKKyAgICAvKkAtaW5mbG9vcHNAKi8JLyogTENMOiBjYW4ndCBkZXRlY3QgY2hwdHIrKyAqLworICAgIHdoaWxlIChjaHB0ciA8IGVuZCkgeworCXN3aXRjaCAoKmNocHRyKSB7CisJICBjYXNlICdcbic6CisJICAgICpkc3QgPSAnXDAnOworCSAgICBkc3QgPSBidWY7CisJICAgIHdoaWxlICgqZHN0ICYmIGlzc3BhY2UoKmRzdCkpIGRzdCsrOworCSAgICBpZiAoKmRzdCAmJiAqZHN0ICE9ICcjJykKKwkJY29uZmlnTGluZShjb24sIGRzdCk7CisJICAgIGNocHRyKys7CisJICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCSAgY2FzZSAnXFwnOgorCSAgICAqZHN0KysgPSAqY2hwdHIrKzsKKwkgICAgaWYgKGNocHRyIDwgZW5kKSB7CisJCWlmICgqY2hwdHIgPT0gJ1xuJykgCisJCSAgICBkc3QtLSwgY2hwdHIrKzsJCisJCSAgICAvKiBcIGF0IHRoZSBlbmQgb2YgYSBsaW5lIGRvZXMgbm90IGluc2VydCBhIFxuICovCisJCWVsc2UKKwkJICAgICpkc3QrKyA9ICpjaHB0cisrOworCSAgICB9CisJICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgKmRzdCsrID0gKmNocHRyKys7CisJICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCX0KKyAgICB9CisgICAgLypAPWluZmxvb3BzQCovCisvKkA9Ym91bmRzd3JpdGVAKi8KKworICAgIHJldHVybiAwOworfQorCitpbnQgcG9wdFJlYWREZWZhdWx0Q29uZmlnKHBvcHRDb250ZXh0IGNvbiwgLypAdW51c2VkQCovIGludCB1c2VFbnYpCit7CisgICAgY2hhciAqIGZuLCAqIGhvbWU7CisgICAgaW50IHJjOworCisgICAgaWYgKGNvbi0+YXBwTmFtZSA9PSBOVUxMKSByZXR1cm4gMDsKKworICAgIHJjID0gcG9wdFJlYWRDb25maWdGaWxlKGNvbiwgIi9ldGMvcG9wdCIpOworICAgIGlmIChyYykgcmV0dXJuIHJjOworCisgICAgaWYgKChob21lID0gZ2V0ZW52KCJIT01FIikpKSB7CisJZm4gPSBhbGxvY2Eoc3RybGVuKGhvbWUpICsgMjApOworCXN0cmNweShmbiwgaG9tZSk7CisJc3RyY2F0KGZuLCAiLy5wb3B0Iik7CisJcmMgPSBwb3B0UmVhZENvbmZpZ0ZpbGUoY29uLCBmbik7CisJaWYgKHJjKSByZXR1cm4gcmM7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJwb3B0L3BvcHRoZWxwLmMgYi9saWJwb3B0L3BvcHRoZWxwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzMGEyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnBvcHQvcG9wdGhlbHAuYwpAQCAtMCwwICsxLDgxOSBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotICovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcZmlsZSBwb3B0L3BvcHRoZWxwLmMKKyAqLworCisvKiAoQykgMTk5OC0yMDAyIFJlZCBIYXQsIEluYy4gLS0gTGljZW5zaW5nIGRldGFpbHMgYXJlIGluIHRoZSBDT1BZSU5HCisgICBmaWxlIGFjY29tcGFueWluZyBwb3B0IHNvdXJjZSBkaXN0cmlidXRpb25zLCBhdmFpbGFibGUgZnJvbSAKKyAgIGZ0cDovL2Z0cC5ycG0ub3JnL3B1Yi9ycG0vZGlzdC4gKi8KKworI2luY2x1ZGUgInN5c3RlbS5oIgorCisvLyNkZWZpbmUJUE9QVF9XQ0hBUl9IQUNLCisjaWZkZWYgCVBPUFRfV0NIQVJfSEFDSworI2luY2x1ZGUgPHdjaGFyLmg+CQkJLyogZm9yIG1ic3J0b3djcyAqLworLypAYWNjZXNzIG1ic3RhdGVfdCBAKi8KKyNlbmRpZgorI2luY2x1ZGUgInBvcHRpbnQuaCIKKworLypAYWNjZXNzIHBvcHRDb250ZXh0QCovCisKKy8qKgorICogRGlzcGxheSBhcmd1bWVudHMuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gZm9vCQkodW51c2VkKQorICogQHBhcmFtIGtleQkJb3B0aW9uKHMpCisgKiBAcGFyYW0gYXJnCQkodW51c2VkKQorICogQHBhcmFtIGRhdGEJCSh1bnVzZWQpCisgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlBcmdzKHBvcHRDb250ZXh0IGNvbiwKKwkJLypAdW51c2VkQCovIGVudW0gcG9wdENhbGxiYWNrUmVhc29uIGZvbywKKwkJc3RydWN0IHBvcHRPcHRpb24gKiBrZXksIAorCQkvKkB1bnVzZWRAKi8gY29uc3QgY2hhciAqIGFyZywgLypAdW51c2VkQCovIHZvaWQgKiBkYXRhKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbUAqLworCS8qQG1vZGlmaWVzIGZpbGVTeXN0ZW1AKi8KK3sKKyAgICBpZiAoa2V5LT5zaG9ydE5hbWUgPT0gJz8nKQorCXBvcHRQcmludEhlbHAoY29uLCBzdGRvdXQsIDApOworICAgIGVsc2UKKwlwb3B0UHJpbnRVc2FnZShjb24sIHN0ZG91dCwgMCk7CisgICAgZXhpdCgwKTsKK30KKworI2lmZGVmCU5PVFlFVAorLypAdW5jaGVja2VkQCovCitzdGF0aWMgaW50IHNob3dfb3B0aW9uX2RlZmF1bHRzID0gMDsKKyNlbmRpZgorCisvKioKKyAqIEVtcHR5IHRhYmxlIG1hcmtlciB0byBlbmFibGUgZGlzcGxheWluZyBwb3B0IGFsaWFzL2V4ZWMgb3B0aW9ucy4KKyAqLworLypAb2JzZXJ2ZXJAKi8gLypAdW5jaGVja2VkQCovCitzdHJ1Y3QgcG9wdE9wdGlvbiBwb3B0QWxpYXNPcHRpb25zW10gPSB7CisgICAgUE9QVF9UQUJMRUVORAorfTsKKworLyoqCisgKiBBdXRvIGhlbHAgdGFibGUgb3B0aW9ucy4KKyAqLworLypALWNhc3RmY25wdHJAKi8KKy8qQG9ic2VydmVyQCovIC8qQHVuY2hlY2tlZEAqLworc3RydWN0IHBvcHRPcHRpb24gcG9wdEhlbHBPcHRpb25zW10gPSB7CisgIHsgTlVMTCwgJ1wwJywgUE9QVF9BUkdfQ0FMTEJBQ0ssICh2b2lkICopJmRpc3BsYXlBcmdzLCAnXDAnLCBOVUxMLCBOVUxMIH0sCisgIHsgImhlbHAiLCAnPycsIDAsIE5VTEwsICc/JywgTl8oIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiKSwgTlVMTCB9LAorICB7ICJ1c2FnZSIsICdcMCcsIDAsIE5VTEwsICd1JywgTl8oIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIpLCBOVUxMIH0sCisgICAgUE9QVF9UQUJMRUVORAorfSA7CisKKy8qQG9ic2VydmVyQCovIC8qQHVuY2hlY2tlZEAqLworc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIHBvcHRIZWxwT3B0aW9uczJbXSA9IHsKKy8qQC1yZWFkb25seXRyYW5zQCovCisgIHsgTlVMTCwgJ1wwJywgUE9QVF9BUkdfSU5UTF9ET01BSU4sIFBBQ0tBR0UsIDAsIE5VTEwsIE5VTEx9LAorLypAPXJlYWRvbmx5dHJhbnNAKi8KKyAgeyBOVUxMLCAnXDAnLCBQT1BUX0FSR19DQUxMQkFDSywgKHZvaWQgKikmZGlzcGxheUFyZ3MsICdcMCcsIE5VTEwsIE5VTEwgfSwKKyAgeyAiaGVscCIsICc/JywgMCwgTlVMTCwgJz8nLCBOXygiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIpLCBOVUxMIH0sCisgIHsgInVzYWdlIiwgJ1wwJywgMCwgTlVMTCwgJ3UnLCBOXygiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIiksIE5VTEwgfSwKKyNpZmRlZglOT1RZRVQKKyAgeyAiZGVmYXVsdHMiLCAnXDAnLCBQT1BUX0FSR19OT05FLCAmc2hvd19vcHRpb25fZGVmYXVsdHMsIDAsCisJTl8oIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiKSwgTlVMTCB9LAorI2VuZGlmCisgICAgUE9QVF9UQUJMRUVORAorfSA7CisKKy8qQG9ic2VydmVyQCovIC8qQHVuY2hlY2tlZEAqLworc3RydWN0IHBvcHRPcHRpb24gKiBwb3B0SGVscE9wdGlvbnNJMThOID0gcG9wdEhlbHBPcHRpb25zMjsKKy8qQD1jYXN0ZmNucHRyQCovCisKKy8qKgorICogQHBhcmFtIHRhYmxlCQlvcHRpb24ocykKKyAqLworLypAb2JzZXJ2ZXJAKi8gLypAbnVsbEAqLyBzdGF0aWMgY29uc3QgY2hhciAqCitnZXRUYWJsZVRyYW5zbGF0aW9uRG9tYWluKC8qQG51bGxAKi8gY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKnRhYmxlKQorCS8qQCovCit7CisgICAgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKm9wdDsKKworICAgIGlmICh0YWJsZSAhPSBOVUxMKQorICAgIGZvciAob3B0ID0gdGFibGU7IG9wdC0+bG9uZ05hbWUgfHwgb3B0LT5zaG9ydE5hbWUgfHwgb3B0LT5hcmc7IG9wdCsrKSB7CisJaWYgKG9wdC0+YXJnSW5mbyA9PSBQT1BUX0FSR19JTlRMX0RPTUFJTikKKwkgICAgcmV0dXJuIG9wdC0+YXJnOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBAcGFyYW0gb3B0CQlvcHRpb24ocykKKyAqIEBwYXJhbSB0cmFuc2xhdGlvbl9kb21haW4JdHJhbnNsYXRpb24gZG9tYWluCisgKi8KKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8gc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0QXJnRGVzY3JpcChjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJLypALXBhcmFtdXNlQCovIC8qIEZJWDogaTE4biBtYWNyb3MgZGlzYWJsZWQgd2l0aCBsY2xpbnQgKi8KKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICogdHJhbnNsYXRpb25fZG9tYWluKQorCQkvKkA9cGFyYW11c2VAKi8KKwkvKkAqLworeworICAgIGlmICghKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHX01BU0spKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChvcHQgPT0gKHBvcHRIZWxwT3B0aW9ucyArIDEpIHx8IG9wdCA9PSAocG9wdEhlbHBPcHRpb25zICsgMikpCisJaWYgKG9wdC0+YXJnRGVzY3JpcCkgcmV0dXJuIFBPUFRfKG9wdC0+YXJnRGVzY3JpcCk7CisKKyAgICBpZiAob3B0LT5hcmdEZXNjcmlwKSByZXR1cm4gRF8odHJhbnNsYXRpb25fZG9tYWluLCBvcHQtPmFyZ0Rlc2NyaXApOworCisgICAgc3dpdGNoIChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSB7CisgICAgY2FzZSBQT1BUX0FSR19OT05FOgkJcmV0dXJuIFBPUFRfKCJOT05FIik7CisjaWZkZWYJRFlJTkcKKyAgICBjYXNlIFBPUFRfQVJHX1ZBTDoJCXJldHVybiBQT1BUXygiVkFMIik7CisjZWxzZQorICAgIGNhc2UgUE9QVF9BUkdfVkFMOgkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyAgICBjYXNlIFBPUFRfQVJHX0lOVDoJCXJldHVybiBQT1BUXygiSU5UIik7CisgICAgY2FzZSBQT1BUX0FSR19MT05HOgkJcmV0dXJuIFBPUFRfKCJMT05HIik7CisgICAgY2FzZSBQT1BUX0FSR19TVFJJTkc6CXJldHVybiBQT1BUXygiU1RSSU5HIik7CisgICAgY2FzZSBQT1BUX0FSR19GTE9BVDoJcmV0dXJuIFBPUFRfKCJGTE9BVCIpOworICAgIGNhc2UgUE9QVF9BUkdfRE9VQkxFOglyZXR1cm4gUE9QVF8oIkRPVUJMRSIpOworICAgIGRlZmF1bHQ6CQkJcmV0dXJuIFBPUFRfKCJBUkciKTsKKyAgICB9Cit9CisKKy8qKgorICogRGlzcGxheSBkZWZhdWx0IHZhbHVlIGZvciBhbiBvcHRpb24uCisgKiBAcGFyYW0gbGluZUxlbmd0aAlkaXNwbGF5IHBvc2l0aW9ucyByZW1haW5pbmcKKyAqIEBwYXJhbSBvcHQJCW9wdGlvbihzKQorICogQHBhcmFtIHRyYW5zbGF0aW9uX2RvbWFpbgl0cmFuc2xhdGlvbiBkb21haW4KKyAqIEByZXR1cm4KKyAqLworc3RhdGljIC8qQG9ubHlAKi8gLypAbnVsbEAqLyBjaGFyICoKK3NpbmdsZU9wdGlvbkRlZmF1bHRWYWx1ZShzaXplX3QgbGluZUxlbmd0aCwKKwkJY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQsCisJCS8qQC1wYXJhbXVzZUAqLyAvKiBGSVg6IGkxOG4gbWFjcm9zIGRpc2FibGVkIHdpdGggbGNsaW50ICovCisJCS8qQG51bGxAKi8gY29uc3QgY2hhciAqIHRyYW5zbGF0aW9uX2RvbWFpbikKKwkJLypAPXBhcmFtdXNlQCovCisJLypAKi8KK3sKKyAgICBjb25zdCBjaGFyICogZGVmc3RyID0gRF8odHJhbnNsYXRpb25fZG9tYWluLCAiZGVmYXVsdCIpOworICAgIGNoYXIgKiBsZSA9IG1hbGxvYyg0KmxpbmVMZW5ndGggKyAxKTsKKyAgICBjaGFyICogbCA9IGxlOworCisgICAgaWYgKGxlID09IE5VTEwpIHJldHVybiBOVUxMOwkvKiBYWFggY2FuJ3QgaGFwcGVuICovCisvKkAtYm91bmRzd3JpdGVAKi8KKyAgICAqbGUgPSAnXDAnOworICAgICpsZSsrID0gJygnOworICAgIHN0cmNweShsZSwgZGVmc3RyKTsJbGUgKz0gc3RybGVuKGxlKTsKKyAgICAqbGUrKyA9ICc6JzsKKyAgICAqbGUrKyA9ICcgJzsKKyAgICBpZiAob3B0LT5hcmcpCS8qIFhYWCBwcm9ncmFtbWVyIGVycm9yICovCisgICAgc3dpdGNoIChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSB7CisgICAgY2FzZSBQT1BUX0FSR19WQUw6CisgICAgY2FzZSBQT1BUX0FSR19JTlQ6CisgICAgewlsb25nIGFMb25nID0gKigoaW50ICopb3B0LT5hcmcpOworCWxlICs9IHNwcmludGYobGUsICIlbGQiLCBhTG9uZyk7CisgICAgfQlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHX0xPTkc6CisgICAgewlsb25nIGFMb25nID0gKigobG9uZyAqKW9wdC0+YXJnKTsKKwlsZSArPSBzcHJpbnRmKGxlLCAiJWxkIiwgYUxvbmcpOworICAgIH0JYnJlYWs7CisgICAgY2FzZSBQT1BUX0FSR19GTE9BVDoKKyAgICB7CWRvdWJsZSBhRG91YmxlID0gKigoZmxvYXQgKilvcHQtPmFyZyk7CisJbGUgKz0gc3ByaW50ZihsZSwgIiVnIiwgYURvdWJsZSk7CisgICAgfQlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHX0RPVUJMRToKKyAgICB7CWRvdWJsZSBhRG91YmxlID0gKigoZG91YmxlICopb3B0LT5hcmcpOworCWxlICs9IHNwcmludGYobGUsICIlZyIsIGFEb3VibGUpOworICAgIH0JYnJlYWs7CisgICAgY2FzZSBQT1BUX0FSR19TVFJJTkc6CisgICAgewljb25zdCBjaGFyICogcyA9ICooY29uc3QgY2hhciAqKilvcHQtPmFyZzsKKwlpZiAocyA9PSBOVUxMKSB7CisJICAgIHN0cmNweShsZSwgIm51bGwiKTsJbGUgKz0gc3RybGVuKGxlKTsKKwl9IGVsc2UgeworCSAgICBzaXplX3Qgc2xlbiA9IDQqbGluZUxlbmd0aCAtIChsZSAtIGwpIC0gc2l6ZW9mKCJcIi4uLlwiKSIpOworCSAgICAqbGUrKyA9ICciJzsKKwkgICAgc3RybmNweShsZSwgcywgc2xlbik7IGxlW3NsZW5dID0gJ1wwJzsgbGUgKz0gc3RybGVuKGxlKTsJCisJICAgIGlmIChzbGVuIDwgc3RybGVuKHMpKSB7CisJCXN0cmNweShsZSwgIi4uLiIpOwlsZSArPSBzdHJsZW4obGUpOworCSAgICB9CisJICAgICpsZSsrID0gJyInOworCX0KKyAgICB9CWJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdfTk9ORToKKyAgICBkZWZhdWx0OgorCWwgPSBfZnJlZShsKTsKKwlyZXR1cm4gTlVMTDsKKwkvKkBub3RyZWFjaGVkQCovIGJyZWFrOworICAgIH0KKyAgICAqbGUrKyA9ICcpJzsKKyAgICAqbGUgPSAnXDAnOworLypAPWJvdW5kc3dyaXRlQCovCisKKyAgICByZXR1cm4gbDsKK30KKworLyoqCisgKiBEaXNwbGF5IGhlbHAgdGV4dCBmb3IgYW4gb3B0aW9uLgorICogQHBhcmFtIGZwCQlvdXRwdXQgZmlsZSBoYW5kbGUKKyAqIEBwYXJhbSBtYXhMZWZ0Q29sCWxhcmdlc3QgYXJndW1lbnQgZGlzcGxheSB3aWR0aAorICogQHBhcmFtIG9wdAkJb3B0aW9uKHMpCisgKiBAcGFyYW0gdHJhbnNsYXRpb25fZG9tYWluCXRyYW5zbGF0aW9uIGRvbWFpbgorICovCitzdGF0aWMgdm9pZCBzaW5nbGVPcHRpb25IZWxwKEZJTEUgKiBmcCwgc2l6ZV90IG1heExlZnRDb2wsIAorCQljb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICogdHJhbnNsYXRpb25fZG9tYWluKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSBAKi8KKwkvKkBtb2RpZmllcyAqZnAsIGZpbGVTeXN0ZW0gQCovCit7CisgICAgc2l6ZV90IGluZGVudExlbmd0aCA9IG1heExlZnRDb2wgKyA1OworICAgIHNpemVfdCBsaW5lTGVuZ3RoID0gNzkgLSBpbmRlbnRMZW5ndGg7CisgICAgY29uc3QgY2hhciAqIGhlbHAgPSBEXyh0cmFuc2xhdGlvbl9kb21haW4sIG9wdC0+ZGVzY3JpcCk7CisgICAgY29uc3QgY2hhciAqIGFyZ0Rlc2NyaXAgPSBnZXRBcmdEZXNjcmlwKG9wdCwgdHJhbnNsYXRpb25fZG9tYWluKTsKKyAgICBzaXplX3QgaGVscExlbmd0aDsKKyAgICBjaGFyICogZGVmcyA9IE5VTEw7CisgICAgY2hhciAqIGxlZnQ7CisgICAgc2l6ZV90IG5iID0gbWF4TGVmdENvbCArIDE7CisgICAgaW50IGRpc3BsYXlwYWQgPSAwOworCisgICAgLyogTWFrZSBzdXJlIHRoZXJlJ3MgbW9yZSB0aGFuIGVub3VnaCByb29tIGluIHRhcmdldCBidWZmZXIuICovCisgICAgaWYgKG9wdC0+bG9uZ05hbWUpCW5iICs9IHN0cmxlbihvcHQtPmxvbmdOYW1lKTsKKyAgICBpZiAoYXJnRGVzY3JpcCkJbmIgKz0gc3RybGVuKGFyZ0Rlc2NyaXApOworCisvKkAtYm91bmRzd3JpdGVAKi8KKyAgICBsZWZ0ID0gbWFsbG9jKG5iKTsKKyAgICBpZiAobGVmdCA9PSBOVUxMKSByZXR1cm47CS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKyAgICBsZWZ0WzBdID0gJ1wwJzsKKyAgICBsZWZ0W21heExlZnRDb2xdID0gJ1wwJzsKKworICAgIGlmIChvcHQtPmxvbmdOYW1lICYmIG9wdC0+c2hvcnROYW1lKQorCXNwcmludGYobGVmdCwgIi0lYywgJXMlcyIsIG9wdC0+c2hvcnROYW1lLAorCQkoKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHRkxBR19PTkVEQVNIKSA/ICItIiA6ICItLSIpLAorCQlvcHQtPmxvbmdOYW1lKTsKKyAgICBlbHNlIGlmIChvcHQtPnNob3J0TmFtZSAhPSAnXDAnKSAKKwlzcHJpbnRmKGxlZnQsICItJWMiLCBvcHQtPnNob3J0TmFtZSk7CisgICAgZWxzZSBpZiAob3B0LT5sb25nTmFtZSkKKwlzcHJpbnRmKGxlZnQsICIlcyVzIiwKKwkJKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfT05FREFTSCkgPyAiLSIgOiAiLS0iKSwKKwkJb3B0LT5sb25nTmFtZSk7CisgICAgaWYgKCEqbGVmdCkgZ290byBvdXQ7CisKKyAgICBpZiAoYXJnRGVzY3JpcCkgeworCWNoYXIgKiBsZSA9IGxlZnQgKyBzdHJsZW4obGVmdCk7CisKKwlpZiAob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdGTEFHX09QVElPTkFMKQorCSAgICAqbGUrKyA9ICdbJzsKKworCS8qIENob29zZSB0eXBlIG9mIG91dHB1dCAqLworCS8qQC1icmFuY2hzdGF0ZUAqLworCWlmIChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfU0hPV19ERUZBVUxUKSB7CisJICAgIGRlZnMgPSBzaW5nbGVPcHRpb25EZWZhdWx0VmFsdWUobGluZUxlbmd0aCwgb3B0LCB0cmFuc2xhdGlvbl9kb21haW4pOworCSAgICBpZiAoZGVmcykgeworCQljaGFyICogdCA9IG1hbGxvYygoaGVscCA/IHN0cmxlbihoZWxwKSA6IDApICsKKwkJCQlzdHJsZW4oZGVmcykgKyBzaXplb2YoIiAiKSk7CisJCWlmICh0KSB7CisJCSAgICBjaGFyICogdGUgPSB0OworCQkgICAgKnRlID0gJ1wwJzsKKwkJICAgIGlmIChoZWxwKSB7CisJCQlzdHJjcHkodGUsIGhlbHApOwl0ZSArPSBzdHJsZW4odGUpOworCQkgICAgfQorCQkgICAgKnRlKysgPSAnICc7CisJCSAgICBzdHJjcHkodGUsIGRlZnMpOworCQkgICAgZGVmcyA9IF9mcmVlKGRlZnMpOworCQl9CisJCWRlZnMgPSB0OworCSAgICB9CisJfQorCS8qQD1icmFuY2hzdGF0ZUAqLworCisJaWYgKG9wdC0+YXJnRGVzY3JpcCA9PSBOVUxMKSB7CisJICAgIHN3aXRjaCAob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgeworCSAgICBjYXNlIFBPUFRfQVJHX05PTkU6CisJCWJyZWFrOworCSAgICBjYXNlIFBPUFRfQVJHX1ZBTDoKKyNpZmRlZglOT1ROT1cJLyogWFhYIHB1ZyB1Z2x5IG5lcmR5IG91dHB1dCAqLworCSAgICB7CWxvbmcgYUxvbmcgPSBvcHQtPnZhbDsKKwkJaW50IG9wcyA9IChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfTE9HSUNBTE9QUyk7CisJCWludCBuZWdhdGUgPSAob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdGTEFHX05PVCk7CisKKwkJLyogRG9uJ3QgYm90aGVyIGRpc3BsYXlpbmcgdHlwaWNhbCB2YWx1ZXMgKi8KKwkJaWYgKCFvcHMgJiYgKGFMb25nID09IDBMIHx8IGFMb25nID09IDFMIHx8IGFMb25nID09IC0xTCkpCisJCSAgICBicmVhazsKKwkJKmxlKysgPSAnWyc7CisJCXN3aXRjaCAob3BzKSB7CisJCWNhc2UgUE9QVF9BUkdGTEFHX09SOgorCQkgICAgKmxlKysgPSAnfCc7CisJCSAgICAvKkBpbm5lcmJyZWFrQCovIGJyZWFrOworCQljYXNlIFBPUFRfQVJHRkxBR19BTkQ6CisJCSAgICAqbGUrKyA9ICcmJzsKKwkJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CisJCWNhc2UgUE9QVF9BUkdGTEFHX1hPUjoKKwkJICAgICpsZSsrID0gJ14nOworCQkgICAgLypAaW5uZXJicmVha0AqLyBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CisJCX0KKwkJKmxlKysgPSAob3B0LT5sb25nTmFtZSAhPSBOVUxMID8gJz0nIDogJyAnKTsKKwkJaWYgKG5lZ2F0ZSkgKmxlKysgPSAnfic7CisJCS8qQC1mb3JtYXRjb25zdEAqLworCQlsZSArPSBzcHJpbnRmKGxlLCAob3BzID8gIjB4JWx4IiA6ICIlbGQiKSwgYUxvbmcpOworCQkvKkA9Zm9ybWF0Y29uc3RAKi8KKwkJKmxlKysgPSAnXSc7CisJICAgIH0KKyNlbmRpZgorCQlicmVhazsKKwkgICAgY2FzZSBQT1BUX0FSR19JTlQ6CisJICAgIGNhc2UgUE9QVF9BUkdfTE9ORzoKKwkgICAgY2FzZSBQT1BUX0FSR19GTE9BVDoKKwkgICAgY2FzZSBQT1BUX0FSR19ET1VCTEU6CisJICAgIGNhc2UgUE9QVF9BUkdfU1RSSU5HOgorCQkqbGUrKyA9IChvcHQtPmxvbmdOYW1lICE9IE5VTEwgPyAnPScgOiAnICcpOworCQlzdHJjcHkobGUsIGFyZ0Rlc2NyaXApOwkJbGUgKz0gc3RybGVuKGxlKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgc2l6ZV90IGxlbGVuOworCisJICAgICpsZSsrID0gJz0nOworCSAgICBzdHJjcHkobGUsIGFyZ0Rlc2NyaXApOworCSAgICBsZWxlbiA9IHN0cmxlbihsZSk7CisJICAgIGxlICs9IGxlbGVuOworCisjaWZkZWYJUE9QVF9XQ0hBUl9IQUNLCisJICAgIHsJY29uc3QgY2hhciAqIHNjb3B5ID0gYXJnRGVzY3JpcDsKKwkJbWJzdGF0ZV90IHQ7CisJCXNpemVfdCBuOworCisJCW1lbXNldCAoKHZvaWQgKikmdCwgJ1wwJywgc2l6ZW9mICh0KSk7CS8qIEluIGluaXRpYWwgc3RhdGUuICAqLworCQkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGNoYXJhY3RlcnMuICAqLworCQluID0gbWJzcnRvd2NzIChOVUxMLCAmc2NvcHksIHN0cmxlbihzY29weSksICZ0KTsKKworCQlkaXNwbGF5cGFkID0gKGludCkgKGxlbGVuLW4pOworCSAgICB9CisjZW5kaWYKKwl9CisJaWYgKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHRkxBR19PUFRJT05BTCkKKwkgICAgKmxlKysgPSAnXSc7CisJKmxlID0gJ1wwJzsKKyAgICB9CisvKkA9Ym91bmRzd3JpdGVAKi8KKworICAgIGlmIChoZWxwKQorCWZwcmludGYoZnAsIiAgJS0qcyAgICIsIG1heExlZnRDb2wrZGlzcGxheXBhZCwgbGVmdCk7CisgICAgZWxzZSB7CisJZnByaW50ZihmcCwiICAlc1xuIiwgbGVmdCk7IAorCWdvdG8gb3V0OworICAgIH0KKworICAgIGxlZnQgPSBfZnJlZShsZWZ0KTsKKy8qQC1icmFuY2hzdGF0ZUAqLworICAgIGlmIChkZWZzKSB7CisJaGVscCA9IGRlZnM7CisJZGVmcyA9IE5VTEw7CisgICAgfQorLypAPWJyYW5jaHN0YXRlQCovCisKKyAgICBoZWxwTGVuZ3RoID0gc3RybGVuKGhlbHApOworLypALWJvdW5kc3JlYWRAKi8KKyAgICB3aGlsZSAoaGVscExlbmd0aCA+IGxpbmVMZW5ndGgpIHsKKwljb25zdCBjaGFyICogY2g7CisJY2hhciBmb3JtYXRbMTZdOworCisJY2ggPSBoZWxwICsgbGluZUxlbmd0aCAtIDE7CisJd2hpbGUgKGNoID4gaGVscCAmJiAhaXNzcGFjZSgqY2gpKSBjaC0tOworCWlmIChjaCA9PSBoZWxwKSBicmVhazsJCS8qIGdpdmUgdXAgKi8KKwl3aGlsZSAoY2ggPiAoaGVscCArIDEpICYmIGlzc3BhY2UoKmNoKSkgY2gtLTsKKwljaCsrOworCisJc3ByaW50Zihmb3JtYXQsICIlJS4lZHNcbiUlJWRzIiwgKGludCkgKGNoIC0gaGVscCksIChpbnQpIGluZGVudExlbmd0aCk7CisJLypALWZvcm1hdGNvbnN0QCovCisJZnByaW50ZihmcCwgZm9ybWF0LCBoZWxwLCAiICIpOworCS8qQD1mb3JtYXRjb25zdEAqLworCWhlbHAgPSBjaDsKKwl3aGlsZSAoaXNzcGFjZSgqaGVscCkgJiYgKmhlbHApIGhlbHArKzsKKwloZWxwTGVuZ3RoID0gc3RybGVuKGhlbHApOworICAgIH0KKy8qQD1ib3VuZHNyZWFkQCovCisKKyAgICBpZiAoaGVscExlbmd0aCkgZnByaW50ZihmcCwgIiVzXG4iLCBoZWxwKTsKKworb3V0OgorICAgIC8qQC1kZXBlbmRlbnR0cmFuc0AqLworICAgIGRlZnMgPSBfZnJlZShkZWZzKTsKKyAgICAvKkA9ZGVwZW5kZW50dHJhbnNAKi8KKyAgICBsZWZ0ID0gX2ZyZWUobGVmdCk7Cit9CisKKy8qKgorICogRmluZCBkaXNwbGF5IHdpZHRoIGZvciBsb25nZXN0IGFyZ3VtZW50IHN0cmluZy4KKyAqIEBwYXJhbSBvcHQJCW9wdGlvbihzKQorICogQHBhcmFtIHRyYW5zbGF0aW9uX2RvbWFpbgl0cmFuc2xhdGlvbiBkb21haW4KKyAqIEByZXR1cm4JCWRpc3BsYXkgd2lkdGgKKyAqLworc3RhdGljIHNpemVfdCBtYXhBcmdXaWR0aChjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJICAgICAgIC8qQG51bGxAKi8gY29uc3QgY2hhciAqIHRyYW5zbGF0aW9uX2RvbWFpbikKKwkvKkAqLworeworICAgIHNpemVfdCBtYXggPSAwOworICAgIHNpemVfdCBsZW4gPSAwOworICAgIGNvbnN0IGNoYXIgKiBzOworICAgIAorICAgIGlmIChvcHQgIT0gTlVMTCkKKyAgICB3aGlsZSAob3B0LT5sb25nTmFtZSB8fCBvcHQtPnNob3J0TmFtZSB8fCBvcHQtPmFyZykgeworCWlmICgob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgPT0gUE9QVF9BUkdfSU5DTFVERV9UQUJMRSkgeworCSAgICBpZiAob3B0LT5hcmcpCS8qIFhYWCBwcm9ncmFtIGVycm9yICovCisJICAgIGxlbiA9IG1heEFyZ1dpZHRoKG9wdC0+YXJnLCB0cmFuc2xhdGlvbl9kb21haW4pOworCSAgICBpZiAobGVuID4gbWF4KSBtYXggPSBsZW47CisJfSBlbHNlIGlmICghKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHRkxBR19ET0NfSElEREVOKSkgeworCSAgICBsZW4gPSBzaXplb2YoIiAgIiktMTsKKwkgICAgaWYgKG9wdC0+c2hvcnROYW1lICE9ICdcMCcpIGxlbiArPSBzaXplb2YoIi1YIiktMTsKKwkgICAgaWYgKG9wdC0+c2hvcnROYW1lICE9ICdcMCcgJiYgb3B0LT5sb25nTmFtZSkgbGVuICs9IHNpemVvZigiLCAiKS0xOworCSAgICBpZiAob3B0LT5sb25nTmFtZSkgeworCQlsZW4gKz0gKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfT05FREFTSCkKKwkJCT8gc2l6ZW9mKCItIiktMSA6IHNpemVvZigiLS0iKS0xKTsKKwkJbGVuICs9IHN0cmxlbihvcHQtPmxvbmdOYW1lKTsKKwkgICAgfQorCisJICAgIHMgPSBnZXRBcmdEZXNjcmlwKG9wdCwgdHJhbnNsYXRpb25fZG9tYWluKTsKKworI2lmZGVmIFBPUFRfV0NIQVJfSEFDSworCSAgICAvKiBYWFggQ2FsY3VsYXRlIG5vLiBvZiBkaXNwbGF5IGNoYXJhY3RlcnMuICovCisJICAgIGlmIChzKSB7CisJCWNvbnN0IGNoYXIgKiBzY29weSA9IHM7CisJCW1ic3RhdGVfdCB0OworCQlzaXplX3QgbjsKKworLypALWJvdW5kc3dyaXRlQCovCisJCW1lbXNldCAoKHZvaWQgKikmdCwgJ1wwJywgc2l6ZW9mICh0KSk7CS8qIEluIGluaXRpYWwgc3RhdGUuICAqLworLypAPWJvdW5kc3dyaXRlQCovCisJCS8qIERldGVybWluZSBudW1iZXIgb2YgY2hhcmFjdGVycy4gICovCisJCW4gPSBtYnNydG93Y3MgKE5VTEwsICZzY29weSwgc3RybGVuKHNjb3B5KSwgJnQpOworCQlsZW4gKz0gc2l6ZW9mKCI9IiktMSArIG47CisJICAgIH0KKyNlbHNlCisJICAgIGlmIChzKQorCQlsZW4gKz0gc2l6ZW9mKCI9IiktMSArIHN0cmxlbihzKTsKKyNlbmRpZgorCisJICAgIGlmIChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfT1BUSU9OQUwpIGxlbiArPSBzaXplb2YoIltdIiktMTsKKwkgICAgaWYgKGxlbiA+IG1heCkgbWF4ID0gbGVuOworCX0KKworCW9wdCsrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWF4OworfQorCisvKioKKyAqIERpc3BsYXkgcG9wdCBhbGlhcyBhbmQgZXhlYyBoZWxwLgorICogQHBhcmFtIGZwCQlvdXRwdXQgZmlsZSBoYW5kbGUKKyAqIEBwYXJhbSBpdGVtcwkJYWxpYXMvZXhlYyBhcnJheQorICogQHBhcmFtIG5pdGVtcwluby4gb2YgYWxpYXMvZXhlYyBlbnRyaWVzCisgKiBAcGFyYW0gbGVmdAkJbGFyZ2VzdCBhcmd1bWVudCBkaXNwbGF5IHdpZHRoCisgKiBAcGFyYW0gdHJhbnNsYXRpb25fZG9tYWluCXRyYW5zbGF0aW9uIGRvbWFpbgorICovCitzdGF0aWMgdm9pZCBpdGVtSGVscChGSUxFICogZnAsCisJCS8qQG51bGxAKi8gcG9wdEl0ZW0gaXRlbXMsIGludCBuaXRlbXMsIHNpemVfdCBsZWZ0LAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiB0cmFuc2xhdGlvbl9kb21haW4pCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzICpmcCwgZmlsZVN5c3RlbSBAKi8KK3sKKyAgICBwb3B0SXRlbSBpdGVtOworICAgIGludCBpOworCisgICAgaWYgKGl0ZW1zICE9IE5VTEwpCisgICAgZm9yIChpID0gMCwgaXRlbSA9IGl0ZW1zOyBpIDwgbml0ZW1zOyBpKyssIGl0ZW0rKykgeworCWNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogb3B0OworCW9wdCA9ICZpdGVtLT5vcHRpb247CisJaWYgKChvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lKSAmJiAKKwkgICAgIShvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfRE9DX0hJRERFTikpCisJICAgIHNpbmdsZU9wdGlvbkhlbHAoZnAsIGxlZnQsIG9wdCwgdHJhbnNsYXRpb25fZG9tYWluKTsKKyAgICB9Cit9CisKKy8qKgorICogRGlzcGxheSBoZWxwIHRleHQgZm9yIGEgdGFibGUgb2Ygb3B0aW9ucy4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBmcAkJb3V0cHV0IGZpbGUgaGFuZGxlCisgKiBAcGFyYW0gdGFibGUJCW9wdGlvbihzKQorICogQHBhcmFtIGxlZnQJCWxhcmdlc3QgYXJndW1lbnQgZGlzcGxheSB3aWR0aAorICogQHBhcmFtIHRyYW5zbGF0aW9uX2RvbWFpbgl0cmFuc2xhdGlvbiBkb21haW4KKyAqLworc3RhdGljIHZvaWQgc2luZ2xlVGFibGVIZWxwKHBvcHRDb250ZXh0IGNvbiwgRklMRSAqIGZwLAorCQkvKkBudWxsQCovIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogdGFibGUsIHNpemVfdCBsZWZ0LAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiB0cmFuc2xhdGlvbl9kb21haW4pCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzICpmcCwgZmlsZVN5c3RlbSBAKi8KK3sKKyAgICBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdDsKKyAgICBjb25zdCBjaGFyICpzdWJfdHJhbnNkb207CisKKyAgICBpZiAodGFibGUgPT0gcG9wdEFsaWFzT3B0aW9ucykgeworCWl0ZW1IZWxwKGZwLCBjb24tPmFsaWFzZXMsIGNvbi0+bnVtQWxpYXNlcywgbGVmdCwgTlVMTCk7CisJaXRlbUhlbHAoZnAsIGNvbi0+ZXhlY3MsIGNvbi0+bnVtRXhlY3MsIGxlZnQsIE5VTEwpOworCXJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGFibGUgIT0gTlVMTCkKKyAgICBmb3IgKG9wdCA9IHRhYmxlOyAob3B0LT5sb25nTmFtZSB8fCBvcHQtPnNob3J0TmFtZSB8fCBvcHQtPmFyZyk7IG9wdCsrKSB7CisJaWYgKChvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lKSAmJiAKKwkgICAgIShvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfRE9DX0hJRERFTikpCisJICAgIHNpbmdsZU9wdGlvbkhlbHAoZnAsIGxlZnQsIG9wdCwgdHJhbnNsYXRpb25fZG9tYWluKTsKKyAgICB9CisKKyAgICBpZiAodGFibGUgIT0gTlVMTCkKKyAgICBmb3IgKG9wdCA9IHRhYmxlOyAob3B0LT5sb25nTmFtZSB8fCBvcHQtPnNob3J0TmFtZSB8fCBvcHQtPmFyZyk7IG9wdCsrKSB7CisJaWYgKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSAhPSBQT1BUX0FSR19JTkNMVURFX1RBQkxFKQorCSAgICBjb250aW51ZTsKKwlzdWJfdHJhbnNkb20gPSBnZXRUYWJsZVRyYW5zbGF0aW9uRG9tYWluKG9wdC0+YXJnKTsKKwlpZiAoc3ViX3RyYW5zZG9tID09IE5VTEwpCisJICAgIHN1Yl90cmFuc2RvbSA9IHRyYW5zbGF0aW9uX2RvbWFpbjsKKwkgICAgCisJaWYgKG9wdC0+ZGVzY3JpcCkKKwkgICAgZnByaW50ZihmcCwgIlxuJXNcbiIsIERfKHN1Yl90cmFuc2RvbSwgb3B0LT5kZXNjcmlwKSk7CisKKwlzaW5nbGVUYWJsZUhlbHAoY29uLCBmcCwgb3B0LT5hcmcsIGxlZnQsIHN1Yl90cmFuc2RvbSk7CisgICAgfQorfQorCisvKioKKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBmcAkJb3V0cHV0IGZpbGUgaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQgc2hvd0hlbHBJbnRybyhwb3B0Q29udGV4dCBjb24sIEZJTEUgKiBmcCkKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCisJLypAbW9kaWZpZXMgKmZwLCBmaWxlU3lzdGVtIEAqLworeworICAgIGludCBsZW4gPSA2OworICAgIGNvbnN0IGNoYXIgKiBmbjsKKworICAgIGZwcmludGYoZnAsIFBPUFRfKCJVc2FnZToiKSk7CisgICAgaWYgKCEoY29uLT5mbGFncyAmIFBPUFRfQ09OVEVYVF9LRUVQX0ZJUlNUKSkgeworLypALWJvdW5kc3JlYWRAKi8KKwkvKkAtbnVsbGRlcmVmIC10eXBlQCovCS8qIExDTDogd2F6enVwPyAqLworCWZuID0gY29uLT5vcHRpb25TdGFjay0+YXJndlswXTsKKwkvKkA9bnVsbGRlcmVmID10eXBlQCovCisvKkA9Ym91bmRzcmVhZEAqLworCWlmIChmbiA9PSBOVUxMKSByZXR1cm4gbGVuOworCWlmIChzdHJjaHIoZm4sICcvJykpIGZuID0gc3RycmNocihmbiwgJy8nKSArIDE7CisJZnByaW50ZihmcCwgIiAlcyIsIGZuKTsKKwlsZW4gKz0gc3RybGVuKGZuKSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGxlbjsKK30KKwordm9pZCBwb3B0UHJpbnRIZWxwKHBvcHRDb250ZXh0IGNvbiwgRklMRSAqIGZwLCAvKkB1bnVzZWRAKi8gaW50IGZsYWdzKQoreworICAgIHNpemVfdCBsZWZ0Q29sV2lkdGg7CisKKyAgICAodm9pZCkgc2hvd0hlbHBJbnRybyhjb24sIGZwKTsKKyAgICBpZiAoY29uLT5vdGhlckhlbHApCisJZnByaW50ZihmcCwgIiAlc1xuIiwgY29uLT5vdGhlckhlbHApOworICAgIGVsc2UKKwlmcHJpbnRmKGZwLCAiICVzXG4iLCBQT1BUXygiW09QVElPTi4uLl0iKSk7CisKKyAgICBsZWZ0Q29sV2lkdGggPSBtYXhBcmdXaWR0aChjb24tPm9wdGlvbnMsIE5VTEwpOworICAgIHNpbmdsZVRhYmxlSGVscChjb24sIGZwLCBjb24tPm9wdGlvbnMsIGxlZnRDb2xXaWR0aCwgTlVMTCk7Cit9CisKKy8qKgorICogRGlzcGxheSB1c2FnZSB0ZXh0IGZvciBhbiBvcHRpb24uCisgKiBAcGFyYW0gZnAJCW91dHB1dCBmaWxlIGhhbmRsZQorICogQHBhcmFtIGN1cnNvcgljdXJyZW50IGRpc3BsYXkgcG9zaXRpb24KKyAqIEBwYXJhbSBvcHQJCW9wdGlvbihzKQorICogQHBhcmFtIHRyYW5zbGF0aW9uX2RvbWFpbgl0cmFuc2xhdGlvbiBkb21haW4KKyAqLworc3RhdGljIHNpemVfdCBzaW5nbGVPcHRpb25Vc2FnZShGSUxFICogZnAsIHNpemVfdCBjdXJzb3IsIAorCQljb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICp0cmFuc2xhdGlvbl9kb21haW4pCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzICpmcCwgZmlsZVN5c3RlbSBAKi8KK3sKKyAgICBzaXplX3QgbGVuID0gNDsKKyAgICBjaGFyIHNob3J0U3RyWzJdID0geyAnXDAnLCAnXDAnIH07CisgICAgY29uc3QgY2hhciAqIGl0ZW0gPSBzaG9ydFN0cjsKKyAgICBjb25zdCBjaGFyICogYXJnRGVzY3JpcCA9IGdldEFyZ0Rlc2NyaXAob3B0LCB0cmFuc2xhdGlvbl9kb21haW4pOworCisgICAgaWYgKG9wdC0+c2hvcnROYW1lICE9ICdcMCcgJiYgb3B0LT5sb25nTmFtZSAhPSBOVUxMKSB7CisJbGVuICs9IDI7CisJaWYgKCEob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdGTEFHX09ORURBU0gpKSBsZW4rKzsKKwlsZW4gKz0gc3RybGVuKG9wdC0+bG9uZ05hbWUpOworICAgIH0gZWxzZSBpZiAob3B0LT5zaG9ydE5hbWUgIT0gJ1wwJykgeworCWxlbisrOworCXNob3J0U3RyWzBdID0gb3B0LT5zaG9ydE5hbWU7CisJc2hvcnRTdHJbMV0gPSAnXDAnOworICAgIH0gZWxzZSBpZiAob3B0LT5sb25nTmFtZSkgeworCWxlbiArPSBzdHJsZW4ob3B0LT5sb25nTmFtZSk7CisJaWYgKCEob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdGTEFHX09ORURBU0gpKSBsZW4rKzsKKwlpdGVtID0gb3B0LT5sb25nTmFtZTsKKyAgICB9CisKKyAgICBpZiAobGVuID09IDQpIHJldHVybiBjdXJzb3I7CisKKyNpZmRlZiBQT1BUX1dDSEFSX0hBQ0sKKyAgICAvKiBYWFggQ2FsY3VsYXRlIG5vLiBvZiBkaXNwbGF5IGNoYXJhY3RlcnMuICovCisgICAgaWYgKGFyZ0Rlc2NyaXApIHsKKwljb25zdCBjaGFyICogc2NvcHkgPSBhcmdEZXNjcmlwOworCW1ic3RhdGVfdCB0OworCXNpemVfdCBuOworCisvKkAtYm91bmRzd3JpdGVAKi8KKwltZW1zZXQgKCh2b2lkICopJnQsICdcMCcsIHNpemVvZiAodCkpOwkvKiBJbiBpbml0aWFsIHN0YXRlLiAgKi8KKy8qQD1ib3VuZHN3cml0ZUAqLworCS8qIERldGVybWluZSBudW1iZXIgb2YgY2hhcmFjdGVycy4gICovCisJbiA9IG1ic3J0b3djcyAoTlVMTCwgJnNjb3B5LCBzdHJsZW4oc2NvcHkpLCAmdCk7CisJbGVuICs9IHNpemVvZigiPSIpLTEgKyBuOworICAgIH0KKyNlbHNlCisgICAgaWYgKGFyZ0Rlc2NyaXApIAorCWxlbiArPSBzaXplb2YoIj0iKS0xICsgc3RybGVuKGFyZ0Rlc2NyaXApOworI2VuZGlmCisKKyAgICBpZiAoKGN1cnNvciArIGxlbikgPiA3OSkgeworCWZwcmludGYoZnAsICJcbiAgICAgICAiKTsKKwljdXJzb3IgPSA3OworICAgIH0gCisKKyAgICBpZiAob3B0LT5sb25nTmFtZSAmJiBvcHQtPnNob3J0TmFtZSkgeworCWZwcmludGYoZnAsICIgWy0lY3wtJXMlcyVzJXNdIiwKKwkgICAgb3B0LT5zaG9ydE5hbWUsICgob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdGTEFHX09ORURBU0gpID8gIiIgOiAiLSIpLAorCSAgICBvcHQtPmxvbmdOYW1lLAorCSAgICAoYXJnRGVzY3JpcCA/ICIgIiA6ICIiKSwKKwkgICAgKGFyZ0Rlc2NyaXAgPyBhcmdEZXNjcmlwIDogIiIpKTsKKyAgICB9IGVsc2UgeworCWZwcmludGYoZnAsICIgWy0lcyVzJXMlc10iLAorCSAgICAoKG9wdC0+c2hvcnROYW1lIHx8IChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfT05FREFTSCkpID8gIiIgOiAiLSIpLAorCSAgICBpdGVtLAorCSAgICAoYXJnRGVzY3JpcCA/IChvcHQtPnNob3J0TmFtZSAhPSAnXDAnID8gIiAiIDogIj0iKSA6ICIiKSwKKwkgICAgKGFyZ0Rlc2NyaXAgPyBhcmdEZXNjcmlwIDogIiIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY3Vyc29yICsgbGVuICsgMTsKK30KKworLyoqCisgKiBEaXNwbGF5IHBvcHQgYWxpYXMgYW5kIGV4ZWMgdXNhZ2UuCisgKiBAcGFyYW0gZnAJCW91dHB1dCBmaWxlIGhhbmRsZQorICogQHBhcmFtIGN1cnNvcgljdXJyZW50IGRpc3BsYXkgcG9zaXRpb24KKyAqIEBwYXJhbSBpdGVtCQlhbGlhcy9leGVjIGFycmF5CisgKiBAcGFyYW0gbml0ZW1zCW5vLiBvZiBhcmEvZXhlYyBlbnRyaWVzCisgKiBAcGFyYW0gdHJhbnNsYXRpb25fZG9tYWluCXRyYW5zbGF0aW9uIGRvbWFpbgorICovCitzdGF0aWMgc2l6ZV90IGl0ZW1Vc2FnZShGSUxFICogZnAsIHNpemVfdCBjdXJzb3IsCisJCS8qQG51bGxAKi8gcG9wdEl0ZW0gaXRlbSwgaW50IG5pdGVtcywKKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICogdHJhbnNsYXRpb25fZG9tYWluKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSBAKi8KKwkvKkBtb2RpZmllcyAqZnAsIGZpbGVTeXN0ZW0gQCovCit7CisgICAgaW50IGk7CisKKyAgICAvKkAtYnJhbmNoc3RhdGVAKi8JCS8qIEZJWDogVzJETz8gKi8KKyAgICBpZiAoaXRlbSAhPSBOVUxMKQorICAgIGZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKywgaXRlbSsrKSB7CisJY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQ7CisJb3B0ID0gJml0ZW0tPm9wdGlvbjsKKyAgICAgICAgaWYgKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSA9PSBQT1BUX0FSR19JTlRMX0RPTUFJTikgeworCSAgICB0cmFuc2xhdGlvbl9kb21haW4gPSAoY29uc3QgY2hhciAqKW9wdC0+YXJnOworCX0gZWxzZSBpZiAoKG9wdC0+bG9uZ05hbWUgfHwgb3B0LT5zaG9ydE5hbWUpICYmCisJCSAhKG9wdC0+YXJnSW5mbyAmIFBPUFRfQVJHRkxBR19ET0NfSElEREVOKSkgeworCSAgICBjdXJzb3IgPSBzaW5nbGVPcHRpb25Vc2FnZShmcCwgY3Vyc29yLCBvcHQsIHRyYW5zbGF0aW9uX2RvbWFpbik7CisJfQorICAgIH0KKyAgICAvKkA9YnJhbmNoc3RhdGVAKi8KKworICAgIHJldHVybiBjdXJzb3I7Cit9CisKKy8qKgorICogS2VlcCB0cmFjayBvZiBvcHRpb24gdGFibGVzIGFscmVhZHkgcHJvY2Vzc2VkLgorICovCit0eXBlZGVmIHN0cnVjdCBwb3B0RG9uZV9zIHsKKyAgICBpbnQgbm9wdHM7CisgICAgaW50IG1heG9wdHM7CisgICAgY29uc3Qgdm9pZCAqKiBvcHRzOworfSAqIHBvcHREb25lOworCisvKioKKyAqIERpc3BsYXkgdXNhZ2UgdGV4dCBmb3IgYSB0YWJsZSBvZiBvcHRpb25zLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIGZwCQlvdXRwdXQgZmlsZSBoYW5kbGUKKyAqIEBwYXJhbSBjdXJzb3IJY3VycmVudCBkaXNwbGF5IHBvc2l0aW9uCisgKiBAcGFyYW0gb3B0CQlvcHRpb24ocykKKyAqIEBwYXJhbSB0cmFuc2xhdGlvbl9kb21haW4JdHJhbnNsYXRpb24gZG9tYWluCisgKiBAcGFyYW0gZG9uZQkJdGFibGVzIGFscmVhZHkgcHJvY2Vzc2VkCisgKiBAcmV0dXJuCisgKi8KK3N0YXRpYyBzaXplX3Qgc2luZ2xlVGFibGVVc2FnZShwb3B0Q29udGV4dCBjb24sIEZJTEUgKiBmcCwgc2l6ZV90IGN1cnNvciwKKwkJLypAbnVsbEAqLyBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICogdHJhbnNsYXRpb25fZG9tYWluLAorCQkvKkBudWxsQCovIHBvcHREb25lIGRvbmUpCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzICpmcCwgZG9uZSwgZmlsZVN5c3RlbSBAKi8KK3sKKyAgICAvKkAtYnJhbmNoc3RhdGVAKi8JCS8qIEZJWDogVzJETz8gKi8KKyAgICBpZiAob3B0ICE9IE5VTEwpCisgICAgZm9yICg7IChvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lIHx8IG9wdC0+YXJnKSA7IG9wdCsrKSB7CisgICAgICAgIGlmICgob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykgPT0gUE9QVF9BUkdfSU5UTF9ET01BSU4pIHsKKwkgICAgdHJhbnNsYXRpb25fZG9tYWluID0gKGNvbnN0IGNoYXIgKilvcHQtPmFyZzsKKwl9IGVsc2UgaWYgKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSA9PSBQT1BUX0FSR19JTkNMVURFX1RBQkxFKSB7CisJICAgIGlmIChkb25lKSB7CisJCWludCBpID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IGRvbmUtPm5vcHRzOyBpKyspIHsKKy8qQC1ib3VuZHNyZWFkQCovCisJCSAgICBjb25zdCB2b2lkICogdGhhdCA9IGRvbmUtPm9wdHNbaV07CisvKkA9Ym91bmRzcmVhZEAqLworCQkgICAgaWYgKHRoYXQgPT0gTlVMTCB8fCB0aGF0ICE9IG9wdC0+YXJnKQorCQkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKwkJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CisJCX0KKwkJLyogU2tpcCBpZiB0aGlzIHRhYmxlIGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLiAqLworCQlpZiAob3B0LT5hcmcgPT0gTlVMTCB8fCBpIDwgZG9uZS0+bm9wdHMpCisJCSAgICBjb250aW51ZTsKKy8qQC1ib3VuZHN3cml0ZUAqLworCQlpZiAoZG9uZS0+bm9wdHMgPCBkb25lLT5tYXhvcHRzKQorCQkgICAgZG9uZS0+b3B0c1tkb25lLT5ub3B0cysrXSA9IChjb25zdCB2b2lkICopIG9wdC0+YXJnOworLypAPWJvdW5kc3dyaXRlQCovCisJICAgIH0KKwkgICAgY3Vyc29yID0gc2luZ2xlVGFibGVVc2FnZShjb24sIGZwLCBjdXJzb3IsIG9wdC0+YXJnLAorCQkJdHJhbnNsYXRpb25fZG9tYWluLCBkb25lKTsKKwl9IGVsc2UgaWYgKChvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lKSAmJgorCQkgIShvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR0ZMQUdfRE9DX0hJRERFTikpIHsKKwkgICAgY3Vyc29yID0gc2luZ2xlT3B0aW9uVXNhZ2UoZnAsIGN1cnNvciwgb3B0LCB0cmFuc2xhdGlvbl9kb21haW4pOworCX0KKyAgICB9CisgICAgLypAPWJyYW5jaHN0YXRlQCovCisKKyAgICByZXR1cm4gY3Vyc29yOworfQorCisvKioKKyAqIFJldHVybiBjb25jYXRlbmF0ZWQgc2hvcnQgb3B0aW9ucyBmb3IgZGlzcGxheS4KKyAqIEB0b2RvIFN1Yi10YWJsZXMgc2hvdWxkIGJlIHJlY3Vyc2VkLgorICogQHBhcmFtIG9wdAkJb3B0aW9uKHMpCisgKiBAcGFyYW0gZnAJCW91dHB1dCBmaWxlIGhhbmRsZQorICogQHJldHZhbCBzdHIJCWNvbmNhdGVuYXRpb24gb2Ygc2hvcnQgb3B0aW9ucworICogQHJldHVybgkJbGVuZ3RoIG9mIGRpc3BsYXkgc3RyaW5nCisgKi8KK3N0YXRpYyBpbnQgc2hvd1Nob3J0T3B0aW9ucyhjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwgRklMRSAqIGZwLAorCQkvKkBudWxsQCovIGNoYXIgKiBzdHIpCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzICpzdHIsICpmcCwgZmlsZVN5c3RlbSBAKi8KKwkvKkByZXF1aXJlcyBtYXhSZWFkKHN0cikgPj0gMCBAKi8KK3sKKyAgICAvKiBidWZzaXplIGxhcmdlciB0aGVuIHRoZSBhc2NpaSBzZXQsIGxhenkgYWxsb2NhIG9uIHRvcCBsZXZlbCBjYWxsLiAqLworICAgIGNoYXIgKiBzID0gKHN0ciAhPSBOVUxMID8gc3RyIDogbWVtc2V0KGFsbG9jYSgzMDApLCAwLCAzMDApKTsKKyAgICBpbnQgbGVuID0gMDsKKworLypALWJvdW5kc3dyaXRlQCovCisgICAgaWYgKG9wdCAhPSBOVUxMKQorICAgIGZvciAoOyAob3B0LT5sb25nTmFtZSB8fCBvcHQtPnNob3J0TmFtZSB8fCBvcHQtPmFyZyk7IG9wdCsrKSB7CisJaWYgKG9wdC0+c2hvcnROYW1lICYmICEob3B0LT5hcmdJbmZvICYgUE9QVF9BUkdfTUFTSykpCisJICAgIHNbc3RybGVuKHMpXSA9IG9wdC0+c2hvcnROYW1lOworCWVsc2UgaWYgKChvcHQtPmFyZ0luZm8gJiBQT1BUX0FSR19NQVNLKSA9PSBQT1BUX0FSR19JTkNMVURFX1RBQkxFKQorCSAgICBpZiAob3B0LT5hcmcpCS8qIFhYWCBwcm9ncmFtIGVycm9yICovCisJCWxlbiA9IHNob3dTaG9ydE9wdGlvbnMob3B0LT5hcmcsIGZwLCBzKTsKKyAgICB9IAorLypAPWJvdW5kc3dyaXRlQCovCisKKyAgICAvKiBPbiByZXR1cm4gdG8gdG9wIGxldmVsLCBwcmludCB0aGUgc2hvcnQgb3B0aW9ucywgcmV0dXJuIHByaW50IGxlbmd0aC4gKi8KKyAgICBpZiAocyA9PSBzdHIgJiYgKnMgIT0gJ1wwJykgeworCWZwcmludGYoZnAsICIgWy0lc10iLCBzKTsKKwlsZW4gPSBzdHJsZW4ocykgKyBzaXplb2YoIiBbLV0iKS0xOworICAgIH0KKyAgICByZXR1cm4gbGVuOworfQorCit2b2lkIHBvcHRQcmludFVzYWdlKHBvcHRDb250ZXh0IGNvbiwgRklMRSAqIGZwLCAvKkB1bnVzZWRAKi8gaW50IGZsYWdzKQoreworICAgIHBvcHREb25lIGRvbmUgPSBtZW1zZXQoYWxsb2NhKHNpemVvZigqZG9uZSkpLCAwLCBzaXplb2YoKmRvbmUpKTsKKyAgICBzaXplX3QgY3Vyc29yOworCisgICAgZG9uZS0+bm9wdHMgPSAwOworICAgIGRvbmUtPm1heG9wdHMgPSA2NDsKKyAgICBjdXJzb3IgPSBkb25lLT5tYXhvcHRzICogc2l6ZW9mKCpkb25lLT5vcHRzKTsKKy8qQC1ib3VuZHN3cml0ZUAqLworICAgIGRvbmUtPm9wdHMgPSBtZW1zZXQoYWxsb2NhKGN1cnNvciksIDAsIGN1cnNvcik7CisgICAgLypALWtlZXB0cmFuc0AqLworICAgIGRvbmUtPm9wdHNbZG9uZS0+bm9wdHMrK10gPSAoY29uc3Qgdm9pZCAqKSBjb24tPm9wdGlvbnM7CisgICAgLypAPWtlZXB0cmFuc0AqLworLypAPWJvdW5kc3dyaXRlQCovCisKKyAgICBjdXJzb3IgPSBzaG93SGVscEludHJvKGNvbiwgZnApOworICAgIGN1cnNvciArPSBzaG93U2hvcnRPcHRpb25zKGNvbi0+b3B0aW9ucywgZnAsIE5VTEwpOworICAgIGN1cnNvciA9IHNpbmdsZVRhYmxlVXNhZ2UoY29uLCBmcCwgY3Vyc29yLCBjb24tPm9wdGlvbnMsIE5VTEwsIGRvbmUpOworICAgIGN1cnNvciA9IGl0ZW1Vc2FnZShmcCwgY3Vyc29yLCBjb24tPmFsaWFzZXMsIGNvbi0+bnVtQWxpYXNlcywgTlVMTCk7CisgICAgY3Vyc29yID0gaXRlbVVzYWdlKGZwLCBjdXJzb3IsIGNvbi0+ZXhlY3MsIGNvbi0+bnVtRXhlY3MsIE5VTEwpOworCisgICAgaWYgKGNvbi0+b3RoZXJIZWxwKSB7CisJY3Vyc29yICs9IHN0cmxlbihjb24tPm90aGVySGVscCkgKyAxOworCWlmIChjdXJzb3IgPiA3OSkgZnByaW50ZihmcCwgIlxuICAgICAgICIpOworCWZwcmludGYoZnAsICIgJXMiLCBjb24tPm90aGVySGVscCk7CisgICAgfQorCisgICAgZnByaW50ZihmcCwgIlxuIik7Cit9CisKK3ZvaWQgcG9wdFNldE90aGVyT3B0aW9uSGVscChwb3B0Q29udGV4dCBjb24sIGNvbnN0IGNoYXIgKiB0ZXh0KQoreworICAgIGNvbi0+b3RoZXJIZWxwID0gX2ZyZWUoY29uLT5vdGhlckhlbHApOworICAgIGNvbi0+b3RoZXJIZWxwID0geHN0cmR1cCh0ZXh0KTsKK30KZGlmZiAtLWdpdCBhL2xpYnBvcHQvcG9wdGludC5oIGIvbGlicG9wdC9wb3B0aW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU3NTcxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnBvcHQvcG9wdGludC5oCkBAIC0wLDAgKzEsMTE2IEBACisvKiogXGluZ3JvdXAgcG9wdAorICogXGZpbGUgcG9wdC9wb3B0aW50LmgKKyAqLworCisvKiAoQykgMTk5OC0yMDAwIFJlZCBIYXQsIEluYy4gLS0gTGljZW5zaW5nIGRldGFpbHMgYXJlIGluIHRoZSBDT1BZSU5HCisgICBmaWxlIGFjY29tcGFueWluZyBwb3B0IHNvdXJjZSBkaXN0cmlidXRpb25zLCBhdmFpbGFibGUgZnJvbSAKKyAgIGZ0cDovL2Z0cC5ycG0ub3JnL3B1Yi9ycG0vZGlzdC4gKi8KKworI2lmbmRlZiBIX1BPUFRJTlQKKyNkZWZpbmUgSF9QT1BUSU5UCisKKy8qKgorICogV3JhcHBlciB0byBmcmVlKDMpLCBoaWRlcyBjb25zdCBjb21waWxhdGlvbiBub2lzZSwgcGVybWl0IE5VTEwsIHJldHVybiBOVUxMLgorICogQHBhcmFtIHAJCW1lbW9yeSB0byBmcmVlCisgKiBAcmV0dmFsCQlOVUxMIGFsd2F5cworICovCisvKkB1bnVzZWRAKi8gc3RhdGljIGlubGluZSAvKkBudWxsQCovIHZvaWQgKgorX2ZyZWUoLypAb25seUAqLyAvKkBudWxsQCovIGNvbnN0IHZvaWQgKiBwKQorCS8qQG1vZGlmaWVzIHAgQCovCit7CisgICAgaWYgKHAgIT0gTlVMTCkJZnJlZSgodm9pZCAqKXApOworICAgIHJldHVybiBOVUxMOworfQorCisvKiBCaXQgbWFzayBtYWNyb3MuICovCisvKkAtZXhwb3J0dHlwZSAtcmVkZWYgQCovCit0eXBlZGVmCXVuc2lnbmVkIGludCBfX3BibV9iaXRzOworLypAPWV4cG9ydHR5cGUgPXJlZGVmIEAqLworI2RlZmluZQlfX1BCTV9OQklUUwkJKDggKiBzaXplb2YgKF9fcGJtX2JpdHMpKQorI2RlZmluZQlfX1BCTV9JWChkKQkJKChkKSAvIF9fUEJNX05CSVRTKQorI2RlZmluZSBfX1BCTV9NQVNLKGQpCQkoKF9fcGJtX2JpdHMpIDEgPDwgKCgodW5zaWduZWQpKGQpKSAlIF9fUEJNX05CSVRTKSkKKy8qQC1leHBvcnR0eXBlIC1yZWRlZiBAKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBfX3BibV9iaXRzIGJpdHNbMV07Cit9IHBibV9zZXQ7CisvKkA9ZXhwb3J0dHlwZSA9cmVkZWYgQCovCisjZGVmaW5lCV9fUEJNX0JJVFMoc2V0KQkoKHNldCktPmJpdHMpCisKKyNkZWZpbmUJUEJNX0FMTE9DKGQpCWNhbGxvYyhfX1BCTV9JWCAoZCkgKyAxLCBzaXplb2YoX19wYm1fYml0cykpCisjZGVmaW5lCVBCTV9GUkVFKHMpCV9mcmVlKHMpOworI2RlZmluZSBQQk1fU0VUKGQsIHMpICAgKF9fUEJNX0JJVFMgKHMpW19fUEJNX0lYIChkKV0gfD0gX19QQk1fTUFTSyAoZCkpCisjZGVmaW5lIFBCTV9DTFIoZCwgcykgICAoX19QQk1fQklUUyAocylbX19QQk1fSVggKGQpXSAmPSB+X19QQk1fTUFTSyAoZCkpCisjZGVmaW5lIFBCTV9JU1NFVChkLCBzKSAoKF9fUEJNX0JJVFMgKHMpW19fUEJNX0lYIChkKV0gJiBfX1BCTV9NQVNLIChkKSkgIT0gMCkKKworc3RydWN0IG9wdGlvblN0YWNrRW50cnkgeworICAgIGludCBhcmdjOworLypAb25seUAqLyAvKkBudWxsQCovCisgICAgY29uc3QgY2hhciAqKiBhcmd2OworLypAb25seUAqLyAvKkBudWxsQCovCisgICAgcGJtX3NldCAqIGFyZ2I7CisgICAgaW50IG5leHQ7CisvKkBvbmx5QCovIC8qQG51bGxAKi8KKyAgICBjb25zdCBjaGFyICogbmV4dEFyZzsKKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8KKyAgICBjb25zdCBjaGFyICogbmV4dENoYXJBcmc7CisvKkBkZXBlbmRlbnRAKi8gLypAbnVsbEAqLworICAgIHBvcHRJdGVtIGN1cnJBbGlhczsKKyAgICBpbnQgc3R1ZmZlZDsKK307CisKK3N0cnVjdCBwb3B0Q29udGV4dF9zIHsKKyAgICBzdHJ1Y3Qgb3B0aW9uU3RhY2tFbnRyeSBvcHRpb25TdGFja1tQT1BUX09QVElPTl9ERVBUSF07CisvKkBkZXBlbmRlbnRAKi8KKyAgICBzdHJ1Y3Qgb3B0aW9uU3RhY2tFbnRyeSAqIG9zOworLypAb3duZWRAKi8gLypAbnVsbEAqLworICAgIGNvbnN0IGNoYXIgKiogbGVmdG92ZXJzOworICAgIGludCBudW1MZWZ0b3ZlcnM7CisgICAgaW50IG5leHRMZWZ0b3ZlcjsKKy8qQGtlZXBAKi8KKyAgICBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdGlvbnM7CisgICAgaW50IHJlc3RMZWZ0b3ZlcjsKKy8qQG9ubHlAKi8gLypAbnVsbEAqLworICAgIGNvbnN0IGNoYXIgKiBhcHBOYW1lOworLypAb25seUAqLyAvKkBudWxsQCovCisgICAgcG9wdEl0ZW0gYWxpYXNlczsKKyAgICBpbnQgbnVtQWxpYXNlczsKKyAgICBpbnQgZmxhZ3M7CisvKkBvd25lZEAqLyAvKkBudWxsQCovCisgICAgcG9wdEl0ZW0gZXhlY3M7CisgICAgaW50IG51bUV4ZWNzOworLypAb25seUAqLyAvKkBudWxsQCovCisgICAgY29uc3QgY2hhciAqKiBmaW5hbEFyZ3Y7CisgICAgaW50IGZpbmFsQXJndkNvdW50OworICAgIGludCBmaW5hbEFyZ3ZBbGxvY2VkOworLypAZGVwZW5kZW50QCovIC8qQG51bGxAKi8KKyAgICBwb3B0SXRlbSBkb0V4ZWM7CisvKkBvbmx5QCovCisgICAgY29uc3QgY2hhciAqIGV4ZWNQYXRoOworICAgIGludCBleGVjQWJzb2x1dGU7CisvKkBvbmx5QCovIC8qQHJlbG51bGxAKi8KKyAgICBjb25zdCBjaGFyICogb3RoZXJIZWxwOworLypAbnVsbEAqLworICAgIHBibV9zZXQgKiBhcmdfc3RyaXA7Cit9OworCisjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9HRVRURVhUKSAmJiAhZGVmaW5lZChfX0xDTElOVF9fKQorI2RlZmluZSBfKGZvbykgZ2V0dGV4dChmb28pCisjZWxzZQorI2RlZmluZSBfKGZvbykgZm9vCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9EQ0dFVFRFWFQpICYmICFkZWZpbmVkKF9fTENMSU5UX18pCisjZGVmaW5lIERfKGRvbSwgc3RyKSBkZ2V0dGV4dChkb20sIHN0cikKKyNkZWZpbmUgUE9QVF8oZm9vKSBEXygicG9wdCIsIGZvbykKKyNlbHNlCisjZGVmaW5lIERfKGRvbSwgc3RyKSBzdHIKKyNkZWZpbmUgUE9QVF8oZm9vKSBmb28KKyNlbmRpZgorCisjZGVmaW5lIE5fKGZvbykgZm9vCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicG9wdC9wb3B0cGFyc2UuYyBiL2xpYnBvcHQvcG9wdHBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkZWE4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnBvcHQvcG9wdHBhcnNlLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcZmlsZSBwb3B0L3BvcHRwYXJzZS5jCisgKi8KKworLyogKEMpIDE5OTgtMjAwMiBSZWQgSGF0LCBJbmMuIC0tIExpY2Vuc2luZyBkZXRhaWxzIGFyZSBpbiB0aGUgQ09QWUlORworICAgZmlsZSBhY2NvbXBhbnlpbmcgcG9wdCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgYXZhaWxhYmxlIGZyb20gCisgICBmdHA6Ly9mdHAucnBtLm9yZy9wdWIvcnBtL2Rpc3QuICovCisKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKworI2RlZmluZSBQT1BUX0FSR1ZfQVJSQVlfR1JPV19ERUxUQSA1CisKKy8qQC1ib3VuZHN3cml0ZUAqLworaW50IHBvcHREdXBBcmd2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJaW50ICogYXJnY1B0ciwgY29uc3QgY2hhciAqKiogYXJndlB0cikKK3sKKyAgICBzaXplX3QgbmIgPSAoYXJnYyArIDEpICogc2l6ZW9mKCphcmd2KTsKKyAgICBjb25zdCBjaGFyICoqIGFyZ3YyOworICAgIGNoYXIgKiBkc3Q7CisgICAgaW50IGk7CisKKyAgICBpZiAoYXJnYyA8PSAwIHx8IGFyZ3YgPT0gTlVMTCkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCXJldHVybiBQT1BUX0VSUk9SX05PQVJHOworICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwlpZiAoYXJndltpXSA9PSBOVUxMKQorCSAgICByZXR1cm4gUE9QVF9FUlJPUl9OT0FSRzsKKwluYiArPSBzdHJsZW4oYXJndltpXSkgKyAxOworICAgIH0KKwkKKyAgICBkc3QgPSBtYWxsb2MobmIpOworICAgIGlmIChkc3QgPT0gTlVMTCkJCQkvKiBYWFggY2FuJ3QgaGFwcGVuICovCisJcmV0dXJuIFBPUFRfRVJST1JfTUFMTE9DOworICAgIGFyZ3YyID0gKHZvaWQgKikgZHN0OworICAgIGRzdCArPSAoYXJnYyArIDEpICogc2l6ZW9mKCphcmd2KTsKKworICAgIC8qQC1icmFuY2hzdGF0ZUAqLworICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwlhcmd2MltpXSA9IGRzdDsKKwlkc3QgKz0gc3RybGVuKHN0cmNweShkc3QsIGFyZ3ZbaV0pKSArIDE7CisgICAgfQorICAgIC8qQD1icmFuY2hzdGF0ZUAqLworICAgIGFyZ3YyW2FyZ2NdID0gTlVMTDsKKworICAgIGlmIChhcmd2UHRyKSB7CisJKmFyZ3ZQdHIgPSBhcmd2MjsKKyAgICB9IGVsc2UgeworCWZyZWUoYXJndjIpOworCWFyZ3YyID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGFyZ2NQdHIpCisJKmFyZ2NQdHIgPSBhcmdjOworICAgIHJldHVybiAwOworfQorLypAPWJvdW5kc3dyaXRlQCovCisKKy8qQC1ib3VuZHNAKi8KK2ludCBwb3B0UGFyc2VBcmd2U3RyaW5nKGNvbnN0IGNoYXIgKiBzLCBpbnQgKiBhcmdjUHRyLCBjb25zdCBjaGFyICoqKiBhcmd2UHRyKQoreworICAgIGNvbnN0IGNoYXIgKiBzcmM7CisgICAgY2hhciBxdW90ZSA9ICdcMCc7CisgICAgaW50IGFyZ3ZBbGxvY2VkID0gUE9QVF9BUkdWX0FSUkFZX0dST1dfREVMVEE7CisgICAgY29uc3QgY2hhciAqKiBhcmd2ID0gbWFsbG9jKHNpemVvZigqYXJndikgKiBhcmd2QWxsb2NlZCk7CisgICAgaW50IGFyZ2MgPSAwOworICAgIGludCBidWZsZW4gPSBzdHJsZW4ocykgKyAxOworICAgIGNoYXIgKiBidWYgPSBtZW1zZXQoYWxsb2NhKGJ1ZmxlbiksIDAsIGJ1Zmxlbik7CisgICAgaW50IHJjID0gUE9QVF9FUlJPUl9NQUxMT0M7CisKKyAgICBpZiAoYXJndiA9PSBOVUxMKSByZXR1cm4gcmM7CisgICAgYXJndlthcmdjXSA9IGJ1ZjsKKworICAgIGZvciAoc3JjID0gczsgKnNyYyAhPSAnXDAnOyBzcmMrKykgeworCWlmIChxdW90ZSA9PSAqc3JjKSB7CisJICAgIHF1b3RlID0gJ1wwJzsKKwl9IGVsc2UgaWYgKHF1b3RlICE9ICdcMCcpIHsKKwkgICAgaWYgKCpzcmMgPT0gJ1xcJykgeworCQlzcmMrKzsKKwkJaWYgKCEqc3JjKSB7CisJCSAgICByYyA9IFBPUFRfRVJST1JfQkFEUVVPVEU7CisJCSAgICBnb3RvIGV4aXQ7CisJCX0KKwkJaWYgKCpzcmMgIT0gcXVvdGUpICpidWYrKyA9ICdcXCc7CisJICAgIH0KKwkgICAgKmJ1ZisrID0gKnNyYzsKKwl9IGVsc2UgaWYgKGlzc3BhY2UoKnNyYykpIHsKKwkgICAgaWYgKCphcmd2W2FyZ2NdICE9ICdcMCcpIHsKKwkJYnVmKyssIGFyZ2MrKzsKKwkJaWYgKGFyZ2MgPT0gYXJndkFsbG9jZWQpIHsKKwkJICAgIGFyZ3ZBbGxvY2VkICs9IFBPUFRfQVJHVl9BUlJBWV9HUk9XX0RFTFRBOworCQkgICAgYXJndiA9IHJlYWxsb2MoYXJndiwgc2l6ZW9mKCphcmd2KSAqIGFyZ3ZBbGxvY2VkKTsKKwkJICAgIGlmIChhcmd2ID09IE5VTEwpIGdvdG8gZXhpdDsKKwkJfQorCQlhcmd2W2FyZ2NdID0gYnVmOworCSAgICB9CisJfSBlbHNlIHN3aXRjaCAoKnNyYykgeworCSAgY2FzZSAnIic6CisJICBjYXNlICdcJyc6CisJICAgIHF1b3RlID0gKnNyYzsKKwkgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJICBjYXNlICdcXCc6CisJICAgIHNyYysrOworCSAgICBpZiAoISpzcmMpIHsKKwkJcmMgPSBQT1BUX0VSUk9SX0JBRFFVT1RFOworCQlnb3RvIGV4aXQ7CisJICAgIH0KKwkgICAgLypAZmFsbHRocm91Z2hAKi8KKwkgIGRlZmF1bHQ6CisJICAgICpidWYrKyA9ICpzcmM7CisJICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCX0KKyAgICB9CisKKyAgICBpZiAoc3RybGVuKGFyZ3ZbYXJnY10pKSB7CisJYXJnYysrLCBidWYrKzsKKyAgICB9CisKKyAgICByYyA9IHBvcHREdXBBcmd2KGFyZ2MsIGFyZ3YsIGFyZ2NQdHIsIGFyZ3ZQdHIpOworCitleGl0OgorICAgIGlmIChhcmd2KSBmcmVlKGFyZ3YpOworICAgIHJldHVybiByYzsKK30KKy8qQD1ib3VuZHNAKi8KKworLyogc3RpbGwgaW4gdGhlIGRldiBzdGFnZS4KKyAqIHJldHVybiB2YWx1ZXMsIHBlcmhhcHMgMT09IGZpbGUgZXJybworICogMj09IGxpbmUgdG8gbG9uZworICogMz09IHVtbS4uLi4gbW9yZT8KKyAqLworaW50IHBvcHRDb25maWdGaWxlVG9TdHJpbmcoRklMRSAqZnAsIGNoYXIgKiogYXJnc3RycCwgLypAdW51c2VkQCovIGludCBmbGFncykKK3sKKyAgICBjaGFyIGxpbmVbOTk5XTsKKyAgICBjaGFyICogYXJnc3RyOworICAgIGNoYXIgKiBwOworICAgIGNoYXIgKiBxOworICAgIGNoYXIgKiB4OworICAgIGludCB0OworICAgIGludCBhcmd2bGVuID0gMDsKKyAgICBzaXplX3QgbWF4bGluZWxlbiA9IHNpemVvZihsaW5lKTsKKyAgICBzaXplX3QgbGluZWxlbjsKKyAgICBpbnQgbWF4YXJndmxlbiA9IDQ4MDsKKyAgICBpbnQgbGluZW51bSA9IDA7CisKKyAgICAqYXJnc3RycCA9IE5VTEw7CisKKyAgICAvKiAgIHwgICB0aGlzX2lzICAgPSAgIG91cl9saW5lCisgICAgICoJICAgICBwICAgICAgICAgICAgIHEgICAgICB4CisgICAgICovCisKKyAgICBpZiAoZnAgPT0gTlVMTCkKKwlyZXR1cm4gUE9QVF9FUlJPUl9OVUxMQVJHOworCisgICAgYXJnc3RyID0gY2FsbG9jKG1heGFyZ3ZsZW4sIHNpemVvZigqYXJnc3RyKSk7CisgICAgaWYgKGFyZ3N0ciA9PSBOVUxMKSByZXR1cm4gUE9QVF9FUlJPUl9NQUxMT0M7CisKKyAgICB3aGlsZSAoZmdldHMobGluZSwgKGludCltYXhsaW5lbGVuLCBmcCkgIT0gTlVMTCkgeworCWxpbmVudW0rKzsKKwlwID0gbGluZTsKKworCS8qIGxvb3AgdW50aWwgZmlyc3Qgbm9uLXNwYWNlIGNoYXIgb3IgRU9MICovCisJd2hpbGUoICpwICE9ICdcMCcgJiYgaXNzcGFjZSgqcCkgKQorCSAgICBwKys7CisKKwlsaW5lbGVuID0gc3RybGVuKHApOworCWlmIChsaW5lbGVuID49IG1heGxpbmVsZW4tMSkKKwkgICAgcmV0dXJuIFBPUFRfRVJST1JfT1ZFUkZMT1c7CS8qIFhYWCBsaW5lIHRvbyBsb25nICovCisKKwlpZiAoKnAgPT0gJ1wwJyB8fCAqcCA9PSAnXG4nKSBjb250aW51ZTsJLyogbGluZSBpcyBlbXB0eSAqLworCWlmICgqcCA9PSAnIycpIGNvbnRpbnVlOwkJLyogY29tbWVudCBsaW5lICovCisKKwlxID0gcDsKKworCXdoaWxlICgqcSAhPSAnXDAnICYmICghaXNzcGFjZSgqcSkpICYmICpxICE9ICc9JykKKwkgICAgcSsrOworCisJaWYgKGlzc3BhY2UoKnEpKSB7CisJICAgIC8qIGEgc3BhY2UgYWZ0ZXIgdGhlIG5hbWUsIGZpbmQgbmV4dCBub24gc3BhY2UgKi8KKwkgICAgKnErKz0nXDAnOworCSAgICB3aGlsZSggKnEgIT0gJ1wwJyAmJiBpc3NwYWNlKChpbnQpKnEpICkgcSsrOworCX0KKwlpZiAoKnEgPT0gJ1wwJykgeworCSAgICAvKiBzaW5nbGUgY29tbWFuZCBsaW5lIG9wdGlvbiAoaWUsIG5vIG5hbWU9dmFsLCBqdXN0IG5hbWUpICovCisJICAgIHFbLTFdID0gJ1wwJzsJCS8qIGtpbGwgb2ZmIG5ld2xpbmUgZnJvbSBmZ2V0cygpIGNhbGwgKi8KKwkgICAgYXJndmxlbiArPSAodCA9IHEgLSBwKSArIChzaXplb2YoIiAtLSIpLTEpOworCSAgICBpZiAoYXJndmxlbiA+PSBtYXhhcmd2bGVuKSB7CisJCW1heGFyZ3ZsZW4gPSAodCA+IG1heGFyZ3ZsZW4pID8gdCoyIDogbWF4YXJndmxlbioyOworCQlhcmdzdHIgPSByZWFsbG9jKGFyZ3N0ciwgbWF4YXJndmxlbik7CisJCWlmIChhcmdzdHIgPT0gTlVMTCkgcmV0dXJuIFBPUFRfRVJST1JfTUFMTE9DOworCSAgICB9CisJICAgIHN0cmNhdChhcmdzdHIsICIgLS0iKTsKKwkgICAgc3RyY2F0KGFyZ3N0ciwgcCk7CisJICAgIGNvbnRpbnVlOworCX0KKwlpZiAoKnEgIT0gJz0nKQorCSAgICBjb250aW51ZTsJLyogWFhYIGZvciBub3csIHNpbGVudGx5IGlnbm9yZSBib2d1cyBsaW5lICovCisJCQorCS8qICpxIGlzIGFuIGVxdWFsIHNpZ24uICovCisJKnErKyA9ICdcMCc7CisKKwkvKiBmaW5kIG5leHQgbm9uLXNwYWNlIGxldHRlciBvZiB2YWx1ZSAqLworCXdoaWxlICgqcSAhPSAnXDAnICYmIGlzc3BhY2UoKnEpKQorCSAgICBxKys7CisJaWYgKCpxID09ICdcMCcpCisJICAgIGNvbnRpbnVlOwkvKiBYWFggc2lsZW50bHkgaWdub3JlIG1pc3NpbmcgdmFsdWUgKi8KKworCS8qIG5vdywgbG9vcCBhbmQgc3RyaXAgYWxsIGVuZGluZyB3aGl0ZXNwYWNlICovCisJeCA9IHAgKyBsaW5lbGVuOworCXdoaWxlIChpc3NwYWNlKCotLXgpKQorCSAgICAqeCA9IDA7CS8qIG51bGwgb3V0IGxhc3QgY2hhciBpZiBzcGFjZSAoaW5jbHVkaW5nIGZnZXRzKCkgTkwpICovCisKKwkvKiByZXN0IG9mIGxpbmUgYWNjZXB0ICovCisJdCA9IHggLSBwOworCWFyZ3ZsZW4gKz0gdCArIChzaXplb2YoIicgLS09JyIpLTEpOworCWlmIChhcmd2bGVuID49IG1heGFyZ3ZsZW4pIHsKKwkgICAgbWF4YXJndmxlbiA9ICh0ID4gbWF4YXJndmxlbikgPyB0KjIgOiBtYXhhcmd2bGVuKjI7CisJICAgIGFyZ3N0ciA9IHJlYWxsb2MoYXJnc3RyLCBtYXhhcmd2bGVuKTsKKwkgICAgaWYgKGFyZ3N0ciA9PSBOVUxMKSByZXR1cm4gUE9QVF9FUlJPUl9NQUxMT0M7CisJfQorCXN0cmNhdChhcmdzdHIsICIgLS0iKTsKKwlzdHJjYXQoYXJnc3RyLCBwKTsKKwlzdHJjYXQoYXJnc3RyLCAiPVwiIik7CisJc3RyY2F0KGFyZ3N0ciwgcSk7CisJc3RyY2F0KGFyZ3N0ciwgIlwiIik7CisgICAgfQorCisgICAgKmFyZ3N0cnAgPSBhcmdzdHI7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJwb3B0L3N5c3RlbS5oIGIvbGlicG9wdC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Q0NmNiCi0tLSAvZGV2L251bGwKKysrIGIvbGlicG9wdC9zeXN0ZW0uaApAQCAtMCwwICsxLDgxIEBACisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX0dMSUJDX18pICYmIGRlZmluZWQoX19MQ0xJTlRfXykKKy8qQC1kZWNsdW5kZWZAKi8KKy8qQHVuY2hlY2tlZEAqLworZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CisvKkB1bmNoZWNrZWRAKi8KK2V4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOworLypAPWRlY2x1bmRlZkAqLworI2VuZGlmCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaWYgSEFWRV9NQ0hFQ0tfSCAKKyNpbmNsdWRlIDxtY2hlY2suaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgX19OZVhUCisvKiBhY2Nlc3MgbWFjcm9zIGFyZSBub3QgZGVjbGFyZWQgaW4gbm9uIHBvc2l4IG1vZGUgaW4gdW5pc3RkLmggLQorIGRvbid0IHRyeSB0byB1c2UgcG9zaXggb24gTmVYVHN0ZXAgMy4zICEgKi8KKyNpbmNsdWRlIDxsaWJjLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19MQ0xJTlRfXykKKy8qQC1kZWNsdW5kZWYgLWluY29uZGVmcyBAKi8gLyogTENMOiBtaXNzaW5nIGFubm90YXRpb24gKi8KKy8qQG9ubHlAKi8gLypAb3V0QCovCit2b2lkICogYWxsb2NhIChzaXplX3QgX19zaXplKQorCS8qQGVuc3VyZXMgTWF4U2V0KHJlc3VsdCkgPT0gKF9fc2l6ZSAtIDEpIEAqLworCS8qQCovOworLypAPWRlY2x1bmRlZiA9aW5jb25kZWZzIEAqLworI2VuZGlmCisKKy8qIEFJWCByZXF1aXJlcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmlsZS4gICovIAorI2lmbmRlZiBfX0dOVUNfXworIyBpZiBIQVZFX0FMTE9DQV9ICisjICBpbmNsdWRlIDxhbGxvY2EuaD4KKyMgZWxzZQorIyAgaWZkZWYgX0FJWAorI3ByYWdtYSBhbGxvY2EKKyMgIGVsc2UKKyMgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLworY2hhciAqYWxsb2NhICgpOworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisjZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjZW5kaWYKKworLypALXJlZGVjbCAtcmVkZWZAKi8KKy8qQG1heWV4aXRAKi8gLypAb25seUAqLyAvKkB1bnVzZWRAKi8KK2NoYXIgKiB4c3RyZHVwIChjb25zdCBjaGFyICpzdHIpCisJLypAKi87CisvKkA9cmVkZWNsID1yZWRlZkAqLworCisjaWYgSEFWRV9NQ0hFQ0tfSCAmJiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZQl2bWVmYWlsKCkJKGZwcmludGYoc3RkZXJyLCAidmlydHVhbCBtZW1vcnkgZXhoYXVzdGVkLlxuIiksIGV4aXQoRVhJVF9GQUlMVVJFKSwgTlVMTCkKKyNkZWZpbmUgeHN0cmR1cChfc3RyKSAgIChzdHJjcHkoKG1hbGxvYyhzdHJsZW4oX3N0cikrMSkgPyA6IHZtZWZhaWwoKSksIChfc3RyKSkpCisjZWxzZQorI2RlZmluZQl4c3RyZHVwKF9zdHIpCXN0cmR1cChfc3RyKQorI2VuZGlmICAvKiBIQVZFX01DSEVDS19IICYmIGRlZmluZWQoX19HTlVDX18pICovCisKKyNpZiBIQVZFX19fU0VDVVJFX0dFVEVOViAmJiAhZGVmaW5lZChfX0xDTElOVF9fKQorI2RlZmluZQlnZXRlbnYoX3MpCV9fc2VjdXJlX2dldGVudihfcykKKyNlbmRpZgorCisjaW5jbHVkZSAicG9wdC5oIgpkaWZmIC0tZ2l0IGEvbGlicHAvTWFrZWZpbGUuYW0gYi9saWJwcC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdhN2ZkZC4uMDAwMDAwMAotLS0gYS9saWJwcC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUFNX0NQUEZMQUdTID0gXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKyBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlib3ArKyBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJyZWdleAotCi1BTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLQotbm9pbnN0X0xJQlJBUklFUyA9IGxpYnBwLmEKLWxpYnBwX2FfU09VUkNFUyA9IFwKLQlhcnJhbmdlX3Byb2ZpbGVzLmNwcCBcCi0JYXJyYW5nZV9wcm9maWxlcy5oIFwKLQljYWxsZ3JhcGhfY29udGFpbmVyLmggXAotCWNhbGxncmFwaF9jb250YWluZXIuY3BwIFwKLQlkaWZmX2NvbnRhaW5lci5jcHAgXAotCWRpZmZfY29udGFpbmVyLmggXAotCWZpbGVuYW1lX3NwZWMuY3BwIFwKLQlmaWxlbmFtZV9zcGVjLmggXAotCWZvcm1hdF9mbGFncy5oIFwKLQlmb3JtYXRfb3V0cHV0LmNwcCBcCi0JZm9ybWF0X291dHB1dC5oIFwKLQlpbWFnZV9lcnJvcnMuaCBcCi0JaW1hZ2VfZXJyb3JzLmNwcCBcCi0JbG9jYXRlX2ltYWdlcy5jcHAgXAotCWxvY2F0ZV9pbWFnZXMuaCBcCi0JbmFtZV9zdG9yYWdlLmNwcCBcCi0JbmFtZV9zdG9yYWdlLmggXAotCW9wX2hlYWRlci5jcHAgXAotCW9wX2hlYWRlci5oIFwKLQlzeW1ib2wuY3BwIFwKLQlzeW1ib2wuaCBcCi0JcGFyc2VfZmlsZW5hbWUuY3BwIFwKLQlwYXJzZV9maWxlbmFtZS5oIFwKLQlwb3B1bGF0ZS5oIFwKLQlwb3B1bGF0ZS5jcHAgXAotCXByb2ZpbGUuY3BwIFwKLQlwcm9maWxlLmggXAotCXByb2ZpbGVfY29udGFpbmVyLmNwcCBcCi0JcHJvZmlsZV9jb250YWluZXIuaCBcCi0JcHJvZmlsZV9zcGVjLmNwcCBcCi0JcHJvZmlsZV9zcGVjLmggXAotCXNhbXBsZV9jb250YWluZXIuY3BwIFwKLQlzYW1wbGVfY29udGFpbmVyLmggXAotCXN5bWJvbF9jb250YWluZXIuY3BwIFwKLQlzeW1ib2xfY29udGFpbmVyLmggXAotCXN5bWJvbF9mdW5jdG9ycy5jcHAgXAotCXN5bWJvbF9mdW5jdG9ycy5oIFwKLQlzeW1ib2xfc29ydC5jcHAgXAotCXN5bWJvbF9zb3J0LmgKZGlmZiAtLWdpdCBhL2xpYnBwL01ha2VmaWxlLmluIGIvbGlicHAvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYmIzY2YuLjAwMDAwMDAKLS0tIGEvbGlicHAvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1MTMgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1TT1VSQ0VTID0gJChsaWJwcF9hX1NPVVJDRVMpCi0KLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSBASU5TVEFMTEAKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLXN1YmRpciA9IGxpYnBwCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1MSUJSQVJJRVMgPSAkKG5vaW5zdF9MSUJSQVJJRVMpCi1BUiA9IGFyCi1BUkZMQUdTID0gY3J1Ci1saWJwcF9hX0FSID0gJChBUikgJChBUkZMQUdTKQotbGlicHBfYV9MSUJBREQgPQotYW1fbGlicHBfYV9PQkpFQ1RTID0gYXJyYW5nZV9wcm9maWxlcy4kKE9CSkVYVCkgXAotCWNhbGxncmFwaF9jb250YWluZXIuJChPQkpFWFQpIGRpZmZfY29udGFpbmVyLiQoT0JKRVhUKSBcCi0JZmlsZW5hbWVfc3BlYy4kKE9CSkVYVCkgZm9ybWF0X291dHB1dC4kKE9CSkVYVCkgXAotCWltYWdlX2Vycm9ycy4kKE9CSkVYVCkgbG9jYXRlX2ltYWdlcy4kKE9CSkVYVCkgXAotCW5hbWVfc3RvcmFnZS4kKE9CSkVYVCkgb3BfaGVhZGVyLiQoT0JKRVhUKSBzeW1ib2wuJChPQkpFWFQpIFwKLQlwYXJzZV9maWxlbmFtZS4kKE9CSkVYVCkgcG9wdWxhdGUuJChPQkpFWFQpIHByb2ZpbGUuJChPQkpFWFQpIFwKLQlwcm9maWxlX2NvbnRhaW5lci4kKE9CSkVYVCkgcHJvZmlsZV9zcGVjLiQoT0JKRVhUKSBcCi0Jc2FtcGxlX2NvbnRhaW5lci4kKE9CSkVYVCkgc3ltYm9sX2NvbnRhaW5lci4kKE9CSkVYVCkgXAotCXN5bWJvbF9mdW5jdG9ycy4kKE9CSkVYVCkgc3ltYm9sX3NvcnQuJChPQkpFWFQpCi1saWJwcF9hX09CSkVDVFMgPSAkKGFtX2xpYnBwX2FfT0JKRUNUUykKLURFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1DWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCi0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKLUNYWExEID0gJChDWFgpCi1DWFhMSU5LID0gJChDWFhMRCkgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotU09VUkNFUyA9ICQobGlicHBfYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJwcF9hX1NPVVJDRVMpCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACi1BTVRBUiA9IEBBTVRBUkAKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkZEX0xJQlMgPSBAQkZEX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFURSA9IEBEQVRFQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVYRUVYVCA9IEBFWEVFWFRACi1FWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUtJTkMgPSBAS0lOQ0AKLUtTUkMgPSBAS1NSQ0AKLUtWRVJTID0gQEtWRVJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKLVhfTElCUyA9IEBYX0xJQlNACi1YX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWVuYWJsZV9hYmlfRkFMU0UgPSBAZW5hYmxlX2FiaV9GQUxTRUAKLWVuYWJsZV9hYmlfVFJVRSA9IEBlbmFibGVfYWJpX1RSVUVACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhhdmVfcXRfRkFMU0UgPSBAaGF2ZV9xdF9GQUxTRUAKLWhhdmVfcXRfVFJVRSA9IEBoYXZlX3F0X1RSVUVACi1oYXZlX3hzbHRwcm9jX0ZBTFNFID0gQGhhdmVfeHNsdHByb2NfRkFMU0VACi1oYXZlX3hzbHRwcm9jX1RSVUUgPSBAaGF2ZV94c2x0cHJvY19UUlVFQAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAota2VybmVsX3N1cHBvcnRfRkFMU0UgPSBAa2VybmVsX3N1cHBvcnRfRkFMU0VACi1rZXJuZWxfc3VwcG9ydF9UUlVFID0gQGtlcm5lbF9zdXBwb3J0X1RSVUVACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10b3BkaXIgPSBAdG9wZGlyQAotQU1fQ1BQRkxBR1MgPSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYmRiIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wdCsrIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCsrIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnJlZ2V4Ci0KLUFNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotbm9pbnN0X0xJQlJBUklFUyA9IGxpYnBwLmEKLWxpYnBwX2FfU09VUkNFUyA9IFwKLQlhcnJhbmdlX3Byb2ZpbGVzLmNwcCBcCi0JYXJyYW5nZV9wcm9maWxlcy5oIFwKLQljYWxsZ3JhcGhfY29udGFpbmVyLmggXAotCWNhbGxncmFwaF9jb250YWluZXIuY3BwIFwKLQlkaWZmX2NvbnRhaW5lci5jcHAgXAotCWRpZmZfY29udGFpbmVyLmggXAotCWZpbGVuYW1lX3NwZWMuY3BwIFwKLQlmaWxlbmFtZV9zcGVjLmggXAotCWZvcm1hdF9mbGFncy5oIFwKLQlmb3JtYXRfb3V0cHV0LmNwcCBcCi0JZm9ybWF0X291dHB1dC5oIFwKLQlpbWFnZV9lcnJvcnMuaCBcCi0JaW1hZ2VfZXJyb3JzLmNwcCBcCi0JbG9jYXRlX2ltYWdlcy5jcHAgXAotCWxvY2F0ZV9pbWFnZXMuaCBcCi0JbmFtZV9zdG9yYWdlLmNwcCBcCi0JbmFtZV9zdG9yYWdlLmggXAotCW9wX2hlYWRlci5jcHAgXAotCW9wX2hlYWRlci5oIFwKLQlzeW1ib2wuY3BwIFwKLQlzeW1ib2wuaCBcCi0JcGFyc2VfZmlsZW5hbWUuY3BwIFwKLQlwYXJzZV9maWxlbmFtZS5oIFwKLQlwb3B1bGF0ZS5oIFwKLQlwb3B1bGF0ZS5jcHAgXAotCXByb2ZpbGUuY3BwIFwKLQlwcm9maWxlLmggXAotCXByb2ZpbGVfY29udGFpbmVyLmNwcCBcCi0JcHJvZmlsZV9jb250YWluZXIuaCBcCi0JcHJvZmlsZV9zcGVjLmNwcCBcCi0JcHJvZmlsZV9zcGVjLmggXAotCXNhbXBsZV9jb250YWluZXIuY3BwIFwKLQlzYW1wbGVfY29udGFpbmVyLmggXAotCXN5bWJvbF9jb250YWluZXIuY3BwIFwKLQlzeW1ib2xfY29udGFpbmVyLmggXAotCXN5bWJvbF9mdW5jdG9ycy5jcHAgXAotCXN5bWJvbF9mdW5jdG9ycy5oIFwKLQlzeW1ib2xfc29ydC5jcHAgXAotCXN5bWJvbF9zb3J0LmgKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuY3BwIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYnBwL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJwcC9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotY2xlYW4tbm9pbnN0TElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCi1saWJwcC5hOiAkKGxpYnBwX2FfT0JKRUNUUykgJChsaWJwcF9hX0RFUEVOREVOQ0lFUykgCi0JLXJtIC1mIGxpYnBwLmEKLQkkKGxpYnBwX2FfQVIpIGxpYnBwLmEgJChsaWJwcF9hX09CSkVDVFMpICQobGlicHBfYV9MSUJBREQpCi0JJChSQU5MSUIpIGxpYnBwLmEKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FycmFuZ2VfcHJvZmlsZXMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NhbGxncmFwaF9jb250YWluZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RpZmZfY29udGFpbmVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9maWxlbmFtZV9zcGVjLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mb3JtYXRfb3V0cHV0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbWFnZV9lcnJvcnMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xvY2F0ZV9pbWFnZXMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL25hbWVfc3RvcmFnZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BfaGVhZGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wYXJzZV9maWxlbmFtZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcG9wdWxhdGUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Byb2ZpbGUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Byb2ZpbGVfY29udGFpbmVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wcm9maWxlX3NwZWMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NhbXBsZV9jb250YWluZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N5bWJvbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3ltYm9sX2NvbnRhaW5lci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3ltYm9sX2Z1bmN0b3JzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zeW1ib2xfc29ydC5Qb0BhbV9fcXVvdGVACi0KLS5jcHAubzoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAlpZiAkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uY3BwLm9iajoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAlpZiAkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLXVuaW5zdGFsbC1pbmZvLWFtOgotCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCi0KLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCi0JZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAotCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLW5vaW5zdExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYwotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQotCi0uUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbm9pbnN0TElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCi0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCBcCi0JdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwIGIvbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMjFlYjYuLjAwMDAwMDAKLS0tIGEvbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NzYgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBhcnJhbmdlX3Byb2ZpbGVzLmNwcAotICogQ2xhc3NpZnkgYW5kIHByb2Nlc3MgYSBsaXN0IG9mIGNhbmRpZGF0ZSBzYW1wbGUgZmlsZXMKLSAqIGludG8gbWVyZ2VkIHNldHMgYW5kIGNsYXNzZXMuCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0PgotCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0jaW5jbHVkZSAib3BfaGVhZGVyLmgiCi0jaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCi0KLSNpbmNsdWRlICJhcnJhbmdlX3Byb2ZpbGVzLmgiCi0jaW5jbHVkZSAicGFyc2VfZmlsZW5hbWUuaCIKLSNpbmNsdWRlICJsb2NhdGVfaW1hZ2VzLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0KLWludCBudW1lcmljX2NvbXBhcmUoc3RyaW5nIGNvbnN0ICYgbGhzLCBzdHJpbmcgY29uc3QgJiByaHMpCi17Ci0JaWYgKGxocyA9PSAiYWxsIiAmJiByaHMgPT0gImFsbCIpCi0JCXJldHVybiAwOwotCS8vIHdlIGNob29zZSBhbiBvcmRlciBhcmJpdHJhcmlseQotCWlmIChsaHMgPT0gImFsbCIpCi0JCXJldHVybiAxOwotCWlmIChyaHMgPT0gImFsbCIpCi0JCXJldHVybiAtMTsKLQl1bnNpZ25lZCBpbnQgbGhzdmFsID0gb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4obGhzKTsKLQl1bnNpZ25lZCBpbnQgcmhzdmFsID0gb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4ocmhzKTsKLQlpZiAobGhzdmFsID09IHJoc3ZhbCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGxoc3ZhbCA8IHJoc3ZhbCkKLQkJcmV0dXJuIC0xOwotCXJldHVybiAxOwotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotCi0vLyBnbG9iYWwgdG8gZml4IHNvbWUgQysrIG9ic2N1cmUgY29ybmVyIGNhc2UuCi1ib29sIG9wZXJhdG9yPChwcm9maWxlX2NsYXNzIGNvbnN0ICYgbGhzLAotICAgICAgICAgICAgICAgcHJvZmlsZV9jbGFzcyBjb25zdCAmIHJocykKLXsKLQlwcm9maWxlX3RlbXBsYXRlIGNvbnN0ICYgbHQgPSBsaHMucHRlbXBsYXRlOwotCXByb2ZpbGVfdGVtcGxhdGUgY29uc3QgJiBydCA9IHJocy5wdGVtcGxhdGU7Ci0KLQlpbnQgY29tcCA9IG51bWVyaWNfY29tcGFyZShsdC5jcHUsIHJ0LmNwdSk7Ci0JaWYgKGNvbXApCi0JCXJldHVybiBjb21wIDwgMDsKLQotCWNvbXAgPSBudW1lcmljX2NvbXBhcmUobHQudGdpZCwgcnQudGdpZCk7Ci0JaWYgKGNvbXApCi0JCXJldHVybiBjb21wIDwgMDsKLQotCWNvbXAgPSBudW1lcmljX2NvbXBhcmUobHQudGlkLCBydC50aWQpOwotCWlmIChjb21wKQotCQlyZXR1cm4gY29tcCA8IDA7Ci0KLQljb21wID0gbnVtZXJpY19jb21wYXJlKGx0LnVuaXRtYXNrLCBydC51bml0bWFzayk7Ci0JaWYgKGNvbXApCi0JCXJldHVybiBjb21wIDwgMDsKLQotCWlmIChsdC5ldmVudCA9PSBydC5ldmVudCkKLQkJcmV0dXJuIGx0LmNvdW50IDwgcnQuY291bnQ7Ci0JcmV0dXJuIGx0LmV2ZW50IDwgcnQuZXZlbnQ7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBheGlzX3QgewotCXN0cmluZyBuYW1lOwotCXN0cmluZyBzdWdnZXN0aW9uOwotfSBheGVzW0FYSVNfTUFYXSA9IHsKLQl7ICJldmVudCIsICJzcGVjaWZ5IGV2ZW50OiwgY291bnQ6IG9yIHVuaXRtYXNrOiAoc2VlIGFsc28gLS1tZXJnZT11bml0bWFzaykiIH0sCi0JeyAidGdpZCIsICJzcGVjaWZ5IHRnaWQ6IG9yIC0tbWVyZ2UgdGdpZCIgfSwKLQl7ICJ0aWQiLCAic3BlY2lmeSB0aWQ6IG9yIC0tbWVyZ2UgdGlkIiB9LAotCXsgImNwdSIsICJzcGVjaWZ5IGNwdTogb3IgLS1tZXJnZSBjcHUiIH0sCi19OwotCi0KLWJvb2wgcHJvZmlsZV9jbGFzc2VzOjptYXRjaGVzKHByb2ZpbGVfY2xhc3NlcyBjb25zdCAmIGNsYXNzZXMpCi17Ci0JaWYgKHYuc2l6ZSgpICE9IGNsYXNzZXMudi5zaXplKCkpCi0JCXJldHVybiBmYWxzZTsKLQotCWF4aXNfdHlwZXMgY29uc3QgYXhpczIgPSBjbGFzc2VzLmF4aXM7Ci0KLQlzd2l0Y2ggKGF4aXMpIHsKLQkJY2FzZSBBWElTX0VWRU5UOgotCQkJYnJlYWs7Ci0JCWNhc2UgQVhJU19UR0lEOgotCQljYXNlIEFYSVNfVElEOgotCQkJcmV0dXJuIGF4aXMyID09IEFYSVNfVElEIHx8IGF4aXMyID09IEFYSVNfVEdJRDsKLQkJY2FzZSBBWElTX0NQVToKLQkJCXJldHVybiBheGlzMiA9PSBBWElTX0NQVTsKLQkJY2FzZSBBWElTX01BWDoKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvLyBjaGVjayB0aGF0IHRoZSBldmVudHMgbWF0Y2ggKHNhbWUgZXZlbnQsIGNvdW50KQotCi0JdmVjdG9yPHByb2ZpbGVfY2xhc3M+Ojpjb25zdF9pdGVyYXRvciBpdDEgPSB2LmJlZ2luKCk7Ci0JdmVjdG9yPHByb2ZpbGVfY2xhc3M+Ojpjb25zdF9pdGVyYXRvciBlbmQxID0gdi5lbmQoKTsKLQl2ZWN0b3I8cHJvZmlsZV9jbGFzcz46OmNvbnN0X2l0ZXJhdG9yIGl0MiA9IGNsYXNzZXMudi5iZWdpbigpOwotCi0Jd2hpbGUgKGl0MSAhPSBlbmQxKSB7Ci0JCWlmIChpdDEtPnB0ZW1wbGF0ZS5ldmVudCAhPSBpdDItPnB0ZW1wbGF0ZS5ldmVudCkKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKGl0MS0+cHRlbXBsYXRlLmNvdW50ICE9IGl0Mi0+cHRlbXBsYXRlLmNvdW50KQotCQkJcmV0dXJuIGZhbHNlOwotCQkvLyBkaWZmZXJpbmcgdW5pdCBtYXNrIGlzIGNvbnNpZGVyZWQgY29tcGFyYWJsZQotCQkrK2l0MTsKLQkJKytpdDI7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLQotLy8vIFdlIGhhdmUgbW9yZSB0aGFuIG9uZSBheGlzIG9mIGNsYXNzaWZpY2F0aW9uLCB0ZWxsIHRoZSB1c2VyLgotdm9pZCByZXBvcnRfZXJyb3IocHJvZmlsZV9jbGFzc2VzIGNvbnN0ICYgY2xhc3NlcywgYXhpc190eXBlcyBuZXdheGlzKQotewotCXN0cmluZyBzdHIgPSAiQWxyZWFkeSBkaXNwbGF5aW5nIHJlc3VsdHMgZm9yIHBhcmFtZXRlciAiOwotCXN0ciArPSBheGVzW2NsYXNzZXMuYXhpc10ubmFtZTsKLQlzdHIgKz0gIiB3aXRoIHZhbHVlczpcbiI7Ci0JdmVjdG9yPHByb2ZpbGVfY2xhc3M+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNsYXNzZXMudi5iZWdpbigpOwotCXZlY3Rvcjxwcm9maWxlX2NsYXNzPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gY2xhc3Nlcy52LmVuZCgpOwotCi0JLy8gV2Ugc2hvdyBlcnJvciBmb3IgdGhlIGZpcnN0IGNvbmZsaWN0aW5nIGF4aXMgYnV0IG9uIHRoaXMKLQkvLyBheGlzIHdlIGNhbiBnZXQgb25seSBhIGZldyBkaWZmZXJlbnQgaXQtPm5hbWUsIHdlIGRpc3BsYXkgb25seQotCS8vIHRoZXNlIGRpZmZlcmVudCBuYW1lLgotCXNldCA8c3RyaW5nPiBuYW1lX3NlZW47Ci0Jc2l6ZV90IGkgPSA1OwotCWZvciAoOyBpdCAhPSBlbmQgJiYgaTsgKytpdCkgewotCQlpZiAobmFtZV9zZWVuLmZpbmQoaXQtPm5hbWUpID09IG5hbWVfc2Vlbi5lbmQoKSkgewotCQkJbmFtZV9zZWVuLmluc2VydChpdC0+bmFtZSk7Ci0JCQlzdHIgKz0gaXQtPm5hbWUgKyAiLCI7Ci0JCQktLWk7Ci0JCX0KLQl9Ci0KLQlpZiAoIWkpIHsKLQkJc3RyICs9ICIgYW5kICI7Ci0JCXN0ciArPSBvcF9sZXhpY2FsX2Nhc3Q8c3RyaW5nPihjbGFzc2VzLnYuc2l6ZSgpIC0gNSk7Ci0JCXN0ciArPSAiIG1vcmUsIjsKLQl9Ci0KLQlzdHIgKz0gIlxud2hpY2ggY29uZmxpY3RzIHdpdGggcGFyYW1ldGVyICI7Ci0Jc3RyICs9IGF4ZXNbbmV3YXhpc10ubmFtZSArPSAiLlxuIjsKLQlzdHIgKz0gIlN1Z2dlc3Rpb246ICI7Ci0Jc3RyICs9IGF4ZXNbY2xhc3Nlcy5heGlzXS5zdWdnZXN0aW9uOwotCXRocm93IG9wX2ZhdGFsX2Vycm9yKHN0cik7Ci19Ci0KLQotLyoqCi0gKiBjaGVjayB0aGF0IHR3byBkaWZmZXJlbnQgYXhlcyBhcmUgT0sgLSB0aGlzIGlzIG9ubHkKLSAqIGFsbG93ZWQgaWYgdGhleSBhcmUgVEdJRCxUSUQgYW5kIGZvciBlYWNoIGNsYXNzLAotICogdGlkID09IHRnaWQKLSAqLwotYm9vbCBhbGxvd19heGVzKHByb2ZpbGVfY2xhc3NlcyBjb25zdCAmIGNsYXNzZXMsIGF4aXNfdHlwZXMgbmV3YXhpcykKLXsKLQkvLyBObyBwcmV2aW91cyBheGlzIC0gT0sKLQlpZiAoY2xhc3Nlcy5heGlzID09IEFYSVNfTUFYKQotCQlyZXR1cm4gdHJ1ZTsKLQotCWlmIChjbGFzc2VzLmF4aXMgIT0gQVhJU19USUQgJiYgY2xhc3Nlcy5heGlzICE9IEFYSVNfVEdJRCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKG5ld2F4aXMgIT0gQVhJU19USUQgJiYgbmV3YXhpcyAhPSBBWElTX1RHSUQpCi0JCXJldHVybiBmYWxzZTsKLQotCXZlY3Rvcjxwcm9maWxlX2NsYXNzPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjbGFzc2VzLnYuYmVnaW4oKTsKLQl2ZWN0b3I8cHJvZmlsZV9jbGFzcz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGNsYXNzZXMudi5lbmQoKTsKLQotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJaWYgKGl0LT5wdGVtcGxhdGUudGdpZCAhPSBpdC0+cHRlbXBsYXRlLnRpZCkKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotCi0vLy8gZmluZCB0aGUgZmlyc3Qgc2FtcGxlIGZpbGUgaGVhZGVyIGluIHRoZSBjbGFzcwotb3BkX2hlYWRlciBjb25zdCBnZXRfZmlyc3RfaGVhZGVyKHByb2ZpbGVfY2xhc3MgY29uc3QgJiBwY2xhc3MpCi17Ci0JcHJvZmlsZV9zZXQgY29uc3QgJiBwcm9maWxlID0gKihwY2xhc3MucHJvZmlsZXMuYmVnaW4oKSk7Ci0KLQlzdHJpbmcgZmlsZTsKLQotCS8vIGNvdWxkIGJlIG9ubHkgb25lIG1haW4gYXBwLCB3aXRoIG5vIHNhbXBsZXMgZm9yIHRoZSBtYWluIGltYWdlCi0JaWYgKHByb2ZpbGUuZmlsZXMuZW1wdHkoKSkgewotCQlwcm9maWxlX2RlcF9zZXQgY29uc3QgJiBkZXAgPSAqKHByb2ZpbGUuZGVwcy5iZWdpbigpKTsKLQkJbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz4gY29uc3QgJiBmaWxlcyA9IGRlcC5maWxlczsKLQkJcHJvZmlsZV9zYW1wbGVfZmlsZXMgY29uc3QgJiBzYW1wbGVfZmlsZXMgPSAqKGZpbGVzLmJlZ2luKCkpOwotCQlpZiAoIXNhbXBsZV9maWxlcy5zYW1wbGVfZmlsZW5hbWUuZW1wdHkoKSkKLQkJCWZpbGUgPSBzYW1wbGVfZmlsZXMuc2FtcGxlX2ZpbGVuYW1lOwotCQllbHNlCi0JCQlmaWxlID0gKnNhbXBsZV9maWxlcy5jZ19maWxlcy5iZWdpbigpOwotCX0gZWxzZSB7Ci0JCXByb2ZpbGVfc2FtcGxlX2ZpbGVzIGNvbnN0ICYgc2FtcGxlX2ZpbGVzIAotCQkJPSAqKHByb2ZpbGUuZmlsZXMuYmVnaW4oKSk7Ci0JCWlmICghc2FtcGxlX2ZpbGVzLnNhbXBsZV9maWxlbmFtZS5lbXB0eSgpKQotCQkJZmlsZSA9IHNhbXBsZV9maWxlcy5zYW1wbGVfZmlsZW5hbWU7Ci0JCWVsc2UKLQkJCWZpbGUgPSAqc2FtcGxlX2ZpbGVzLmNnX2ZpbGVzLmJlZ2luKCk7Ci0JfQotCi0JcmV0dXJuIHJlYWRfaGVhZGVyKGZpbGUpOwotfQotCi0vLy8gbWVyZ2Ugc2FtcGxlIGZpbGUgaGVhZGVyIGluIHRoZSBwcm9maWxlX3NhbXBsZV9maWxlcwotdm9pZCBtZXJnZV9oZWFkZXIocHJvZmlsZV9zYW1wbGVfZmlsZXMgY29uc3QgJiBmaWxlcywgb3BkX2hlYWRlciAmIGhlYWRlcikKLXsKLQlpZiAoIWZpbGVzLnNhbXBsZV9maWxlbmFtZS5lbXB0eSgpKSB7Ci0JCW9wZF9oZWFkZXIgY29uc3QgdGVtcCA9IHJlYWRfaGVhZGVyKGZpbGVzLnNhbXBsZV9maWxlbmFtZSk7Ci0JCWhlYWRlci5jdHJfdW0gfD0gIHRlbXAuY3RyX3VtOwotCX0KLQotCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWxlcy5jZ19maWxlcy5iZWdpbigpOwotCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gZmlsZXMuY2dfZmlsZXMuZW5kKCk7Ci0JZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJb3BkX2hlYWRlciBjb25zdCB0ZW1wID0gcmVhZF9oZWFkZXIoKml0KTsKLQkJaGVhZGVyLmN0cl91bSB8PSB0ZW1wLmN0cl91bTsKLQl9Ci19Ci0KLS8vLyBtZXJnZSBzYW1wbGUgZmlsZSBoZWFkZXIgaW4gdGhlIGNsYXNzCi1vcGRfaGVhZGVyIGNvbnN0IGdldF9oZWFkZXIocHJvZmlsZV9jbGFzcyBjb25zdCAmIHBjbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZV9vcHRpb24gY29uc3QgJiBtZXJnZV9ieSkKLXsKLQlvcGRfaGVhZGVyIGhlYWRlciA9IGdldF9maXJzdF9oZWFkZXIocGNsYXNzKTsKLQotCWlmICghbWVyZ2VfYnkudW5pdG1hc2spCi0JCXJldHVybiBoZWFkZXI7Ci0KLQlwcm9maWxlX3NldCBjb25zdCAmIHByb2ZpbGUgPSAqKHBjbGFzcy5wcm9maWxlcy5iZWdpbigpKTsKLQotCXR5cGVkZWYgbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIGNpdGVyYXRvcjsKLQotCWNpdGVyYXRvciBpdCA9IHByb2ZpbGUuZmlsZXMuYmVnaW4oKTsKLQljaXRlcmF0b3IgY29uc3QgZW5kID0gcHJvZmlsZS5maWxlcy5lbmQoKTsKLQlmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkgewotCQltZXJnZV9oZWFkZXIoKml0LCBoZWFkZXIpOwotCX0KLQotCWxpc3Q8cHJvZmlsZV9kZXBfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgZGVwX2l0ID0gcHJvZmlsZS5kZXBzLmJlZ2luKCk7Ci0JbGlzdDxwcm9maWxlX2RlcF9zZXQ+Ojpjb25zdF9pdGVyYXRvciBkZXBfZW5kID0gcHJvZmlsZS5kZXBzLmVuZCgpOwotCWZvciAoIDsgZGVwX2l0ICE9IGRlcF9lbmQ7ICsrZGVwX2l0KSB7Ci0JCWNpdGVyYXRvciBpdCA9IGRlcF9pdC0+ZmlsZXMuYmVnaW4oKTsKLQkJY2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGRlcF9pdC0+ZmlsZXMuZW5kKCk7Ci0JCWZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCQltZXJnZV9oZWFkZXIoKml0LCBoZWFkZXIpOwotCQl9Ci0JfQotCi0JcmV0dXJuIGhlYWRlcjsKLX0KLQotCi0vLy8gR2l2ZSBodW1hbi1yZWFkYWJsZSBuYW1lcyB0byBlYWNoIGNsYXNzLgotdm9pZCBuYW1lX2NsYXNzZXMocHJvZmlsZV9jbGFzc2VzICYgY2xhc3NlcywgbWVyZ2Vfb3B0aW9uIGNvbnN0ICYgbWVyZ2VfYnkpCi17Ci0Jb3BkX2hlYWRlciBoZWFkZXIgPSBnZXRfaGVhZGVyKGNsYXNzZXMudlswXSwgbWVyZ2VfYnkpOwotCi0JY2xhc3Nlcy5ldmVudCA9IGRlc2NyaWJlX2hlYWRlcihoZWFkZXIpOwotCWNsYXNzZXMuY3B1aW5mbyA9IGRlc2NyaWJlX2NwdShoZWFkZXIpOwotCi0JLy8gSWYgd2UncmUgc3BsaXR0aW5nIG9uIGV2ZW50IGFueXdheSwgY2xlYXIgb3V0IHRoZQotCS8vIGdsb2JhbCBldmVudCBuYW1lCi0JaWYgKGNsYXNzZXMuYXhpcyA9PSBBWElTX0VWRU5UKQotCQljbGFzc2VzLmV2ZW50LmVyYXNlKCk7Ci0KLQl2ZWN0b3I8cHJvZmlsZV9jbGFzcz46Oml0ZXJhdG9yIGl0ID0gY2xhc3Nlcy52LmJlZ2luKCk7Ci0JdmVjdG9yPHByb2ZpbGVfY2xhc3M+OjppdGVyYXRvciBjb25zdCBlbmQgPSBjbGFzc2VzLnYuZW5kKCk7Ci0KLQlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCWl0LT5uYW1lID0gYXhlc1tjbGFzc2VzLmF4aXNdLm5hbWUgKyAiOiI7Ci0JCXN3aXRjaCAoY2xhc3Nlcy5heGlzKSB7Ci0JCWNhc2UgQVhJU19FVkVOVDoKLQkJCWl0LT5uYW1lID0gaXQtPnB0ZW1wbGF0ZS5ldmVudAotCQkJCSsgIjoiICsgaXQtPnB0ZW1wbGF0ZS5jb3VudDsKLQkJCWhlYWRlciA9IGdldF9oZWFkZXIoKml0LCBtZXJnZV9ieSk7Ci0JCQlpdC0+bG9uZ25hbWUgPSBkZXNjcmliZV9oZWFkZXIoaGVhZGVyKTsKLQkJCWJyZWFrOwotCQljYXNlIEFYSVNfVEdJRDoKLQkJCWl0LT5uYW1lICs9IGl0LT5wdGVtcGxhdGUudGdpZDsKLQkJCWl0LT5sb25nbmFtZSA9ICJQcm9jZXNzZXMgd2l0aCBhIHRocmVhZCBncm91cCBJRCBvZiAiOwotCQkJaXQtPmxvbmduYW1lICs9IGl0LT5wdGVtcGxhdGUudGdpZDsKLQkJCWJyZWFrOwotCQljYXNlIEFYSVNfVElEOgotCQkJaXQtPm5hbWUgKz0gaXQtPnB0ZW1wbGF0ZS50aWQ7Ci0JCQlpdC0+bG9uZ25hbWUgPSAiUHJvY2Vzc2VzIHdpdGggYSB0aHJlYWQgSUQgb2YgIjsKLQkJCWl0LT5sb25nbmFtZSArPSBpdC0+cHRlbXBsYXRlLnRpZDsKLQkJCWJyZWFrOwotCQljYXNlIEFYSVNfQ1BVOgotCQkJaXQtPm5hbWUgKz0gaXQtPnB0ZW1wbGF0ZS5jcHU7Ci0JCQlpdC0+bG9uZ25hbWUgPSAiU2FtcGxlcyBvbiBDUFUgIiArIGl0LT5wdGVtcGxhdGUuY3B1OwotCQkJYnJlYWs7Ci0JCWNhc2UgQVhJU19NQVg6OwotCQl9Ci0JfQotfQotCi0KLS8qKgotICogTmFtZSBhbmQgdmVyaWZ5IGNsYXNzZXMuCi0gKi8KLXZvaWQgaWRlbnRpZnlfY2xhc3Nlcyhwcm9maWxlX2NsYXNzZXMgJiBjbGFzc2VzLAotICAgICAgICAgICAgICAgICAgICAgIG1lcmdlX29wdGlvbiBjb25zdCAmIG1lcmdlX2J5KQotewotCXByb2ZpbGVfdGVtcGxhdGUgJiBwdGVtcGxhdGUgPSBjbGFzc2VzLnZbMF0ucHRlbXBsYXRlOwotCWJvb2wgY2hhbmdlZFtBWElTX01BWF0gPSB7IGZhbHNlLCB9OwotCi0JdmVjdG9yPHByb2ZpbGVfY2xhc3M+OjppdGVyYXRvciBpdCA9IGNsYXNzZXMudi5iZWdpbigpOwotCSsraXQ7Ci0JdmVjdG9yPHByb2ZpbGVfY2xhc3M+OjppdGVyYXRvciBlbmQgPSBjbGFzc2VzLnYuZW5kKCk7Ci0KLQkvLyBvbmx5IG9uZSBjbGFzcywgbmFtZSBpdCBhZnRlciB0aGUgZXZlbnQKLQlpZiAoaXQgPT0gZW5kKSB7Ci0JCWNoYW5nZWRbQVhJU19FVkVOVF0gPSB0cnVlOwotCX0KLQotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJaWYgKGl0LT5wdGVtcGxhdGUuZXZlbnQgIT0gcHRlbXBsYXRlLmV2ZW50Ci0JCSAgICB8fCAgaXQtPnB0ZW1wbGF0ZS5jb3VudCAhPSBwdGVtcGxhdGUuY291bnQKLQkJICAgIC8vIHVuaXQgbWFzayBhcmUgbWVyZ2VhYmxlCi0JCSAgICB8fCAoIW1lcmdlX2J5LnVuaXRtYXNrCi0JCQkmJiBpdC0+cHRlbXBsYXRlLnVuaXRtYXNrICE9IHB0ZW1wbGF0ZS51bml0bWFzaykpCi0JCQljaGFuZ2VkW0FYSVNfRVZFTlRdID0gdHJ1ZTsKLQotCQkvLyB3ZSBuZWVkIHRoZSBtZXJnZSBjaGVja3MgaGVyZSBiZWNhdXNlIGVhY2gKLQkJLy8gdGVtcGxhdGUgaXMgZmlsbGVkIGluIGZyb20gdGhlIGZpcnN0IG5vbgotCQkvLyBtYXRjaGluZyBwcm9maWxlLCBzbyBqdXN0IGJlY2F1c2UgdGhleSBkaWZmZXIKLQkJLy8gZG9lc24ndCBtZWFuIGl0J3MgdGhlIGF4aXMgd2UgY2FyZSBhYm91dAotCQlpZiAoIW1lcmdlX2J5LnRnaWQgJiYgaXQtPnB0ZW1wbGF0ZS50Z2lkICE9IHB0ZW1wbGF0ZS50Z2lkKQotCQkJY2hhbmdlZFtBWElTX1RHSURdID0gdHJ1ZTsKLQotCQlpZiAoIW1lcmdlX2J5LnRpZCAmJiBpdC0+cHRlbXBsYXRlLnRpZCAhPSBwdGVtcGxhdGUudGlkKQotCQkJY2hhbmdlZFtBWElTX1RJRF0gPSB0cnVlOwotCi0JCWlmICghbWVyZ2VfYnkuY3B1ICYmIGl0LT5wdGVtcGxhdGUuY3B1ICE9IHB0ZW1wbGF0ZS5jcHUpCi0JCQljaGFuZ2VkW0FYSVNfQ1BVXSA9IHRydWU7Ci0JfQotCi0JY2xhc3Nlcy5heGlzID0gQVhJU19NQVg7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFYSVNfTUFYOyArK2kpIHsKLQkJaWYgKCFjaGFuZ2VkW2ldKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFhbGxvd19heGVzKGNsYXNzZXMsIGF4aXNfdHlwZXMoaSkpKQotCQkJcmVwb3J0X2Vycm9yKGNsYXNzZXMsIGF4aXNfdHlwZXMoaSkpOwotCQljbGFzc2VzLmF4aXMgPSBheGlzX3R5cGVzKGkpOwotCQkvKiBkbyB0aGlzIGVhcmx5IGZvciByZXBvcnRfZXJyb3IgKi8KLQkJbmFtZV9jbGFzc2VzKGNsYXNzZXMsIG1lcmdlX2J5KTsKLQl9Ci0KLQlpZiAoY2xhc3Nlcy5heGlzID09IEFYSVNfTUFYKSB7Ci0JCWNlcnIgPDwgIkludGVybmFsIGVycm9yIC0gbm8gZXF1aXZhbGVuY2UgY2xhc3MgYXhpcyIgPDwgZW5kbDsKLQkJYWJvcnQoKTsKLQl9Ci19Ci0KLQotLy8vIGNvbnN0cnVjdCBhIGNsYXNzIHRlbXBsYXRlIGZyb20gYSBwcm9maWxlCi1wcm9maWxlX3RlbXBsYXRlIGNvbnN0Ci10ZW1wbGF0ZV9mcm9tX3Byb2ZpbGUocGFyc2VkX2ZpbGVuYW1lIGNvbnN0ICYgcGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgIG1lcmdlX29wdGlvbiBjb25zdCAmIG1lcmdlX2J5KQotewotCXByb2ZpbGVfdGVtcGxhdGUgcHRlbXBsYXRlOwotCi0JcHRlbXBsYXRlLmV2ZW50ID0gcGFyc2VkLmV2ZW50OwotCXB0ZW1wbGF0ZS5jb3VudCA9IHBhcnNlZC5jb3VudDsKLQotCWlmICghbWVyZ2VfYnkudW5pdG1hc2spCi0JCXB0ZW1wbGF0ZS51bml0bWFzayA9IHBhcnNlZC51bml0bWFzazsKLQlpZiAoIW1lcmdlX2J5LnRnaWQpCi0JCXB0ZW1wbGF0ZS50Z2lkID0gcGFyc2VkLnRnaWQ7Ci0JaWYgKCFtZXJnZV9ieS50aWQpCi0JCXB0ZW1wbGF0ZS50aWQgPSBwYXJzZWQudGlkOwotCWlmICghbWVyZ2VfYnkuY3B1KQotCQlwdGVtcGxhdGUuY3B1ID0gcGFyc2VkLmNwdTsKLQlyZXR1cm4gcHRlbXBsYXRlOwotfQotCi0KLS8qKgotICogRmluZCBhIG1hdGNoaW5nIGNsYXNzIHRoZSBzYW1wbGUgZmlsZSBjb3VsZCBnbyBpbiwgb3IgZ2VuZXJhdGUKLSAqIGEgbmV3IGNsYXNzIGlmIG5lZWRlZC4KLSAqIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBtZXJnaW5nIGFuZCBjbGFzc2lmaWNhdGlvbiBwcm9jZXNzLgotICogVGhlIHJldHVybmVkIHZhbHVlIGlzIG5vbi1jb25zdCByZWZlcmVuY2UgYnV0IHRoZSBwdGVtcGxhdGUgbWVtYmVyCi0gKiBtdXN0IGJlIGNvbnNpZGVyZWQgYXMgY29uc3QKLSAqLwotcHJvZmlsZV9jbGFzcyAmIGZpbmRfY2xhc3Moc2V0PHByb2ZpbGVfY2xhc3M+ICYgY2xhc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlX29wdGlvbiBjb25zdCAmIG1lcmdlX2J5KQotewotCXByb2ZpbGVfY2xhc3MgY2xzOwotCWNscy5wdGVtcGxhdGUgPSB0ZW1wbGF0ZV9mcm9tX3Byb2ZpbGUocGFyc2VkLCBtZXJnZV9ieSk7Ci0KLQlwYWlyPHNldDxwcm9maWxlX2NsYXNzPjo6aXRlcmF0b3IsIGJvb2w+IHJldCA9IGNsYXNzZXMuaW5zZXJ0KGNscyk7Ci0KLQlyZXR1cm4gY29uc3RfY2FzdDxwcm9maWxlX2NsYXNzICY+KCpyZXQuZmlyc3QpOwotfQotCi0vKioKLSAqIFNhbml0eSBjaGVjayA6IHdlIGNhbid0IG92ZXJ3cml0ZSBzYW1wbGVfZmlsZW5hbWUsIGlmIHdlIGFib3J0IGhlcmUgaXQgbWVhbnMKLSAqIHdlIGZhaWwgdG8gZGV0ZWN0IHRoYXQgcGFyc2VkIHNhbXBsZSBmaWxlbmFtZSBmb3IgdHdvIGRpc3RpbmN0IHNhbXBsZXMKLSAqIGZpbGVuYW1lIG11c3QgZ28gaW4gdHdvIGRpc3RpbmN0IHByb2ZpbGVfc2FtcGxlX2ZpbGVzLiBUaGlzIGFzc3VtcHRpb24gaXMKLSAqIGZhbHNlIGZvciBjYWxsZ3JhcGggc2FtcGxlcyBmaWxlcyBzbyB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZvciBub24gY2cKLSAqIGZpbGVzLgotICovCi12b2lkIHNhbml0aXplX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKHByb2ZpbGVfc2FtcGxlX2ZpbGVzIGNvbnN0ICYgc2FtcGxlX2ZpbGVzLAotICAgIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCkKLXsKLQkvLyBXZSBjYW4ndCBhbGxvdyB0byBvdmVyd3JpdGUgc2FtcGxlX2ZpbGVuYW1lLgotCWlmICghc2FtcGxlX2ZpbGVzLnNhbXBsZV9maWxlbmFtZS5lbXB0eSgpKSB7Ci0JCW9zdHJpbmdzdHJlYW0gb3V0OwotCQlvdXQgPDwgInNhbml0aXplX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKCk6IHNhbXBsZSBmaWxlICIKLQkJICAgIDw8ICJwYXJzZWQgdHdpY2UgP1xuc2FtcGxlX2ZpbGVuYW1lOlxuIgotCQkgICAgPDwgc2FtcGxlX2ZpbGVzLnNhbXBsZV9maWxlbmFtZSA8PCBlbmRsCi0JCSAgICA8PCBwYXJzZWQgPDwgZW5kbDsKLQkJdGhyb3cgb3BfZmF0YWxfZXJyb3Iob3V0LnN0cigpKTsKLQl9Ci19Ci0KLQotLyoqCi0gKiBBZGQgYSBzYW1wbGUgZmlsZW5hbWUgKGVpdGhlciBjZyBvciBub24gY2cgZmlsZXMpIHRvIHRoaXMgcHJvZmlsZS4KLSAqLwotdm9pZAotYWRkX3RvX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKHByb2ZpbGVfc2FtcGxlX2ZpbGVzICYgc2FtcGxlX2ZpbGVzLAotICAgIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCkKLXsKLQlpZiAocGFyc2VkLmNnX2ltYWdlLmVtcHR5KCkpIHsKLQkJLy8gV2UgY2FuJ3QgYWxsb3cgdG8gb3ZlcndyaXRlIHNhbXBsZV9maWxlbmFtZS4KLQkJc2FuaXRpemVfcHJvZmlsZV9zYW1wbGVfZmlsZXMoc2FtcGxlX2ZpbGVzLCBwYXJzZWQpOwotCi0JCXNhbXBsZV9maWxlcy5zYW1wbGVfZmlsZW5hbWUgPSBwYXJzZWQuZmlsZW5hbWU7Ci0JfSBlbHNlIHsKLQkJc2FtcGxlX2ZpbGVzLmNnX2ZpbGVzLnB1c2hfYmFjayhwYXJzZWQuZmlsZW5hbWUpOwotCX0KLX0KLQotCi0vKioKLSAqIHdlIG5lZWQgdG8gZml4IGNnIGZpbGVuYW1lOiBhIGNhbGxncmFwaCBmaWxlbmFtZSBjYW4gb2NjdXIgYmVmb3JlIHRoZSBiaW5hcnkKLSAqIG5vbiBjYWxsZ3JhcGggc2FtcGxlcyBmaWxlbmFtZSBvY2N1ciBzbyB3ZSBtdXN0IHNlYXJjaC4KLSAqLwotcHJvZmlsZV9zYW1wbGVfZmlsZXMgJgotZmluZF9wcm9maWxlX3NhbXBsZV9maWxlcyhsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPiAmIGZpbGVzLAotICAgIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCkKLXsKLQlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6aXRlcmF0b3IgaXQ7Ci0JbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46Oml0ZXJhdG9yIGNvbnN0IGVuZCA9IGZpbGVzLmVuZCgpOwotCWZvciAoaXQgPSBmaWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJaWYgKCFpdC0+c2FtcGxlX2ZpbGVuYW1lLmVtcHR5KCkpIHsKLQkJCXBhcnNlZF9maWxlbmFtZSBwc2FtcGxlX2ZpbGVuYW1lID0KLQkJCQlwYXJzZV9maWxlbmFtZShpdC0+c2FtcGxlX2ZpbGVuYW1lKTsKLQkJCWlmIChwc2FtcGxlX2ZpbGVuYW1lLmxpYl9pbWFnZSA9PSBwYXJzZWQubGliX2ltYWdlICYmCi0JCQkgICAgcHNhbXBsZV9maWxlbmFtZS5pbWFnZSA9PSBwYXJzZWQuaW1hZ2UgJiYKLQkJCSAgICBwc2FtcGxlX2ZpbGVuYW1lLnByb2ZpbGVfc3BlY19lcXVhbChwYXJzZWQpKQotCQkJCXJldHVybiAqaXQ7Ci0JCX0KLQotCQlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNpdDsKLQkJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBjZW5kID0gaXQtPmNnX2ZpbGVzLmVuZCgpOwotCQlmb3IgKGNpdCA9IGl0LT5jZ19maWxlcy5iZWdpbigpOyBjaXQgIT0gY2VuZDsgKytjaXQpIHsKLQkJCXBhcnNlZF9maWxlbmFtZSBwY2dfZmlsZW5hbWUgPSBwYXJzZV9maWxlbmFtZSgqY2l0KTsKLQkJCWlmIChwY2dfZmlsZW5hbWUubGliX2ltYWdlID09IHBhcnNlZC5saWJfaW1hZ2UgJiYKLQkJCSAgICBwY2dfZmlsZW5hbWUuaW1hZ2UgPT0gcGFyc2VkLmltYWdlICYmCi0JCQkgICAgcGNnX2ZpbGVuYW1lLnByb2ZpbGVfc3BlY19lcXVhbChwYXJzZWQpKQotCQkJCXJldHVybiAqaXQ7Ci0JCX0KLQl9Ci0KLQkvLyBub3QgZm91bmQsIGNyZWF0ZSBhIG5ldyBvbmUKLQlmaWxlcy5wdXNoX2JhY2socHJvZmlsZV9zYW1wbGVfZmlsZXMoKSk7Ci0JcmV0dXJuIGZpbGVzLmJhY2soKTsKLX0KLQotCi0vKioKLSAqIEFkZCBhIHByb2ZpbGUgdG8gcGFydGljdWxhciBwcm9maWxlIHNldC4gSWYgdGhlIG5ldyBwcm9maWxlIGlzCi0gKiBhIGRlcGVuZGVudCBpbWFnZSwgaXQgZ2V0cyBhZGRlZCB0byB0aGUgZGVwIGxpc3QsIG9yIGp1c3QgcGxhY2VkCi0gKiBvbiB0aGUgbm9ybWFsIGxpc3Qgb2YgcHJvZmlsZXMgb3RoZXJ3aXNlLgotICovCi12b2lkCi1hZGRfdG9fcHJvZmlsZV9zZXQocHJvZmlsZV9zZXQgJiBzZXQsIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCwgYm9vbCBtZXJnZV9ieV9saWIpCi17Ci0JaWYgKHBhcnNlZC5pbWFnZSA9PSBwYXJzZWQubGliX2ltYWdlICYmICFtZXJnZV9ieV9saWIpIHsKLQkJcHJvZmlsZV9zYW1wbGVfZmlsZXMgJiBzYW1wbGVfZmlsZXMgPQotCQkJZmluZF9wcm9maWxlX3NhbXBsZV9maWxlcyhzZXQuZmlsZXMsIHBhcnNlZCk7Ci0JCWFkZF90b19wcm9maWxlX3NhbXBsZV9maWxlcyhzYW1wbGVfZmlsZXMsIHBhcnNlZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlsaXN0PHByb2ZpbGVfZGVwX3NldD46Oml0ZXJhdG9yIGl0ID0gc2V0LmRlcHMuYmVnaW4oKTsKLQlsaXN0PHByb2ZpbGVfZGVwX3NldD46Oml0ZXJhdG9yIGNvbnN0IGVuZCA9IHNldC5kZXBzLmVuZCgpOwotCi0JZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotCQlpZiAoaXQtPmxpYl9pbWFnZSA9PSBwYXJzZWQubGliX2ltYWdlICYmICFtZXJnZV9ieV9saWIpIHsKLQkJCXByb2ZpbGVfc2FtcGxlX2ZpbGVzICYgc2FtcGxlX2ZpbGVzID0KLQkJCQlmaW5kX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKGl0LT5maWxlcywgcGFyc2VkKTsKLQkJCWFkZF90b19wcm9maWxlX3NhbXBsZV9maWxlcyhzYW1wbGVfZmlsZXMsIHBhcnNlZCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlwcm9maWxlX2RlcF9zZXQgZGVwc2V0OwotCWRlcHNldC5saWJfaW1hZ2UgPSBwYXJzZWQubGliX2ltYWdlOwotCXByb2ZpbGVfc2FtcGxlX2ZpbGVzICYgc2FtcGxlX2ZpbGVzID0KLQkJZmluZF9wcm9maWxlX3NhbXBsZV9maWxlcyhkZXBzZXQuZmlsZXMsIHBhcnNlZCk7Ci0JYWRkX3RvX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKHNhbXBsZV9maWxlcywgcGFyc2VkKTsKLQlzZXQuZGVwcy5wdXNoX2JhY2soZGVwc2V0KTsKLX0KLQotCi0vKioKLSAqIEFkZCBhIHByb2ZpbGUgdG8gYSBwYXJ0aWN1bGFyIGVxdWl2YWxlbmNlIGNsYXNzLiBUaGUgcHJldmlvdXMgbWF0Y2hpbmcKLSAqIHdpbGwgaGF2ZSBlbnN1cmVkIHRoZSBwcm9maWxlICJmaXRzIiwgc28gbm93IGl0J3MganVzdCBhIG1hdHRlciBvZgotICogZmluZGluZyB3aGljaCBzYW1wbGUgZmlsZSBsaXN0IGl0IG5lZWRzIHRvIGdvIG9uLgotICovCi12b2lkIGFkZF9wcm9maWxlKHByb2ZpbGVfY2xhc3MgJiBwY2xhc3MsIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCwgYm9vbCBtZXJnZV9ieV9saWIpCi17Ci0JbGlzdDxwcm9maWxlX3NldD46Oml0ZXJhdG9yIGl0ID0gcGNsYXNzLnByb2ZpbGVzLmJlZ2luKCk7Ci0JbGlzdDxwcm9maWxlX3NldD46Oml0ZXJhdG9yIGNvbnN0IGVuZCA9IHBjbGFzcy5wcm9maWxlcy5lbmQoKTsKLQotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJaWYgKGl0LT5pbWFnZSA9PSBwYXJzZWQuaW1hZ2UpIHsKLQkJCWFkZF90b19wcm9maWxlX3NldCgqaXQsIHBhcnNlZCwgbWVyZ2VfYnlfbGliKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCXByb2ZpbGVfc2V0IHNldDsKLQlzZXQuaW1hZ2UgPSBwYXJzZWQuaW1hZ2U7Ci0JYWRkX3RvX3Byb2ZpbGVfc2V0KHNldCwgcGFyc2VkLCBtZXJnZV9ieV9saWIpOwotCXBjbGFzcy5wcm9maWxlcy5wdXNoX2JhY2soc2V0KTsKLX0KLQotfSAgLy8gYW5vbiBuYW1lc3BhY2UKLQotCi1wcm9maWxlX2NsYXNzZXMgY29uc3QKLWFycmFuZ2VfcHJvZmlsZXMobGlzdDxzdHJpbmc+IGNvbnN0ICYgZmlsZXMsIG1lcmdlX29wdGlvbiBjb25zdCAmIG1lcmdlX2J5KQotewotCXNldDxwcm9maWxlX2NsYXNzPiB0ZW1wX2NsYXNzZXM7Ci0KLQlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmlsZXMuYmVnaW4oKTsKLQlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGZpbGVzLmVuZCgpOwotCi0JZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotCQlwYXJzZWRfZmlsZW5hbWUgcGFyc2VkID0gcGFyc2VfZmlsZW5hbWUoKml0KTsKLQotCQlpZiAocGFyc2VkLmxpYl9pbWFnZS5lbXB0eSgpKQotCQkJcGFyc2VkLmxpYl9pbWFnZSA9IHBhcnNlZC5pbWFnZTsKLQotCQkvLyBUaGlzIHNpbXBsaWZpZXMgdGhlIGFkZCBvZiB0aGUgcHJvZmlsZSBsYXRlciwKLQkJLy8gaWYgd2UncmUgbGliLW1lcmdpbmcsIHRoZW4gdGhlIGFwcF9pbWFnZSBjYW5ub3QKLQkJLy8gbWF0dGVyLiBBZnRlciB0aGlzLCBhbnkgbm9uLWRlcGVuZGVudCBoYXMKLQkJLy8gaW1hZ2UgPT0gbGliX2ltYWdlCi0JCWlmIChtZXJnZV9ieS5saWIpCi0JCQlwYXJzZWQuaW1hZ2UgPSBwYXJzZWQubGliX2ltYWdlOwotCi0JCXByb2ZpbGVfY2xhc3MgJiBwY2xhc3MgPQotCQkJZmluZF9jbGFzcyh0ZW1wX2NsYXNzZXMsIHBhcnNlZCwgbWVyZ2VfYnkpOwotCQlhZGRfcHJvZmlsZShwY2xhc3MsIHBhcnNlZCwgbWVyZ2VfYnkubGliKTsKLQl9Ci0KLQlwcm9maWxlX2NsYXNzZXMgY2xhc3NlczsKLQljb3B5KHRlbXBfY2xhc3Nlcy5iZWdpbigpLCB0ZW1wX2NsYXNzZXMuZW5kKCksCi0JICAgICBiYWNrX2luc2VydGVyKGNsYXNzZXMudikpOwotCi0JaWYgKGNsYXNzZXMudi5lbXB0eSgpKQotCQlyZXR1cm4gY2xhc3NlczsKLQotCS8vIHNvcnQgYnkgdGVtcGxhdGUgZm9yIG5pY2VseSBvcmRlcmVkIGNvbHVtbnMKLQlzdGFibGVfc29ydChjbGFzc2VzLnYuYmVnaW4oKSwgY2xhc3Nlcy52LmVuZCgpKTsKLQotCS8vIG5hbWUgYW5kIGNoZWNrCi0JaWRlbnRpZnlfY2xhc3NlcyhjbGFzc2VzLCBtZXJnZV9ieSk7Ci0KLQlyZXR1cm4gY2xhc3NlczsKLX0KLQotCi1vc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYgb3V0LCBwcm9maWxlX3NhbXBsZV9maWxlcyBjb25zdCAmIHNhbXBsZV9maWxlcykKLXsKLQlvdXQgPDwgInNhbXBsZV9maWxlbmFtZTogIiA8PCBzYW1wbGVfZmlsZXMuc2FtcGxlX2ZpbGVuYW1lIDw8IGVuZGw7Ci0Jb3V0IDw8ICJjYWxsZ3JhcGggZmlsZW5hbWVzOlxuIjsKLQljb3B5KHNhbXBsZV9maWxlcy5jZ19maWxlcy5iZWdpbigpLCBzYW1wbGVfZmlsZXMuY2dfZmlsZXMuZW5kKCksCi0JICAgICBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4ob3V0LCAiXG4iKSk7Ci0JcmV0dXJuIG91dDsKLX0KLQotb3N0cmVhbSAmIG9wZXJhdG9yPDwob3N0cmVhbSAmIG91dCwgcHJvZmlsZV9kZXBfc2V0IGNvbnN0ICYgcGRlcF9zZXQpCi17Ci0Jb3V0IDw8ICJsaWJfaW1hZ2U6ICIgPDwgcGRlcF9zZXQubGliX2ltYWdlIDw8IGVuZGw7Ci0KLQlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgaXQ7Ci0JbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9Ci0JCXBkZXBfc2V0LmZpbGVzLmVuZCgpOwotCXNpemVfdCBpID0gMDsKLQlmb3IgKGl0ID0gcGRlcF9zZXQuZmlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotCQlvdXQgPDwgInByb2ZpbGVfc2FtcGxlX2ZpbGVzICMiIDw8IGkrKyA8PCAiOlxuIiA8PCAqaXQ7Ci0KLQlyZXR1cm4gb3V0OwotfQotCi1vc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYgb3V0LCBwcm9maWxlX3NldCBjb25zdCAmIHBzZXQpCi17Ci0Jb3V0IDw8ICJpbWFnZTogIiA8PCBwc2V0LmltYWdlIDw8IGVuZGw7Ci0KLQlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgaXQ7Ci0JbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9Ci0JCXBzZXQuZmlsZXMuZW5kKCk7Ci0Jc2l6ZV90IGkgPSAwOwotCWZvciAoaXQgPSBwc2V0LmZpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLQkJb3V0IDw8ICJwcm9maWxlX3NhbXBsZV9maWxlcyAjIiA8PCBpKysgPDwgIjpcbiIgPDwgKml0OwotCi0JbGlzdDxwcm9maWxlX2RlcF9zZXQ+Ojpjb25zdF9pdGVyYXRvciBjaXQ7Ci0JbGlzdDxwcm9maWxlX2RlcF9zZXQ+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBjZW5kID0gcHNldC5kZXBzLmVuZCgpOwotCWkgPSAwOwotCWZvciAoY2l0ID0gcHNldC5kZXBzLmJlZ2luKCk7IGNpdCAhPSBjZW5kOyArK2NpdCkKLQkJb3V0IDw8ICJwcm9maWxlX2RlcF9zZXQgIyIgPDwgaSsrIDw8ICI6XG4iIDw8ICpjaXQ7Ci0KLQlyZXR1cm4gb3V0OwotfQotCi1vc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYgb3V0LCBwcm9maWxlX3RlbXBsYXRlIGNvbnN0ICYgcHRlbXBsYXRlKQotewotCW91dCA8PCAiZXZlbnQ6ICIgPDwgcHRlbXBsYXRlLmV2ZW50IDw8IGVuZGwKLQkgICAgPDwgImNvdW50OiAiIDw8IHB0ZW1wbGF0ZS5jb3VudCA8PCBlbmRsCi0JICAgIDw8ICJ1bml0bWFzazogIiA8PCBwdGVtcGxhdGUudW5pdG1hc2sgPDwgZW5kbAotCSAgICA8PCAidGdpZDogIiA8PCBwdGVtcGxhdGUudGdpZCA8PCBlbmRsCi0JICAgIDw8ICJ0aWQ6ICIgPDwgcHRlbXBsYXRlLnRpZCA8PCBlbmRsCi0JICAgIDw8ICJjcHU6ICIgPDwgcHRlbXBsYXRlLmNwdSA8PCBlbmRsOwotCXJldHVybiBvdXQ7Ci19Ci0KLW9zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiBvdXQsIHByb2ZpbGVfY2xhc3MgY29uc3QgJiBwY2xhc3MpCi17Ci0Jb3V0IDw8ICJuYW1lOiAiIDw8IHBjbGFzcy5uYW1lIDw8IGVuZGwKLQkgICAgPDwgImxvbmduYW1lOiAiIDw8IHBjbGFzcy5sb25nbmFtZSA8PCBlbmRsCi0JICAgIDw8ICJwdGVtcGxhdGU6XG4iIDw8IHBjbGFzcy5wdGVtcGxhdGU7Ci0KLQlzaXplX3QgaSA9IDA7Ci0JbGlzdDxwcm9maWxlX3NldD46OmNvbnN0X2l0ZXJhdG9yIGl0OwotCWxpc3Q8cHJvZmlsZV9zZXQ+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQgPSBwY2xhc3MucHJvZmlsZXMuZW5kKCk7Ci0JZm9yIChpdCA9IHBjbGFzcy5wcm9maWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0JCW91dCA8PCAicHJvZmlsZXNfc2V0ICMiIDw8IGkrKyA8PCAiOlxuIiA8PCAqaXQ7Ci0KLQlyZXR1cm4gb3V0OwotfQotCi1vc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYgb3V0LCBwcm9maWxlX2NsYXNzZXMgY29uc3QgJiBwY2xhc3NlcykKLXsKLQlvdXQgPDwgImV2ZW50OiAiIDw8IHBjbGFzc2VzLmV2ZW50IDw8IGVuZGwKLQkgICAgPDwgImNwdWluZm86ICIgPDwgcGNsYXNzZXMuY3B1aW5mbyA8PCBlbmRsOwotCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwY2xhc3Nlcy52LnNpemUoKTsgKytpKQotCQlvdXQgPDwgImNsYXNzICMiIDw8IGkgPDwgIjpcbiIgPDwgcGNsYXNzZXMudltpXTsKLQotCXJldHVybiBvdXQ7Ci19Ci0KLQotbmFtZXNwYWNlIHsKLQotLy8vIGFkZCB0aGUgZmlsZXMgdG8gZ3JvdXAgb2YgaW1hZ2Ugc2V0cwotdm9pZCBhZGRfdG9fZ3JvdXAoaW1hZ2VfZ3JvdXBfc2V0ICYgZ3JvdXAsIHN0cmluZyBjb25zdCAmIGFwcF9pbWFnZSwKLSAgICAgICAgICAgICAgICAgIGxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+IGNvbnN0ICYgZmlsZXMpCi17Ci0JaW1hZ2Vfc2V0IHNldDsKLQlzZXQuYXBwX2ltYWdlID0gYXBwX2ltYWdlOwotCXNldC5maWxlcyA9IGZpbGVzOwotCWdyb3VwLnB1c2hfYmFjayhzZXQpOwotfQotCi0KLXR5cGVkZWYgbWFwPHN0cmluZywgaW52ZXJ0ZWRfcHJvZmlsZT4gYXBwX21hcF90OwotCi0KLWludmVydGVkX3Byb2ZpbGUgJgotZ2V0X2lwcm9maWxlKGFwcF9tYXBfdCAmIGFwcF9tYXAsIHN0cmluZyBjb25zdCAmIGltYWdlLCBzaXplX3QgbnJfY2xhc3NlcykKLXsKLQlhcHBfbWFwX3Q6Oml0ZXJhdG9yIGFpdCA9IGFwcF9tYXAuZmluZChpbWFnZSk7Ci0JaWYgKGFpdCAhPSBhcHBfbWFwLmVuZCgpKQotCQlyZXR1cm4gYWl0LT5zZWNvbmQ7Ci0KLQlpbnZlcnRlZF9wcm9maWxlIGlwOwotCWlwLmltYWdlID0gaW1hZ2U7Ci0JaXAuZ3JvdXBzLnJlc2l6ZShucl9jbGFzc2VzKTsKLQlhcHBfbWFwW2ltYWdlXSA9IGlwOwotCXJldHVybiBhcHBfbWFwW2ltYWdlXTsKLX0KLQotCi0vLy8gUHVsbCBvdXQgYWxsIHRoZSBpbWFnZXMsIHJlbW92aW5nIGFueSB3ZSBjYW4ndCBhY2Nlc3MuCi12b2lkCi12ZXJpZnlfYW5kX2ZpbGwoc3RyaW5nIGFyY2hpdmVfcGF0aCwgYXBwX21hcF90ICYgYXBwX21hcCwKLQkJbGlzdDxpbnZlcnRlZF9wcm9maWxlPiAmIHBsaXN0LCBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSkKLXsKLQlhcHBfbWFwX3Q6Oml0ZXJhdG9yIGl0ID0gYXBwX21hcC5iZWdpbigpOwotCWFwcF9tYXBfdDo6aXRlcmF0b3IgY29uc3QgZW5kID0gYXBwX21hcC5lbmQoKTsKLQotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJcGxpc3QucHVzaF9iYWNrKGl0LT5zZWNvbmQpOwotCQlpbnZlcnRlZF9wcm9maWxlICYgaXAgPSBwbGlzdC5iYWNrKCk7Ci0JCWlwLmltYWdlID0gZmluZF9pbWFnZV9wYXRoKGFyY2hpdmVfcGF0aCwgaXAuaW1hZ2UsIGV4dHJhLAotCQkJCQkgICBpcC5lcnJvcik7Ci0JfQotfQotCi19IC8vIGFub24gbmFtZXNwYWNlCi0KLQotbGlzdDxpbnZlcnRlZF9wcm9maWxlPiBjb25zdAotaW52ZXJ0X3Byb2ZpbGVzKHN0cmluZyBhcmNoaXZlX3BhdGgsIHByb2ZpbGVfY2xhc3NlcyBjb25zdCAmIGNsYXNzZXMsCi0JCWV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQotewotCWFwcF9tYXBfdCBhcHBfbWFwOwotCi0Jc2l6ZV90IG5yX2NsYXNzZXMgPSBjbGFzc2VzLnYuc2l6ZSgpOwotCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucl9jbGFzc2VzOyArK2kpIHsKLQkJbGlzdDxwcm9maWxlX3NldD46OmNvbnN0X2l0ZXJhdG9yIHBpdAotCQkJPSBjbGFzc2VzLnZbaV0ucHJvZmlsZXMuYmVnaW4oKTsKLQkJbGlzdDxwcm9maWxlX3NldD46OmNvbnN0X2l0ZXJhdG9yIHBlbmQKLQkJCT0gY2xhc3Nlcy52W2ldLnByb2ZpbGVzLmVuZCgpOwotCi0JCWZvciAoOyBwaXQgIT0gcGVuZDsgKytwaXQpIHsKLQkJCS8vIGZpbGVzIGNhbiBiZSBlbXB0eSBpZiBzYW1wbGVzIGZvciBhIGxpYiBpbWFnZQotCQkJLy8gYnV0IG5vbmUgZm9yIHRoZSBtYWluIGltYWdlLiBEZWFsIHdpdGggaXQgaGVyZQotCQkJLy8gcmF0aGVyIHRoYW4gbGF0ZXIuCi0JCQlpZiAocGl0LT5maWxlcy5zaXplKCkpIHsKLQkJCQlpbnZlcnRlZF9wcm9maWxlICYgaXAgPSBnZXRfaXByb2ZpbGUoYXBwX21hcCwKLQkJCQkJcGl0LT5pbWFnZSwgbnJfY2xhc3Nlcyk7Ci0JCQkJYWRkX3RvX2dyb3VwKGlwLmdyb3Vwc1tpXSwgcGl0LT5pbWFnZSwgcGl0LT5maWxlcyk7Ci0JCQl9Ci0KLQkJCWxpc3Q8cHJvZmlsZV9kZXBfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgZGl0Ci0JCQkJPSBwaXQtPmRlcHMuYmVnaW4oKTsKLQkJCWxpc3Q8cHJvZmlsZV9kZXBfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZGVuZAotCQkJCT0gcGl0LT5kZXBzLmVuZCgpOwotCi0JCQlmb3IgKDsgIGRpdCAhPSBkZW5kOyArK2RpdCkgewotCQkJCWludmVydGVkX3Byb2ZpbGUgJiBpcCA9IGdldF9pcHJvZmlsZShhcHBfbWFwLAotCQkJCQlkaXQtPmxpYl9pbWFnZSwgbnJfY2xhc3Nlcyk7Ci0JCQkJYWRkX3RvX2dyb3VwKGlwLmdyb3Vwc1tpXSwgcGl0LT5pbWFnZSwKLQkJCQkgICAgICAgICAgICAgZGl0LT5maWxlcyk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGludmVydGVkX2xpc3Q7Ci0KLQl2ZXJpZnlfYW5kX2ZpbGwoYXJjaGl2ZV9wYXRoLCBhcHBfbWFwLCBpbnZlcnRlZF9saXN0LCBleHRyYSk7Ci0KLQlyZXR1cm4gaW52ZXJ0ZWRfbGlzdDsKLX0KZGlmZiAtLWdpdCBhL2xpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaCBiL2xpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y3MTMwNS4uMDAwMDAwMAotLS0gYS9saWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBhcnJhbmdlX3Byb2ZpbGVzLmgKLSAqIENsYXNzaWZ5IGFuZCBwcm9jZXNzIGEgbGlzdCBvZiBjYW5kaWRhdGUgc2FtcGxlIGZpbGVzCi0gKiBpbnRvIG1lcmdlZCBzZXRzIGFuZCBjbGFzc2VzLgotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIEFSUkFOR0VfUFJPRklMRVNfSAotI2RlZmluZSBBUlJBTkdFX1BST0ZJTEVTX0gKLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0KLSNpbmNsdWRlICJpbWFnZV9lcnJvcnMuaCIKLQotLyoqCi0gKiBzdG9yZSBtZXJnaW5nIG9wdGlvbnMgb3B0aW9ucyB1c2VkIHRvIGNsYXNzaWZ5IHByb2ZpbGVzCi0gKi8KLXN0cnVjdCBtZXJnZV9vcHRpb24gewotCWJvb2wgY3B1OwotCWJvb2wgbGliOwotCWJvb2wgdGlkOwotCWJvb2wgdGdpZDsKLQlib29sIHVuaXRtYXNrOwotfTsKLQotCi0vKioKLSAqIFRoaXMgZGVzY3JpYmVzIHdoaWNoIHBhcmFtZXRlcnMgYXJlIHNldCBmb3IgZWFjaAotICogZXF1aXZhbGVuY2UgY2xhc3MuCi0gKi8KLXN0cnVjdCBwcm9maWxlX3RlbXBsYXRlIHsKLQlzdGQ6OnN0cmluZyBldmVudDsKLQlzdGQ6OnN0cmluZyBjb3VudDsKLQlzdGQ6OnN0cmluZyB1bml0bWFzazsKLQlzdGQ6OnN0cmluZyB0Z2lkOwotCXN0ZDo6c3RyaW5nIHRpZDsKLQlzdGQ6OnN0cmluZyBjcHU7Ci19OwotCi0KLS8qKgotICogQSBzYW1wbGVzIGZpbGVuYW1lICsgaXRzIGFzc29jaWF0ZWQgY2FsbGdyYXBoIHNhbXBsZSBmaWxlbmFtZS4KLSAqLwotc3RydWN0IHByb2ZpbGVfc2FtcGxlX2ZpbGVzIHsKLQkvKioKLQkgKiBUaGlzIG1lbWJlciBjYW4gYmUgZW1wdHkgc2luY2UgaXQgaXMgcG9zc2libGUgdG8gZ2V0IGNhbGxncmFwaAotCSAqIHcvbyBhbnkgc2FtcGxlcyB0byB0aGUgYmluYXJ5LiBlLmcgYW4gYXBwbGljYXRpb24gd2hpY2ggZGVmZXIgYWxsCi0JICogd29ya3MgdG8gc2hhcmVkIGxpYnJhcnkgYnV0IGlmIGFycmFuZ2VfcHJvZmlsZXMgcmVjZWl2ZSBhIHNhbXBsZQotCSAqIGZpbGUgbGlzdCBmaWx0ZXJlZCBmcm9tIGNnIGZpbGUgc2FtcGxlX2ZpbGVuYW1lIGNhbid0IGJlIGVtcHR5Ci0JICovCi0Jc3RkOjpzdHJpbmcgc2FtcGxlX2ZpbGVuYW1lOwotCS8qKgotCSAqIExpc3Qgb2YgY2FsbGdyYXBoIHNhbXBsZSBmaWxlbmFtZS4gSWYgdGhlIHtkZXB9IHBhcnQgb2YKLQkgKiBjZ19maWxlbmFtZSAhPSB7Y2d9IHBhcnQgaXQncyBhIGNyb3NzIGJpbmFyeSBzYW1wbGVzIGZpbGUuCi0JICovCi0Jc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiBjZ19maWxlczsKLX07Ci0KLQotLyoqCi0gKiBBIG51bWJlciBvZiBwcm9maWxlcyBmaWxlcyB0aGF0IGFyZSBhbGwgZGVwZW5kZW50IG9uCi0gKiB0aGUgc2FtZSBtYWluIChhcHBsaWNhdGlvbikgcHJvZmlsZSwgZm9yIHRoZSBzYW1lCi0gKiBkZXBlbmRlbnQgaW1hZ2UuCi0gKi8KLXN0cnVjdCBwcm9maWxlX2RlcF9zZXQgewotCS8vLyB3aGljaCBkZXBlbmRlbnQgaW1hZ2UgaXMgdGhpcyBzZXQgZm9yCi0Jc3RkOjpzdHJpbmcgbGliX2ltYWdlOwotCi0JLy8vIHRoZSBhY3R1YWwgc2FtcGxlIGZpbGVzIG9wdGlvbm5hbHkgaW5jbHVkaW5nIGNhbGxncmFwaCBzYW1wbGUgZmlsZXMKLQlzdGQ6Omxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+IGZpbGVzOwotfTsKLQotLyoqCi0gKiBBIG51bWJlciBvZiBwcm9maWxlIGZpbGVzIGFsbCBmb3IgdGhlIHNhbWUgYmluYXJ5IHdpdGggdGhlIHNhbWUKLSAqIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiAoYWZ0ZXIgbWVyZ2luZykuIEluY2x1ZGVzIHRoZSBzZXQgb2YgZGVwZW5kZW50Ci0gKiBwcm9maWxlIGZpbGVzLCBpZiBhbnkuCi0gKgotICogRm9yIGV4YW1wbGUsIHdlIGNvdWxkIGhhdmUgaW1hZ2UgPT0gIi9iaW4vYmFzaCIsIHdoZXJlIGZpbGVzCi0gKiBjb250YWlucyBhbGwgcHJvZmlsZXMgYWdhaW5zdCAvYmluL2Jhc2gsIGFuZCBkZXBzIGNvbnRhaW5zCi0gKiB0aGUgc2FtcGxlIGZpbGUgbGlzdCBmb3IgL2xpYi9saWJjLnNvLCAvbGliL2xkLnNvIGV0Yy4KLSAqLwotc3RydWN0IHByb2ZpbGVfc2V0IHsKLQlzdGQ6OnN0cmluZyBpbWFnZTsKLQotCS8vLyB0aGUgYWN0dWFsIHNhbXBsZSBmaWxlcyBmb3IgdGhlIG1haW4gaW1hZ2UgYW5kIHRoZSBhc29jaWF0ZWQKLQkvLy8gY2FsbGdyYXBoIGZpbGVzCi0Jc3RkOjpsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPiBmaWxlczsKLQotCS8vLyBhbGwgcHJvZmlsZSBmaWxlcyBkZXBlbmRlbnQgb24gdGhlIG1haW4gaW1hZ2UKLQlzdGQ6Omxpc3Q8cHJvZmlsZV9kZXBfc2V0PiBkZXBzOwotfTsKLQotCi0vKioKLSAqIEEgY2xhc3MgY29sbGVjdGlvbiBvZiBwcm9maWxlcy4gVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSBjbGFzcyBhbmQKLSAqIHdpbGwgY29ycmVzcG9uZCB0byBjb2x1bW5hciBvdXRwdXQgb2Ygb3ByZXBvcnQuCi0gKi8KLXN0cnVjdCBwcm9maWxlX2NsYXNzIHsKLQlzdGQ6Omxpc3Q8cHJvZmlsZV9zZXQ+IHByb2ZpbGVzOwotCi0JLy8vIGh1bWFuLXJlYWRhYmxlIGNvbHVtbiBuYW1lCi0Jc3RkOjpzdHJpbmcgbmFtZTsKLQotCS8vLyBodW1hbi1yZWFkYWJsZSBsb25nIG5hbWUKLQlzdGQ6OnN0cmluZyBsb25nbmFtZTsKLQotCS8vLyBtZXJnaW5nIG1hdGNoZXMgYWdhaW5zdCB0aGlzCi0JcHJvZmlsZV90ZW1wbGF0ZSBwdGVtcGxhdGU7Ci19OwotCi0KLS8qKgotICogVGhlICJheGlzIiBzYXlzIHdoYXQgd2UndmUgdXNlZCB0byBzcGxpdCB0aGUgc2FtcGxlCi0gKiBmaWxlcyBpbnRvIHRoZSBjbGFzc2VzLiBPbmx5IG9uZSBpcyBhbGxvd2VkLgotICovCi1lbnVtIGF4aXNfdHlwZXMgewotCUFYSVNfRVZFTlQsCi0JQVhJU19UR0lELAotCUFYSVNfVElELAotCUFYSVNfQ1BVLAotCUFYSVNfTUFYCi19OwotCi0KLXN0cnVjdCBwcm9maWxlX2NsYXNzZXMgewotCS8qKgotCSAqIFRoaXMgaXMgb25seSBzZXQgaWYgd2UncmUgbm90IGNsYXNzaWZ5aW5nIG9uIGV2ZW50L2NvdW50Ci0JICogYW55d2F5IC0gaWYgd2UncmUgY2xhc3NpZnlpbmcgb24gZXZlbnQvY291bnQsIHRoZW4gd2UnbGwKLQkgKiBhbHJlYWR5IG91dHB1dCB0aGUgZGV0YWlscyBvZiBlYWNoIGNsYXNzJ3MgZXZlbnQvY291bnQuCi0JICoKLQkgKiBJdCdzIG9ubHkgdXNlZCB3aGVuIGNsYXNzaWZ5aW5nIGJ5IENQVSwgdGdpZCBldGMuIHNvIHRoZQotCSAqIHVzZXIgY2FuIHN0aWxsIHNlZSB3aGF0IHBlcmZjdHIgZXZlbnQgd2FzIHVzZWQuCi0JICovCi0Jc3RkOjpzdHJpbmcgZXZlbnQ7Ci0KLQkvLy8gQ1BVIGluZm8KLQlzdGQ6OnN0cmluZyBjcHVpbmZvOwotCi0JLy8vIHRoZSBhY3R1YWwgY2xhc3NlcwotCXN0ZDo6dmVjdG9yPHByb2ZpbGVfY2xhc3M+IHY7Ci0KLQkvLy8gdGhlIGF4aXMgb2YgdGhlIGNsYXNzZXMKLQlheGlzX3R5cGVzIGF4aXM7Ci0KLQkvLy8gaXMgdGhpcyBjbGFzcyBzZXQgY29tcGFyYWJsZSB3aXRoIGFub3RoZXI/Ci0JYm9vbCBtYXRjaGVzKHByb2ZpbGVfY2xhc3NlcyBjb25zdCAmIGNsYXNzZXMpOwotfTsKLQotCi1zdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmLCBwcm9maWxlX3NhbXBsZV9maWxlcyBjb25zdCAmKTsKLXN0ZDo6b3N0cmVhbSAmIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICYsIHByb2ZpbGVfZGVwX3NldCBjb25zdCAmKTsKLXN0ZDo6b3N0cmVhbSAmIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICYsIHByb2ZpbGVfc2V0IGNvbnN0ICYpOwotc3RkOjpvc3RyZWFtICYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJiwgcHJvZmlsZV90ZW1wbGF0ZSBjb25zdCAmKTsKLXN0ZDo6b3N0cmVhbSAmIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICYsIHByb2ZpbGVfY2xhc3MgY29uc3QgJik7Ci1zdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmLCBwcm9maWxlX2NsYXNzZXMgY29uc3QgJik7Ci0KLQotLyoqCi0gKiBUYWtlIGEgbGlzdCBvZiBzYW1wbGUgZmlsZW5hbWVzLCBhbmQgcHJvY2VzcyB0aGVtIGludG8gYSBzZXQgb2YKLSAqIGNsYXNzZXMgY29udGFpbmluZyBwcm9maWxlX3NldHMuIE1lcmdpbmcgaXMgZG9uZSBhdCB0aGlzIHN0YWdlCi0gKiBhcyB3ZWxsIGFzIGF0dGFjaGluZyBkZXBlbmRlbnQgcHJvZmlsZXMgdG8gdGhlIG1haW4gaW1hZ2UuCi0gKgotICogVGhlIGNsYXNzZXMgY29ycmVzcG9uZCB0byB0aGUgY29sdW1ucyB5b3UnbGwgZ2V0IGluIG9wcmVwb3J0OgotICogdGhpcyBjYW4gYmUgYSBudW1iZXIgb2YgZXZlbnRzLCBvciBkaWZmZXJlbnQgQ1BVcywgZXRjLgotICovCi1wcm9maWxlX2NsYXNzZXMgY29uc3QKLWFycmFuZ2VfcHJvZmlsZXMoc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiBjb25zdCAmIGZpbGVzLAotICAgICAgICAgICAgICAgICBtZXJnZV9vcHRpb24gY29uc3QgJiBtZXJnZV9ieSk7Ci0KLQotLyoqCi0gKiBBIHNldCBvZiBzYW1wbGUgZmlsZXMgd2hlcmUgdGhlIGltYWdlIGJpbmFyeSB0byBvcGVuCi0gKiBhcmUgYWxsIHRoZSBzYW1lLgotICovCi1zdHJ1Y3QgaW1hZ2Vfc2V0IHsKLQkvLy8gdGhpcyBpcyBtYWluIGFwcCBpbWFnZSwgKm5vdCogbmVjZXNzYXJpbHkKLQkvLy8gdGhlIG9uZSB3ZSBuZWVkIHRvIG9wZW4KLQlzdGQ6OnN0cmluZyBhcHBfaW1hZ2U7Ci0KLQkvLy8gdGhlIHNhbXBsZSBmaWxlcwotCXN0ZDo6bGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz4gZmlsZXM7Ci19OwotCi10eXBlZGVmIHN0ZDo6bGlzdDxpbWFnZV9zZXQ+IGltYWdlX2dyb3VwX3NldDsKLQotLyoqCi0gKiBBbGwgc2FtcGxlIGZpbGVzIHdoZXJlIHRoZSBiaW5hcnkgaW1hZ2UgdG8gb3BlbiBpcwotICogdGhlIHNhbWUuCi0gKgotICogVGhpcyBpcyB0aGUgImludmVyc2UiIHRvIHNvbWUgZGVncmVlIG9mIHByb2ZpbGVfc2V0LgotICogRm9yIGV4YW1wbGUsIGhlcmUgd2UgbWlnaHQgaGF2ZSBpbWFnZSA9ICIvbGliL2xpYmMuc28iLAotICogd2l0aCBncm91cHMgYmVpbmcgdGhlIHByb2ZpbGUgY2xhc3NpZmljYXRpb25zCi0gKiB0Z2lkOjQwNCwgdGdpZDozMDEsIGV0Yy4KLSAqCi0gKiBXaXRoaW4gZWFjaCBncm91cCB0aGVyZSdzIGEgbnVtYmVyIG9mIGltYWdlX3NldHMuCi0gKiBBbGwgdGhlIHNhbXBsZSBmaWxlcyBsaXN0ZWQgd2l0aGluIHRoZSBpbWFnZV9zZXRzCi0gKiBhcmUgc3RpbGwgZm9yIC9saWIvbGliYy5zbywgYnV0IHRoZXkgbWF5IGhhdmUKLSAqIGRpZmZlcmVudCBhcHBfaW1hZ2UgdmFsdWVzLCBlLmcuIC9iaW4vYmFzaC4KLSAqIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgYXBwX2ltYWdlIHZhbHVlcyB0bwotICogbWFrZSBvcHJlcG9ydCBnaXZlIHRoZSByaWdodCBpbmZvIGluIHRoZSAiYXBwIgotICogY29sdW1uLgotICovCi1zdHJ1Y3QgaW52ZXJ0ZWRfcHJvZmlsZSB7Ci0JaW52ZXJ0ZWRfcHJvZmlsZSgpIDogZXJyb3IoaW1hZ2Vfb2spIHt9Ci0JLy8vIHRoZSBpbWFnZSB0byBvcGVuCi0Jc3RkOjpzdHJpbmcgaW1hZ2U7Ci0KLQkvLy8gYW4gZXJyb3IgZm91bmQgaW4gcmVhZGluZyB0aGUgaW1hZ2UKLQltdXRhYmxlIGltYWdlX2Vycm9yIGVycm9yOwotCi0JLy8vIGFsbCBzYW1wbGUgZmlsZXMgd2l0aCBkYXRhIGZvciB0aGUgYWJvdmUgaW1hZ2UKLQlzdGQ6OnZlY3RvcjxpbWFnZV9ncm91cF9zZXQ+IGdyb3VwczsKLX07Ci0KLQotY2xhc3MgZXh0cmFfaW1hZ2VzOwotCi0vKioKLSAqIEludmVydCB0aGUgcHJvZmlsZSBzZXQuIEZvciBvcHJlcG9ydCAtbCwgb3Bhbm5vdGF0ZSBldGMuLAotICogcHJvY2Vzc2luZyB0aGUgcHJvZmlsZV9jbGFzc2VzIGRpcmVjdGx5IGlzIHNsb3csIGJlY2F1c2UKLSAqIHdlIGVuZCB1cCBvcGVuaW5nIEJGRHMgbXVsdGlwbGUgdGltZXMgKGZvciBlYWNoIGNsYXNzLAotICogZGVwZW5kZW50IGltYWdlcyBldGMuKS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGludmVydGVkCi0gKiBzZXQgb2Ygc2FtcGxlIGZpbGVzLCB3aGVyZSB0aGUgcHJpbWFyeSBzb3J0IGlzIG9uIHRoZSBiaW5hcnkKLSAqIGltYWdlIHRvIG9wZW4uCi0gKgotICogVGh1cyBlYWNoIGVsZW1lbnQgaW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZm9yIGV4YWN0bHkgb25lCi0gKiBiaW5hcnkgZmlsZSB0aGF0IHdlJ3JlIGdvaW5nIHRvIGJmZF9vcGVucigpLiBBdHRhY2hlZCB0byB0aGF0Ci0gKiBpcyB0aGUgYWN0dWFsIHNhbXBsZSBmaWxlcyB3ZSBuZWVkIHRvIHByb2Nlc3MgZm9yIHRoYXQgYmluYXJ5Ci0gKiBmaWxlLiBJbiBvcmRlciB0byBnZXQgdGhlIG91dHB1dCByaWdodCwgdGhlc2UgaGF2ZSB0byBiZQotICogbWFya2VkIHdpdGggdGhlIHByb2ZpbGUgY2xhc3MgdGhleSdyZSBmcm9tIChoZW5jZSB0aGUgZ3JvdXBzCi0gKiB2ZWN0b3IpLCBhbmQgdGhlIGFwcCBpbWFnZSB0aGF0IG93bmVkIHRoZSBzYW1wbGUgZmlsZSwgaWYKLSAqIGFwcGxpY2FibGUgKGhlbmNlIGltYWdlX3NldCkuCi0gKi8KLXN0ZDo6bGlzdDxpbnZlcnRlZF9wcm9maWxlPiBjb25zdAotaW52ZXJ0X3Byb2ZpbGVzKHN0ZDo6c3RyaW5nIGFyY2hpdmVfcGF0aCwgcHJvZmlsZV9jbGFzc2VzIGNvbnN0ICYgY2xhc3NlcywKLQkJZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpOwotCi0jZW5kaWYgLyogIUFSUkFOR0VfUFJPRklMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHAgYi9saWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjliMWE0OS4uMDAwMDAwMAotLS0gYS9saWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwNCArMCwwIEBACi0vKioKLSAqIEBmaWxlIGNhbGxncmFwaF9jb250YWluZXIuY3BwCi0gKiBDb250YWluZXIgYXNzb2NpYXRpbmcgc3ltYm9scyBhbmQgY2FsbGVyL2NhbGxlciBzeW1ib2xzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2luY2x1ZGUgPGNzdGRsaWI+Ci0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8bnVtZXJpYz4KLQotI2luY2x1ZGUgImNhbGxncmFwaF9jb250YWluZXIuaCIKLSNpbmNsdWRlICJjdmVyYi5oIgotI2luY2x1ZGUgInBhcnNlX2ZpbGVuYW1lLmgiCi0jaW5jbHVkZSAicHJvZmlsZV9jb250YWluZXIuaCIKLSNpbmNsdWRlICJhcnJhbmdlX3Byb2ZpbGVzLmgiIAotI2luY2x1ZGUgInBvcHVsYXRlLmgiCi0jaW5jbHVkZSAic3RyaW5nX2ZpbHRlci5oIgotI2luY2x1ZGUgIm9wX2JmZC5oIgotI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCi0jaW5jbHVkZSAibG9jYXRlX2ltYWdlcy5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgewotCi1ib29sIG9wZXJhdG9yPT0oY2dfc3ltYm9sIGNvbnN0ICYgbGhzLCBjZ19zeW1ib2wgY29uc3QgJiByaHMpCi17Ci0JbGVzc19zeW1ib2wgY21wX3N5bWI7Ci0JcmV0dXJuICFjbXBfc3ltYihsaHMsIHJocykgJiYgIWNtcF9zeW1iKHJocywgbGhzKTsKLX0KLQotCi0vLyB3ZSBzdG9yZSB7Y2FsbGVyLGNhbGxlZX0gaW5zaWRlIGEgc2luZ2xlIHU2NAotb2RiX2tleV90IGNhbGxlcl90b19rZXkodTMyIHZhbHVlKQotewotCXJldHVybiBvZGJfa2V5X3QodmFsdWUpIDw8IDMyOwotfQotCi0KLXUzMiBrZXlfdG9fY2FsbGVlKG9kYl9rZXlfdCBrZXkpCi17Ci0JcmV0dXJuIGtleSAmIDB4ZmZmZmZmZmY7Ci19Ci0KLQotYm9vbCBjb21wYXJlX2J5X2NhbGxlZV92bWEocGFpcjxvZGJfa2V5X3QsIG9kYl92YWx1ZV90PiBjb25zdCAmIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXI8b2RiX2tleV90LCBvZGJfdmFsdWVfdD4gY29uc3QgJiByaHMpCi17Ci0JcmV0dXJuIChrZXlfdG9fY2FsbGVlKGxocy5maXJzdCkpIDwgKGtleV90b19jYWxsZWUocmhzLmZpcnN0KSk7Ci19Ci0KLQotLyoKLSAqIFdlIG5lZWQgMiBjb21wYXJhdG9ycyBmb3IgY2FsbGdyYXBoIHRvIGdldCB0aGUgZGVzaXJlZCBvdXRwdXQ6Ci0gKgotICoJY2FsbGVyX3dpdGhfZmV3X3NhbXBsZXMKLSAqCWNhbGxlcl93aXRoX21hbnlfc2FtcGxlcwotICogZnVuY3Rpb25fd2l0aF9tYW55X3NhbXBsZXMKLSAqCWNhbGxlZV93aXRoX21hbnlfc2FtcGxlcwotICoJY2FsbGVlX3dpdGhfZmV3X3NhbXBsZXMKLSAqLwotCi1ib29sCi1jb21wYXJlX2FyY19jb3VudChzeW1ib2xfZW50cnkgY29uc3QgJiBsaHMsIHN5bWJvbF9lbnRyeSBjb25zdCAmIHJocykKLXsKLQlyZXR1cm4gbGhzLnNhbXBsZS5jb3VudHNbMF0gPCByaHMuc2FtcGxlLmNvdW50c1swXTsKLX0KLQotCi1ib29sCi1jb21wYXJlX2FyY19jb3VudF9yZXZlcnNlKHN5bWJvbF9lbnRyeSBjb25zdCAmIGxocywgc3ltYm9sX2VudHJ5IGNvbnN0ICYgcmhzKQotewotCXJldHVybiByaHMuc2FtcGxlLmNvdW50c1swXSA8IGxocy5zYW1wbGUuY291bnRzWzBdOwotfQotCi0KLS8vIGZpbmQgdGhlIG5lYXJlc3QgYmZkIHN5bWJvbCBmb3IgdGhlIGdpdmVuIGZpbGUgb2Zmc2V0IGFuZCBjaGVjayBpdCdzCi0vLyBpbiByYW5nZQotb3BfYmZkX3N5bWJvbCBjb25zdCAqCi1nZXRfc3ltYm9sX2J5X2ZpbGVwb3Mob3BfYmZkIGNvbnN0ICYgYmZkLCB1MzIgYmZkX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICB2bWFfdCBvZmZzZXQsIHN5bWJvbF9pbmRleF90ICYgaSkKLXsKLQlvZmZzZXQgKz0gYmZkX29mZnNldDsKLQlvcF9iZmRfc3ltYm9sIHRtcHN5bShvZmZzZXQsIDAsIHN0cmluZygpKTsKLQotCS8vIHNvcnRlZCBieSBmaWxlcG9zIHNvIHRoaXMgd2lsbCBmaW5kIHRoZSBuZWFyZXN0Ci0JdmVjdG9yPG9wX2JmZF9zeW1ib2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9Ci0JCXVwcGVyX2JvdW5kKGJmZC5zeW1zLmJlZ2luKCksIGJmZC5zeW1zLmVuZCgpLCB0bXBzeW0pOwotCi0JaWYgKGl0ICE9IGJmZC5zeW1zLmJlZ2luKCkpCi0JCS0taXQ7Ci0KLQlpZiAoaXQgPT0gYmZkLnN5bXMuZW5kKCkpIHsKLQkJY2VyciA8PCAiZ2V0X3N5bWJvbF9ieV9maWxlcG9zOiBubyBzeW1ib2xzIGF0IGFsbD8iIDw8IGVuZGw7Ci0JCWFib3J0KCk7Ci0JfQotCi0JLy8gaWYgdGhlIG9mZnNldCBpcyBwYXN0IHRoZSBlbmQgb2YgdGhlIHN5bWJvbCwgd2UgZGlkbid0IGZpbmQgb25lCi0JdTMyIGNvbnN0IGVuZF9vZmZzZXQgPSBpdC0+c2l6ZSgpICsgaXQtPmZpbGVwb3MoKTsKLQotCWlmIChvZmZzZXQgPj0gZW5kX29mZnNldCkgewotCQkvLyBsZXQncyBiZSB2ZXJib3NlIGZvciBub3cKLQkJY2VyciA8PCAid2FybmluZzogZHJvcHBpbmcgaHlwZXJzcGFjZSBzYW1wbGUgYXQgb2Zmc2V0ICIKLQkJICAgICA8PCBoZXggPDwgb2Zmc2V0IDw8ICIgPj0gIiA8PCBlbmRfb2Zmc2V0Ci0JCSAgICAgPDwgIiBmb3IgYmluYXJ5ICIgPDwgYmZkLmdldF9maWxlbmFtZSgpIDw8IGRlYyA8PCBlbmRsOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpID0gZGlzdGFuY2UoYmZkLnN5bXMuYmVnaW4oKSwgaXQpOwotCXJldHVybiAmKCppdCk7Ci19Ci0KLQotLy8vIHRlbXBvcmFyeSBjYWxsZXIgYW5kIGNhbGxlZSBkYXRhIGhlbGQgZHVyaW5nIHByb2Nlc3NpbmcKLWNsYXNzIGNhbGxfZGF0YSB7Ci1wdWJsaWM6Ci0JY2FsbF9kYXRhKHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcCwgcHJvZmlsZV90IGNvbnN0ICYgcHIsCi0JICAgICAgICAgIG9wX2JmZCBjb25zdCAmIGJmZCwgdTMyIGJvZmYsIGltYWdlX25hbWVfaWQgaWlkLAotCSAgICAgICAgICBpbWFnZV9uYW1lX2lkIGFpZCwgYm9vbCBkZWJ1Z19pbmZvKQotCQk6IHBjKHApLCBwcm9maWxlKHByKSwgYihiZmQpLCBib2Zmc2V0KGJvZmYpLCBpbWFnZShpaWQpLAotCQkgIGFwcChhaWQpLCBkZWJ1ZyhkZWJ1Z19pbmZvKSB7fQotCi0JLy8vIHBvaW50IHRvIGEgY2FsbGVyIHN5bWJvbAotCXZvaWQgY2FsbGVyX3N5bShzeW1ib2xfaW5kZXhfdCBpKSB7Ci0JCXN5bSA9IHN5bWJvbF9lbnRyeSgpOwotCi0JCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JCXVuc2lnbmVkIGxvbmcgZW5kOwotCQliLmdldF9zeW1ib2xfcmFuZ2UoaSwgc3RhcnQsIGVuZCk7Ci0KLQkJc2FtcGxlcy5jbGVhcigpOwotCi0JCS8vIHNlZSBwcm9maWxlX3Q6OnNhbXBsZXNfcmFuZ2UoKSBmb3Igd2h5IHdlIG5lZWQgdGhpcyBjaGVjawotCQlpZiAoc3RhcnQgPiBib2Zmc2V0KSB7Ci0JCQlwcm9maWxlX3Q6Oml0ZXJhdG9yX3BhaXIgcF9pdCA9IHByb2ZpbGUuc2FtcGxlc19yYW5nZSgKLQkJCQljYWxsZXJfdG9fa2V5KHN0YXJ0IC0gYm9mZnNldCksCi0JCQkJY2FsbGVyX3RvX2tleShlbmQgLSBib2Zmc2V0KSk7Ci0KLQkJCS8vIE91ciBvZGJfa2V5X3QgY29udGFpbiAoZnJvbV9laXAgPDwgMzIgfCB0b19laXApLAotCQkJLy8gdGhlIHJhbmdlIG9mIGtleXMgd2Ugc2VsZWN0ZWQgYWJvdmUgY29udGFpbnMgb25lCi0JCQkvLyBjYWxsZXIgYnV0IGRpZmZlcmVudCBjYWxsZWVzLCBhbmQgZHVlIHRvIHRoZQotCQkJLy8gb3JkZXJpbmcgY2FsbGVlIG9mZnNldHMgYXJlIG5vdCBjb25zZWN1dGl2ZTogc28KLQkJCS8vIHdlIG11c3Qgc29ydCB0aGVtIGZpcnN0LgotCi0JCQlmb3IgKDsgcF9pdC5maXJzdCAhPSBwX2l0LnNlY29uZDsgKytwX2l0LmZpcnN0KSB7Ci0JCQkJc2FtcGxlcy5wdXNoX2JhY2sobWFrZV9wYWlyKHBfaXQuZmlyc3Qudm1hKCksCi0JCQkJCXBfaXQuZmlyc3QuY291bnQoKSkpOwotCQkJfQotCi0JCQlzb3J0KHNhbXBsZXMuYmVnaW4oKSwgc2FtcGxlcy5lbmQoKSwKLQkJCSAgICAgY29tcGFyZV9ieV9jYWxsZWVfdm1hKTsKLQkJfQotCi0JCXN5bS5zaXplID0gZW5kIC0gc3RhcnQ7Ci0JCXN5bS5uYW1lID0gc3ltYm9sX25hbWVzLmNyZWF0ZShiLnN5bXNbaV0ubmFtZSgpKTsKLQkJc3ltLnNhbXBsZS52bWEgPSBiLnN5bV9vZmZzZXQoaSwgc3RhcnQpICsgYi5zeW1zW2ldLnZtYSgpOwotCi0JCWZpbmlzaF9zeW0oaSwgc3RhcnQpOwotCi0JCWlmIChjdmVyYiA8PCB2ZGVidWcpIHsKLQkJCWN2ZXJiIDw8IHZkZWJ1ZyA8PCBoZXggPDwgIkNhbGxlciBzeW06ICIKLQkJCSAgICAgIDw8IGIuc3ltc1tpXS5uYW1lKCkgPDwgIiBmaWxlcG9zICIgPDwgc3RhcnQKLQkJCSAgICAgIDw8ICItIiA8PCBlbmQgPDwgZGVjIDw8IGVuZGw7Ci0JCX0KLQl9Ci0KLQkvLy8gcG9pbnQgdG8gYSBjYWxsZWUgc3ltYm9sCi0JYm9vbCBjYWxsZWVfc3ltKHUzMiBvZmYpIHsKLQkJc3ltID0gc3ltYm9sX2VudHJ5KCk7Ci0KLQkJc3ltYm9sX2luZGV4X3QgaTsKLQkJb3BfYmZkX3N5bWJvbCBjb25zdCAqIGJmZHN5bSA9Ci0JCQlnZXRfc3ltYm9sX2J5X2ZpbGVwb3MoYiwgYm9mZnNldCwgb2ZmLCBpKTsKLQotCQlpZiAoIWJmZHN5bSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQljYWxsZWVfZW5kID0gYmZkc3ltLT5zaXplKCkgKyBiZmRzeW0tPmZpbGVwb3MoKSAtIGJvZmZzZXQ7Ci0KLQkJc3ltLnNpemUgPSBiZmRzeW0tPnNpemUoKTsKLQkJc3ltLm5hbWUgPSBzeW1ib2xfbmFtZXMuY3JlYXRlKGJmZHN5bS0+bmFtZSgpKTsKLQkJc3ltLnNhbXBsZS52bWEgPSBiZmRzeW0tPnZtYSgpOwotCi0JCWZpbmlzaF9zeW0oaSwgYmZkc3ltLT5maWxlcG9zKCkpOwotCi0JCWlmIChjdmVyYiA8PCB2ZGVidWcpIHsKLQkJCWN2ZXJiIDw8IHZkZWJ1ZyA8PCBoZXggPDwgIkNhbGxlZSBzeW06ICIKLQkJCSAgICAgIDw8IGJmZHN5bS0+bmFtZSgpIDw8ICIgZmlsZXBvcyAiCi0JCQkgICAgICA8PCBiZmRzeW0tPmZpbGVwb3MoKSA8PCAiLSIKLQkJCSAgICAgIDw8IChiZmRzeW0tPmZpbGVwb3MoKSArIGJmZHN5bS0+c2l6ZSgpKQotCQkJICAgICAgPDwgZGVjIDw8IGVuZGw7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0Jdm9pZCB2ZXJib3NlX2JmZChzdHJpbmcgY29uc3QgJiBwcmVmaXgpIGNvbnN0IHsKLQkJY3ZlcmIgPDwgdmRlYnVnIDw8IHByZWZpeCA8PCAiICIgPDwgYi5nZXRfZmlsZW5hbWUoKQotCQkgICAgICA8PCAiIG9mZnNldCAiIDw8IGJvZmZzZXQgPDwgIiBhcHAgIgotCQkgICAgICA8PCBpbWFnZV9uYW1lcy5uYW1lKGFwcCkgPDwgZW5kbDsKLQl9Ci0KLQl0eXBlZGVmIHZlY3RvcjxwYWlyPG9kYl9rZXlfdCwgb2RiX3ZhbHVlX3Q+ID4gc2FtcGxlc190OwotCi0JdHlwZWRlZiBzYW1wbGVzX3Q6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotCi0Jc2FtcGxlc190IHNhbXBsZXM7Ci0Jc3ltYm9sX2VudHJ5IHN5bTsKLQl1MzIgY2FsbGVlX2VuZDsKLQotcHJpdmF0ZToKLQkvLy8gZmlsbCBpbiB0aGUgcmVzdCBvZiB0aGUgc3ltCi0Jdm9pZCBmaW5pc2hfc3ltKHN5bWJvbF9pbmRleF90IGksIHVuc2lnbmVkIGxvbmcgc3RhcnQpIHsKLQkJc3ltLmltYWdlX25hbWUgPSBpbWFnZTsKLQkJc3ltLmFwcF9uYW1lID0gYXBwOwotCQlzeW1ib2xfZW50cnkgY29uc3QgKiBzZWxmID0gcGMuZmluZChzeW0pOwotCQlpZiAoc2VsZikKLQkJCXN5bS5zYW1wbGUuY291bnRzID0gc2VsZi0+c2FtcGxlLmNvdW50czsKLQotCQlpZiAoZGVidWcpIHsKLQkJCXN0cmluZyBmaWxlbmFtZTsKLQkJCWZpbGVfbG9jYXRpb24gJiBsb2MgPSBzeW0uc2FtcGxlLmZpbGVfbG9jOwotCQkJaWYgKGIuZ2V0X2xpbmVucihpLCBzdGFydCwgZmlsZW5hbWUsIGxvYy5saW5lbnIpKQotCQkJCWxvYy5maWxlbmFtZSA9IGRlYnVnX25hbWVzLmNyZWF0ZShmaWxlbmFtZSk7Ci0JCX0KLQl9Ci0KLQlwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjOwotCXByb2ZpbGVfdCBjb25zdCAmIHByb2ZpbGU7Ci0Jb3BfYmZkIGNvbnN0ICYgYjsKLQl1MzIgYm9mZnNldDsKLQlpbWFnZV9uYW1lX2lkIGltYWdlOwotCWltYWdlX25hbWVfaWQgYXBwOwotCWJvb2wgZGVidWc7Ci19OwotCi0KLS8vLyBhY2N1bXVsYXRlIGFsbCBzYW1wbGVzIGZvciBhIGdpdmVuIGNhbGxlci9jYWxsZWUgcGFpcgotdTMyCi1hY2N1bXVsYXRlX2NhbGxlZShjYWxsX2RhdGE6OmNvbnN0X2l0ZXJhdG9yICYgaXQsIGNhbGxfZGF0YTo6Y29uc3RfaXRlcmF0b3IgZW5kLAotICAgICAgICAgICAgICAgICAgdTMyIGNhbGxlZV9lbmQpCi17Ci0JdTMyIGNvdW50ID0gMDsKLQljYWxsX2RhdGE6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IHN0YXJ0ID0gaXQ7Ci0KLQl3aGlsZSAoaXQgIT0gZW5kKSB7Ci0JCXUzMiBvZmZzZXQgPSBrZXlfdG9fY2FsbGVlKGl0LT5maXJzdCk7Ci0KLQkJaWYgKGN2ZXJiIDw8ICh2ZGVidWcgJiB2bGV2ZWwxKSkgewotCQkJY3ZlcmIgPDwgKHZkZWJ1ZyAmIHZsZXZlbDEpIDw8IGhleCA8PCAib2Zmc2V0OiAiCi0JCQkgICAgICA8PCBvZmZzZXQgPDwgZGVjIDw8IGVuZGw7Ci0JCX0KLQotCQkvLyBzdG9wIGlmIHdlIHBhc3MgdGhlIGVuZCBvZiB0aGUgY2FsbGVlCi0JCWlmIChvZmZzZXQgPj0gY2FsbGVlX2VuZCkKLQkJCWJyZWFrOwotCi0JCWNvdW50ICs9IGl0LT5zZWNvbmQ7Ci0JCSsraXQ7Ci0JfQotCi0JLy8gSWYgd2UgaGF2ZW4ndCBhZHZhbmNlZCBhdCBhbGwsIHRoZW4gd2UnbGwgZ2V0Ci0JLy8gYW4gaW5maW5pdGUgbG9vcCwgc28gd2UgbXVzdCBhYm9ydC4KLQlpZiAoaXQgPT0gc3RhcnQpIHsKLQkJY2VyciA8PCAiZmFpbHVyZSB0byBhZHZhbmNlIGl0ZXJhdG9yXG4iOwotCQlhYm9ydCgpOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotCi12b2lkIGFyY19yZWNvcmRlcjo6Ci1hZGQoc3ltYm9sX2VudHJ5IGNvbnN0ICYgY2FsbGVyLCBzeW1ib2xfZW50cnkgY29uc3QgKiBjYWxsZWUsCi0gICAgY291bnRfYXJyYXlfdCBjb25zdCAmIGFyY19jb3VudCkKLXsKLQljZ19kYXRhICYgZGF0YSA9IHN5bV9tYXBbY2FsbGVyXTsKLQotCS8vIElmIHdlIGhhdmUgYSBjYWxsZWUsIGFkZCBpdCB0byB0aGUgY2FsbGVyJ3MgbGlzdCwgdGhlbgotCS8vIGFkZCB0aGUgY2FsbGVyIHRvIHRoZSBjYWxsZWUncyBsaXN0LgotCWlmIChjYWxsZWUpIHsKLQkJZGF0YS5jYWxsZWVzWypjYWxsZWVdICs9IGFyY19jb3VudDsKLQotCQljZ19kYXRhICYgY2FsbGVlX2RhdGEgPSBzeW1fbWFwWypjYWxsZWVdOwotCi0JCWNhbGxlZV9kYXRhLmNhbGxlcnNbY2FsbGVyXSArPSBhcmNfY291bnQ7Ci0JfQotfQotCi0KLXZvaWQgYXJjX3JlY29yZGVyOjpwcm9jZXNzX2NoaWxkcmVuKGNnX3N5bWJvbCAmIHN5bSwgZG91YmxlIHRocmVzaG9sZCkKLXsKLQkvLyBnZW5lcmF0ZSB0aGUgc3ludGhldGljIHNlbGYgZW50cnkgZm9yIHRoZSBzeW1ib2wKLQlzeW1ib2xfZW50cnkgc2VsZiA9IHN5bTsKLQotCXNlbGYubmFtZSA9IHN5bWJvbF9uYW1lcy5jcmVhdGUoc3ltYm9sX25hbWVzLmRlbWFuZ2xlKHNlbGYubmFtZSkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBbc2VsZl0iKTsKLQotCXN5bS50b3RhbF9jYWxsZWVfY291bnQgKz0gc2VsZi5zYW1wbGUuY291bnRzOwotCXN5bS5jYWxsZWVzLnB1c2hfYmFjayhzZWxmKTsKLQotCXNvcnQoc3ltLmNhbGxlcnMuYmVnaW4oKSwgc3ltLmNhbGxlcnMuZW5kKCksIGNvbXBhcmVfYXJjX2NvdW50KTsKLQlzb3J0KHN5bS5jYWxsZWVzLmJlZ2luKCksIHN5bS5jYWxsZWVzLmVuZCgpLCBjb21wYXJlX2FyY19jb3VudF9yZXZlcnNlKTsKLQotCS8vIEZJWE1FOiB0aGlzIHJlbGllcyBvbiBzb3J0IGFsd2F5cyBiZWluZyBzYW1wbGUgY291bnQKLQotCWNnX3N5bWJvbDo6Y2hpbGRyZW46Oml0ZXJhdG9yIGNpdCA9IHN5bS5jYWxsZXJzLmJlZ2luKCk7Ci0JY2dfc3ltYm9sOjpjaGlsZHJlbjo6aXRlcmF0b3IgY2VuZCA9IHN5bS5jYWxsZXJzLmVuZCgpOwotCi0Jd2hpbGUgKGNpdCAhPSBjZW5kICYmIG9wX3JhdGlvKGNpdC0+c2FtcGxlLmNvdW50c1swXSwKLQkgICAgICAgc3ltLnRvdGFsX2NhbGxlcl9jb3VudFswXSkgPCB0aHJlc2hvbGQpCi0JCSsrY2l0OwotCi0JaWYgKGNpdCAhPSBjZW5kKQotCQlzeW0uY2FsbGVycy5lcmFzZShzeW0uY2FsbGVycy5iZWdpbigpLCBjaXQpOwotCi0JY2l0ID0gc3ltLmNhbGxlZXMuYmVnaW4oKTsKLQljZW5kID0gc3ltLmNhbGxlZXMuZW5kKCk7Ci0KLQl3aGlsZSAoY2l0ICE9IGNlbmQgJiYgb3BfcmF0aW8oY2l0LT5zYW1wbGUuY291bnRzWzBdLAotCSAgICAgICBzeW0udG90YWxfY2FsbGVlX2NvdW50WzBdKSA+PSB0aHJlc2hvbGQpCi0JCSsrY2l0OwotCi0JaWYgKGNpdCAhPSBjZW5kKQotCQlzeW0uY2FsbGVlcy5lcmFzZShjaXQsIHN5bS5jYWxsZWVzLmVuZCgpKTsKLX0KLQotCi12b2lkIGFyY19yZWNvcmRlcjo6Ci1wcm9jZXNzKGNvdW50X2FycmF5X3QgdG90YWwsIGRvdWJsZSB0aHJlc2hvbGQsCi0gICAgICAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1fZmlsdGVyKQotewotCW1hcF90Ojpjb25zdF9pdGVyYXRvciBpdDsKLQltYXBfdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3ltX21hcC5lbmQoKTsKLQotCWZvciAoaXQgPSBzeW1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotCQljZ19zeW1ib2wgc3ltKCgqaXQpLmZpcnN0KTsKLQkJY2dfZGF0YSBjb25zdCAmIGRhdGEgPSAoKml0KS5zZWNvbmQ7Ci0KLQkJLy8gdGhyZXNob2xkIG91dCB0aGUgbWFpbiBzeW1ib2wgaWYgbmVlZGVkCi0JCWlmIChvcF9yYXRpbyhzeW0uc2FtcGxlLmNvdW50c1swXSwgdG90YWxbMF0pIDwgdGhyZXNob2xkKQotCQkJY29udGludWU7Ci0KLQkJLy8gRklYTUU6IHNsb3c/Ci0JCWlmICghc3ltX2ZpbHRlci5tYXRjaChzeW1ib2xfbmFtZXMuZGVtYW5nbGUoc3ltLm5hbWUpKSkKLQkJCWNvbnRpbnVlOwotCi0JCWNnX2RhdGE6OmNoaWxkcmVuOjpjb25zdF9pdGVyYXRvciBjaXQ7Ci0JCWNnX2RhdGE6OmNoaWxkcmVuOjpjb25zdF9pdGVyYXRvciBjZW5kID0gZGF0YS5jYWxsZXJzLmVuZCgpOwotCi0JCWZvciAoY2l0ID0gZGF0YS5jYWxsZXJzLmJlZ2luKCk7IGNpdCAhPSBjZW5kOyArK2NpdCkgewotCQkJc3ltYm9sX2VudHJ5IGNzeW0gPSBjaXQtPmZpcnN0OwotCQkJY3N5bS5zYW1wbGUuY291bnRzID0gY2l0LT5zZWNvbmQ7Ci0JCQlzeW0uY2FsbGVycy5wdXNoX2JhY2soY3N5bSk7Ci0JCQlzeW0udG90YWxfY2FsbGVyX2NvdW50ICs9IGNpdC0+c2Vjb25kOwotCQl9Ci0KLQkJY2VuZCA9IGRhdGEuY2FsbGVlcy5lbmQoKTsKLQotCQlmb3IgKGNpdCA9IGRhdGEuY2FsbGVlcy5iZWdpbigpOyBjaXQgIT0gY2VuZDsgKytjaXQpIHsKLQkJCXN5bWJvbF9lbnRyeSBjc3ltID0gY2l0LT5maXJzdDsKLQkJCWNzeW0uc2FtcGxlLmNvdW50cyA9IGNpdC0+c2Vjb25kOwotCQkJc3ltLmNhbGxlZXMucHVzaF9iYWNrKGNzeW0pOwotCQkJc3ltLnRvdGFsX2NhbGxlZV9jb3VudCArPSBjaXQtPnNlY29uZDsKLQkJfQotCi0JCXByb2Nlc3NfY2hpbGRyZW4oc3ltLCB0aHJlc2hvbGQpOwotCi0JCWNnX3N5bXMucHVzaF9iYWNrKHN5bSk7Ci0JfQotfQotCi0KLWNnX2NvbGxlY3Rpb24gYXJjX3JlY29yZGVyOjpnZXRfc3ltYm9scygpIGNvbnN0Ci17Ci0JcmV0dXJuIGNnX3N5bXM7Ci19Ci0KLQotdm9pZCBjYWxsZ3JhcGhfY29udGFpbmVyOjpwb3B1bGF0ZShzdHJpbmcgY29uc3QgJiBhcmNoaXZlX3BhdGgsIAotICAgbGlzdDxpbnZlcnRlZF9wcm9maWxlPiBjb25zdCAmIGlwcm9maWxlcywKLSAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhLCBib29sIGRlYnVnX2luZm8sIGRvdWJsZSB0aHJlc2hvbGQsCi0gICBib29sIG1lcmdlX2xpYiwgc3RyaW5nX2ZpbHRlciBjb25zdCAmIHN5bV9maWx0ZXIpCi17Ci0JLy8gbm9uIGNhbGxncmFwaCBzYW1wbGVzIGNvbnRhaW5lciwgd2UgcmVjb3JkIHNhbXBsZSBhdCBzeW1ib2wgbGV2ZWwKLQkvLyBub3QgYXQgdm1hIGxldmVsLgotCXByb2ZpbGVfY29udGFpbmVyIHBjKGRlYnVnX2luZm8sIGZhbHNlKTsKLQotCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT46OmNvbnN0X2l0ZXJhdG9yIGl0OwotCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGlwcm9maWxlcy5lbmQoKTsKLQlmb3IgKGl0ID0gaXByb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotCQkvLyBwb3B1bGF0ZV9jYWxsZXJfaW1hZ2UgdGFrZSBjYXJlIGFib3V0IGVtcHR5IHNhbXBsZSBmaWxlbmFtZQotCQlwb3B1bGF0ZV9mb3JfaW1hZ2UoYXJjaGl2ZV9wYXRoLCBwYywgKml0LCBzeW1fZmlsdGVyLCAwKTsKLQl9Ci0KLQlhZGRfc3ltYm9scyhwYyk7Ci0KLQl0b3RhbF9jb3VudCA9IHBjLnNhbXBsZXNfY291bnQoKTsKLQotCWZvciAoaXQgPSBpcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXQtPmdyb3Vwcy5zaXplKCk7ICsraSkgewotCQkJcG9wdWxhdGUoYXJjaGl2ZV9wYXRoLCBpdC0+Z3JvdXBzW2ldLCBpdC0+aW1hZ2UsIGV4dHJhLAotCQkJCWksIHBjLCBkZWJ1Z19pbmZvLCBtZXJnZV9saWIpOwotCQl9Ci0JfQotCi0JcmVjb3JkZXIucHJvY2Vzcyh0b3RhbF9jb3VudCwgdGhyZXNob2xkIC8gMTAwLjAsIHN5bV9maWx0ZXIpOwotfQotCi0KLXZvaWQgY2FsbGdyYXBoX2NvbnRhaW5lcjo6cG9wdWxhdGUoc3RyaW5nIGNvbnN0ICYgYXJjaGl2ZV9wYXRoLAotCWxpc3Q8aW1hZ2Vfc2V0PiBjb25zdCAmIGxzZXQsCi0Jc3RyaW5nIGNvbnN0ICYgYXBwX2ltYWdlLCBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSwgc2l6ZV90IHBjbGFzcywKLQlwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjLCBib29sIGRlYnVnX2luZm8sIGJvb2wgbWVyZ2VfbGliKQotewotCWxpc3Q8aW1hZ2Vfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgbGl0OwotCWxpc3Q8aW1hZ2Vfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgbGVuZCA9IGxzZXQuZW5kKCk7Ci0JZm9yIChsaXQgPSBsc2V0LmJlZ2luKCk7IGxpdCAhPSBsZW5kOyArK2xpdCkgewotCQlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgcGl0OwotCQlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgcGVuZAotCQkJPSBsaXQtPmZpbGVzLmVuZCgpOwotCQlmb3IgKHBpdCA9IGxpdC0+ZmlsZXMuYmVnaW4oKTsgcGl0ICE9IHBlbmQ7ICsrcGl0KSB7Ci0JCQlwb3B1bGF0ZShhcmNoaXZlX3BhdGgsIHBpdC0+Y2dfZmlsZXMsIGFwcF9pbWFnZSwKLQkJCQkgZXh0cmEsIHBjbGFzcywgcGMsIGRlYnVnX2luZm8sIG1lcmdlX2xpYik7Ci0JCX0KLQl9Ci19Ci0KLQotdm9pZCBjYWxsZ3JhcGhfY29udGFpbmVyOjpwb3B1bGF0ZShzdHJpbmcgY29uc3QgJiBhcmNoaXZlX3BhdGgsCi0JbGlzdDxzdHJpbmc+IGNvbnN0ICYgY2dfZmlsZXMsCi0Jc3RyaW5nIGNvbnN0ICYgYXBwX2ltYWdlLCBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSwgc2l6ZV90IHBjbGFzcywKLQlwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjLCBib29sIGRlYnVnX2luZm8sIGJvb2wgbWVyZ2VfbGliKQotewotCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQ7Ci0JbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQgPSBjZ19maWxlcy5lbmQoKTsKLQlmb3IgKGl0ID0gY2dfZmlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCWN2ZXJiIDw8IHZkZWJ1ZyA8PCAic2FtcGxlcyBmaWxlIDogIiA8PCAqaXQgPDwgZW5kbDsKLQotCQlwYXJzZWRfZmlsZW5hbWUgY2FsbGVyX2ZpbGUgPSBwYXJzZV9maWxlbmFtZSgqaXQpOwotCQlzdHJpbmcgY29uc3QgYXBwX25hbWUgPSBjYWxsZXJfZmlsZS5pbWFnZTsKLQotCQlpbWFnZV9lcnJvciBlcnJvcjsKLQkJc3RyaW5nIGNhbGxlcl9iaW5hcnkgPQotCQkJZmluZF9pbWFnZV9wYXRoKGFyY2hpdmVfcGF0aCwgY2FsbGVyX2ZpbGUubGliX2ltYWdlLAotCQkJCQlleHRyYSwgZXJyb3IpOwotCi0JCWlmIChlcnJvciAhPSBpbWFnZV9vaykKLQkJCXJlcG9ydF9pbWFnZV9lcnJvcihhcmNoaXZlX3BhdGggKyBjYWxsZXJfZmlsZS5saWJfaW1hZ2UsCi0JCQkJCSAgIGVycm9yLCBmYWxzZSk7Ci0KLQkJYm9vbCBjYWxsZXJfYmZkX29rID0gdHJ1ZTsKLQkJb3BfYmZkIGNhbGxlcl9iZmQoYXJjaGl2ZV9wYXRoLCBjYWxsZXJfYmluYXJ5LAotCQkJCSAgc3RyaW5nX2ZpbHRlcigpLCBjYWxsZXJfYmZkX29rKTsKLQkJaWYgKCFjYWxsZXJfYmZkX29rKQotCQkJcmVwb3J0X2ltYWdlX2Vycm9yKGNhbGxlcl9iaW5hcnksCi0JCQkgICAgICAgICAgICAgICAgICAgaW1hZ2VfZm9ybWF0X2ZhaWx1cmUsIGZhbHNlKTsKLQotCQlwYXJzZWRfZmlsZW5hbWUgY2FsbGVlX2ZpbGUgPSBwYXJzZV9maWxlbmFtZSgqaXQpOwotCi0JCXN0cmluZyBjYWxsZWVfYmluYXJ5ID0KLQkJCWZpbmRfaW1hZ2VfcGF0aChhcmNoaXZlX3BhdGgsIGNhbGxlZV9maWxlLmNnX2ltYWdlLAotCQkJICAgICAgICAgICAgICAgIGV4dHJhLCBlcnJvcik7Ci0JCWlmIChlcnJvciAhPSBpbWFnZV9vaykKLQkJCXJlcG9ydF9pbWFnZV9lcnJvcihjYWxsZWVfZmlsZS5jZ19pbWFnZSwgZXJyb3IsIGZhbHNlKTsKLQotCQlib29sIGNhbGxlZV9iZmRfb2sgPSB0cnVlOwotCQlvcF9iZmQgY2FsbGVlX2JmZChhcmNoaXZlX3BhdGgsIGNhbGxlZV9iaW5hcnksCi0JCQkJICBzdHJpbmdfZmlsdGVyKCksIGNhbGxlZV9iZmRfb2spOwotCQlpZiAoIWNhbGxlZV9iZmRfb2spCi0JCQlyZXBvcnRfaW1hZ2VfZXJyb3IoY2FsbGVlX2JpbmFyeSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfZm9ybWF0X2ZhaWx1cmUsIGZhbHNlKTsKLQotCQlwcm9maWxlX3QgcHJvZmlsZTsKLQkJLy8gV2UgY2FuJ3QgdXNlIHN0YXJ0X29mZnNldCBzdXBwb3J0IGluIHByb2ZpbGVfdCwgZ2l2ZQotCQkvLyBpdCBhIHplcm8gb2Zmc2V0IGFuZCB3ZSB3aWxsIGZpeCB0aGF0IGluIGFkZCgpCi0JCXByb2ZpbGUuYWRkX3NhbXBsZV9maWxlKCppdCk7Ci0JCWFkZChwcm9maWxlLCBjYWxsZXJfYmZkLCBjYWxsZXJfYmZkX29rLCBjYWxsZWVfYmZkLAotCQkgICAgbWVyZ2VfbGliID8gYXBwX2ltYWdlIDogYXBwX25hbWUsIHBjLAotCQkgICAgZGVidWdfaW5mbywgcGNsYXNzKTsKLQl9Ci19Ci0KLQotdm9pZCBjYWxsZ3JhcGhfY29udGFpbmVyOjoKLWFkZChwcm9maWxlX3QgY29uc3QgJiBwcm9maWxlLCBvcF9iZmQgY29uc3QgJiBjYWxsZXJfYmZkLCBib29sIGNhbGxlcl9iZmRfb2ssCi0gICBvcF9iZmQgY29uc3QgJiBjYWxsZWVfYmZkLCBzdHJpbmcgY29uc3QgJiBhcHBfbmFtZSwKLSAgIHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMsIGJvb2wgZGVidWdfaW5mbywgc2l6ZV90IHBjbGFzcykKLXsKLQlzdHJpbmcgY29uc3QgaW1hZ2VfbmFtZSA9IGNhbGxlcl9iZmQuZ2V0X2ZpbGVuYW1lKCk7Ci0KLQlvcGRfaGVhZGVyIGNvbnN0ICYgaGVhZGVyID0gcHJvZmlsZS5nZXRfaGVhZGVyKCk7Ci0KLQkvLyBXZSBjYW4ndCB1c2Uga2VybmVsIHNhbXBsZSBmaWxlIHcvbyB0aGUgYmluYXJ5IGVsc2Ugd2Ugd2lsbAotCS8vIHVzZSBpdCB3aXRoIGEgemVybyBvZmZzZXQsIHRoZSBjb2RlIGJlbG93IHdpbGwgYWJvcnQgYmVjYXVzZQotCS8vIHdlIHdpbGwgZ2V0IGluY29ycmVjdCBjYWxsZWUgc3ViLXJhbmdlIGFuZCBvdXQgb2YgcmFuZ2UKLQkvLyBjYWxsZWUgdm1hLiBGSVhNRQotCWlmIChoZWFkZXIuaXNfa2VybmVsICYmICFjYWxsZXJfYmZkX29rKQotCQlyZXR1cm47Ci0KLQkvLyBXZSBtdXN0IGhhbmRsZSBzdGFydF9vZmZzZXQsIHRoaXMgb2Zmc2V0IGNhbiBiZSBkaWZmZXJlbnQgZm9yIHRoZQotCS8vIGNhbGxlciBhbmQgdGhlIGNhbGxlZToga2VybmVsIHNhbXBsZSB0cmF2ZXJzaW5nIHRoZSBzeXNjYWxsIGJhcnJpZXIuCi0JdTMyIGNhbGxlcl9vZmZzZXQgPSAwOwotCi0JaWYgKGhlYWRlci5pc19rZXJuZWwgfHwgaGVhZGVyLmFub25fc3RhcnQpIHsKLQkJY2FsbGVyX29mZnNldCA9IGNhbGxlcl9iZmQuZ2V0X3N0YXJ0X29mZnNldChoZWFkZXIuYW5vbl9zdGFydCk7Ci0JfQotCi0JdTMyIGNhbGxlZV9vZmZzZXQgPSAwOwotCi0JaWYgKGhlYWRlci5jZ190b19pc19rZXJuZWwgfHwgaGVhZGVyLmNnX3RvX2Fub25fc3RhcnQpIHsKLQkJY2FsbGVlX29mZnNldCA9Ci0JCQljYWxsZWVfYmZkLmdldF9zdGFydF9vZmZzZXQoaGVhZGVyLmNnX3RvX2Fub25fc3RhcnQpOwotCX0KLQotCWltYWdlX25hbWVfaWQgaW1hZ2VfaWQgPSBpbWFnZV9uYW1lcy5jcmVhdGUoaW1hZ2VfbmFtZSk7Ci0JaW1hZ2VfbmFtZV9pZCBjYWxsZWVfaW1hZ2VfaWQgPSBpbWFnZV9uYW1lcy5jcmVhdGUoY2FsbGVlX2JmZC5nZXRfZmlsZW5hbWUoKSk7Ci0JaW1hZ2VfbmFtZV9pZCBhcHBfaWQgPSBpbWFnZV9uYW1lcy5jcmVhdGUoYXBwX25hbWUpOwotCi0JY2FsbF9kYXRhIGNhbGxlcihwYywgcHJvZmlsZSwgY2FsbGVyX2JmZCwgY2FsbGVyX29mZnNldCwgaW1hZ2VfaWQsCi0JICAgICAgICAgICAgICAgICAgIGFwcF9pZCwgZGVidWdfaW5mbyk7Ci0JY2FsbF9kYXRhIGNhbGxlZShwYywgcHJvZmlsZSwgY2FsbGVlX2JmZCwgY2FsbGVlX29mZnNldCwKLQkgICAgICAgICAgICAgICAgICAgY2FsbGVlX2ltYWdlX2lkLCBhcHBfaWQsIGRlYnVnX2luZm8pOwotCi0JaWYgKGN2ZXJiIDw8IHZkZWJ1ZykgewotCQljYWxsZXIudmVyYm9zZV9iZmQoIkNhbGxlcjoiKTsKLQkJY2FsbGVlLnZlcmJvc2VfYmZkKCJDYWxsZWU6Iik7Ci0JfQotCi0JLy8gRm9yIGVhY2ggc3ltYm9sIGluIHRoZSBjYWxsZXIgYmZkLCBwcm9jZXNzIGFsbCBhcmNzIHRvCi0JLy8gY2FsbGVlIGJmZCBzeW1ib2xzCi0KLQlmb3IgKHN5bWJvbF9pbmRleF90IGkgPSAwOyBpIDwgY2FsbGVyX2JmZC5zeW1zLnNpemUoKTsgKytpKSB7Ci0KLQkJY2FsbGVyLmNhbGxlcl9zeW0oaSk7Ci0KLQkJY2FsbF9kYXRhOjpjb25zdF9pdGVyYXRvciBkaXQgPSBjYWxsZXIuc2FtcGxlcy5iZWdpbigpOwotCQljYWxsX2RhdGE6OmNvbnN0X2l0ZXJhdG9yIGRlbmQgPSBjYWxsZXIuc2FtcGxlcy5lbmQoKTsKLQkJd2hpbGUgKGRpdCAhPSBkZW5kKSB7Ci0JCQkvLyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBjYWxsZWUsIHNraXAgYW4gYXJjCi0JCQlpZiAoIWNhbGxlZS5jYWxsZWVfc3ltKGtleV90b19jYWxsZWUoZGl0LT5maXJzdCkpKSB7Ci0JCQkJKytkaXQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWNvdW50X2FycmF5X3QgYXJjX2NvdW50OwotCQkJYXJjX2NvdW50W3BjbGFzc10gPQotCQkJCWFjY3VtdWxhdGVfY2FsbGVlKGRpdCwgZGVuZCwgY2FsbGVlLmNhbGxlZV9lbmQpOwotCi0JCQlyZWNvcmRlci5hZGQoY2FsbGVyLnN5bSwgJmNhbGxlZS5zeW0sIGFyY19jb3VudCk7Ci0JCX0KLQl9Ci19Ci0KLQotdm9pZCBjYWxsZ3JhcGhfY29udGFpbmVyOjphZGRfc3ltYm9scyhwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjKQotewotCXN5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3IgaXQ7Ci0Jc3ltYm9sX2NvbnRhaW5lcjo6c3ltYm9sc190OjppdGVyYXRvciBjb25zdCBlbmQgPSBwYy5lbmRfc3ltYm9sKCk7Ci0KLQlmb3IgKGl0ID0gcGMuYmVnaW5fc3ltYm9sKCk7IGl0ICE9IGVuZDsgKytpdCkKLQkJcmVjb3JkZXIuYWRkKCppdCwgMCwgY291bnRfYXJyYXlfdCgpKTsKLX0KLQotCi1jb2x1bW5fZmxhZ3MgY2FsbGdyYXBoX2NvbnRhaW5lcjo6b3V0cHV0X2hpbnQoKSBjb25zdAotewotCWNvbHVtbl9mbGFncyBvdXRwdXRfaGludHMgPSBjZl9ub25lOwotCi0JLy8gRklYTUU6IGNvc3RseTogbXVzdCB3ZSBhY2Nlc3MgZGlyZWN0bHkgcmVjb3JkZXIgbWFwID8KLQljZ19jb2xsZWN0aW9uIHN5bXMgPSByZWNvcmRlci5nZXRfc3ltYm9scygpOwotCi0JY2dfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQ7Ci0JY2dfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gc3ltcy5lbmQoKTsKLQlmb3IgKGl0ID0gc3ltcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0JCW91dHB1dF9oaW50cyA9IGl0LT5vdXRwdXRfaGludChvdXRwdXRfaGludHMpOwotCi0JcmV0dXJuIG91dHB1dF9oaW50czsKLX0KLQotCi1jb3VudF9hcnJheV90IGNhbGxncmFwaF9jb250YWluZXI6OnNhbXBsZXNfY291bnQoKSBjb25zdAotewotCXJldHVybiB0b3RhbF9jb3VudDsKLX0KLQotCi1jZ19jb2xsZWN0aW9uIGNhbGxncmFwaF9jb250YWluZXI6OmdldF9zeW1ib2xzKCkgY29uc3QKLXsKLQlyZXR1cm4gcmVjb3JkZXIuZ2V0X3N5bWJvbHMoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaCBiL2xpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I4ZWU2ZS4uMDAwMDAwMAotLS0gYS9saWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjYWxsZ3JhcGhfY29udGFpbmVyLmgKLSAqIENvbnRhaW5lciBhc3NvY2lhdGluZyBzeW1ib2xzIGFuZCBjYWxsZXIvY2FsbGVyIHN5bWJvbHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIENBTExHUkFQSF9DT05UQUlORVJfSAotI2RlZmluZSBDQUxMR1JBUEhfQ09OVEFJTkVSX0gKLQotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAic3ltYm9sLmgiCi0jaW5jbHVkZSAic3ltYm9sX2Z1bmN0b3JzLmgiCi0jaW5jbHVkZSAic3RyaW5nX2ZpbHRlci5oIgotCi1jbGFzcyBwcm9maWxlX2NvbnRhaW5lcjsKLWNsYXNzIGludmVydGVkX3Byb2ZpbGU7Ci1jbGFzcyBwcm9maWxlX3Q7Ci1jbGFzcyBleHRyYV9pbWFnZXM7Ci1jbGFzcyBpbWFnZV9zZXQ7Ci1jbGFzcyBvcF9iZmQ7Ci0KLQotLyoqCi0gKiBEdXJpbmcgYnVpbGRpbmcgYSBjYWxsZ3JhcGhfY29udGFpbmVyIHdlIHN0b3JlIGFsbCBjYWxsZXIvY2FsbGVlCi0gKiByZWxhdGlvbnNoaXAgaW4gdGhpcyBjb250YWluZXIuCi0gKgotICogQW4gImFyYyIgaXMgc2ltcGx5IGEgZGVzY3JpcHRpb24gb2YgYSBjYWxsIGZyb20gb25lIGZ1bmN0aW9uIHRvCi0gKiBhbm90aGVyLgotICovCi1jbGFzcyBhcmNfcmVjb3JkZXIgewotcHVibGljOgotCX5hcmNfcmVjb3JkZXIoKSB7fQotCi0JLyoqCi0JICogQWRkIGEgc3ltYm9sIGFyYy4KLQkgKiBAcGFyYW0gY2FsbGVyICBUaGUgY2FsbGluZyBzeW1ib2wKLQkgKiBAcGFyYW0gY2FsbGVlICBUaGUgY2FsbGVkIHN5bWJvbAotCSAqIEBwYXJhbSBhcmNfY291bnQgIHByb2ZpbGUgZGF0YSBmb3IgdGhlIGFyY3MKLQkgKgotCSAqIElmIHRoZSBjYWxsZWUgaXMgTlVMTCwgb25seSB0aGUgY2FsbGVyIGlzIGFkZGVkIHRvIHRoZSBtYWluCi0JICogbGlzdC4gVGhpcyBpcyB1c2VkIHRvIGluaXRpYWxseSBwb3B1bGF0ZSB0aGUgcmVjb3JkZXIgd2l0aAotCSAqIHRoZSBzeW1ib2xzLgotCSAqLwotCXZvaWQgYWRkKHN5bWJvbF9lbnRyeSBjb25zdCAmIGNhbGxlciwgc3ltYm9sX2VudHJ5IGNvbnN0ICogY2FsbGVlLAotCSAgICAgICAgIGNvdW50X2FycmF5X3QgY29uc3QgJiBhcmNfY291bnQpOwotCi0JLy8vIHJldHVybiBhbGwgdGhlIGNnIHN5bWJvbHMKLQljZ19jb2xsZWN0aW9uIGdldF9zeW1ib2xzKCkgY29uc3Q7Ci0KLQkvKioKLQkgKiBBZnRlciBwb3B1bGF0aW9uLCBidWlsZCB0aGUgZmluYWwgb3V0cHV0LCBhbmQgZG8KLQkgKiB0aHJlc2hvbGRpbmcuCi0JICovCi0Jdm9pZCBwcm9jZXNzKGNvdW50X2FycmF5X3QgdG90YWwsIGRvdWJsZSB0aHJlc2hvbGQsCi0JICAgICAgICAgICAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBmaWx0ZXIpOwotCi1wcml2YXRlOgotCS8qKgotCSAqIEludGVybmFsIHN0cnVjdHVyZSB1c2VkIGR1cmluZyBjb2xsYXRpb24uIFdlIHVzZSBhIG1hcCB0bwotCSAqIGFsbG93IHF1aWNrIGxvb2t1cCBvZiBjaGlsZHJlbiAod2UnbGwgZG8gdGhpcyBzZXZlcmFsIHRpbWVzCi0JICogaWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHByb2ZpbGUgY2xhc3MpLiBFYWNoIGNoaWxkIG1hcHMgZnJvbQotCSAqIHRoZSBzeW1ib2wgdG8gdGhlIHJlbGV2YW50IGFyYyBkYXRhLgotCSAqLwotCXN0cnVjdCBjZ19kYXRhIHsKLQkJY2dfZGF0YSgpIHt9Ci0KLQkJdHlwZWRlZiBzdGQ6Om1hcDxzeW1ib2xfZW50cnksIGNvdW50X2FycmF5X3QsIGxlc3Nfc3ltYm9sPiBjaGlsZHJlbjsKLQotCQkvLy8gY2FsbGVycyBvZiB0aGlzIHN5bWJvbAotCQljaGlsZHJlbiBjYWxsZXJzOwotCQkvLy8gY2FsbGVlcyBvZiB0aGlzIHN5bWJvbAotCQljaGlsZHJlbiBjYWxsZWVzOwotCX07Ci0KLQkvKioKLQkgKiBTb3J0IGFuZCB0aHJlc2hvbGQgY2FsbGVycyBhbmQgY2FsbGVlcy4KLQkgKi8KLQl2b2lkIHByb2Nlc3NfY2hpbGRyZW4oY2dfc3ltYm9sICYgc3ltLCBkb3VibGUgdGhyZXNob2xkKTsKLQotCXR5cGVkZWYgc3RkOjptYXA8c3ltYm9sX2VudHJ5LCBjZ19kYXRhLCBsZXNzX3N5bWJvbD4gbWFwX3Q7Ci0KLQkvLy8gYWxsIHRoZSBzeW1ib2xzICh1c2VkIGR1cmluZyBwcm9jZXNzaW5nKQotCW1hcF90IHN5bV9tYXA7Ci0KLQkvLy8gZmluYWwgb3V0cHV0IGRhdGEKLQljZ19jb2xsZWN0aW9uIGNnX3N5bXM7Ci19OwotCi0KLS8qKgotICogU3RvcmUgYWxsIGNhbGxncmFwaCBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIHByb2ZpbGVzCi0gKi8KLWNsYXNzIGNhbGxncmFwaF9jb250YWluZXIgewotcHVibGljOgotCS8qKgotCSAqIFBvcHVsYXRlIHRoZSBjb250YWluZXIsIG11c3QgYmUgY2FsbGVkIG9uY2Ugb25seS4KLQkgKiBAcGFyYW0gYXJjaGl2ZV9wYXRoICBvcGFyY2hpdmUgcHJlZml4IHBhdGgKLQkgKiBAcGFyYW0gaXByb2ZpbGVzICBzYW1wbGUgZmlsZSBsaXN0IGluY2x1ZGluZyBjYWxsZ3JhcGggZmlsZXMuCi0JICogQHBhcmFtIGV4dHJhICBleHRyYSBpbWFnZSBsaXN0IHRvIGZpeHVwIGJpbmFyeSBuYW1lLgotCSAqIEBwYXJhbSBkZWJ1Z19pbmZvICB0cnVlIGlmIHdlIG11c3QgcmVjb3JkIGxpbmVuciBpbmZvcm1hdGlvbgotCSAqIEBwYXJhbSB0aHJlc2hvbGQgIGlnbm9yZSBzYW1wbGUgcGVyY2VudCBiZWxvdyB0aGlzIHRocmVzaG9sZAotCSAqIEBwYXJhbSBtZXJnZV9saWIgIG1lcmdlIGxpYnJhcnkgc2FtcGxlcwotCSAqIEBwYXJhbSBzeW1fZmlsdGVyICBzeW1ib2wgZmlsdGVyCi0JICoKLQkgKiBDdXJyZW50bHkgYWxsIGVycm9ycyBjb3JlIGR1bXAuCi0JICogRklYTUU6IGNvbnNpZGVyIGlmIHRoaXMgc2hvdWxkIGJlIGEgY3RvcgotCSAqLwotCXZvaWQgcG9wdWxhdGUoc3RkOjpzdHJpbmcgY29uc3QgJiBhcmNoaXZlX3BhdGgsCi0JCSAgICAgIHN0ZDo6bGlzdDxpbnZlcnRlZF9wcm9maWxlPiBjb25zdCAmIGlwcm9maWxlcywKLQkJICAgICAgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEsIGJvb2wgZGVidWdfaW5mbywKLQkJICAgICAgZG91YmxlIHRocmVzaG9sZCwgYm9vbCBtZXJnZV9saWIsCi0JCSAgICAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1fZmlsdGVyKTsKLQotCS8vLyByZXR1cm4gaGludCBvbiBob3cgZGF0YSBtdXN0IGJlIGRpc3BsYXllZC4KLQljb2x1bW5fZmxhZ3Mgb3V0cHV0X2hpbnQoKSBjb25zdDsKLQotCS8vLyByZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBzYW1wbGVzLgotCWNvdW50X2FycmF5X3Qgc2FtcGxlc19jb3VudCgpIGNvbnN0OwotCi0JLy8gcmV0dXJuIGFsbCB0aGUgY2cgc3ltYm9scwotCWNnX2NvbGxlY3Rpb24gZ2V0X3N5bWJvbHMoKSBjb25zdDsKLQotcHJpdmF0ZToKLQkvKioKLQkgKiBSZWNvcmQgY2FsbGVyL2NhbGxlZSBmb3Igb25lIGNnIGZpbGUKLQkgKiBAcGFyYW0gcHJvZmlsZSAgb25lIGNhbGxncmFwaCBmaWxlIHN0b3JlZCBpbiBhIHByb2ZpbGVfdAotCSAqIEBwYXJhbSBjYWxsZXJfYmZkICB0aGUgY2FsbGVyIGJmZAotCSAqIEBwYXJhbSBiZmRfY2FsbGVyX29rICB0cnVlIGlmIHdlIHN1Y2NlZnVsbHkgb3BlbiB0aGUgYmluYXJ5Ci0JICogQHBhcmFtIGNhbGxlZV9iZmQgIHRoZSBjYWxsZWUgYmZkCi0JICogQHBhcmFtIGFwcF9uYW1lICB0aGUgb3duaW5nIGFwcGxpY2F0aW9uCi0JICogQHBhcmFtIHBjICB0aGUgcHJvZmlsZV9jb250YWluZXIgaG9sZGluZyBhbGwgbm9uIGNnIHNhbXBsZXMuCi0JICogQHBhcmFtIGRlYnVnX2luZm8gIHJlY29yZCBsaW5lbnIgZGVidWcgaW5mb3JtYXRpb24KLQkgKiBAcGFyYW0gcGNsYXNzICBwcm9maWxlIGNsYXNzIG5yCi0JICovCi0Jdm9pZCBhZGQocHJvZmlsZV90IGNvbnN0ICYgcHJvZmlsZSwgb3BfYmZkIGNvbnN0ICYgY2FsbGVyX2JmZCwKLQkgICAgICAgICBib29sIGJmZF9jYWxsZXJfb2ssIG9wX2JmZCBjb25zdCAmIGNhbGxlZV9iZmQsCi0JCSBzdGQ6OnN0cmluZyBjb25zdCAmIGFwcF9uYW1lLCAKLQkJIHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMsIGJvb2wgZGVidWdfaW5mbywKLQkJIHNpemVfdCBwY2xhc3MpOwotCi0Jdm9pZCBwb3B1bGF0ZShzdGQ6OnN0cmluZyBjb25zdCAmIGFyY2hpdmVfcGF0aCwKLQkJICAgICAgc3RkOjpsaXN0PGltYWdlX3NldD4gY29uc3QgJiBsc2V0LAotCQkgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGFwcF9pbWFnZSwKLQkJICAgICAgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEsIHNpemVfdCBwY2xhc3MsCi0JCSAgICAgIHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMsIGJvb2wgZGVidWdfaW5mbywKLQkJICAgICAgYm9vbCBtZXJnZV9saWIpOwotCXZvaWQgcG9wdWxhdGUoc3RkOjpzdHJpbmcgY29uc3QgJiBhcmNoaXZlX3BhdGgsCi0JCSAgICAgIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gY29uc3QgJiBjZ19maWxlcywKLQkJICAgICAgc3RkOjpzdHJpbmcgY29uc3QgJiBhcHBfaW1hZ2UsCi0JCSAgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhLCBzaXplX3QgcGNsYXNzLAotCQkgICAgICBwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjLCBib29sIGRlYnVnX2luZm8sCi0JCSAgICAgIGJvb2wgbWVyZ2VfbGliKTsKLQotCS8vLyByZWNvcmQgYWxsIG1haW4gc3ltYm9scwotCXZvaWQgYWRkX3N5bWJvbHMocHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwYyk7Ci0KLQkvLy8gQ2FjaGVkIHZhbHVlIG9mIHNhbXBsZXMgY291bnQuCi0JY291bnRfYXJyYXlfdCB0b3RhbF9jb3VudDsKLQotCS8vLyBBIHN0cnVjdHVyZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNhbGxncmFwaC4KLQlhcmNfcmVjb3JkZXIgcmVjb3JkZXI7Ci19OwotCi0jZW5kaWYgLyogIUNBTExHUkFQSF9DT05UQUlORVJfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicHAvZGlmZl9jb250YWluZXIuY3BwIGIvbGlicHAvZGlmZl9jb250YWluZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzYyOTE2Li4wMDAwMDAwCi0tLSBhL2xpYnBwL2RpZmZfY29udGFpbmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioKLSAqIEBmaWxlIGRpZmZfY29udGFpbmVyLmNwcAotICogQ29udGFpbmVyIGZvciBkaWZmZWQgc3ltYm9scwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDUgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLS8qIG9sZGVyIGdsaWJjIGhhcyBDOTkgSU5GSU5JVFkgaW4gX0dOVV9TT1VSQ0UgKi8KLSNpZm5kZWYgX0dOVV9TT1VSQ0UKLSNkZWZpbmUgX0dOVV9TT1VSQ0UKLSNlbmRpZgotCi0jaW5jbHVkZSAiZGlmZl9jb250YWluZXIuaCIKLQotI2luY2x1ZGUgPGNtYXRoPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0KLW5hbWVzcGFjZSB7Ci0KLQotLy8vIGEgY29tcGFyYXRvciBzdWl0YWJsZSBmb3IgZGlmZmluZyBzeW1ib2xzCi1ib29sIHJvdWdoX2xlc3Moc3ltYm9sX2VudHJ5IGNvbnN0ICYgbGhzLCBzeW1ib2xfZW50cnkgY29uc3QgJiByaHMpCi17Ci0JaWYgKGxocy5pbWFnZV9uYW1lICE9IHJocy5pbWFnZV9uYW1lKQotCQlyZXR1cm4gbGhzLmltYWdlX25hbWUgPCByaHMuaW1hZ2VfbmFtZTsKLQotCWlmIChsaHMuYXBwX25hbWUgIT0gcmhzLmFwcF9uYW1lKQotCQlyZXR1cm4gbGhzLmFwcF9uYW1lIDwgcmhzLmFwcF9uYW1lOwotCi0JaWYgKGxocy5uYW1lICE9IHJocy5uYW1lKQotCQlyZXR1cm4gbGhzLm5hbWUgPCByaHMubmFtZTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotCi0vLy8gcG9zc2libHkgYWRkIGEgZGlmZiBzeW0KLXZvaWQKLWFkZF9zeW0oZGlmZl9jb2xsZWN0aW9uICYgc3ltcywgZGlmZl9zeW1ib2wgY29uc3QgJiBzeW0sCi0gICAgICAgIHByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlICYgY2hvaWNlKQotewotCWlmIChjaG9pY2UubWF0Y2hfaW1hZ2UKLQkgICAgJiYgKGltYWdlX25hbWVzLm5hbWUoc3ltLmltYWdlX25hbWUpICE9IGNob2ljZS5pbWFnZV9uYW1lKSkKLQkJcmV0dXJuOwotCi0JaWYgKGZhYnMoc3ltLmRpZmZzWzBdKSA8IGNob2ljZS50aHJlc2hvbGQpCi0JCXJldHVybjsKLQotCWNob2ljZS5oaW50cyA9IHN5bS5vdXRwdXRfaGludChjaG9pY2UuaGludHMpOwotCXN5bXMucHVzaF9iYWNrKHN5bSk7Ci19Ci0KLQotLy8vIGFkZCBhIHN5bWJvbCBub3QgcHJlc2VudCBpbiB0aGUgbmV3IHByb2ZpbGUKLXZvaWQKLXN5bWJvbF9vbGQoZGlmZl9jb2xsZWN0aW9uICYgc3ltcywgc3ltYm9sX2VudHJ5IGNvbnN0ICYgc3ltLAotICAgICAgICAgICBwcm9maWxlX2NvbnRhaW5lcjo6c3ltYm9sX2Nob2ljZSAmIGNob2ljZSkKLXsKLQlkaWZmX3N5bWJvbCBzeW1ib2woc3ltKTsKLQlzeW1ib2wuZGlmZnMuZmlsbChzeW0uc2FtcGxlLmNvdW50cy5zaXplKCksIC1JTkZJTklUWSk7Ci0JYWRkX3N5bShzeW1zLCBzeW1ib2wsIGNob2ljZSk7Ci19Ci0KLQotLy8vIGFkZCBhIHN5bWJvbCBub3QgcHJlc2VudCBpbiB0aGUgb2xkIHByb2ZpbGUKLXZvaWQKLXN5bWJvbF9uZXcoZGlmZl9jb2xsZWN0aW9uICYgc3ltcywgc3ltYm9sX2VudHJ5IGNvbnN0ICYgc3ltLAotICAgICAgICAgICBwcm9maWxlX2NvbnRhaW5lcjo6c3ltYm9sX2Nob2ljZSAmIGNob2ljZSkKLXsKLQlkaWZmX3N5bWJvbCBzeW1ib2woc3ltKTsKLQlzeW1ib2wuZGlmZnMuZmlsbChzeW0uc2FtcGxlLmNvdW50cy5zaXplKCksIElORklOSVRZKTsKLQlhZGRfc3ltKHN5bXMsIHN5bWJvbCwgY2hvaWNlKTsKLX0KLQotCi0vLy8gYWRkIGEgZGlmZmVkIHN5bWJvbAotdm9pZCBzeW1ib2xfZGlmZihkaWZmX2NvbGxlY3Rpb24gJiBzeW1zLAotICAgICAgICAgICAgICAgICBzeW1ib2xfZW50cnkgY29uc3QgJiBzeW0xLCBjb3VudF9hcnJheV90IGNvbnN0ICYgdG90YWwxLAotICAgICAgICAgICAgICAgICBzeW1ib2xfZW50cnkgY29uc3QgJiBzeW0yLCBjb3VudF9hcnJheV90IGNvbnN0ICYgdG90YWwyLAotICAgICAgICAgICAgICAgICBwcm9maWxlX2NvbnRhaW5lcjo6c3ltYm9sX2Nob2ljZSAmIGNob2ljZSkKLXsKLQlkaWZmX3N5bWJvbCBzeW1ib2woc3ltMik7Ci0KLQlzaXplX3Qgc2l6ZSA9IHN5bTIuc2FtcGxlLmNvdW50cy5zaXplKCk7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gc2l6ZTsgKytpKSB7Ci0JCWRvdWJsZSBwZXJjZW50MTsKLQkJZG91YmxlIHBlcmNlbnQyOwotCQlwZXJjZW50MSA9IG9wX3JhdGlvKHN5bTEuc2FtcGxlLmNvdW50c1tpXSwgdG90YWwxW2ldKTsKLQkJcGVyY2VudDIgPSBvcF9yYXRpbyhzeW0yLnNhbXBsZS5jb3VudHNbaV0sIHRvdGFsMltpXSk7Ci0JCXN5bWJvbC5kaWZmc1tpXSA9IG9wX3JhdGlvKHBlcmNlbnQyIC0gcGVyY2VudDEsIHBlcmNlbnQxKTsKLQkJc3ltYm9sLmRpZmZzW2ldICo9IDEwMC4wOwotCX0KLQotCWFkZF9zeW0oc3ltcywgc3ltYm9sLCBjaG9pY2UpOwotfQotCi0KLX07IC8vIG5hbWVzcGFjZSBhbm9uCi0KLQotZGlmZl9jb250YWluZXI6OmRpZmZfY29udGFpbmVyKHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgYzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBjMikKLQk6IHBjMShjMSksIHBjMihjMiksCi0JICB0b3RhbDEocGMxLnNhbXBsZXNfY291bnQoKSksIHRvdGFsMihwYzIuc2FtcGxlc19jb3VudCgpKQotewotfQotCi0KLWRpZmZfY29sbGVjdGlvbiBjb25zdAotZGlmZl9jb250YWluZXI6OmdldF9zeW1ib2xzKHByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlICYgY2hvaWNlKSBjb25zdAotewotCWRpZmZfY29sbGVjdGlvbiBzeW1zOwotCi0JLyoKLQkgKiBEbyBhIHBhaXJ3aXNlIGNvbXBhcmlzb24gb2YgdGhlIHR3byBzeW1ib2wgc2V0cy4gV2UncmUKLQkgKiByZWx5aW5nIGhlcmUgb24gdGhlIHN5bWJvbCBjb250YWluZXIgYmVpbmcgc29ydGVkIHN1Y2gKLQkgKiB0aGF0IHJvdWdoX2xlc3MoKSBpcyBzdWl0YWJsZSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlCi0JICogdHdvIGxpc3RzIChzZWUgbGVzc19zeW1ib2wpLgotCSAqLwotCi0Jc3ltYm9sX2NvbnRhaW5lcjo6c3ltYm9sc190OjppdGVyYXRvciBpdDEgPSBwYzEuYmVnaW5fc3ltYm9sKCk7Ci0Jc3ltYm9sX2NvbnRhaW5lcjo6c3ltYm9sc190OjppdGVyYXRvciBlbmQxID0gcGMxLmVuZF9zeW1ib2woKTsKLQlzeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIGl0MiA9IHBjMi5iZWdpbl9zeW1ib2woKTsKLQlzeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIGVuZDIgPSBwYzIuZW5kX3N5bWJvbCgpOwotCi0Jd2hpbGUgKGl0MSAhPSBlbmQxICYmIGl0MiAhPSBlbmQyKSB7Ci0JCWlmIChyb3VnaF9sZXNzKCppdDEsICppdDIpKSB7Ci0JCQlzeW1ib2xfb2xkKHN5bXMsICppdDEsIGNob2ljZSk7Ci0JCQkrK2l0MTsKLQkJfSBlbHNlIGlmIChyb3VnaF9sZXNzKCppdDIsICppdDEpKSB7Ci0JCQlzeW1ib2xfbmV3KHN5bXMsICppdDIsIGNob2ljZSk7Ci0JCQkrK2l0MjsKLQkJfSBlbHNlIHsKLQkJCXN5bWJvbF9kaWZmKHN5bXMsICppdDEsIHRvdGFsMSwgKml0MiwgdG90YWwyLCBjaG9pY2UpOwotCQkJKytpdDE7Ci0JCQkrK2l0MjsKLQkJfQotCX0KLQotCWZvciAoOyBpdDEgIT0gZW5kMTsgKytpdDEpCi0JCXN5bWJvbF9vbGQoc3ltcywgKml0MSwgY2hvaWNlKTsKLQotCWZvciAoOyBpdDIgIT0gZW5kMjsgKytpdDIpCi0JCXN5bWJvbF9uZXcoc3ltcywgKml0MiwgY2hvaWNlKTsKLQotCXJldHVybiBzeW1zOwotfQotCi0KLWNvdW50X2FycmF5X3QgY29uc3QgZGlmZl9jb250YWluZXI6OnNhbXBsZXNfY291bnQoKSBjb25zdAotewotCXJldHVybiB0b3RhbDI7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9kaWZmX2NvbnRhaW5lci5oIGIvbGlicHAvZGlmZl9jb250YWluZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiNDMxZC4uMDAwMDAwMAotLS0gYS9saWJwcC9kaWZmX2NvbnRhaW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBkaWZmX2NvbnRhaW5lci5oCi0gKiBDb250YWluZXIgZm9yIGRpZmZlZCBzeW1ib2xzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNSBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBESUZGX0NPTlRBSU5FUl9ICi0jZGVmaW5lIERJRkZfQ09OVEFJTkVSX0gKLQotI2luY2x1ZGUgInByb2ZpbGVfY29udGFpbmVyLmgiCi0KLQotLyoqCi0gKiBTdG9yZSB0d28gcHJvZmlsZXMgZm9yIGRpZmZpbmcuCi0gKi8KLWNsYXNzIGRpZmZfY29udGFpbmVyIDogbm9uY29weWFibGUgewotcHVibGljOgotCS8vLyBwb3B1bGF0ZSB0aGUgY29sbGVjdGlvbiBvZiBkaWZmZWQgc3ltYm9scwotCWRpZmZfY29udGFpbmVyKHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMxLAotCSAgICAgICAgICAgICAgIHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMyKTsKLQotCX5kaWZmX2NvbnRhaW5lcigpIHt9Ci0gCi0JLy8vIHJldHVybiBhIGNvbGxlY3Rpb24gb2YgZGlmZmVkIHN5bWJvbHMKLQlkaWZmX2NvbGxlY3Rpb24gY29uc3QKLQkJZ2V0X3N5bWJvbHMocHJvZmlsZV9jb250YWluZXI6OnN5bWJvbF9jaG9pY2UgJiBjaG9pY2UpIGNvbnN0OwotCi0JLy8vIHRvdGFsIGNvdW50IGZvciAnbmV3JyBwcm9maWxlCi0JY291bnRfYXJyYXlfdCBjb25zdCBzYW1wbGVzX2NvdW50KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0JLy8vIGZpcnN0IHByb2ZpbGUKLQlwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjMTsKLQotCS8vLyBzZWNvbmQgcHJvZmlsZQotCXByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMyOwotCi0JLy8vIHNhbXBsZXMgY291bnQgZm9yIHBjMQotCWNvdW50X2FycmF5X3QgdG90YWwxOwotCi0JLy8vIHNhbXBsZXMgY291bnQgZm9yIHBjMgotCWNvdW50X2FycmF5X3QgdG90YWwyOwotfTsKLQotI2VuZGlmIC8qICFESUZGX0NPTlRBSU5FUl9IICovCmRpZmYgLS1naXQgYS9saWJwcC9maWxlbmFtZV9zcGVjLmNwcCBiL2xpYnBwL2ZpbGVuYW1lX3NwZWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2U3Y2I0Li4wMDAwMDAwCi0tLSBhL2xpYnBwL2ZpbGVuYW1lX3NwZWMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBmaWxlbmFtZV9zcGVjLmNwcAotICogQ29udGFpbmVyIGhvbGRpbmcgYSBzYW1wbGUgZmlsZW5hbWUgc3BsaXQgaW50byBpdHMgY29tcG9uZW50cwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiZmlsZW5hbWVfc3BlYy5oIgotI2luY2x1ZGUgInBhcnNlX2ZpbGVuYW1lLmgiCi0jaW5jbHVkZSAiZ2VuZXJpY19zcGVjLmgiCi0KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotCi1maWxlbmFtZV9zcGVjOjpmaWxlbmFtZV9zcGVjKHN0cmluZyBjb25zdCAmIGZpbGVuYW1lKQotewotCXNldF9zYW1wbGVfZmlsZW5hbWUoZmlsZW5hbWUpOwotfQotCi0KLWZpbGVuYW1lX3NwZWM6OmZpbGVuYW1lX3NwZWMoKQotCTogaW1hZ2UoIioiKSwgbGliX2ltYWdlKCIqIikKLXsKLX0KLQotCi1ib29sIGZpbGVuYW1lX3NwZWM6Om1hdGNoKGZpbGVuYW1lX3NwZWMgY29uc3QgJiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBjb25zdCAmIGJpbmFyeSkgY29uc3QKLXsKLQlpZiAoIXRpZC5tYXRjaChyaHMudGlkKSB8fCAhY3B1Lm1hdGNoKHJocy5jcHUpIHx8Ci0JICAgICF0Z2lkLm1hdGNoKHJocy50Z2lkKSB8fCBjb3VudCAhPSByaHMuY291bnQgfHwKLQkgICAgdW5pdG1hc2sgIT0gcmhzLnVuaXRtYXNrIHx8IGV2ZW50ICE9IHJocy5ldmVudCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGJpbmFyeS5lbXB0eSgpKSB7Ci0JCXJldHVybiBpbWFnZSA9PSByaHMuaW1hZ2UgJiYgbGliX2ltYWdlID09IHJocy5saWJfaW1hZ2U7Ci0JfQotCi0JLy8gUFA6My4zIGlmIGJpbmFyeSBpcyBub3QgZW1wdHkgd2UgbXVzdCBtYXRjaCBlaXRoZXIgdGhlCi0JLy8gbGliX25hbWUgaWYgcHJlc2VudCBvciB0aGUgaW1hZ2UgbmFtZQotCWlmICghcmhzLmxpYl9pbWFnZS5lbXB0eSgpKSB7Ci0JCS8vIEZJWE1FOiB1c2UgZm5tYXRjaCA/Ci0JCXJldHVybiByaHMubGliX2ltYWdlID09IGJpbmFyeTsKLQl9Ci0KLQkvLyBGSVhNRTogdXNlIGZubWF0Y2ggPwotCXJldHVybiByaHMuaW1hZ2UgPT0gYmluYXJ5OwotfQotCi0KLXZvaWQgZmlsZW5hbWVfc3BlYzo6c2V0X3NhbXBsZV9maWxlbmFtZShzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSkKLXsKLQlwYXJzZWRfZmlsZW5hbWUgcGFyc2VkID0gcGFyc2VfZmlsZW5hbWUoZmlsZW5hbWUpOwotCi0JaW1hZ2UgPSBwYXJzZWQuaW1hZ2U7Ci0JbGliX2ltYWdlID0gcGFyc2VkLmxpYl9pbWFnZTsKLQljZ19pbWFnZSA9IHBhcnNlZC5jZ19pbWFnZTsKLQlldmVudCA9IHBhcnNlZC5ldmVudDsKLQljb3VudCA9IG9wX2xleGljYWxfY2FzdDxpbnQ+KHBhcnNlZC5jb3VudCk7Ci0JdW5pdG1hc2sgPSBvcF9sZXhpY2FsX2Nhc3Q8dW5zaWduZWQgaW50PihwYXJzZWQudW5pdG1hc2spOwotCXRnaWQuc2V0KHBhcnNlZC50Z2lkKTsKLQl0aWQuc2V0KHBhcnNlZC50aWQpOwotCWNwdS5zZXQocGFyc2VkLmNwdSk7Ci19Ci0KLQotYm9vbCBmaWxlbmFtZV9zcGVjOjppc19kZXBlbmRlbnQoKSBjb25zdAotewotCWlmIChjZ19pbWFnZS5lbXB0eSgpKQotCQlyZXR1cm4gaW1hZ2UgIT0gbGliX2ltYWdlOwotCXJldHVybiBjZ19pbWFnZSAhPSBpbWFnZSB8fCBjZ19pbWFnZSAhPSBsaWJfaW1hZ2U7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9maWxlbmFtZV9zcGVjLmggYi9saWJwcC9maWxlbmFtZV9zcGVjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZDdmOGEuLjAwMDAwMDAKLS0tIGEvbGlicHAvZmlsZW5hbWVfc3BlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBmaWxlbmFtZV9zcGVjLmgKLSAqIENvbnRhaW5lciBob2xkaW5nIGEgc2FtcGxlIGZpbGVuYW1lIHNwbGl0IGludG8gaXRzIGNvbXBvbmVudHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBGSUxFTkFNRV9TUEVDX0gKLSNkZWZpbmUgRklMRU5BTUVfU1BFQ19ICi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJnZW5lcmljX3NwZWMuaCIKLQotY2xhc3MgcHJvZmlsZV9zcGVjOwotCi0vKioKLSAqIEEgY2xhc3MgdG8gc3BsaXQgYW5kIHN0b3JlIGNvbXBvbmVudHMgb2YgYSBzYW1wbGUgZmlsZW5hbWUuCi0gKiBUaGVzZSBkZXJpdmVkIHZhbHVlcyBhcmUgdGhlbiB1c2VkIHRvIG1hdGNoIGFnYWluc3QgYQotICogcHJvZmlsZV9zcGVjIGFzIGdpdmVuIGJ5IHRoZSB1c2VyLgotICovCi1jbGFzcyBmaWxlbmFtZV9zcGVjCi17Ci0JZnJpZW5kIGNsYXNzIHByb2ZpbGVfc3BlYzsKLQotcHVibGljOgotCS8qKgotCSAqIEBwYXJhbSBmaWxlbmFtZSAgdGhlIHNhbXBsZXMgZmlsZW5hbWUKLQkgKgotCSAqIGJ1aWxkIGEgZmlsZW5hbWVfc3BlYyBmcm9tIGEgc2FtcGxlcyBmaWxlbmFtZQotCSAqLwotCWZpbGVuYW1lX3NwZWMoc3RkOjpzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSk7Ci0KLQlmaWxlbmFtZV9zcGVjKCk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gZmlsZW5hbWUgIGEgc2FtcGxlIGZpbGVuYW1lCi0JICoKLQkgKiBzZXR1cCBmaWxlbmFtZSBzcGVjIGFjY29yZGluZyB0byB0aGUgc2FtcGxlcyBmaWxlbmFtZS4gUFA6My4xOSB0bwotCSAqIDMuMjUKLQkgKi8KLQl2b2lkIHNldF9zYW1wbGVfZmlsZW5hbWUoc3RkOjpzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gcmhzICByaWdodCBoYW5kIHNpZGUgb2YgdGhlIG1hdGNoIG9wZXJhdG9yCi0JICogQHBhcmFtIGJpbmFyeSAgaWYgYmluYXJ5IGlzIG5vbi1lbXB0eSwgYW5kIG1hdGNoZXMKLQkgKiB0aGUgYmluYXJ5IG9yIGxpYiBuYW1lLCB1c2UgaXQgcmF0aGVyIHRoYW4gdGhlCi0JICogb25lIGluIHJocy4KLQkgKgotCSAqIHJldHVybiB0cnVlIGlmICp0aGlzIG1hdGNoIHJocywgbWF0Y2hpbmcgaWY6Ci0JICogIC0gaW1hZ2VfbmFtZSBhcmUgaWRlbnRpY2FsCi0JICogIC0gbGliX25hbWUgYXJlIGlkZW50aWNhbAotCSAqICAtIGV2ZW50X3NwZWMgbWF0Y2gKLQkgKgotCSAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBjb21tdXRhdGl2ZS4gRmlyc3QgcGFydCBvZiBQUDozLjI0Ci0JICovCi0JYm9vbCBtYXRjaChmaWxlbmFtZV9zcGVjIGNvbnN0ICYgcmhzLAotCSAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QgJiBiaW5hcnkpIGNvbnN0OwotCi0JYm9vbCBpc19kZXBlbmRlbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKLQlzdGQ6OnN0cmluZyBpbWFnZTsKLQlzdGQ6OnN0cmluZyBsaWJfaW1hZ2U7Ci0Jc3RkOjpzdHJpbmcgY2dfaW1hZ2U7Ci0Jc3RkOjpzdHJpbmcgZXZlbnQ7Ci0JaW50IGNvdW50OwotCXVuc2lnbmVkIGludCB1bml0bWFzazsKLQlnZW5lcmljX3NwZWM8cGlkX3Q+IHRnaWQ7Ci0JZ2VuZXJpY19zcGVjPHBpZF90PiB0aWQ7Ci0JZ2VuZXJpY19zcGVjPGludD4gY3B1OwotfTsKLQotCi0jZW5kaWYgLyogIUZJTEVOQU1FX1NQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicHAvZm9ybWF0X2ZsYWdzLmggYi9saWJwcC9mb3JtYXRfZmxhZ3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI2OGFlMS4uMDAwMDAwMAotLS0gYS9saWJwcC9mb3JtYXRfZmxhZ3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKgotICogQGZpbGUgZm9ybWF0X2ZsYWdzLmgKLSAqIG91dHB1dCBvcHRpb25zCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBGT1JNQVRfRkxBR1NfSAotI2RlZmluZSBGT1JNQVRfRkxBR1NfSAotCi0vKioKLSAqIGZsYWdzIHBhc3NlZCB0byB0aGUgY3RvciBvZiBhbiBvdXRwdXRfc3ltYm9sIG9iamVjdC4KLSAqCi0gKiBcc2EgZm9ybWF0X291dHB1dDo6Zm9ybWF0dGVyCi0gKi8KLWVudW0gZm9ybWF0X2ZsYWdzIHsKLQlmZl9ub25lID0gMCwKLQkvLy8gYSBmb3JtYXR0ZWQgbWVtb3J5IGFkZHJlc3MKLQlmZl92bWEgPSAxIDw8IDAsCi0JLy8vIG91dHB1dCBkZWJ1ZyBmaWxlbmFtZSBhbmQgbGluZSBuci4KLQlmZl9saW5lbnJfaW5mbyA9IDEgPDwgMSwKLQkvLy8gb3V0cHV0IHRoZSBpbWFnZSBuYW1lIGZvciB0aGlzIGxpbmUKLQlmZl9pbWFnZV9uYW1lID0gMSA8PCAzLAotCS8vLyBvdXRwdXQgb3duaW5nIGFwcGxpY2F0aW9uIG5hbWUKLQlmZl9hcHBfbmFtZSA9IDEgPDwgNCwKLQkvLy8gb3V0cHV0IHRoZSAoZGVtYW5nbGVkKSBzeW1ib2wgbmFtZQotCWZmX3N5bWJfbmFtZSA9IDEgPDwgNSwKLQotCS8qKiBAbmFtZSBzdWJzZXQgb2YgZmxhZ3MgdXNlZCBieSBvcHJlcG9ydF9mb3JtYXR0ZXIgKi8KLQkvL0B7Ci0JLy8vIG51bWJlciBvZiBzYW1wbGVzCi0JZmZfbnJfc2FtcGxlcyA9IDEgPDwgNiwKLQkvLy8gbnVtYmVyIG9mIHNhbXBsZXMgYWNjdW11bGF0ZWQKLQlmZl9ucl9zYW1wbGVzX2N1bXVsYXRlZCA9IDEgPDwgNywKLQkvLy8gcmVsYXRpdmUgcGVyY2VudGFnZSBvZiBzYW1wbGVzCi0JZmZfcGVyY2VudCA9IDEgPDwgOCwKLQkvLy8gcmVsYXRpdmUgcGVyY2VudGFnZSBvZiBzYW1wbGVzIGFjY3VtdWxhdGVkCi0JZmZfcGVyY2VudF9jdW11bGF0ZWQgPSAxIDw8IDksCi0JLyoqCi0JICogT3V0cHV0IHBlcmNlbnRhZ2UgZm9yIGRldGFpbHMsIG5vdCByZWxhdGl2ZQotCSAqIHRvIHN5bWJvbCBidXQgcmVsYXRpdmUgdG8gdGhlIHRvdGFsIG5yIG9mIHNhbXBsZXMKLQkgKi8KLQlmZl9wZXJjZW50X2RldGFpbHMgPSAxIDw8IDEwLAotCS8qKgotCSAqIE91dHB1dCBwZXJjZW50YWdlIGZvciBkZXRhaWxzLCBub3QgcmVsYXRpdmUKLQkgKiB0byBzeW1ib2wgYnV0IHJlbGF0aXZlIHRvIHRoZSB0b3RhbCBuciBvZiBzYW1wbGVzLAotCSAqIGFjY3VtdWxhdGVkCi0JICovCi0JZmZfcGVyY2VudF9jdW11bGF0ZWRfZGV0YWlscyA9IDEgPDwgMTEsCi0JLy8vIG91dHB1dCBkaWZmIHZhbHVlCi0JZmZfZGlmZiA9IDEgPDwgMTIsCi0JLy9AfQotfTsKLQotCi0vKioKLSAqIEdlbmVyYWwgaGludHMgYWJvdXQgZm9ybWF0dGluZyBvZiB0aGUgY29sdW1uYXIgb3V0cHV0LgotICovCi1lbnVtIGNvbHVtbl9mbGFncyB7Ci0JY2Zfbm9uZSA9IDAsCi0JY2ZfNjRiaXRfdm1hID0gMSA8PCAwLAotCWNmX2ltYWdlX25hbWUgPSAxIDw8IDEKLX07Ci0KLSNlbmRpZiAvLyBGT1JNQVRfRkxBR1NfSApkaWZmIC0tZ2l0IGEvbGlicHAvZm9ybWF0X291dHB1dC5jcHAgYi9saWJwcC9mb3JtYXRfb3V0cHV0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAwYzBkNi4uMDAwMDAwMAotLS0gYS9saWJwcC9mb3JtYXRfb3V0cHV0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0NCArMCwwIEBACi0vKioKLSAqIEBmaWxlIGZvcm1hdF9vdXRwdXQuY3BwCi0gKiBvdXRwdXR0aW5nIGZvcm1hdCBmb3Igc3ltYm9sIGxpc3RzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotLyogb2xkZXIgZ2xpYmMgaGFzIEM5OSBJTkZJTklUWSBpbiBfR05VX1NPVVJDRSAqLwotI2lmbmRlZiBfR05VX1NPVVJDRQotI2RlZmluZSBfR05VX1NPVVJDRQotI2VuZGlmCi0KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPGlvbWFuaXA+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0KLSNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKLQotI2luY2x1ZGUgImZvcm1hdF9vdXRwdXQuaCIKLSNpbmNsdWRlICJwcm9maWxlX2NvbnRhaW5lci5oIgotI2luY2x1ZGUgImNhbGxncmFwaF9jb250YWluZXIuaCIKLSNpbmNsdWRlICJkaWZmX2NvbnRhaW5lci5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0KLW5hbWVzcGFjZSB7Ci0KLXN0cmluZyBjb25zdCAmIGdldF9pbWFnZV9uYW1lKGltYWdlX25hbWVfaWQgaWQsIGJvb2wgbGYpCi17Ci0JcmV0dXJuIGxmID8gaW1hZ2VfbmFtZXMubmFtZShpZCkgOiBpbWFnZV9uYW1lcy5iYXNlbmFtZShpZCk7Ci19Ci0KLXN0cmluZyBjb25zdCBnZXRfbGluZW5yX2luZm8oZmlsZV9sb2NhdGlvbiBjb25zdCBmbG9jLCBib29sIGxmKQotewotCW9zdHJpbmdzdHJlYW0gb3V0OwotCi0Jc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUgPSBsZgotCQk/IGRlYnVnX25hbWVzLm5hbWUoZmxvYy5maWxlbmFtZSkKLQkJOiBkZWJ1Z19uYW1lcy5iYXNlbmFtZShmbG9jLmZpbGVuYW1lKTsKLQotCWlmICghZmlsZW5hbWUuZW1wdHkoKSkgewotCQlvdXQgPDwgZmlsZW5hbWUgPDwgIjoiIDw8IGZsb2MubGluZW5yOwotCX0gZWxzZSB7Ci0JCW91dCA8PCAiKG5vIGxvY2F0aW9uIGluZm9ybWF0aW9uKSI7Ci0JfQotCi0JcmV0dXJuIG91dC5zdHIoKTsKLX0KLQotc3RyaW5nIGdldF92bWEoYmZkX3ZtYSB2bWEsIGJvb2wgdm1hXzY0KQotewotCW9zdHJpbmdzdHJlYW0gb3V0OwotCWludCB3aWR0aCA9IHZtYV82NCA/IDE2IDogODsKLQotCW91dCA8PCBoZXggPDwgc2V0dyh3aWR0aCkgPDwgc2V0ZmlsbCgnMCcpIDw8IHZtYTsKLQotCXJldHVybiBvdXQuc3RyKCk7Ci19Ci0KLXN0cmluZyBnZXRfcGVyY2VudChzaXplX3QgZGl2aWRlbmQsIHNpemVfdCBkaXZpc29yKQotewotCWRvdWJsZSByYXRpbyA9IG9wX3JhdGlvKGRpdmlkZW5kLCBkaXZpc29yKTsKLQotCXJldHVybiA6OmZvcm1hdF9wZXJjZW50KHJhdGlvICogMTAwLCBwZXJjZW50X2ludF93aWR0aCwKLQkgICAgICAgICAgICAgICAgICAgICBwZXJjZW50X2ZyYWN0X3dpZHRoKTsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLQotbmFtZXNwYWNlIGZvcm1hdF9vdXRwdXQgewotCi0KLWZvcm1hdHRlcjo6Zm9ybWF0dGVyKCkKLQk6Ci0JbnJfY2xhc3NlcygxKSwKLQlmbGFncyhmZl9ub25lKSwKLQl2bWFfNjQoZmFsc2UpLAotCWxvbmdfZmlsZW5hbWVzKGZhbHNlKSwKLQluZWVkX2hlYWRlcih0cnVlKQotewotCWZvcm1hdF9tYXBbZmZfdm1hXSA9IGZpZWxkX2Rlc2NyaXB0aW9uKDksICJ2bWEiLCAmZm9ybWF0dGVyOjpmb3JtYXRfdm1hKTsKLQlmb3JtYXRfbWFwW2ZmX25yX3NhbXBsZXNdID0gZmllbGRfZGVzY3JpcHRpb24oOSwgInNhbXBsZXMiLCAmZm9ybWF0dGVyOjpmb3JtYXRfbnJfc2FtcGxlcyk7Ci0JZm9ybWF0X21hcFtmZl9ucl9zYW1wbGVzX2N1bXVsYXRlZF0gPSBmaWVsZF9kZXNjcmlwdGlvbigxNCwgImN1bS4gc2FtcGxlcyIsICZmb3JtYXR0ZXI6OmZvcm1hdF9ucl9jdW11bGF0ZWRfc2FtcGxlcyk7Ci0JZm9ybWF0X21hcFtmZl9wZXJjZW50XSA9IGZpZWxkX2Rlc2NyaXB0aW9uKDksICIlIiwgJmZvcm1hdHRlcjo6Zm9ybWF0X3BlcmNlbnQpOwotCWZvcm1hdF9tYXBbZmZfcGVyY2VudF9jdW11bGF0ZWRdID0gZmllbGRfZGVzY3JpcHRpb24oMTEsICJjdW0uICUiLCAmZm9ybWF0dGVyOjpmb3JtYXRfY3VtdWxhdGVkX3BlcmNlbnQpOwotCWZvcm1hdF9tYXBbZmZfbGluZW5yX2luZm9dID0gZmllbGRfZGVzY3JpcHRpb24oMjgsICJsaW5lbnIgaW5mbyIsICZmb3JtYXR0ZXI6OmZvcm1hdF9saW5lbnJfaW5mbyk7Ci0JZm9ybWF0X21hcFtmZl9pbWFnZV9uYW1lXSA9IGZpZWxkX2Rlc2NyaXB0aW9uKDI1LCAiaW1hZ2UgbmFtZSIsICZmb3JtYXR0ZXI6OmZvcm1hdF9pbWFnZV9uYW1lKTsKLQlmb3JtYXRfbWFwW2ZmX2FwcF9uYW1lXSA9IGZpZWxkX2Rlc2NyaXB0aW9uKDI1LCAiYXBwIG5hbWUiLCAmZm9ybWF0dGVyOjpmb3JtYXRfYXBwX25hbWUpOwotCWZvcm1hdF9tYXBbZmZfc3ltYl9uYW1lXSA9IGZpZWxkX2Rlc2NyaXB0aW9uKDMwLCAic3ltYm9sIG5hbWUiLCAmZm9ybWF0dGVyOjpmb3JtYXRfc3ltYl9uYW1lKTsKLQlmb3JtYXRfbWFwW2ZmX3BlcmNlbnRfZGV0YWlsc10gPSBmaWVsZF9kZXNjcmlwdGlvbig5LCAiJSIsICZmb3JtYXR0ZXI6OmZvcm1hdF9wZXJjZW50X2RldGFpbHMpOwotCWZvcm1hdF9tYXBbZmZfcGVyY2VudF9jdW11bGF0ZWRfZGV0YWlsc10gPSBmaWVsZF9kZXNjcmlwdGlvbigxMCwgImN1bS4gJSIsICZmb3JtYXR0ZXI6OmZvcm1hdF9jdW11bGF0ZWRfcGVyY2VudF9kZXRhaWxzKTsKLQlmb3JtYXRfbWFwW2ZmX2RpZmZdID0gZmllbGRfZGVzY3JpcHRpb24oMTAsICJkaWZmICUiLCAmZm9ybWF0dGVyOjpmb3JtYXRfZGlmZik7Ci19Ci0KLQotZm9ybWF0dGVyOjp+Zm9ybWF0dGVyKCkKLXsKLX0KLQotCi12b2lkIGZvcm1hdHRlcjo6c2V0X25yX2NsYXNzZXMoc2l6ZV90IG5yKQotewotCW5yX2NsYXNzZXMgPSBucjsKLX0KLQotCi12b2lkIGZvcm1hdHRlcjo6YWRkX2Zvcm1hdChmb3JtYXRfZmxhZ3MgZmxhZykKLXsKLQlmbGFncyA9IHN0YXRpY19jYXN0PGZvcm1hdF9mbGFncz4oZmxhZ3MgfCBmbGFnKTsKLX0KLQotCi12b2lkIGZvcm1hdHRlcjo6c2hvd19oZWFkZXIoYm9vbCBvbl9vZmYpCi17Ci0JbmVlZF9oZWFkZXIgPSBvbl9vZmY7Ci19Ci0gCi0KLXZvaWQgZm9ybWF0dGVyOjp2bWFfZm9ybWF0XzY0Yml0KGJvb2wgb25fb2ZmKQotewotCXZtYV82NCA9IG9uX29mZjsKLX0KLQotCi12b2lkIGZvcm1hdHRlcjo6c2hvd19sb25nX2ZpbGVuYW1lcyhib29sIG9uX29mZikKLXsKLQlsb25nX2ZpbGVuYW1lcyA9IG9uX29mZjsKLX0KLQotCi12b2lkIGZvcm1hdHRlcjo6c2hvd19nbG9iYWxfcGVyY2VudChib29sIG9uX29mZikKLXsKLQlnbG9iYWxfcGVyY2VudCA9IG9uX29mZjsKLX0KLQotCi12b2lkIGZvcm1hdHRlcjo6b3V0cHV0X2hlYWRlcihvc3RyZWFtICYgb3V0KQotewotCWlmICghbmVlZF9oZWFkZXIpCi0JCXJldHVybjsKLQotCXNpemVfdCBwYWRkaW5nID0gMDsKLQotCS8vIGZpcnN0IG91dHB1dCB0aGUgdm1hIGZpZWxkCi0JaWYgKGZsYWdzICYgZmZfdm1hKQotCQlwYWRkaW5nID0gb3V0cHV0X2hlYWRlcl9maWVsZChvdXQsIGZmX3ZtYSwgcGFkZGluZyk7Ci0KLQkvLyB0aGUgZmllbGQgcmVwZWF0ZWQgZm9yIGVhY2ggcHJvZmlsZSBjbGFzcwotCWZvciAoc2l6ZV90IHBjbGFzcyA9IDAgOyBwY2xhc3MgPCBucl9jbGFzc2VzOyArK3BjbGFzcykgewotCQlpZiAoZmxhZ3MgJiBmZl9ucl9zYW1wbGVzKQotCQkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LAotCQkJICAgICAgZmZfbnJfc2FtcGxlcywgcGFkZGluZyk7Ci0KLQkJaWYgKGZsYWdzICYgZmZfbnJfc2FtcGxlc19jdW11bGF0ZWQpCi0JCQlwYWRkaW5nID0gb3V0cHV0X2hlYWRlcl9maWVsZChvdXQsIAotCQkJICAgICAgIGZmX25yX3NhbXBsZXNfY3VtdWxhdGVkLCBwYWRkaW5nKTsKLQotCQlpZiAoZmxhZ3MgJiBmZl9wZXJjZW50KQotCQkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LAotCQkJICAgICAgIGZmX3BlcmNlbnQsIHBhZGRpbmcpOwotCi0JCWlmIChmbGFncyAmIGZmX3BlcmNlbnRfY3VtdWxhdGVkKQotCQkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LAotCQkJICAgICAgIGZmX3BlcmNlbnRfY3VtdWxhdGVkLCBwYWRkaW5nKTsKLQotCQlpZiAoZmxhZ3MgJiBmZl9kaWZmKQotCQkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LAotCQkJCWZmX2RpZmYsIHBhZGRpbmcpOwotCi0JCWlmIChmbGFncyAmIGZmX3BlcmNlbnRfZGV0YWlscykKLQkJCXBhZGRpbmcgPSBvdXRwdXRfaGVhZGVyX2ZpZWxkKG91dCwKLQkJCSAgICAgICBmZl9wZXJjZW50X2RldGFpbHMsIHBhZGRpbmcpOwotCi0JCWlmIChmbGFncyAmIGZmX3BlcmNlbnRfY3VtdWxhdGVkX2RldGFpbHMpCi0JCQlwYWRkaW5nID0gb3V0cHV0X2hlYWRlcl9maWVsZChvdXQsCi0JCQkgICAgICAgZmZfcGVyY2VudF9jdW11bGF0ZWRfZGV0YWlscywgcGFkZGluZyk7Ci0JfQotCi0JLy8gbm93IHRoZSByZW1haW5pbmcgZmllbGQKLQlpZiAoZmxhZ3MgJiBmZl9saW5lbnJfaW5mbykKLQkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LCBmZl9saW5lbnJfaW5mbywgcGFkZGluZyk7Ci0KLQlpZiAoZmxhZ3MgJiBmZl9pbWFnZV9uYW1lKQotCQlwYWRkaW5nID0gb3V0cHV0X2hlYWRlcl9maWVsZChvdXQsIGZmX2ltYWdlX25hbWUsIHBhZGRpbmcpOwotCi0JaWYgKGZsYWdzICYgZmZfYXBwX25hbWUpCi0JCXBhZGRpbmcgPSBvdXRwdXRfaGVhZGVyX2ZpZWxkKG91dCwgZmZfYXBwX25hbWUsIHBhZGRpbmcpOwotCi0JaWYgKGZsYWdzICYgZmZfc3ltYl9uYW1lKQotCQlwYWRkaW5nID0gb3V0cHV0X2hlYWRlcl9maWVsZChvdXQsIGZmX3N5bWJfbmFtZSwgcGFkZGluZyk7Ci0KLQlvdXQgPDwgIlxuIjsKLX0KLQotCi0vLy8gZGVzY3JpYmUgZWFjaCBwb3NzaWJsZSBmaWVsZCBvZiBjb2x1bW1uZWQgb3V0cHV0LgotLy8gRklYTUU6IHVzZSAlIG9mIHRoZSBzY3JlZW4gd2lkdGggaGVyZS4gc3VtIG9mICUgZXF1YWwgdG8gMTAwLCB0aGVuIGNhbGN1bGF0ZQotLy8gcmF0aW8gYmV0d2VlbiAxMDAgYW5kIHRoZSBzZWxlY3RlZCAlIHRvIGdyb3cgbm9uIGZpeGVkIGZpZWxkIHVzZSBhbHNvCi0vLyBsaWJbbj9dY3Vyc2VzIHRvIGdldCB0aGUgY29uc29sZSB3aWR0aCAobG9vayBpbmZvIHNvdXJjZSkgKHNvIG9uIGFkZCBhIGZpeGVkCi0vLyBmaWVsZCBmbGFncykKLXNpemVfdCBmb3JtYXR0ZXI6Ogotb3V0cHV0X2ZpZWxkKG9zdHJlYW0gJiBvdXQsIGZpZWxkX2RhdHVtIGNvbnN0ICYgZGF0dW0sCi0gICAgICAgICAgICAgZm9ybWF0X2ZsYWdzIGZsLCBzaXplX3QgcGFkZGluZywgYm9vbCBoaWRlX2ltbXV0YWJsZSkKLXsKLQlpZiAoIWhpZGVfaW1tdXRhYmxlKSB7Ci0JCW91dCA8PCBzdHJpbmcocGFkZGluZywgJyAnKTsKLQotCQlmaWVsZF9kZXNjcmlwdGlvbiBjb25zdCAmIGZpZWxkKGZvcm1hdF9tYXBbZmxdKTsKLQkJc3RyaW5nIHN0ciA9ICh0aGlzLT4qZmllbGQuZm9ybWF0dGVyKShkYXR1bSk7Ci0JCW91dCA8PCBzdHI7Ci0KLQkJLy8gYXQgbGVhc3Qgb25lIHNlcGFyYXRvciBjaGFyCi0JCXBhZGRpbmcgPSAxOwotCQlpZiAoc3RyLmxlbmd0aCgpIDwgZmllbGQud2lkdGgpCi0JCQlwYWRkaW5nID0gZmllbGQud2lkdGggLSBzdHIubGVuZ3RoKCk7Ci0JfSBlbHNlIHsKLQkJZmllbGRfZGVzY3JpcHRpb24gY29uc3QgJiBmaWVsZChmb3JtYXRfbWFwW2ZsXSk7Ci0JCXBhZGRpbmcgKz0gZmllbGQud2lkdGg7Ci0JfQotCi0JcmV0dXJuIHBhZGRpbmc7Ci19Ci0KLSAKLXNpemVfdCBmb3JtYXR0ZXI6Ogotb3V0cHV0X2hlYWRlcl9maWVsZChvc3RyZWFtICYgb3V0LCBmb3JtYXRfZmxhZ3MgZmwsIHNpemVfdCBwYWRkaW5nKQotewotCW91dCA8PCBzdHJpbmcocGFkZGluZywgJyAnKTsKLQotCWZpZWxkX2Rlc2NyaXB0aW9uIGNvbnN0ICYgZmllbGQoZm9ybWF0X21hcFtmbF0pOwotCW91dCA8PCBmaWVsZC5oZWFkZXJfbmFtZTsKLQotCS8vIGF0IGxlYXN0IG9uZSBzZXBhcmF0b3IgY2hhcgotCXBhZGRpbmcgPSAxOwotCWlmIChmaWVsZC5oZWFkZXJfbmFtZS5sZW5ndGgoKSA8IGZpZWxkLndpZHRoKQotCQlwYWRkaW5nID0gZmllbGQud2lkdGggLSBmaWVsZC5oZWFkZXJfbmFtZS5sZW5ndGgoKTsKLQotCXJldHVybiBwYWRkaW5nOwotfQotIAotCi1zdHJpbmcgZm9ybWF0dGVyOjpmb3JtYXRfdm1hKGZpZWxkX2RhdHVtIGNvbnN0ICYgZikKLXsKLQlyZXR1cm4gZ2V0X3ZtYShmLnNhbXBsZS52bWEsIHZtYV82NCk7Ci19Ci0KLSAKLXN0cmluZyBmb3JtYXR0ZXI6OmZvcm1hdF9zeW1iX25hbWUoZmllbGRfZGF0dW0gY29uc3QgJiBmKQotewotCXJldHVybiBzeW1ib2xfbmFtZXMuZGVtYW5nbGUoZi5zeW1ib2wubmFtZSk7Ci19Ci0KLQotc3RyaW5nIGZvcm1hdHRlcjo6Zm9ybWF0X2ltYWdlX25hbWUoZmllbGRfZGF0dW0gY29uc3QgJiBmKQotewotCXJldHVybiBnZXRfaW1hZ2VfbmFtZShmLnN5bWJvbC5pbWFnZV9uYW1lLCBsb25nX2ZpbGVuYW1lcyk7Ci19Ci0KLSAKLXN0cmluZyBmb3JtYXR0ZXI6OmZvcm1hdF9hcHBfbmFtZShmaWVsZF9kYXR1bSBjb25zdCAmIGYpCi17Ci0JcmV0dXJuIGdldF9pbWFnZV9uYW1lKGYuc3ltYm9sLmFwcF9uYW1lLCBsb25nX2ZpbGVuYW1lcyk7Ci19Ci0KLSAKLXN0cmluZyBmb3JtYXR0ZXI6OmZvcm1hdF9saW5lbnJfaW5mbyhmaWVsZF9kYXR1bSBjb25zdCAmIGYpCi17Ci0JcmV0dXJuIGdldF9saW5lbnJfaW5mbyhmLnNhbXBsZS5maWxlX2xvYywgbG9uZ19maWxlbmFtZXMpOwotfQotCi0gCi1zdHJpbmcgZm9ybWF0dGVyOjpmb3JtYXRfbnJfc2FtcGxlcyhmaWVsZF9kYXR1bSBjb25zdCAmIGYpCi17Ci0Jb3N0cmluZ3N0cmVhbSBvdXQ7Ci0Jb3V0IDw8IGYuc2FtcGxlLmNvdW50c1tmLnBjbGFzc107Ci0JcmV0dXJuIG91dC5zdHIoKTsKLX0KLQotIAotc3RyaW5nIGZvcm1hdHRlcjo6Zm9ybWF0X25yX2N1bXVsYXRlZF9zYW1wbGVzKGZpZWxkX2RhdHVtIGNvbnN0ICYgZikKLXsKLQlpZiAoZi5kaWZmID09IC1JTkZJTklUWSkKLQkJcmV0dXJuICItLS0iOwotCW9zdHJpbmdzdHJlYW0gb3V0OwotCWYuY291bnRzLmN1bXVsYXRlZF9zYW1wbGVzW2YucGNsYXNzXSArPSBmLnNhbXBsZS5jb3VudHNbZi5wY2xhc3NdOwotCW91dCA8PCBmLmNvdW50cy5jdW11bGF0ZWRfc2FtcGxlc1tmLnBjbGFzc107Ci0JcmV0dXJuIG91dC5zdHIoKTsKLX0KLQotIAotc3RyaW5nIGZvcm1hdHRlcjo6Zm9ybWF0X3BlcmNlbnQoZmllbGRfZGF0dW0gY29uc3QgJiBmKQotewotCWlmIChmLmRpZmYgPT0gLUlORklOSVRZKQotCQlyZXR1cm4gIi0tLSI7Ci0JcmV0dXJuIGdldF9wZXJjZW50KGYuc2FtcGxlLmNvdW50c1tmLnBjbGFzc10sIGYuY291bnRzLnRvdGFsW2YucGNsYXNzXSk7Ci19Ci0KLSAKLXN0cmluZyBmb3JtYXR0ZXI6OmZvcm1hdF9jdW11bGF0ZWRfcGVyY2VudChmaWVsZF9kYXR1bSBjb25zdCAmIGYpCi17Ci0JaWYgKGYuZGlmZiA9PSAtSU5GSU5JVFkpCi0JCXJldHVybiAiLS0tIjsKLQlmLmNvdW50cy5jdW11bGF0ZWRfcGVyY2VudFtmLnBjbGFzc10gKz0gZi5zYW1wbGUuY291bnRzW2YucGNsYXNzXTsKLQotCXJldHVybiBnZXRfcGVyY2VudChmLmNvdW50cy5jdW11bGF0ZWRfcGVyY2VudFtmLnBjbGFzc10sCi0JICAgICAgICAgICAgICAgICAgIGYuY291bnRzLnRvdGFsW2YucGNsYXNzXSk7Ci19Ci0KLSAKLXN0cmluZyBmb3JtYXR0ZXI6OmZvcm1hdF9wZXJjZW50X2RldGFpbHMoZmllbGRfZGF0dW0gY29uc3QgJiBmKQotewotCXJldHVybiBnZXRfcGVyY2VudChmLnNhbXBsZS5jb3VudHNbZi5wY2xhc3NdLAotCQlmLmNvdW50cy50b3RhbFtmLnBjbGFzc10pOwotfQotCi0gCi1zdHJpbmcgZm9ybWF0dGVyOjpmb3JtYXRfY3VtdWxhdGVkX3BlcmNlbnRfZGV0YWlscyhmaWVsZF9kYXR1bSBjb25zdCAmIGYpCi17Ci0JZi5jb3VudHMuY3VtdWxhdGVkX3BlcmNlbnRfZGV0YWlsc1tmLnBjbGFzc10gKz0gZi5zYW1wbGUuY291bnRzW2YucGNsYXNzXTsKLQotCXJldHVybiBnZXRfcGVyY2VudChmLmNvdW50cy5jdW11bGF0ZWRfcGVyY2VudF9kZXRhaWxzW2YucGNsYXNzXSwKLQkgICAgICAgICAgICAgICAgICAgZi5jb3VudHMudG90YWxbZi5wY2xhc3NdKTsKLX0KLQotCi1zdHJpbmcgZm9ybWF0dGVyOjpmb3JtYXRfZGlmZihmaWVsZF9kYXR1bSBjb25zdCAmIGYpCi17Ci0JaWYgKGYuZGlmZiA9PSBJTkZJTklUWSkgewotCQlvc3RyaW5nc3RyZWFtIG91dDsKLQkJb3V0IDw8ICIrKysiOwotCQlyZXR1cm4gb3V0LnN0cigpOwotCX0gZWxzZSBpZiAoZi5kaWZmID09IC1JTkZJTklUWSkgewotCQlvc3RyaW5nc3RyZWFtIG91dDsKLQkJb3V0IDw8ICItLS0iOwotCQlyZXR1cm4gb3V0LnN0cigpOwotCX0KLQotCXJldHVybiA6OmZvcm1hdF9wZXJjZW50KGYuZGlmZiwgcGVyY2VudF9pbnRfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRfZnJhY3Rfd2lkdGgsIHRydWUpOwotfQotCi0KLXZvaWQgZm9ybWF0dGVyOjoKLWRvX291dHB1dChvc3RyZWFtICYgb3V0LCBzeW1ib2xfZW50cnkgY29uc3QgJiBzeW1iLCBzYW1wbGVfZW50cnkgY29uc3QgJiBzYW1wbGUsCi0gICAgICAgICAgY291bnRzX3QgJiBjLCBkaWZmX2FycmF5X3QgY29uc3QgJiBkaWZmcywgYm9vbCBoaWRlX2ltbXV0YWJsZSkKLXsKLQlzaXplX3QgcGFkZGluZyA9IDA7Ci0KLQkvLyBmaXJzdCBvdXRwdXQgdGhlIHZtYSBmaWVsZAotCWZpZWxkX2RhdHVtIGRhdHVtKHN5bWIsIHNhbXBsZSwgMCwgYyk7Ci0JaWYgKGZsYWdzICYgZmZfdm1hKQotCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sIGZmX3ZtYSwgcGFkZGluZywgZmFsc2UpOwotCi0JLy8gcmVwZWF0ZWQgZmllbGRzIGZvciBlYWNoIHByb2ZpbGUgY2xhc3MKLQlmb3IgKHNpemVfdCBwY2xhc3MgPSAwIDsgcGNsYXNzIDwgbnJfY2xhc3NlczsgKytwY2xhc3MpIHsKLQkJZmllbGRfZGF0dW0gZGF0dW0oc3ltYiwgc2FtcGxlLCBwY2xhc3MsIGMsIGRpZmZzW3BjbGFzc10pOwotCi0JCWlmIChmbGFncyAmIGZmX25yX3NhbXBsZXMpCi0JCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sCi0JCQkgICAgICAgZmZfbnJfc2FtcGxlcywgcGFkZGluZywgZmFsc2UpOwotCi0JCWlmIChmbGFncyAmIGZmX25yX3NhbXBsZXNfY3VtdWxhdGVkKQotCQkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLCAKLQkJCSAgICAgICBmZl9ucl9zYW1wbGVzX2N1bXVsYXRlZCwgcGFkZGluZywgZmFsc2UpOwotCi0JCWlmIChmbGFncyAmIGZmX3BlcmNlbnQpCi0JCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sCi0JCQkgICAgICAgZmZfcGVyY2VudCwgcGFkZGluZywgZmFsc2UpOwotCi0JCWlmIChmbGFncyAmIGZmX3BlcmNlbnRfY3VtdWxhdGVkKQotCQkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLAotCQkJICAgICAgIGZmX3BlcmNlbnRfY3VtdWxhdGVkLCBwYWRkaW5nLCBmYWxzZSk7Ci0KLQkJaWYgKGZsYWdzICYgZmZfZGlmZikKLQkJCXBhZGRpbmcgPSBvdXRwdXRfZmllbGQob3V0LCBkYXR1bSwKLQkJCQlmZl9kaWZmLCBwYWRkaW5nLCBmYWxzZSk7Ci0KLQkJaWYgKGZsYWdzICYgZmZfcGVyY2VudF9kZXRhaWxzKQotCQkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLAotCQkJICAgICAgIGZmX3BlcmNlbnRfZGV0YWlscywgcGFkZGluZywgZmFsc2UpOwotCi0JCWlmIChmbGFncyAmIGZmX3BlcmNlbnRfY3VtdWxhdGVkX2RldGFpbHMpCi0JCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sCi0JCQkgICAgICAgZmZfcGVyY2VudF9jdW11bGF0ZWRfZGV0YWlscywgcGFkZGluZywgZmFsc2UpOwotCX0KLQotCS8vIG5vdyB0aGUgcmVtYWluaW5nIGZpZWxkCi0JaWYgKGZsYWdzICYgZmZfbGluZW5yX2luZm8pCi0JCXBhZGRpbmcgPSBvdXRwdXRfZmllbGQob3V0LCBkYXR1bSwgZmZfbGluZW5yX2luZm8sCi0JCSAgICAgICBwYWRkaW5nLCBmYWxzZSk7Ci0KLQlpZiAoZmxhZ3MgJiBmZl9pbWFnZV9uYW1lKQotCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sIGZmX2ltYWdlX25hbWUsCi0JCSAgICAgICBwYWRkaW5nLCBoaWRlX2ltbXV0YWJsZSk7Ci0KLQlpZiAoZmxhZ3MgJiBmZl9hcHBfbmFtZSkKLQkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLCBmZl9hcHBfbmFtZSwKLQkJICAgICAgIHBhZGRpbmcsIGhpZGVfaW1tdXRhYmxlKTsKLQotCWlmIChmbGFncyAmIGZmX3N5bWJfbmFtZSkKLQkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLCBmZl9zeW1iX25hbWUsCi0JCSAgICAgICBwYWRkaW5nLCBoaWRlX2ltbXV0YWJsZSk7Ci0KLQlvdXQgPDwgIlxuIjsKLX0KLSAKLQotb3ByZXBvcnRfZm9ybWF0dGVyOjpvcHJlcG9ydF9mb3JtYXR0ZXIocHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwKQotCToKLQlwcm9maWxlKHApLAotCW5lZWRfZGV0YWlscyhmYWxzZSkKLXsKLQljb3VudHMudG90YWwgPSBwcm9maWxlLnNhbXBsZXNfY291bnQoKTsKLX0KLQotIAotdm9pZCBvcHJlcG9ydF9mb3JtYXR0ZXI6OnNob3dfZGV0YWlscyhib29sIG9uX29mZikKLXsKLQluZWVkX2RldGFpbHMgPSBvbl9vZmY7Ci19Ci0KLQotdm9pZCBvcHJlcG9ydF9mb3JtYXR0ZXI6Om91dHB1dChvc3RyZWFtICYgb3V0LCBzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1iKQotewotCWRvX291dHB1dChvdXQsICpzeW1iLCBzeW1iLT5zYW1wbGUsIGNvdW50cyk7Ci0KLQlpZiAobmVlZF9kZXRhaWxzKQotCQlvdXRwdXRfZGV0YWlscyhvdXQsIHN5bWIpOwotfQotCi0KLXZvaWQgb3ByZXBvcnRfZm9ybWF0dGVyOjoKLW91dHB1dChvc3RyZWFtICYgb3V0LCBzeW1ib2xfY29sbGVjdGlvbiBjb25zdCAmIHN5bXMpCi17Ci0Jb3V0cHV0X2hlYWRlcihvdXQpOwotCi0Jc3ltYm9sX2NvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3ltcy5iZWdpbigpOwotCXN5bWJvbF9jb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzeW1zLmVuZCgpOwotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0JCW91dHB1dChvdXQsICppdCk7Ci19Ci0KLQotdm9pZCBvcHJlcG9ydF9mb3JtYXR0ZXI6Ogotb3V0cHV0X2RldGFpbHMob3N0cmVhbSAmIG91dCwgc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYikKLXsKLQljb3VudHNfdCBjID0gY291bnRzOwotCi0JaWYgKCFnbG9iYWxfcGVyY2VudCkKLQkJYy50b3RhbCA9IHN5bWItPnNhbXBsZS5jb3VudHM7Ci0KLQkvLyBjdW11bGF0ZWQgcGVyY2VudCBhcmUgcmVsYXRpdmUgdG8gY3VycmVudCBzeW1ib2wuCi0JYy5jdW11bGF0ZWRfc2FtcGxlcyA9IGNvdW50X2FycmF5X3QoKTsKLQljLmN1bXVsYXRlZF9wZXJjZW50ID0gY291bnRfYXJyYXlfdCgpOwotCi0Jc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBpdCA9IHByb2ZpbGUuYmVnaW4oc3ltYik7Ci0Jc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBlbmQgPSBwcm9maWxlLmVuZChzeW1iKTsKLQlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCW91dCA8PCAiICAiOwotCQlkb19vdXRwdXQob3V0LCAqc3ltYiwgaXQtPnNlY29uZCwgYywgZGlmZl9hcnJheV90KCksIHRydWUpOwotCX0KLX0KLQotIAotY2dfZm9ybWF0dGVyOjpjZ19mb3JtYXR0ZXIoY2FsbGdyYXBoX2NvbnRhaW5lciBjb25zdCAmIHByb2ZpbGUpCi17Ci0JY291bnRzLnRvdGFsID0gcHJvZmlsZS5zYW1wbGVzX2NvdW50KCk7Ci19Ci0KLQotdm9pZCBjZ19mb3JtYXR0ZXI6Om91dHB1dChvc3RyZWFtICYgb3V0LCBjZ19jb2xsZWN0aW9uIGNvbnN0ICYgc3ltcykKLXsKLQkvLyBhbW91bnQgb2Ygc3BhY2luZyBwcmVmaXhpbmcgY2hpbGQgYW5kIHBhcmVudCBsaW5lcwotCXN0cmluZyBjb25zdCBjaGlsZF9wYXJlbnRfcHJlZml4KCIgICIpOwotCi0Jb3V0cHV0X2hlYWRlcihvdXQpOwotCi0Jb3V0IDw8IHN0cmluZyg3OSwgJy0nKSA8PCBlbmRsOwotCi0JY2dfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQ7Ci0JY2dfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3ltcy5lbmQoKTsKLQotCWZvciAoaXQgPSBzeW1zLmJlZ2luKCk7IGl0IDwgZW5kOyArK2l0KSB7Ci0JCWNnX3N5bWJvbCBjb25zdCAmIHN5bSA9ICppdDsKLQotCQljZ19zeW1ib2w6OmNoaWxkcmVuOjpjb25zdF9pdGVyYXRvciBjaXQ7Ci0JCWNnX3N5bWJvbDo6Y2hpbGRyZW46OmNvbnN0X2l0ZXJhdG9yIGNlbmQgPSBzeW0uY2FsbGVycy5lbmQoKTsKLQotCQljb3VudHNfdCBjOwotCQlpZiAoZ2xvYmFsX3BlcmNlbnQpCi0JCQljLnRvdGFsID0gY291bnRzLnRvdGFsOwotCQllbHNlCi0JCQljLnRvdGFsID0gc3ltLnRvdGFsX2NhbGxlcl9jb3VudDsKLQotCQlmb3IgKGNpdCA9IHN5bS5jYWxsZXJzLmJlZ2luKCk7IGNpdCAhPSBjZW5kOyArK2NpdCkgewotCQkJb3V0IDw8IGNoaWxkX3BhcmVudF9wcmVmaXg7Ci0JCQlkb19vdXRwdXQob3V0LCAqY2l0LCBjaXQtPnNhbXBsZSwgYyk7Ci0JCX0KLQotCQlkb19vdXRwdXQob3V0LCBzeW0sIHN5bS5zYW1wbGUsIGNvdW50cyk7Ci0KLQkJYyA9IGNvdW50c190KCk7Ci0JCWlmIChnbG9iYWxfcGVyY2VudCkKLQkJCWMudG90YWwgPSBjb3VudHMudG90YWw7Ci0JCWVsc2UKLQkJCWMudG90YWwgPSBzeW0udG90YWxfY2FsbGVlX2NvdW50OwotCi0JCWNlbmQgPSBzeW0uY2FsbGVlcy5lbmQoKTsKLQotCQlmb3IgKGNpdCA9IHN5bS5jYWxsZWVzLmJlZ2luKCk7IGNpdCAhPSBjZW5kOyArK2NpdCkgewotCQkJb3V0IDw8IGNoaWxkX3BhcmVudF9wcmVmaXg7Ci0JCQlkb19vdXRwdXQob3V0LCAqY2l0LCBjaXQtPnNhbXBsZSwgYyk7Ci0JCX0KLQotCQlvdXQgPDwgc3RyaW5nKDc5LCAnLScpIDw8IGVuZGw7Ci0JfQotfQotCi0KLWRpZmZfZm9ybWF0dGVyOjpkaWZmX2Zvcm1hdHRlcihkaWZmX2NvbnRhaW5lciBjb25zdCAmIHByb2ZpbGUpCi17Ci0JY291bnRzLnRvdGFsID0gcHJvZmlsZS5zYW1wbGVzX2NvdW50KCk7Ci19Ci0KLQotdm9pZCBkaWZmX2Zvcm1hdHRlcjo6b3V0cHV0KG9zdHJlYW0gJiBvdXQsIGRpZmZfY29sbGVjdGlvbiBjb25zdCAmIHN5bXMpCi17Ci0Jb3V0cHV0X2hlYWRlcihvdXQpOwotCi0JZGlmZl9jb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN5bXMuYmVnaW4oKTsKLQlkaWZmX2NvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN5bXMuZW5kKCk7Ci0JZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLQkJZG9fb3V0cHV0KG91dCwgKml0LCBpdC0+c2FtcGxlLCBjb3VudHMsIGl0LT5kaWZmcyk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgZm9ybWF0X291dHB1dApkaWZmIC0tZ2l0IGEvbGlicHAvZm9ybWF0X291dHB1dC5oIGIvbGlicHAvZm9ybWF0X291dHB1dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODQwNGQ3Li4wMDAwMDAwCi0tLSBhL2xpYnBwL2Zvcm1hdF9vdXRwdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKioKLSAqIEBmaWxlIGZvcm1hdF9vdXRwdXQuaAotICogb3V0cHV0dGluZyBmb3JtYXQgZm9yIHN5bWJvbCBsaXN0cwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgRk9STUFUX09VVFBVVF9ICi0jZGVmaW5lIEZPUk1BVF9PVVRQVVRfSAotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPGlvc2Z3ZD4KLQotI2luY2x1ZGUgImZvcm1hdF9mbGFncy5oIgotI2luY2x1ZGUgInN5bWJvbC5oIgotCi1jbGFzcyBzeW1ib2xfZW50cnk7Ci1jbGFzcyBzYW1wbGVfZW50cnk7Ci1jbGFzcyBjYWxsZ3JhcGhfY29udGFpbmVyOwotY2xhc3MgcHJvZmlsZV9jb250YWluZXI7Ci1jbGFzcyBkaWZmX2NvbnRhaW5lcjsKLQotbmFtZXNwYWNlIGZvcm1hdF9vdXRwdXQgewotCi0vLy8gYmFzZSBjbGFzcyBmb3IgZm9ybWF0dGVyLCBoYW5kbGUgY29tbW9uIG9wdGlvbnMgdG8gZm9ybWF0dGVyCi1jbGFzcyBmb3JtYXR0ZXIgewotcHVibGljOgotCWZvcm1hdHRlcigpOwotCXZpcnR1YWwgfmZvcm1hdHRlcigpOwotCi0JLy8vIGFkZCBhIGdpdmVuIGNvbHVtbgotCXZvaWQgYWRkX2Zvcm1hdChmb3JtYXRfZmxhZ3MgZmxhZyk7Ci0KLQkvLy8gc2V0IHRoZSBuZWVkX2hlYWRlciBib29sZWFuIHRvIGZhbHNlCi0Jdm9pZCBzaG93X2hlYWRlcihib29sKTsKLQkvLy8gZm9ybWF0IGZvciA2NCBiaXQgd2lkZSBWTUFzCi0Jdm9pZCB2bWFfZm9ybWF0XzY0Yml0KGJvb2wpOwotCS8vLyBzaG93IGxvbmcgKGZ1bGwgcGF0aCkgZmlsZW5hbWVzCi0Jdm9pZCBzaG93X2xvbmdfZmlsZW5hbWVzKGJvb2wpOwotCS8vLyB1c2UgZ2xvYmFsIGNvdW50IHJhdGhlciBzeW1ib2wgY291bnQgZm9yIGRldGFpbHMgcGVyY2VudAotCXZvaWQgc2hvd19nbG9iYWxfcGVyY2VudChib29sKTsKLQotCS8qKgotCSAqIFNldCB0aGUgbnVtYmVyIG9mIGNvbGxlY3RlZCBwcm9maWxlIGNsYXNzZXMuIEVhY2ggY2xhc3MKLQkgKiB3aWxsIG91dHB1dCBzYW1wbGUgY291bnQgYW5kIHBlcmNlbnRhZ2UgaW4gZXh0cmEgY29sdW1ucy4KLQkgKgotCSAqIFRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IHRoZSBwcm9maWxlIGluZm9ybWF0aW9uIGhhcyBiZWVuCi0JICogcG9wdWxhdGVkIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBjbGFzc2VzLgotCSAqLwotCXZvaWQgc2V0X25yX2NsYXNzZXMoc2l6ZV90IG5yX2NsYXNzZXMpOwotCi0JLy8vIG91dHB1dCB0YWJsZSBoZWFkZXIsIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgdGhlIHZpcnR1YWwgZnVuY3Rpb24KLQkvLy8gb3V0cHV0X2hlYWRlcl9maWVsZCgpCi0Jdm9pZCBvdXRwdXRfaGVhZGVyKHN0ZDo6b3N0cmVhbSAmIG91dCk7Ci0KLXByb3RlY3RlZDoKLQlzdHJ1Y3QgY291bnRzX3QgewotCQkvLy8gdG90YWwgc2FtcGxlIGNvdW50Ci0JCWNvdW50X2FycmF5X3QgdG90YWw7Ci0JCS8vLyBzYW1wbGVzIHNvIGZhcgotCQljb3VudF9hcnJheV90IGN1bXVsYXRlZF9zYW1wbGVzOwotCQkvLy8gcGVyY2VudGFnZSBzbyBmYXIKLQkJY291bnRfYXJyYXlfdCBjdW11bGF0ZWRfcGVyY2VudDsKLQkJLy8vIGRldGFpbGVkIHBlcmNlbnRhZ2Ugc28gZmFyCi0JCWNvdW50X2FycmF5X3QgY3VtdWxhdGVkX3BlcmNlbnRfZGV0YWlsczsKLQl9OwotCi0JLy8vIGRhdGEgcGFzc2VkIGZvciBvdXRwdXQKLQlzdHJ1Y3QgZmllbGRfZGF0dW0gewotCQlmaWVsZF9kYXR1bShzeW1ib2xfZW50cnkgY29uc3QgJiBzeW0sCi0JCSAgICAgICAgICAgIHNhbXBsZV9lbnRyeSBjb25zdCAmIHMsCi0JCQkgICAgc2l6ZV90IHBjLCBjb3VudHNfdCAmIGMsIGRvdWJsZSBkID0gMC4wKQotCQkJOiBzeW1ib2woc3ltKSwgc2FtcGxlKHMpLCBwY2xhc3MocGMpLAotCQkJICBjb3VudHMoYyksIGRpZmYoZCkge30KLQkJc3ltYm9sX2VudHJ5IGNvbnN0ICYgc3ltYm9sOwotCQlzYW1wbGVfZW50cnkgY29uc3QgJiBzYW1wbGU7Ci0JCXNpemVfdCBwY2xhc3M7Ci0JCW11dGFibGUgY291bnRzX3QgJiBjb3VudHM7Ci0JCWRvdWJsZSBkaWZmOwotCX07Ci0gCi0JLy8vIGZvcm1hdCBjYWxsYmFjayB0eXBlCi0JdHlwZWRlZiBzdGQ6OnN0cmluZyAoZm9ybWF0dGVyOjoqZmN0X2Zvcm1hdCkoZmllbGRfZGF0dW0gY29uc3QgJik7Ci0gCi0JLyoqIEBuYW1lIGZvcm1hdCBmdW5jdGlvbnMuCi0JICogVGhlIHNldCBvZiBmb3JtYXR0aW5nIGZ1bmN0aW9ucywgdXNlZCBpbnRlcm5hbGx5IGJ5IG91dHB1dCgpLgotCSAqLwotCS8vQHsKLQlzdGQ6OnN0cmluZyBmb3JtYXRfdm1hKGZpZWxkX2RhdHVtIGNvbnN0ICYpOwotCXN0ZDo6c3RyaW5nIGZvcm1hdF9zeW1iX25hbWUoZmllbGRfZGF0dW0gY29uc3QgJik7Ci0Jc3RkOjpzdHJpbmcgZm9ybWF0X2ltYWdlX25hbWUoZmllbGRfZGF0dW0gY29uc3QgJik7Ci0Jc3RkOjpzdHJpbmcgZm9ybWF0X2FwcF9uYW1lKGZpZWxkX2RhdHVtIGNvbnN0ICYpOwotCXN0ZDo6c3RyaW5nIGZvcm1hdF9saW5lbnJfaW5mbyhmaWVsZF9kYXR1bSBjb25zdCAmKTsKLQlzdGQ6OnN0cmluZyBmb3JtYXRfbnJfc2FtcGxlcyhmaWVsZF9kYXR1bSBjb25zdCAmKTsKLQlzdGQ6OnN0cmluZyBmb3JtYXRfbnJfY3VtdWxhdGVkX3NhbXBsZXMoZmllbGRfZGF0dW0gY29uc3QgJik7Ci0Jc3RkOjpzdHJpbmcgZm9ybWF0X3BlcmNlbnQoZmllbGRfZGF0dW0gY29uc3QgJik7Ci0Jc3RkOjpzdHJpbmcgZm9ybWF0X2N1bXVsYXRlZF9wZXJjZW50KGZpZWxkX2RhdHVtIGNvbnN0ICYpOwotCXN0ZDo6c3RyaW5nIGZvcm1hdF9wZXJjZW50X2RldGFpbHMoZmllbGRfZGF0dW0gY29uc3QgJik7Ci0Jc3RkOjpzdHJpbmcgZm9ybWF0X2N1bXVsYXRlZF9wZXJjZW50X2RldGFpbHMoZmllbGRfZGF0dW0gY29uc3QgJik7Ci0Jc3RkOjpzdHJpbmcgZm9ybWF0X2RpZmYoZmllbGRfZGF0dW0gY29uc3QgJik7Ci0JLy9AfQotIAotCS8vLyBkZWNyaWJlIG9uZSBmaWVsZCBvZiB0aGUgY29sdW1tbmVkIG91dHB1dC4KLQlzdHJ1Y3QgZmllbGRfZGVzY3JpcHRpb24gewotCQlmaWVsZF9kZXNjcmlwdGlvbigpIHt9Ci0JCWZpZWxkX2Rlc2NyaXB0aW9uKHN0ZDo6c2l6ZV90IHcsIHN0ZDo6c3RyaW5nIGgsIGZjdF9mb3JtYXQgZikKLQkJCTogd2lkdGgodyksIGhlYWRlcl9uYW1lKGgpLCBmb3JtYXR0ZXIoZikge30KLSAKLQkJc3RkOjpzaXplX3Qgd2lkdGg7Ci0JCXN0ZDo6c3RyaW5nIGhlYWRlcl9uYW1lOwotCQlmY3RfZm9ybWF0IGZvcm1hdHRlcjsKLQl9OwotIAotCXR5cGVkZWYgc3RkOjptYXA8Zm9ybWF0X2ZsYWdzLCBmaWVsZF9kZXNjcmlwdGlvbj4gZm9ybWF0X21hcF90OwotCi0JLy8vIGFjdHVhbGx5IGRvIG91dHB1dAotCXZvaWQgZG9fb3V0cHV0KHN0ZDo6b3N0cmVhbSAmIG91dCwgc3ltYm9sX2VudHJ5IGNvbnN0ICYgc3ltYm9sLAotCQkgICAgICBzYW1wbGVfZW50cnkgY29uc3QgJiBzYW1wbGUsIGNvdW50c190ICYgYywKLQkgICAgICAgICAgICAgIGRpZmZfYXJyYXlfdCBjb25zdCAmID0gZGlmZl9hcnJheV90KCksCi0JICAgICAgICAgICAgICBib29sIGhpZGVfaW1tdXRhYmxlX2ZpZWxkID0gZmFsc2UpOwotIAotCS8vLyByZXR1cm5zIHRoZSBuciBvZiBjaGFyIG5lZWRlZCB0byBwYWQgdGhpcyBmaWVsZAotCXNpemVfdCBvdXRwdXRfaGVhZGVyX2ZpZWxkKHN0ZDo6b3N0cmVhbSAmIG91dCwgZm9ybWF0X2ZsYWdzIGZsLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYWRkaW5nKTsKLQotCS8vLyByZXR1cm5zIHRoZSBuciBvZiBjaGFyIG5lZWRlZCB0byBwYWQgdGhpcyBmaWVsZAotCXNpemVfdCBvdXRwdXRfZmllbGQoc3RkOjpvc3RyZWFtICYgb3V0LCBmaWVsZF9kYXR1bSBjb25zdCAmIGRhdHVtLAotCQkJICAgZm9ybWF0X2ZsYWdzIGZsLCBzaXplX3QgcGFkZGluZywKLQkJCSAgIGJvb2wgaGlkZV9pbW11dGFibGUpOwotIAotCS8vLyBzdG9yZXMgZnVuY3RvcnMgZm9yIGRvaW5nIGFjdHVhbCBmb3JtYXR0aW5nCi0JZm9ybWF0X21hcF90IGZvcm1hdF9tYXA7Ci0KLQkvLy8gbnVtYmVyIG9mIHByb2ZpbGUgY2xhc3NlcwotCXNpemVfdCBucl9jbGFzc2VzOwotCi0JLy8vIHRvdGFsIGNvdW50cwotCWNvdW50c190IGNvdW50czsKLQotCS8vLyBmb3JtYXR0aW5nIGZsYWdzIHNldAotCWZvcm1hdF9mbGFncyBmbGFnczsKLQkvLy8gdHJ1ZSBpZiB3ZSBuZWVkIHRvIGZvcm1hdCBhcyA2NCBiaXRzIHF1YW50aXRpZXMKLQlib29sIHZtYV82NDsKLQkvLy8gZmFsc2UgaWYgd2UgdXNlIGJhc2VuYW1lKGZpbGVuYW1lKSBpbiBvdXRwdXQgcmF0aGVyIGZpbGVuYW1lCi0JYm9vbCBsb25nX2ZpbGVuYW1lczsKLQkvLy8gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHNob3cgaGVhZGVyIGJlZm9yZSB0aGUgZmlyc3Qgb3V0cHV0Ci0JYm9vbCBuZWVkX2hlYWRlcjsKLQkvLy8gYm9vbCBpZiBkZXRhaWxzIHBlcmNlbnRhZ2UgYXJlIHJlbGF0aXZlIHRvIHRvdGFsIGNvdW50IHJhdGhlciB0bwotCS8vLyBzeW1ib2wgY291bnQKLQlib29sIGdsb2JhbF9wZXJjZW50OwotfTsKLSAKLQotLy8vIGNsYXNzIHRvIG91dHB1dCBpbiBhIGNvbHVtbmVkIGZvcm1hdCBzeW1ib2xzIGFuZCBhc3NvY2lhdGVkIHNhbXBsZXMKLWNsYXNzIG9wcmVwb3J0X2Zvcm1hdHRlciA6IHB1YmxpYyBmb3JtYXR0ZXIgewotcHVibGljOgotCS8vLyBidWlsZCBhIHJlYWR5IHRvIHVzZSBmb3JtYXR0ZXIKLQlvcHJlcG9ydF9mb3JtYXR0ZXIocHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwcm9maWxlKTsKLQotCS8qKiBvdXRwdXQgYSB2ZWN0b3Igb2Ygc3ltYm9scyB0byBvdXQgYWNjb3JkaW5nIHRvIHRoZSBvdXRwdXQgZm9ybWF0Ci0JICogc3BlY2lmaWVyIHByZXZpb3VzbHkgc2V0IGJ5IGNhbGwocykgdG8gYWRkX2Zvcm1hdCgpICovCi0Jdm9pZCBvdXRwdXQoc3RkOjpvc3RyZWFtICYgb3V0LCBzeW1ib2xfY29sbGVjdGlvbiBjb25zdCAmIHN5bXMpOwotCi0JLy8vIHNldCB0aGUgb3V0cHV0X2RldGFpbHMgYm9vbGVhbgotCXZvaWQgc2hvd19kZXRhaWxzKGJvb2wpOwotCi1wcml2YXRlOgotIAotCS8qKiBvdXRwdXQgb25lIHN5bWJvbCBzeW1iIHRvIG91dCBhY2NvcmRpbmcgdG8gdGhlIG91dHB1dCBmb3JtYXQKLQkgKiBzcGVjaWZpZXIgcHJldmlvdXNseSBzZXQgYnkgY2FsbChzKSB0byBhZGRfZm9ybWF0KCkgKi8KLQl2b2lkIG91dHB1dChzdGQ6Om9zdHJlYW0gJiBvdXQsIHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWIpOwotCi0JLy8vIG91dHB1dCBkZXRhaWxzIGZvciB0aGUgc3ltYm9sCi0Jdm9pZCBvdXRwdXRfZGV0YWlscyhzdGQ6Om9zdHJlYW0gJiBvdXQsIHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWIpOwotIAotCS8vLyBjb250YWluZXIgd2Ugd29yayBmcm9tCi0JcHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwcm9maWxlOwotIAotCS8vLyB0cnVlIGlmIHdlIG5lZWQgdG8gc2hvdyBkZXRhaWxzIGZvciBlYWNoIHN5bWJvbHMKLQlib29sIG5lZWRfZGV0YWlsczsKLX07Ci0KLQotLy8vIGNsYXNzIHRvIG91dHB1dCBpbiBhIGNvbHVtbmVkIGZvcm1hdCBjYWxsZXIvY2FsbGVlIGFuZCBhc3NvY2lhdGVkIHNhbXBsZXMKLWNsYXNzIGNnX2Zvcm1hdHRlciA6IHB1YmxpYyBmb3JtYXR0ZXIgewotcHVibGljOgotCS8vLyBidWlsZCBhIHJlYWR5IHRvIHVzZSBmb3JtYXR0ZXIKLQljZ19mb3JtYXR0ZXIoY2FsbGdyYXBoX2NvbnRhaW5lciBjb25zdCAmIHByb2ZpbGUpOwotCi0JLyoqIG91dHB1dCBjYWxsZ3JhcGggaW5mb3JtYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBwcmV2aW91c2x5IGZvcm1hdAotCSAqIHNwZWNpZmllciBzZXQgYnkgY2FsbChzKSB0byBhZGRfZm9ybWF0KCkgKi8KLQl2b2lkIG91dHB1dChzdGQ6Om9zdHJlYW0gJiBvdXQsIGNnX2NvbGxlY3Rpb24gY29uc3QgJiBzeW1zKTsKLX07Ci0KLS8vLyBjbGFzcyB0byBvdXRwdXQgYSBjb2x1bW5lZCBmb3JtYXQgc3ltYm9scyBwbHVzIGRpZmYgdmFsdWVzCi1jbGFzcyBkaWZmX2Zvcm1hdHRlciA6IHB1YmxpYyBmb3JtYXR0ZXIgewotcHVibGljOgotCS8vLyBidWlsZCBhIHJlYWR5IHRvIHVzZSBmb3JtYXR0ZXIKLQlkaWZmX2Zvcm1hdHRlcihkaWZmX2NvbnRhaW5lciBjb25zdCAmIHByb2ZpbGUpOwotCi0JLyoqCi0JICogT3V0cHV0IGEgdmVjdG9yIG9mIHN5bWJvbHMgdG8gb3V0IGFjY29yZGluZyB0byB0aGUgb3V0cHV0Ci0JICogZm9ybWF0IHNwZWNpZmllciBwcmV2aW91c2x5IHNldCBieSBjYWxsKHMpIHRvIGFkZF9mb3JtYXQoKQotCSAqLwotCXZvaWQgb3V0cHV0KHN0ZDo6b3N0cmVhbSAmIG91dCwgZGlmZl9jb2xsZWN0aW9uIGNvbnN0ICYgc3ltcyk7Ci0KLXByaXZhdGU6Ci0JLy8vIG91dHB1dCBhIHNpbmdsZSBzeW1ib2wKLQl2b2lkIG91dHB1dChzdGQ6Om9zdHJlYW0gJiBvdXQsIGRpZmZfc3ltYm9sIGNvbnN0ICYgc3ltKTsKLQotfTsKLQotfSAvLyBuYW1lc3BhY2UgZm9ybWF0X291dHB1dCAKLQotI2VuZGlmIC8qICFGT1JNQVRfT1VUUFVUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnBwL2ltYWdlX2Vycm9ycy5jcHAgYi9saWJwcC9pbWFnZV9lcnJvcnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTYwYmU2Li4wMDAwMDAwCi0tLSBhL2xpYnBwL2ltYWdlX2Vycm9ycy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioKLSAqIEBmaWxlIGltYWdlX2Vycm9ycy5jcHAKLSAqIFJlcG9ydCBlcnJvcnMgaW4gaW1hZ2VzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlICJpbWFnZV9lcnJvcnMuaCIKLQotI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKLSNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHNldD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIHsKLQotc2V0PHN0cmluZz4gcmVwb3J0ZWRfaW1hZ2VzX2Vycm9yOwotCi19Ci0KLXZvaWQgcmVwb3J0X2ltYWdlX2Vycm9yKHN0cmluZyBjb25zdCAmIGltYWdlLCBpbWFnZV9lcnJvciBlcnJvciwgYm9vbCBmYXRhbCkKLXsKLQlpZiAoZXJyb3IgPT0gaW1hZ2Vfb2spCi0JCXJldHVybjsKLQotCWlmIChyZXBvcnRlZF9pbWFnZXNfZXJyb3IuZmluZChpbWFnZSkgPT0gcmVwb3J0ZWRfaW1hZ2VzX2Vycm9yLmVuZCgpKSB7Ci0JCXJlcG9ydGVkX2ltYWdlc19lcnJvci5pbnNlcnQoaW1hZ2UpOwotCi0JCS8vIEZJWE1FOiBoYWNreQotCQlpZiAoZXJyb3IgPT0gaW1hZ2Vfbm90X2ZvdW5kICYmIGlzX3ByZWZpeChpbWFnZSwgImFub24gIikpCi0JCQlyZXR1cm47Ci0KLQkJY2VyciA8PCAoZmF0YWwgPyAiZXJyb3I6ICIgOiAid2FybmluZzogIik7Ci0JCWNlcnIgPDwgaW1hZ2UgPDwgJyAnOwotCi0JCXN3aXRjaCAoZXJyb3IpIHsKLQkJCWNhc2UgaW1hZ2Vfbm90X2ZvdW5kOgotCQkJCWNlcnIgPDwgImNvdWxkIG5vdCBiZSBmb3VuZC5cbiI7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgaW1hZ2VfdW5yZWFkYWJsZToKLQkJCQljZXJyIDw8ICJjb3VsZCBub3QgYmUgcmVhZC5cbiI7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgaW1hZ2VfbXVsdGlwbGVfbWF0Y2g6Ci0JCQkJY2VyciA8PCAibWF0Y2hlcyBtb3JlIHRoYW4gb25lIGZpbGU6ICIKLQkJCQkgICAgImRldGFpbGVkIHByb2ZpbGUgd2lsbCBub3QgYmUgcHJvdmlkZWQuXG4iOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIGltYWdlX2Zvcm1hdF9mYWlsdXJlOgotCQkJCWNlcnIgPDwgImlzIG5vdCBpbiBhIHVzYWJsZSBiaW5hcnkgZm9ybWF0LlxuIjsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBpbWFnZV9vazoKLQkJCQlicmVhazsKLQkJfQotCX0KLX0KLQotCi12b2lkIHJlcG9ydF9pbWFnZV9lcnJvcihpbnZlcnRlZF9wcm9maWxlIGNvbnN0ICYgcHJvZmlsZSwgYm9vbCBmYXRhbCkKLXsKLQlyZXBvcnRfaW1hZ2VfZXJyb3IocHJvZmlsZS5pbWFnZSwgcHJvZmlsZS5lcnJvciwgZmF0YWwpOwotfQotCi0KLXZvaWQgcmVwb3J0X2ltYWdlX2Vycm9ycyhsaXN0PGludmVydGVkX3Byb2ZpbGU+IGNvbnN0ICYgcGxpc3QpCi17Ci0JbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbGlzdC5iZWdpbigpOwotCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IHBsaXN0LmVuZCgpOwotCi0JZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotCQlyZXBvcnRfaW1hZ2VfZXJyb3IoKml0LCBmYWxzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGlicHAvaW1hZ2VfZXJyb3JzLmggYi9saWJwcC9pbWFnZV9lcnJvcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyNmQ5MC4uMDAwMDAwMAotLS0gYS9saWJwcC9pbWFnZV9lcnJvcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKgotICogQGZpbGUgaW1hZ2VfZXJyb3JzLmgKLSAqIFJlcG9ydCBlcnJvcnMgaW4gaW1hZ2VzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgSU1BR0VfRVJST1JTX0gKLSNkZWZpbmUgSU1BR0VfRVJST1JTX0gKLQotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi1jbGFzcyBpbnZlcnRlZF9wcm9maWxlOwotCi0vLy8gcG9zc2libGUgcmVhc29ucyB3aHkgd2UgY2FuJ3QgcmVhZCBhIGJpbmFyeSBpbWFnZQotZW51bSBpbWFnZV9lcnJvciB7Ci0JaW1hZ2Vfb2sgPSAwLAotCWltYWdlX25vdF9mb3VuZCwKLQlpbWFnZV91bnJlYWRhYmxlLAotCWltYWdlX2Zvcm1hdF9mYWlsdXJlLAotCWltYWdlX211bHRpcGxlX21hdGNoCi19OwotCi0vLy8gb3V0cHV0IHdoeSB0aGUgaW1hZ2UgcGFzc2VkIGNhbid0IGJlIHJlYWQgdG8gc3RkZXJyLCB3ZSB3YXJyYW50eSBvbmx5IG9uZQotLy8vIGVycm9yIHJlcG9ydCBieSBpbWFnZSBuYW1lLgotdm9pZAotcmVwb3J0X2ltYWdlX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0ICYgaW1hZ2UsIGltYWdlX2Vycm9yIGVycm9yLCBib29sIGZhdGFsKTsKLQotLy8vIG91dHB1dCB3aHkgdGhlIGltYWdlIHBhc3NlZCBjYW4ndCBiZSByZWFkIHRvIHN0ZGVycgotdm9pZCByZXBvcnRfaW1hZ2VfZXJyb3IoaW52ZXJ0ZWRfcHJvZmlsZSBjb25zdCAmIHByb2ZpbGUsIGJvb2wgZmF0YWwpOwotCi0vLy8gb3V0cHV0IHdoeSBhbnkgYmFkIGltYWdlcyBjYW4ndCBiZSByZWFkIHRvIHN0ZGVycgotdm9pZCByZXBvcnRfaW1hZ2VfZXJyb3JzKHN0ZDo6bGlzdDxpbnZlcnRlZF9wcm9maWxlPiBjb25zdCAmIHBsaXN0KTsKLQotI2VuZGlmIC8qIElNQUdFX0VSUk9SU19IICovCmRpZmYgLS1naXQgYS9saWJwcC9sb2NhdGVfaW1hZ2VzLmNwcCBiL2xpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmIxNGIzLi4wMDAwMDAwCi0tLSBhL2xpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKgotICogQGZpbGUgbG9jYXRlX2ltYWdlcy5jcHAKLSAqIENvbW1hbmQtbGluZSBoZWxwZXIKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaW5jbHVkZSAiZmlsZV9tYW5pcC5oIgotI2luY2x1ZGUgImxvY2F0ZV9pbWFnZXMuaCIKLQotI2luY2x1ZGUgPGNlcnJubz4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLQotdm9pZCBleHRyYV9pbWFnZXM6OnBvcHVsYXRlKHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgcGF0aHMpCi17Ci0JdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNpdCA9IHBhdGhzLmJlZ2luKCk7Ci0JdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhdGhzLmVuZCgpOwotCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgewotCQlzdHJpbmcgY29uc3QgcGF0aCA9IG9wX3JlYWxwYXRoKCpjaXQpOwotCQlsaXN0PHN0cmluZz4gZmlsZV9saXN0OwotCQljcmVhdGVfZmlsZV9saXN0KGZpbGVfbGlzdCwgcGF0aCwgIioiLCB0cnVlKTsKLQkJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBsaXQgPSBmaWxlX2xpc3QuYmVnaW4oKTsKLQkJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBsZW5kID0gZmlsZV9saXN0LmVuZCgpOwotCQlmb3IgKDsgbGl0ICE9IGxlbmQ7ICsrbGl0KSB7Ci0JCQl2YWx1ZV90eXBlIHYob3BfYmFzZW5hbWUoKmxpdCksIG9wX2Rpcm5hbWUoKmxpdCkpOwotCQkJaW1hZ2VzLmluc2VydCh2KTsKLQkJfQotCX0KLX0KLQotCi12ZWN0b3I8c3RyaW5nPiBjb25zdCBleHRyYV9pbWFnZXM6OmZpbmQoc3RyaW5nIGNvbnN0ICYgbmFtZSkgY29uc3QKLXsKLQlleHRyYV9pbWFnZXM6Om1hdGNoZXIgbWF0Y2gobmFtZSk7Ci0JcmV0dXJuIGZpbmQobWF0Y2gpOwotfQotCi0KLXZlY3RvcjxzdHJpbmc+IGNvbnN0Ci1leHRyYV9pbWFnZXM6OmZpbmQoZXh0cmFfaW1hZ2VzOjptYXRjaGVyIGNvbnN0ICYgbWF0Y2gpIGNvbnN0Ci17Ci0JdmVjdG9yPHN0cmluZz4gbWF0Y2hlczsKLQotCWNvbnN0X2l0ZXJhdG9yIGNpdCA9IGltYWdlcy5iZWdpbigpOwotCWNvbnN0X2l0ZXJhdG9yIGVuZCA9IGltYWdlcy5lbmQoKTsKLQotCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgewotCQlpZiAobWF0Y2goY2l0LT5maXJzdCkpCi0JCQltYXRjaGVzLnB1c2hfYmFjayhjaXQtPnNlY29uZCArICcvJyArIGNpdC0+Zmlyc3QpOwotCX0KLQotCXJldHVybiBtYXRjaGVzOwotfQotCi0KLW5hbWVzcGFjZSB7Ci0KLS8qKgotICogRnVuY3Rpb24gb2JqZWN0IGZvciBtYXRjaGluZyBhIG1vZHVsZSBmaWxlbmFtZSwgd2hpY2gKLSAqIGhhcyBpdHMgb3duIHNwZWNpYWwgbWFuZ2xpbmcgcnVsZXMgaW4gMi42IGtlcm5lbHMuCi0gKi8KLXN0cnVjdCBtb2R1bGVfbWF0Y2hlciA6IHB1YmxpYyBleHRyYV9pbWFnZXM6Om1hdGNoZXIgewotcHVibGljOgotCWV4cGxpY2l0IG1vZHVsZV9tYXRjaGVyKHN0cmluZyBjb25zdCAmIHMpCi0JCTogZXh0cmFfaW1hZ2VzOjptYXRjaGVyKHMpIHt9Ci0KLQl2aXJ0dWFsIGJvb2wgb3BlcmF0b3IoKShzdHJpbmcgY29uc3QgJiBjYW5kaWRhdGUpIGNvbnN0IHsKLQkJaWYgKGNhbmRpZGF0ZS5sZW5ndGgoKSAhPSB2YWx1ZS5sZW5ndGgoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlmb3IgKHN0cmluZzo6c2l6ZV90eXBlIGkgPSAwIDsgaSA8IHZhbHVlLmxlbmd0aCgpIDsgKytpKSB7Ci0JCQlpZiAodmFsdWVbaV0gPT0gY2FuZGlkYXRlW2ldKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHZhbHVlW2ldID09ICdfJyAmJgotCQkJCShjYW5kaWRhdGVbaV0gPT0gJywnIHx8IGNhbmRpZGF0ZVtpXSA9PSAnLScpKQotCQkJCWNvbnRpbnVlOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJcmV0dXJuIHRydWU7Ci0JfQotfTsKLQotfSAvLyBhbm9uIG5hbWVzcGFjZQotCi0KLXN0cmluZyBjb25zdCBmaW5kX2ltYWdlX3BhdGgoc3RyaW5nIGNvbnN0ICYgYXJjaGl2ZV9wYXRoLAotCQkJICAgICBzdHJpbmcgY29uc3QgJiBpbWFnZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYV9pbWFnZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2Vycm9yICYgZXJyb3IpCi17Ci0JZXJyb3IgPSBpbWFnZV9vazsKLQotCXN0cmluZyBjb25zdCBpbWFnZSA9IG9wX3JlYWxwYXRoKGFyY2hpdmVfcGF0aCArIGltYWdlX25hbWUpOwotCi0JLy8gc2ltcGxlc3QgY2FzZQotCWlmIChvcF9maWxlX3JlYWRhYmxlKGltYWdlKSkgewotCQllcnJvciA9IGltYWdlX29rOwotCQlyZXR1cm4gaW1hZ2VfbmFtZTsKLQl9Ci0KLQlpZiAoZXJybm8gPT0gRUFDQ0VTKSB7Ci0JCWVycm9yID0gaW1hZ2VfdW5yZWFkYWJsZTsKLQkJcmV0dXJuIGltYWdlX25hbWU7Ci0JfQotCi0Jc3RyaW5nIGNvbnN0IGJhc2UgPSBvcF9iYXNlbmFtZShpbWFnZSk7Ci0KLQl2ZWN0b3I8c3RyaW5nPiByZXN1bHQgPSBleHRyYV9pbWFnZXMuZmluZChiYXNlKTsKLQotCS8vIG5vdCBmb3VuZCwgdHJ5IGEgbW9kdWxlIHNlYXJjaAotCWlmIChyZXN1bHQuZW1wdHkoKSkKLQkJcmVzdWx0ID0gZXh0cmFfaW1hZ2VzLmZpbmQobW9kdWxlX21hdGNoZXIoYmFzZSArICIua28iKSk7Ci0KLQlpZiAocmVzdWx0LmVtcHR5KCkpIHsKLQkJZXJyb3IgPSBpbWFnZV9ub3RfZm91bmQ7Ci0JCXJldHVybiBpbWFnZV9uYW1lOwotCX0KLQotCWlmIChyZXN1bHQuc2l6ZSgpID4gMSkgewotCQllcnJvciA9IGltYWdlX211bHRpcGxlX21hdGNoOwotCQlyZXR1cm4gaW1hZ2VfbmFtZTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0WzBdOwotfQpkaWZmIC0tZ2l0IGEvbGlicHAvbG9jYXRlX2ltYWdlcy5oIGIvbGlicHAvbG9jYXRlX2ltYWdlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDAzZjllLi4wMDAwMDAwCi0tLSBhL2xpYnBwL2xvY2F0ZV9pbWFnZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKgotICogQGZpbGUgbG9jYXRlX2ltYWdlcy5oCi0gKiBMb2NhdGlvbiBvZiBiaW5hcnkgaW1hZ2VzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBMT0NBVEVfSU1BR0VTX0gKLSNkZWZpbmUgTE9DQVRFX0lNQUdFU19ICi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImltYWdlX2Vycm9ycy5oIgotCi0vKioKLSAqIEEgY2xhc3MgY29udGFpbmluZyBtYXBwaW5ncyBmcm9tIGFuIGltYWdlIGJhc2VuYW1lLAotICogc3VjaCBhcyAnZmxvcHB5LmtvJywgdG8gbG9jYXRpb25zIGluIHRoZSBwYXRocyBwYXNzZWQKLSAqIGluIHRvIHBvcHVsYXRlKCkuCi0gKgotICogVGhlIG5hbWUgbWF5IGV4aXN0IG11bHRpcGxlIHRpbWVzOyBhbGwgbG9jYXRpb25zIGFyZSByZWNvcmRlZAotICogaW4gdGhpcyBjb250YWluZXIuCi0gKi8KLWNsYXNzIGV4dHJhX2ltYWdlcyB7Ci1wdWJsaWM6Ci0JLy8vIGFkZCBhbGwgZmlsZW5hbWVzIGZvdW5kIGluIHRoZSBnaXZlbiBwYXRocywgcmVjdXJzaXZlbHkKLQl2b2lkIHBvcHVsYXRlKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCAmIHBhdGhzKTsJCi0KLQkvLy8gYmFzZSBjbGFzcyBmb3IgbWF0Y2hlciBmdW5jdG9ycyBvYmplY3QKLQlzdHJ1Y3QgbWF0Y2hlciB7Ci0JCXN0ZDo6c3RyaW5nIGNvbnN0ICYgdmFsdWU7Ci0JcHVibGljOgotCQlleHBsaWNpdCBtYXRjaGVyKHN0ZDo6c3RyaW5nIGNvbnN0ICYgdikgOiB2YWx1ZSh2KSB7fQotCQl2aXJ0dWFsIH5tYXRjaGVyKCkge30KLQkJLy8vIGRlZmF1bHQgZnVuY3RvciBhbGxvd2luZyB0cml2aWFsIG1hdGNoCi0JCXZpcnR1YWwgYm9vbCBvcGVyYXRvcigpKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKSBjb25zdCB7Ci0JCQlyZXR1cm4gc3RyID09IHZhbHVlOwotCQl9Ci0JfTsKLQotCS8qKgotCSAqIHJldHVybiBhIHZlY3RvciBvZiBhbGwgZGlyZWN0b3JpZXMgdGhhdCBtYXRjaCB0aGUgZnVuY3RvcgotCSAqLwotCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCBmaW5kKG1hdGNoZXIgY29uc3QgJiBtYXRjaCkgY29uc3Q7Ci0KLQkvLy8gcmV0dXJuIGEgdmVjdG9yIG9mIGFsbCBkaXJlY3RvcmllcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBuYW1lCi0Jc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0IGZpbmQoc3RkOjpzdHJpbmcgY29uc3QgJiBuYW1lKSBjb25zdDsKLQotcHJpdmF0ZToKLQl0eXBlZGVmIHN0ZDo6bXVsdGltYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBpbWFnZXNfdDsKLQl0eXBlZGVmIGltYWdlc190Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7Ci0JdHlwZWRlZiBpbWFnZXNfdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0KLQkvLy8gbWFwIGZyb20gaW1hZ2UgYmFzZW5hbWUgdG8gb3duaW5nIGRpcmVjdG9yeQotCWltYWdlc190IGltYWdlczsKLX07Ci0KLS8qKgotICogQHBhcmFtIGFyY2hpdmVfcGF0aCBhcmNoaXZlIHByZWZpeCBwYXRoCi0gKiBAcGFyYW0gZXh0cmFfaW1hZ2VzIGNvbnRhaW5lciB3aGVyZSBhbGwgZXh0cmEgY2FuZGlkYXRlIGZpbGVuYW1lcyBhcmUgc3RvcmVkCi0gKiBAcGFyYW0gaW1hZ2VfbmFtZSBiaW5hcnkgaW1hZ2UgbmFtZQotICogQHBhcmFtIGVycm9yIGVycm9ycyBhcmUgZmxhZ2dlZCBpbiB0aGlzIHBhc3NlZCBlbnVtIHJlZgotICoKLSAqIExvY2F0ZSBhIChudW1iZXIgb2YpIG1hdGNoaW5nIGFic29sdXRlIHBhdGhzIHRvIHRoZSBnaXZlbiBpbWFnZSBuYW1lLgotICogSWYgd2UgZmFpbCB0byBmaW5kIHRoZSBmaWxlIHdlIGZpbGwgaW4gZXJyb3IgYW5kIHJldHVybiB0aGUgb3JpZ2luYWwgc3RyaW5nLgotICovCi1zdGQ6OnN0cmluZyBjb25zdAotZmluZF9pbWFnZV9wYXRoKHN0ZDo6c3RyaW5nIGNvbnN0ICYgYXJjaGl2ZV9wYXRoLAotCQlzdGQ6OnN0cmluZyBjb25zdCAmIGltYWdlX25hbWUsCi0gICAgICAgICAgICAgICAgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmFfaW1hZ2VzLAotICAgICAgICAgICAgICAgIGltYWdlX2Vycm9yICYgZXJyb3IpOwotCi0jZW5kaWYgLyogTE9DQVRFX0lNQUdFU19IICovCmRpZmYgLS1naXQgYS9saWJwcC9uYW1lX3N0b3JhZ2UuY3BwIGIvbGlicHAvbmFtZV9zdG9yYWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTllMGU5MC4uMDAwMDAwMAotLS0gYS9saWJwcC9uYW1lX3N0b3JhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBuYW1lX3N0b3JhZ2UuY3BwCi0gKiBTdG9yYWdlIG9mIGdsb2JhbCBuYW1lcyAoZmlsZW5hbWVzIGFuZCBzeW1ib2xzKQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0KLSNpbmNsdWRlICJuYW1lX3N0b3JhZ2UuaCIKLSNpbmNsdWRlICJkZW1hbmdsZV9zeW1ib2wuaCIKLSNpbmNsdWRlICJmaWxlX21hbmlwLmgiCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWltYWdlX25hbWVfc3RvcmFnZSBpbWFnZV9uYW1lczsKLWRlYnVnX25hbWVfc3RvcmFnZSBkZWJ1Z19uYW1lczsKLXN5bWJvbF9uYW1lX3N0b3JhZ2Ugc3ltYm9sX25hbWVzOwotCi0KLXN0cmluZyBjb25zdCAmIGltYWdlX25hbWVfc3RvcmFnZTo6YmFzZW5hbWUoaW1hZ2VfbmFtZV9pZCBpZCkgY29uc3QKLXsKLQlzdG9yZWRfbmFtZSBjb25zdCAmIG4gPSBnZXQoaWQpOwotCWlmIChuLm5hbWVfcHJvY2Vzc2VkLmVtcHR5KCkpIHsKLQkJbi5uYW1lX3Byb2Nlc3NlZCA9IG9wX2Jhc2VuYW1lKG4ubmFtZSk7Ci0JfQotCXJldHVybiBuLm5hbWVfcHJvY2Vzc2VkOwotfQotCi0KLXN0cmluZyBjb25zdCAmIGRlYnVnX25hbWVfc3RvcmFnZTo6YmFzZW5hbWUoZGVidWdfbmFtZV9pZCBpZCkgY29uc3QKLXsKLQlzdG9yZWRfbmFtZSBjb25zdCAmIG4gPSBnZXQoaWQpOwotCWlmIChuLm5hbWVfcHJvY2Vzc2VkLmVtcHR5KCkpIHsKLQkJbi5uYW1lX3Byb2Nlc3NlZCA9IG9wX2Jhc2VuYW1lKG4ubmFtZSk7Ci0JfQotCXJldHVybiBuLm5hbWVfcHJvY2Vzc2VkOwotfQotCi0KLXN0cmluZyBjb25zdCAmIHN5bWJvbF9uYW1lX3N0b3JhZ2U6OmRlbWFuZ2xlKHN5bWJvbF9uYW1lX2lkIGlkKSBjb25zdAotewotCXN0b3JlZF9uYW1lIGNvbnN0ICYgbiA9IGdldChpZCk7Ci0JaWYgKCFuLm5hbWVfcHJvY2Vzc2VkLmVtcHR5KCkgfHwgbi5uYW1lLmVtcHR5KCkpCi0JCXJldHVybiBuLm5hbWVfcHJvY2Vzc2VkOwotCi0JaWYgKG4ubmFtZVswXSAhPSAnPycpIHsKLQkJbi5uYW1lX3Byb2Nlc3NlZCA9IGRlbWFuZ2xlX3N5bWJvbChuLm5hbWUpOwotCQlyZXR1cm4gbi5uYW1lX3Byb2Nlc3NlZDsKLQl9Ci0KLQlpZiAobi5uYW1lLmxlbmd0aCgpIDwgMiB8fCBuLm5hbWVbMV0gIT0gJz8nKSB7Ci0JCW4ubmFtZV9wcm9jZXNzZWQgPSAiKG5vIHN5bWJvbHMpIjsKLQkJcmV0dXJuIG4ubmFtZV9wcm9jZXNzZWQ7Ci0JfQotCQotCW4ubmFtZV9wcm9jZXNzZWQgPSAiYW5vbnltb3VzIHN5bWJvbCBmcm9tIHNlY3Rpb24gIjsKLQluLm5hbWVfcHJvY2Vzc2VkICs9IGx0cmltKG4ubmFtZSwgIj8iKTsKLQlyZXR1cm4gbi5uYW1lX3Byb2Nlc3NlZDsKLX0KZGlmZiAtLWdpdCBhL2xpYnBwL25hbWVfc3RvcmFnZS5oIGIvbGlicHAvbmFtZV9zdG9yYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjc4Y2IuLjAwMDAwMDAKLS0tIGEvbGlicHAvbmFtZV9zdG9yYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBuYW1lX3N0b3JhZ2UuaAotICogVHlwZS1zYWZlIHVuaXF1ZSBzdG9yYWdlIG9mIGdsb2JhbCBuYW1lcyAoZmlsZW5hbWVzIGFuZCBzeW1ib2xzKQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgTkFNRV9TVE9SQUdFX0gKLSNkZWZpbmUgTkFNRV9TVE9SQUdFX0gKLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgInVuaXF1ZV9zdG9yYWdlLmgiCi0KLS8vLyBzdG9yZSBvcmlnaW5hbCBuYW1lIGFuZCBwcm9jZXNzZWQgbmFtZQotc3RydWN0IHN0b3JlZF9uYW1lIHsKLQlzdG9yZWRfbmFtZShzdGQ6OnN0cmluZyBjb25zdCAmIG4gPSBzdGQ6OnN0cmluZygpKQotCQk6IG5hbWUobikge30KLQotCWJvb2wgb3BlcmF0b3I8KHN0b3JlZF9uYW1lIGNvbnN0ICYgcmhzKSBjb25zdCB7Ci0JCXJldHVybiBuYW1lIDwgcmhzLm5hbWU7Ci0JfQotCi0Jc3RkOjpzdHJpbmcgbmFtZTsKLQltdXRhYmxlIHN0ZDo6c3RyaW5nIG5hbWVfcHJvY2Vzc2VkOwotfTsKLQotCi0vLy8gcGFydGlhbCBzcGVjaWFsaXphdGlvbiBmb3IgdW5pcXVlIHN0b3JhZ2Ugb2YgbmFtZXMKLXRlbXBsYXRlIDx0eXBlbmFtZSBJPiBzdHJ1Y3QgbmFtZV9zdG9yYWdlIDogdW5pcXVlX3N0b3JhZ2U8SSwgc3RvcmVkX25hbWU+IHsKLQotCXR5cGVkZWYgdHlwZW5hbWUgdW5pcXVlX3N0b3JhZ2U8SSwgc3RvcmVkX25hbWU+OjppZF92YWx1ZSBpZF92YWx1ZTsKLQotCXN0ZDo6c3RyaW5nIGNvbnN0ICYgbmFtZShpZF92YWx1ZSBjb25zdCAmIGlkKSBjb25zdCB7Ci0JCXJldHVybiB1bmlxdWVfc3RvcmFnZTxJLCBzdG9yZWRfbmFtZT46OmdldChpZCkubmFtZTsKLQl9OwotfTsKLQotCi1jbGFzcyBkZWJ1Z19uYW1lX3RhZzsKLS8vLyBhIGRlYnVnIGZpbGVuYW1lCi10eXBlZGVmIG5hbWVfc3RvcmFnZTxkZWJ1Z19uYW1lX3RhZz46OmlkX3ZhbHVlIGRlYnVnX25hbWVfaWQ7Ci0KLS8vLyBjbGFzcyBzdG9yaW5nIGEgc2V0IG9mIHNoYXJlZCBkZWJ1ZyBuYW1lIChzb3VyY2UgZmlsZW5hbWUpCi1zdHJ1Y3QgZGVidWdfbmFtZV9zdG9yYWdlIDogbmFtZV9zdG9yYWdlPGRlYnVnX25hbWVfdGFnPiB7Ci0JLy8vIHJldHVybiB0aGUgYmFzZW5hbWUgZm9yIHRoZSBnaXZlbiBJRAotCXN0ZDo6c3RyaW5nIGNvbnN0ICYgYmFzZW5hbWUoZGVidWdfbmFtZV9pZCBpZCkgY29uc3Q7Ci19OwotCi0KLWNsYXNzIGltYWdlX25hbWVfdGFnOwotLy8vIGFuIGltYWdlIG5hbWUKLXR5cGVkZWYgbmFtZV9zdG9yYWdlPGltYWdlX25hbWVfdGFnPjo6aWRfdmFsdWUgaW1hZ2VfbmFtZV9pZDsKLQotLy8vIGNsYXNzIHN0b3JpbmcgYSBzZXQgb2Ygc2hhcmVkIGltYWdlIG5hbWUKLXN0cnVjdCBpbWFnZV9uYW1lX3N0b3JhZ2UgOiBuYW1lX3N0b3JhZ2U8aW1hZ2VfbmFtZV90YWc+IHsKLQkvLy8gcmV0dXJuIHRoZSBiYXNlbmFtZSBuYW1lIGZvciB0aGUgZ2l2ZW4gSUQKLQlzdGQ6OnN0cmluZyBjb25zdCAmIGJhc2VuYW1lKGltYWdlX25hbWVfaWQpIGNvbnN0OwotfTsKLQotCi1jbGFzcyBzeW1ib2xfbmFtZV90YWc7Ci0vLy8gYSAoZGVtYW5nbGVkKSBzeW1ib2wKLXR5cGVkZWYgbmFtZV9zdG9yYWdlPHN5bWJvbF9uYW1lX3RhZz46OmlkX3ZhbHVlIHN5bWJvbF9uYW1lX2lkOwotCi0vLy8gY2xhc3Mgc3RvcmluZyBhIHNldCBvZiBzaGFyZWQgc3ltYm9sIG5hbWUKLXN0cnVjdCBzeW1ib2xfbmFtZV9zdG9yYWdlIDogbmFtZV9zdG9yYWdlPHN5bWJvbF9uYW1lX3RhZz4gewotCS8vLyByZXR1cm4gdGhlIGRlbWFuZ2xlZCBuYW1lIGZvciB0aGUgZ2l2ZW4gSUQKLQlzdGQ6OnN0cmluZyBjb25zdCAmIGRlbWFuZ2xlKHN5bWJvbF9uYW1lX2lkIGlkKSBjb25zdDsKLX07Ci0KLQotLy8vIGZvciBpbWFnZXMKLWV4dGVybiBpbWFnZV9uYW1lX3N0b3JhZ2UgaW1hZ2VfbmFtZXM7Ci0KLS8vLyBmb3IgZGVidWcgZmlsZW5hbWVzIGkuZS4gc291cmNlIGZpbGVuYW1lCi1leHRlcm4gZGVidWdfbmFtZV9zdG9yYWdlIGRlYnVnX25hbWVzOwotCi0vLy8gZm9yIHN5bWJvbHMKLWV4dGVybiBzeW1ib2xfbmFtZV9zdG9yYWdlIHN5bWJvbF9uYW1lczsKLQotCi0vKioKLSAqIGRlYnVnIG5hbWUgc3BlY2lhbGlzYXRpb24gZm9yIGNvbXBhcmlzb24uCi0gKgotICogV2UgY29tcGFyZSBieSBuYW1lIHJhdGhlciBieSBpZCBzaW5jZSB3aGF0IHVzZXIgd2lsbCBzZWUgYXJlCi0gKiBmaWxlbmFtZSBhbmQgd2hlbiB0aGUgY3JpdGVyaWEgInNhbXBsZXMgY291bnQiIGdpdmUgaWRlbnRpY2FsCi0gKiByZXN1bHQgaXQncyBiZXR0ZXIgdG8gb2J0YWluIHJlc3VsdCBzb3J0ZWQgYnkgdGhlIHVzZXIgdmlzaWJsZQotICogcHJvcGVydHkgZmlsZW5hbWUgcmF0aGVyIHRoYW4gYnkgYW4gb2JzY3VyZSwgaW52aXNpYmxlIGZyb20gdXNlcgotICogcG9pbnQgb2YgdmlldywgZmlsZSBpZGVudGlmaWVyIHByb3BlcnR5Ci0gKi8KLXRlbXBsYXRlPD4gaW5saW5lIGJvb2wKLWRlYnVnX25hbWVfaWQ6Om9wZXJhdG9yPChkZWJ1Z19uYW1lX2lkIGNvbnN0ICYgcmhzKSBjb25zdAotewotCXJldHVybiBkZWJ1Z19uYW1lcy5uYW1lKCp0aGlzKSA8IGRlYnVnX25hbWVzLm5hbWUocmhzKTsKLX0KLQotI2VuZGlmIC8qICFOQU1FX1NUT1JBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicHAvb3BfaGVhZGVyLmNwcCBiL2xpYnBwL29wX2hlYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYmFjYWMuLjAwMDAwMDAKLS0tIGEvbGlicHAvb3BfaGVhZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wX2hlYWRlci5jcHAKLSAqIHZhcmlvdXMgZnJlZSBmdW5jdGlvbiBhY3Rpbmcgb24gYSBzYW1wbGUgZmlsZSBoZWFkZXIKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxpb21hbmlwPgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAib2RiLmgiCi0jaW5jbHVkZSAib3BfY3B1X3R5cGUuaCIKLSNpbmNsdWRlICJvcF9maWxlLmgiCi0jaW5jbHVkZSAib3BfaGVhZGVyLmgiCi0jaW5jbHVkZSAib3BfZXZlbnRzLmgiCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXZvaWQgb3BfY2hlY2tfaGVhZGVyKG9wZF9oZWFkZXIgY29uc3QgJiBoMSwgb3BkX2hlYWRlciBjb25zdCAmIGgyLAotCQkgICAgIHN0cmluZyBjb25zdCAmIGZpbGVuYW1lKQotewotCWlmIChoMS5tdGltZSAhPSBoMi5tdGltZSkgewotCQlvc3RyaW5nc3RyZWFtIG9zOwotCQlvcyA8PCAiaGVhZGVyIHRpbWVzdGFtcHMgYXJlIGRpZmZlcmVudCAoIgotCQkgICA8PCBoMS5tdGltZSA8PCAiLCAiIDw8IGgyLm10aW1lIDw8ICIpIGZvciAiCi0JCSAgIDw8IGZpbGVuYW1lIDw8ICJcbiI7Ci0JCXRocm93IG9wX2ZhdGFsX2Vycm9yKG9zLnN0cigpKTsKLQl9Ci0KLQlpZiAoaDEuaXNfa2VybmVsICE9IGgyLmlzX2tlcm5lbCkgewotCQlvc3RyaW5nc3RyZWFtIG9zOwotCQlvcyA8PCAiaGVhZGVyIGlzX2tlcm5lbCBmbGFncyBhcmUgZGlmZmVyZW50IGZvciAiCi0JCSAgIDw8IGZpbGVuYW1lIDw8ICJcbiI7Ci0JCXRocm93IG9wX2ZhdGFsX2Vycm9yKG9zLnN0cigpKTsKLQl9Ci0KLQlpZiAgKGgxLmFub25fc3RhcnQgIT0gaDIuYW5vbl9zdGFydCkgewotCQlvc3RyaW5nc3RyZWFtIG9zOwotCQlvcyA8PCAiaGVhZGVyIGFub25fc3RhcnQgZmxhZ3MgYXJlIGRpZmZlcmVudCBmb3IgIgotCQkgICA8PCBmaWxlbmFtZSA8PCAiXG4iOwotCQl0aHJvdyBvcF9mYXRhbF9lcnJvcihvcy5zdHIoKSk7Ci0JfQotCQotCS8vIE5vdGUgdGhhdCB3ZSBkb24ndCBjaGVjayBDUFUgc3BlZWQgc2luY2UgdGhhdCBjYW4gdmFyeQotCS8vIGZyZWVseSBvbiB0aGUgc2FtZSBtYWNoaW5lCi19Ci0KLQotbmFtZXNwYWNlIHsKLQotc2V0PHN0cmluZz4gd2FybmVkX2ZpbGVzOwotCi19Ci0KLQotdm9pZCBjaGVja19tdGltZShzdHJpbmcgY29uc3QgJiBmaWxlLCBvcGRfaGVhZGVyIGNvbnN0ICYgaGVhZGVyKQotewotCXRpbWVfdCBjb25zdCBuZXdtdGltZSA9IG9wX2dldF9tdGltZShmaWxlLmNfc3RyKCkpOwotCi0JaWYgKG5ld210aW1lID09IGhlYWRlci5tdGltZSkKLQkJcmV0dXJuOwotCi0JaWYgKHdhcm5lZF9maWxlcy5maW5kKGZpbGUpICE9IHdhcm5lZF9maWxlcy5lbmQoKSkKLQkJcmV0dXJuOwotCi0Jd2FybmVkX2ZpbGVzLmluc2VydChmaWxlKTsKLQotCS8vIEZpbGVzIHdlIGNvdWxkbid0IGdldCBtdGltZSBvZiBoYXZlIHplcm8gbXRpbWUKLQlpZiAoIWhlYWRlci5tdGltZSkgewotCQljZXJyIDw8ICJ3YXJuaW5nOiBjb3VsZCBub3QgY2hlY2sgdGhhdCB0aGUgYmluYXJ5IGZpbGUgIgotCQkgICAgIDw8IGZpbGUgPDwgIiBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgIgotCQkJInRoZSBwcm9maWxlIHdhcyB0YWtlbi4gUmVzdWx0cyBtYXkgYmUgaW5hY2N1cmF0ZS5cbiI7Ci0JfSBlbHNlIHsKLQkJc3RhdGljIGJvb2wgd2FybmVkX2FscmVhZHkgPSBmYWxzZTsKLQotCQljZXJyIDw8ICJ3YXJuaW5nOiB0aGUgbGFzdCBtb2RpZmllZCB0aW1lIG9mIHRoZSBiaW5hcnkgZmlsZSAiCi0JCSAgICAgImRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIHNhbXBsZSBmaWxlIGZvciAiIDw8IGZpbGUKLQkJICAgICA8PCAiXG4iOwotCi0JCWlmICghd2FybmVkX2FscmVhZHkpIHsKLQkJCWNlcnIgPDwgIkVpdGhlciB0aGlzIGlzIHRoZSB3cm9uZyBiaW5hcnkgb3IgdGhlIGJpbmFyeSAiCi0JCQkiaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIHNhbXBsZSBmaWxlIHdhcyBjcmVhdGVkLlxuIjsKLQkJCXdhcm5lZF9hbHJlYWR5ID0gdHJ1ZTsKLQkJfQotCX0KLX0KLQotCi1vcGRfaGVhZGVyIGNvbnN0IHJlYWRfaGVhZGVyKHN0cmluZyBjb25zdCAmIHNhbXBsZV9maWxlbmFtZSkKLXsKLQlvZGJfdCBzYW1wbGVzX2RiOwotCi0JaW50IHJjID0gb2RiX29wZW4oJnNhbXBsZXNfZGIsIHNhbXBsZV9maWxlbmFtZS5jX3N0cigpLCBPREJfUkRPTkxZLAotCQlzaXplb2Yoc3RydWN0IG9wZF9oZWFkZXIpKTsKLQotCWlmIChyYykKLQkJdGhyb3cgb3BfZmF0YWxfZXJyb3Ioc2FtcGxlX2ZpbGVuYW1lICsgIjogIiArIHN0cmVycm9yKHJjKSk7Ci0KLQlvcGRfaGVhZGVyIGhlYWQgPSAqc3RhdGljX2Nhc3Q8b3BkX2hlYWRlciAqPihzYW1wbGVzX2RiLmRhdGEtPmJhc2VfbWVtb3J5KTsKLQotCW9kYl9jbG9zZSgmc2FtcGxlc19kYik7Ci0KLQlyZXR1cm4gaGVhZDsKLX0KLQotCi1uYW1lc3BhY2UgewotCi1zdHJpbmcgY29uc3Qgb3BfcHJpbnRfZXZlbnQob3BfY3B1IGNwdV90eXBlLCB1OCB0eXBlLCB1MTYgdW0sIHUzMiBjb3VudCkKLXsKLQlzdHJpbmcgc3RyOwotCi0JaWYgKGNwdV90eXBlID09IENQVV9USU1FUl9JTlQpIHsKLQkJc3RyICs9ICJQcm9maWxpbmcgdGhyb3VnaCB0aW1lciBpbnRlcnJ1cHQiOwotCQlyZXR1cm4gc3RyOwotCX0KLQotCXN0cnVjdCBvcF9ldmVudCAqIGV2ZW50ID0gb3BfZmluZF9ldmVudChjcHVfdHlwZSwgdHlwZSk7Ci0KLQlpZiAoIWV2ZW50KSB7Ci0JCWNlcnIgPDwgIkNvdWxkIG5vdCBsb2NhdGUgZXZlbnQgIiA8PCBpbnQodHlwZSkgPDwgZW5kbDsKLQkJcmV0dXJuIHN0cjsKLQl9Ci0KLQljaGFyIGNvbnN0ICogdW1fZGVzYyA9IDA7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV2ZW50LT51bml0LT5udW07ICsraSkgewotCQlpZiAoZXZlbnQtPnVuaXQtPnVtW2ldLnZhbHVlID09IHVtKQotCQkJdW1fZGVzYyA9IGV2ZW50LT51bml0LT51bVtpXS5kZXNjOwotCX0KLQotCXN0ciArPSBzdHJpbmcoIkNvdW50ZWQgIikgKyBldmVudC0+bmFtZTsKLQlzdHIgKz0gc3RyaW5nKCIgZXZlbnRzICgiKSArIGV2ZW50LT5kZXNjICsgIikiOwotCi0JaWYgKGNwdV90eXBlICE9IENQVV9SVEMpIHsKLQkJc3RyICs9ICIgd2l0aCBhIHVuaXQgbWFzayBvZiAweCI7Ci0KLQkJb3N0cmluZ3N0cmVhbSBzczsKLQkJc3MgPDwgaGV4IDw8IHNldHcoMikgPDwgc2V0ZmlsbCgnMCcpIDw8IHVuc2lnbmVkKHVtKTsKLQkJc3RyICs9IHNzLnN0cigpOwotCi0JCXN0ciArPSAiICgiOwotCQlzdHIgKz0gdW1fZGVzYyA/IHVtX2Rlc2MgOiAibXVsdGlwbGUgZmxhZ3MiOwotCQlzdHIgKz0gIikiOwotCX0KLQotCXN0ciArPSAiIGNvdW50ICIgKyBvcF9sZXhpY2FsX2Nhc3Q8c3RyaW5nPihjb3VudCk7Ci0JcmV0dXJuIHN0cjsKLX0KLQotfQotCi0KLXN0cmluZyBjb25zdCBkZXNjcmliZV9oZWFkZXIob3BkX2hlYWRlciBjb25zdCAmIGhlYWRlcikKLXsKLQlvcF9jcHUgY3B1ID0gc3RhdGljX2Nhc3Q8b3BfY3B1PihoZWFkZXIuY3B1X3R5cGUpOwotCi0JcmV0dXJuIG9wX3ByaW50X2V2ZW50KGNwdSwgaGVhZGVyLmN0cl9ldmVudCwKLQkgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmN0cl91bSwgaGVhZGVyLmN0cl9jb3VudCk7Ci19Ci0KLQotc3RyaW5nIGNvbnN0IGRlc2NyaWJlX2NwdShvcGRfaGVhZGVyIGNvbnN0ICYgaGVhZGVyKQotewotCW9wX2NwdSBjcHUgPSBzdGF0aWNfY2FzdDxvcF9jcHU+KGhlYWRlci5jcHVfdHlwZSk7Ci0KLQlzdHJpbmcgc3RyOwotCXN0ciArPSBzdHJpbmcoIkNQVTogIikgKyBvcF9nZXRfY3B1X3R5cGVfc3RyKGNwdSk7Ci0Jc3RyICs9ICIsIHNwZWVkICI7Ci0KLQlvc3RyaW5nc3RyZWFtIHNzOwotCXNzIDw8IGhlYWRlci5jcHVfc3BlZWQ7Ci0Jc3RyICs9IHNzLnN0cigpICsgIiBNSHogKGVzdGltYXRlZCkiOwotCXJldHVybiBzdHI7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9vcF9oZWFkZXIuaCBiL2xpYnBwL29wX2hlYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTEwOWJjLi4wMDAwMDAwCi0tLSBhL2xpYnBwL29wX2hlYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9oZWFkZXIuaAotICogdmFyaW91cyBmcmVlIGZ1bmN0aW9uIGFjdGluZyBvbiBhIHNhbXBsZSBmaWxlIGhlYWRlcgotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpZm5kZWYgT1BfSEVBREVSX0gKLSNkZWZpbmUgT1BfSEVBREVSX0gKLQotI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJvcF9zYW1wbGVfZmlsZS5oIgotCi0vKioKLSAqIEBwYXJhbSBoMSBzYW1wbGUgZmlsZSBoZWFkZXIKLSAqIEBwYXJhbSBoMiBzYW1wbGUgZmlsZSBoZWFkZXIKLSAqIEBwYXJhbSBmaWxlbmFtZSBzYW1wbGUgZmlsZW5hbWUKLSAqCi0gKiBjaGVjayB0aGF0IHRoZSBoMSBhbmQgaDIgYXJlIGNvaGVyZW50IChzYW1lIHNpemUsIHNhbWUgbXRpbWUgZXRjLikKLSAqIGFsbCBlcnJvciBhcmUgZmF0YWwKLSAqLwotdm9pZCBvcF9jaGVja19oZWFkZXIob3BkX2hlYWRlciBjb25zdCAmIGgxLCBvcGRfaGVhZGVyIGNvbnN0ICYgaDIsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lKTsKLQotLyoqCi0gKiBjaGVjayBtdGltZSBvZiBzYW1wbGVzIGZpbGUgaGVhZGVyIGFnYWluc3QgZmlsZQotICogYWxsIGVycm9yIGFyZSBmYXRhbAotICovCi12b2lkIGNoZWNrX210aW1lKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZSwgb3BkX2hlYWRlciBjb25zdCAmIGhlYWRlcik7Ci0KLS8qKgotICogQHBhcmFtIHNhbXBsZV9maWxlbmFtZSAgdGhlIHNhbXBsZSB0byBvcGVuCi0gKgotICogUmV0dXJuIHRoZSBoZWFkZXIgb2YgdGhpcyBzYW1wbGUgZmlsZS4gT25seSB0aGUgbWFnaWMgbnVtYmVyIGlzIGNoZWNrZWQKLSAqIHRoZSB2ZXJzaW9uIG51bWJlciBpcyBub3QgY2hlY2tlZC4gQWxsIGVycm9yIGFyZSBmYXRhbAotICovCi1vcGRfaGVhZGVyIGNvbnN0IHJlYWRfaGVhZGVyKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc2FtcGxlX2ZpbGVuYW1lKTsKLQotLyoqCi0gKiBvdXRwdXQgYSByZWFkYWJsZSBmb3JtIG9mIGhlYWRlciwgdGhpcyBkb24ndCBpbmNsdWRlIHRoZSBjcHUgdHlwZQotICogYW5kIHNwZWVkCi0gKi8KLXN0ZDo6c3RyaW5nIGNvbnN0IGRlc2NyaWJlX2hlYWRlcihvcGRfaGVhZGVyIGNvbnN0ICYgaGVhZGVyKTsKLQotLy8vIG91dHB1dCBhIHJlYWRhYmxlIGZvcm0gb2YgY3B1IHR5cGUgYW5kIHNwZWVkCi1zdGQ6OnN0cmluZyBjb25zdCBkZXNjcmliZV9jcHUob3BkX2hlYWRlciBjb25zdCAmIGhlYWRlcik7Ci0KLSNlbmRpZiAvLyBPUF9IRUFERVJfSApkaWZmIC0tZ2l0IGEvbGlicHAvcGFyc2VfZmlsZW5hbWUuY3BwIGIvbGlicHAvcGFyc2VfZmlsZW5hbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTkzYjk0Li4wMDAwMDAwCi0tLSBhL2xpYnBwL3BhcnNlX2ZpbGVuYW1lLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKioKLSAqIEBmaWxlIHBhcnNlX2ZpbGVuYW1lLmNwcAotICogU3BsaXQgYSBzYW1wbGUgZmlsZW5hbWUgaW50byBpdHMgY29uc3RpdHVlbnQgcGFydHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi0jaW5jbHVkZSAicGFyc2VfZmlsZW5hbWUuaCIKLSNpbmNsdWRlICJmaWxlX21hbmlwLmgiCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFBQOjMuMTkgZXZlbnRfbmFtZS5jb3VudC51bml0bWFzay50Z2lkLnRpZC5jcHUKLXBhcnNlZF9maWxlbmFtZSBwYXJzZV9ldmVudF9zcGVjKHN0cmluZyBjb25zdCAmIGV2ZW50X3NwZWMpCi17Ci0JdHlwZWRlZiB2ZWN0b3I8c3RyaW5nPiBwYXJ0c190eXBlOwotCXR5cGVkZWYgcGFydHNfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLQotCXNpemVfdHlwZSBjb25zdCBucl9wYXJ0cyA9IDY7Ci0KLQlwYXJ0c190eXBlIHBhcnRzID0gc2VwYXJhdGVfdG9rZW4oZXZlbnRfc3BlYywgJy4nKTsKLQotCWlmIChwYXJ0cy5zaXplKCkgIT0gbnJfcGFydHMpIHsKLQkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicGFyc2VfZXZlbnRfc3BlYygpOiBiYWQgZXZlbnQgc3BlY2lmaWNhdGlvbjogIiArIGV2ZW50X3NwZWMpOwotCX0KLQotCWZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbnJfcGFydHMgOyArK2kpIHsKLQkJaWYgKHBhcnRzW2ldLmVtcHR5KCkpIHsKLQkJCXRocm93IGludmFsaWRfYXJndW1lbnQoInBhcnNlX2V2ZW50X3NwZWMoKTogYmFkIGV2ZW50IHNwZWNpZmljYXRpb246ICIgKyBldmVudF9zcGVjKTsKLQkJfQotCX0KLQotCXBhcnNlZF9maWxlbmFtZSByZXN1bHQ7Ci0KLQlzaXplX3R5cGUgaSA9IDA7Ci0JcmVzdWx0LmV2ZW50ID0gcGFydHNbaSsrXTsKLQlyZXN1bHQuY291bnQgPSBwYXJ0c1tpKytdOwotCXJlc3VsdC51bml0bWFzayA9IHBhcnRzW2krK107Ci0JcmVzdWx0LnRnaWQgPSBwYXJ0c1tpKytdOwotCXJlc3VsdC50aWQgPSBwYXJ0c1tpKytdOwotCXJlc3VsdC5jcHUgPSBwYXJ0c1tpKytdOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vKioKLSAqIEBwYXJhbSBjb21wb25lbnQgIHBhdGggY29tcG9uZW50Ci0gKgotICogcmVtb3ZlIGZyb20gcGF0aF9jb21wb25lbnQgYWxsIGRpcmVjdG9yeSBsZWZ0IHRvIHtyb290fSwge2tlcm59IG9yIHthbm9ufQotICovCi12b2lkIHJlbW92ZV9iYXNlX2Rpcih2ZWN0b3I8c3RyaW5nPiAmIHBhdGgpCi17Ci0JdmVjdG9yPHN0cmluZz46Oml0ZXJhdG9yIGl0OwotCWZvciAoaXQgPSBwYXRoLmJlZ2luKCk7IGl0ICE9IHBhdGguZW5kKCk7ICsraXQpIHsKLQkJaWYgKCppdCA9PSAie3Jvb3R9IiB8fCAqaXQgPT0gIntrZXJufSIgIHx8ICppdCA9PSAie2Fub259IikKLQkJCWJyZWFrOwotCX0KLQotCXBhdGguZXJhc2UocGF0aC5iZWdpbigpLCBpdCk7Ci19Ci0KLQotLy8vIEhhbmRsZSBhbiBhbm9uIHJlZ2lvbi4gUHJldHR5IHByaW50IHRoZSBkZXRhaWxzLgotc3RyaW5nIGNvbnN0IHBhcnNlX2Fub24oc3RyaW5nIGNvbnN0ICYgc3RyKQotewotCXZlY3RvcjxzdHJpbmc+IHBhcnRzID0gc2VwYXJhdGVfdG9rZW4oc3RyLCAnLicpOwotCWlmIChwYXJ0cy5zaXplKCkgIT0gMykKLQkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicGFyc2VfYW5vbigpIGludmFsaWQgbmFtZTogIiArIHN0cik7Ci0KLQlzdHJpbmcgcmV0ID0gImFub24gKHRnaWQ6IjsKLQlyZXQgKz0gcGFydHNbMF0gKyAiIHJhbmdlOiIgKyBwYXJ0c1sxXSArICItIiArIHBhcnRzWzJdICsgIikiOwotCXJldHVybiByZXQ7Ci19Ci0KLQotfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi0KLS8qCi0gKiAgdmFsaWQgZmlsZW5hbWUgYXJlIHZhcmlhdGlvbnMgb246Ci0gKgotICoge2tlcm59L25hbWUvZXZlbnRfc3BlYwotICoge3Jvb3R9L3BhdGgvdG8vYmluL3tkZXB9L3tyb290fS9wYXRoL3RvL2Jpbi9ldmVudF9zcGVjCi0gKiB7cm9vdH0vcGF0aC90by9iaW4ve2RlcH0ve2Fub259L3BpZC5zdGFydC5lbmQvZXZlbnRfc3BlYwotICoge3Jvb3R9L3BhdGgvdG8vYmluL3tkZXB9L3trZXJufS9uYW1lL2V2ZW50X3NwZWMKLSAqIHtyb290fS9wYXRoL3RvL2Jpbi97ZGVwfS97cm9vdH0vcGF0aC90by9iaW4ve2NnfS97cm9vdH0vcGF0aC90by9iaW4vZXZlbnRfc3BlYwotCi0gKgotICogd2hlcmUgL25hbWUvIGRlbm90ZSBhIHVuaXF1ZSBwYXRoIGNvbXBvbmVudAotICovCi1wYXJzZWRfZmlsZW5hbWUgcGFyc2VfZmlsZW5hbWUoc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpCi17Ci0Jc3RyaW5nOjpzaXplX3R5cGUgcG9zID0gZmlsZW5hbWUuZmluZF9sYXN0X29mKCcvJyk7Ci0JaWYgKHBvcyA9PSBzdHJpbmc6Om5wb3MpIHsKLQkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicGFyc2VfZmlsZW5hbWUoKSBpbnZhbGlkIGZpbGVuYW1lOiAiICsKLQkJCQkgICAgICAgZmlsZW5hbWUpOwotCX0KLQlzdHJpbmcgZXZlbnRfc3BlYyA9IGZpbGVuYW1lLnN1YnN0cihwb3MgKyAxKTsKLQlzdHJpbmcgZmlsZW5hbWVfc3BlYyA9IGZpbGVuYW1lLnN1YnN0cigwLCBwb3MpOwotCi0JcGFyc2VkX2ZpbGVuYW1lIHJlc3VsdCA9IHBhcnNlX2V2ZW50X3NwZWMoZXZlbnRfc3BlYyk7Ci0KLQlyZXN1bHQuZmlsZW5hbWUgPSBmaWxlbmFtZTsKLQotCXZlY3RvcjxzdHJpbmc+IHBhdGggPSBzZXBhcmF0ZV90b2tlbihmaWxlbmFtZV9zcGVjLCAnLycpOwotCi0JcmVtb3ZlX2Jhc2VfZGlyKHBhdGgpOwotCi0JLy8gcHBfaW50ZXJmYWNlIFBQOjMuMTkgdG8gUFA6My4yMyBwYXRoIG11c3Qgc3RhcnQgZWl0aGVyIHdpdGgge3Jvb3R9Ci0JLy8gb3Ige2tlcm59IGFuZCB3ZSBtdXN0IGZvdW5kIGF0IGxlYXN0IDIgY29tcG9uZW50LCByZW1vdmVfYmFzZV9kaXIoKQotCS8vIHJldHVybiBhbiBlbXB0eSBwYXRoIGlmIHtyb290fSBvciB7a2Vybn0gYXJlIG5vdCBmb3VuZAotCWlmIChwYXRoLnNpemUoKSA8IDIpIHsKLQkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicGFyc2VfZmlsZW5hbWUoKSBpbnZhbGlkIGZpbGVuYW1lOiAiICsKLQkJCQkgICAgICAgZmlsZW5hbWUpOwotCX0KLQotCXNpemVfdCBpOwotCWZvciAoaSA9IDEgOyBpIDwgcGF0aC5zaXplKCkgOyArK2kpIHsKLQkJaWYgKHBhdGhbaV0gPT0gIntkZXB9IikKLQkJCWJyZWFrOwotCi0JCXJlc3VsdC5pbWFnZSArPSAiLyIgKyBwYXRoW2ldOwotCX0KLQotCWlmIChpID09IHBhdGguc2l6ZSgpKSB7Ci0JCXRocm93IGludmFsaWRfYXJndW1lbnQoInBhcnNlX2ZpbGVuYW1lKCkgaW52YWxpZCBmaWxlbmFtZTogIiArCi0JCQkJICAgICAgIGZpbGVuYW1lKTsKLQl9Ci0KLQkvLyBza2lwICJ7ZGVwfSIKLQkrK2k7Ci0KLQkvLyBQUDozLjE5IHtkZXB9LyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHtrZXJufS8sIHtyb290fS8gb3Ige2Fub259LwotCWlmIChwYXRoW2ldICE9ICJ7a2Vybn0iICYmIHBhdGhbaV0gIT0gIntyb290fSIgJiYgcGF0aFtpXSAhPSAie2Fub259IikgewotCQl0aHJvdyBpbnZhbGlkX2FyZ3VtZW50KCJwYXJzZV9maWxlbmFtZSgpIGludmFsaWQgZmlsZW5hbWU6ICIgKwotCQkJCSAgICAgICBmaWxlbmFtZSk7Ci0JfQotCi0JYm9vbCBhbm9uID0gcGF0aFtpXSA9PSAie2Fub259IjsKLQotCS8vIHNraXAgIntyb290fSIsICJ7a2Vybn0iIG9yICJ7YW5vbn0iCi0JKytpOwotCi0JZm9yICg7IGkgPCBwYXRoLnNpemUoKTsgKytpKSB7Ci0JCWlmIChwYXRoW2ldID09ICJ7Y2d9IikKLQkJCWJyZWFrOwotCi0JCWlmIChhbm9uKSB7Ci0JCQlyZXN1bHQubGliX2ltYWdlID0gcGFyc2VfYW5vbihwYXRoW2krK10pOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmVzdWx0LmxpYl9pbWFnZSArPSAiLyIgKyBwYXRoW2ldOwotCX0KLQotCWlmIChpID09IHBhdGguc2l6ZSgpKQotCQlyZXR1cm4gcmVzdWx0OwotCi0JLy8gc2tpcCAie2NnfSIKLQkrK2k7Ci0JaWYgKGkgPT0gcGF0aC5zaXplKCkgfHwKLQkgICAgKHBhdGhbaV0gIT0gIntrZXJufSIgJiYgcGF0aFtpXSAhPSAie3Jvb3R9IiAmJiBwYXRoW2ldICE9ICJ7YW5vbn0iKSkgewotCQl0aHJvdyBpbnZhbGlkX2FyZ3VtZW50KCJwYXJzZV9maWxlbmFtZSgpIGludmFsaWQgZmlsZW5hbWU6ICIKLQkJICAgICAgICAgICAgICAgICAgICAgICArIGZpbGVuYW1lKTsKLQl9Ci0KLQkvLyBza2lwICJ7cm9vdH0iLCAie2tlcm59IiBvciAie2Fub259IgotCWFub24gPSBwYXRoW2ldID09ICJ7YW5vbn0iOwotCSsraTsKLQotCWlmIChhbm9uKSB7Ci0JCXJlc3VsdC5jZ19pbWFnZSA9IHBhcnNlX2Fub24ocGF0aFtpKytdKTsKLQl9IGVsc2UgewotCQlmb3IgKDsgaSA8IHBhdGguc2l6ZSgpOyArK2kpCi0JCQlyZXN1bHQuY2dfaW1hZ2UgKz0gIi8iICsgcGF0aFtpXTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIHBhcnNlZF9maWxlbmFtZTo6cHJvZmlsZV9zcGVjX2VxdWFsKHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCkKLXsKLQlyZXR1cm4gCWV2ZW50ID09IHBhcnNlZC5ldmVudCAmJgotCQljb3VudCA9PSBwYXJzZWQuY291bnQgJiYKLQkJdW5pdG1hc2sgPT0gcGFyc2VkLnVuaXRtYXNrICYmCi0JCXRnaWQgPT0gcGFyc2VkLnRnaWQgJiYKLQkJdGlkID09IHBhcnNlZC50aWQgJiYKLQkJY3B1ID09IHBhcnNlZC50aWQ7Ci19Ci0KLW9zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiBvdXQsIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIGRhdGEpCi17Ci0Jb3V0IDw8IGRhdGEuZmlsZW5hbWUgPDwgZW5kbDsKLQlvdXQgPDwgZGF0YS5pbWFnZSA8PCAiICIgPDwgZGF0YS5saWJfaW1hZ2UgPDwgIiAiCi0JICAgIDw8IGRhdGEuZXZlbnQgPDwgIiAiIDw8IGRhdGEuY291bnQgPDwgIiAiCi0JICAgIDw8IGRhdGEudW5pdG1hc2sgPDwgIiAiIDw8IGRhdGEudGdpZCA8PCAiICIKLQkgICAgPDwgZGF0YS50aWQgPDwgIiAiIDw8IGRhdGEuY3B1IDw8IGVuZGw7Ci0KLQlyZXR1cm4gb3V0OwotfQpkaWZmIC0tZ2l0IGEvbGlicHAvcGFyc2VfZmlsZW5hbWUuaCBiL2xpYnBwL3BhcnNlX2ZpbGVuYW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YzA2YWEuLjAwMDAwMDAKLS0tIGEvbGlicHAvcGFyc2VfZmlsZW5hbWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKgotICogQGZpbGUgcGFyc2VfZmlsZW5hbWUuaAotICogU3BsaXQgYSBzYW1wbGUgZmlsZW5hbWUgaW50byBpdHMgY29uc3RpdHVlbnQgcGFydHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBQQVJTRV9GSUxFTkFNRV9ICi0jZGVmaW5lIFBBUlNFX0ZJTEVOQU1FX0gKLQotI2luY2x1ZGUgPHN0cmluZz4KLQotLyoqCi0gKiBhIGNvbnZlbmllbmNlIGNsYXNzIHRvIHN0b3JlIHJlc3VsdCBvZiBwYXJzZV9maWxlbmFtZSgpCi0gKi8KLXN0cnVjdCBwYXJzZWRfZmlsZW5hbWUKLXsKLQlzdGQ6OnN0cmluZyBpbWFnZTsKLQlzdGQ6OnN0cmluZyBsaWJfaW1hZ2U7Ci0JLy8vIGRlc3RpbmF0aW9uIGltYWdlIGZvciBjYWxsIGdyYXBoIGZpbGUsIGVtcHR5IGlmIHRoaXMgc2FtcGxlCi0JLy8vIGZpbGUgaXMgbm90IGEgY2FsbGdyYXBoIGZpbGUuCi0Jc3RkOjpzdHJpbmcgY2dfaW1hZ2U7Ci0Jc3RkOjpzdHJpbmcgZXZlbnQ7Ci0Jc3RkOjpzdHJpbmcgY291bnQ7Ci0Jc3RkOjpzdHJpbmcgdW5pdG1hc2s7Ci0Jc3RkOjpzdHJpbmcgdGdpZDsKLQlzdGQ6OnN0cmluZyB0aWQ7Ci0Jc3RkOjpzdHJpbmcgY3B1OwotCi0JLy8vIHJldHVybiB0cnVlIGlmIHRoZSBwcm9maWxlIHNwZWNpZmljYXRpb24gYXJlIGlkZW50aWNhbC4KLQlib29sIHByb2ZpbGVfc3BlY19lcXVhbChwYXJzZWRfZmlsZW5hbWUgY29uc3QgJiBwYXJzZWQpOwotCi0JLyoqCi0JICogdGhlIG9yaWdpbmFsIHNhbXBsZSBmaWxlbmFtZSBmcm9tIHdoaWNoIHRoZQotCSAqIGFib3ZlIGNvbXBvbmVudHMgYXJlIGJ1aWx0Ci0JICovCi0Jc3RkOjpzdHJpbmcgZmlsZW5hbWU7Ci19OwotCi0KLS8vLyBkZWJ1Z2dpbmcgaGVscGVyCi1zdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmLCBwYXJzZWRfZmlsZW5hbWUgY29uc3QgJik7Ci0KLQotLyoqCi0gKiBwYXJzZSBhIHNhbXBsZSBmaWxlbmFtZQotICogQHBhcmFtIGZpbGVuYW1lIGluOiBhIHNhbXBsZSBmaWxlbmFtZQotICoKLSAqIGZpbGVuYW1lIGlzIHNwbGl0IGludG8gY29uc3RpdHVlbnQgcGFydHMsIHRoZSBsaWJfaW1hZ2UgaXMgb3B0aW9uYWwKLSAqIGFuZCBjYW4gYmUgZW1wdHkgb24gc3VjY2Vzc2Z1bGwgY2FsbC4gQWxsIG90aGVyIGVycm9yIGFyZSBmYXRhbC4KLSAqIEZpbGVuYW1lcyBhcmUgZW5jb2RlZCBhcyBhY2NvcmRpbmcgdG8gUFA6My4xOSB0byBQUDozLjI1Ci0gKgotICogYWxsIGVycm9ycyB0aHJvdyBhbiBzdGQ6OmludmFsaWRfYXJndW1lbnQgZXhjZXB0aW9uCi0gKi8KLXBhcnNlZF9maWxlbmFtZSBwYXJzZV9maWxlbmFtZShzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lKTsKLQotI2VuZGlmIC8qICFQQVJTRV9GSUxFTkFNRV9IICovCmRpZmYgLS1naXQgYS9saWJwcC9wb3B1bGF0ZS5jcHAgYi9saWJwcC9wb3B1bGF0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MDY3M2EuLjAwMDAwMDAKLS0tIGEvbGlicHAvcG9wdWxhdGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBwb3B1bGF0ZS5jcHAKLSAqIEZpbGwgdXAgYSBwcm9maWxlX2NvbnRhaW5lciBmcm9tIGludmVydGVkIHByb2ZpbGVzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgInByb2ZpbGUuaCIKLSNpbmNsdWRlICJwcm9maWxlX2NvbnRhaW5lci5oIgotI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKLSNpbmNsdWRlICJvcF9iZmQuaCIKLSNpbmNsdWRlICJvcF9oZWFkZXIuaCIKLSNpbmNsdWRlICJwb3B1bGF0ZS5oIgotCi0jaW5jbHVkZSAiaW1hZ2VfZXJyb3JzLmgiCi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIHsKLQotLy8vIGxvYWQgbWVyZ2VkIGZpbGVzIGZvciBvbmUgc2V0IG9mIHNhbXBsZSBmaWxlcwotYm9vbAotcG9wdWxhdGVfZnJvbV9maWxlcyhwcm9maWxlX3QgJiBwcm9maWxlLCBvcF9iZmQgY29uc3QgJiBhYmZkLAotICAgICAgICAgICAgICAgICAgICBsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPiBjb25zdCAmIGZpbGVzKQotewotCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpbGVzLmJlZ2luKCk7Ci0JbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGZpbGVzLmVuZCgpOwotCi0JYm9vbCBmb3VuZCA9IGZhbHNlOwotCS8vIHdlIGNhbid0IGhhbmRsZSBjZyBmaWxlcyBoZXJlIG9idmlvdXNseQotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJLy8gQSBiaXQgdWdseSBidXQgd2UgbXVzdCBhY2NlcHQgc2lsZW50bHkgZW1wdHkgc2FtcGxlIGZpbGVuYW1lCi0JCS8vIHNpbmNlIHdlIGNhbiBjcmVhdGUgYSBwcm9maWxlX3NhbXBsZV9maWxlcyBmb3IgY2cgZmlsZSBvbmx5Ci0JCS8vIChpLmUgbm8gc2FtcGxlIHRvIHRoZSBiaW5hcnkpCi0JCWlmICghaXQtPnNhbXBsZV9maWxlbmFtZS5lbXB0eSgpKSB7Ci0JCQlwcm9maWxlLmFkZF9zYW1wbGVfZmlsZShpdC0+c2FtcGxlX2ZpbGVuYW1lKTsKLQkJCXByb2ZpbGUuc2V0X29mZnNldChhYmZkKTsKLQkJCWZvdW5kID0gdHJ1ZTsKLQkJfQotCX0KLQotCXJldHVybiBmb3VuZDsKLX0KLQotfSAgLy8gYW5vbiBuYW1lc3BhY2UKLQotCi12b2lkCi1wb3B1bGF0ZV9mb3JfaW1hZ2Uoc3RyaW5nIGNvbnN0ICYgYXJjaGl2ZV9wYXRoLCBwcm9maWxlX2NvbnRhaW5lciAmIHNhbXBsZXMsCi0gICBpbnZlcnRlZF9wcm9maWxlIGNvbnN0ICYgaXAsIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1ib2xfZmlsdGVyLAotICAgYm9vbCAqIGhhc19kZWJ1Z19pbmZvKQotewotCWJvb2wgb2sgPSBpcC5lcnJvciA9PSBpbWFnZV9vazsKLQotCW9wX2JmZCBhYmZkKGFyY2hpdmVfcGF0aCwgaXAuaW1hZ2UsIHN5bWJvbF9maWx0ZXIsIG9rKTsKLQlpZiAoIW9rICYmIGlwLmVycm9yID09IGltYWdlX29rKQotCQlpcC5lcnJvciA9IGltYWdlX2Zvcm1hdF9mYWlsdXJlOwotCi0JaWYgKGlwLmVycm9yID09IGltYWdlX2Zvcm1hdF9mYWlsdXJlKQotCQlyZXBvcnRfaW1hZ2VfZXJyb3IoaXAsIGZhbHNlKTsKLQotCW9wZF9oZWFkZXIgaGVhZGVyOwotCi0JYm9vbCBmb3VuZCA9IGZhbHNlOwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXAuZ3JvdXBzLnNpemUoKTsgKytpKSB7Ci0JCWxpc3Q8aW1hZ2Vfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgaXQKLQkJCT0gaXAuZ3JvdXBzW2ldLmJlZ2luKCk7Ci0JCWxpc3Q8aW1hZ2Vfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kCi0JCQk9IGlwLmdyb3Vwc1tpXS5lbmQoKTsKLQotCQkvLyB3ZSBjYW4gb25seSBzaGFyZSBhIHByb2ZpbGVfdCBhbW9uZ3N0IGVhY2gKLQkJLy8gaW1hZ2Vfc2V0J3MgZmlsZXMgLSB0aGlzIGlzIGJlY2F1c2UgaXQtPmFwcF9pbWFnZQotCQkvLyBjaGFuZ2VzLCBhbmQgdGhlIC5hZGQoKSB3b3VsZCBtaXMtYXR0cmlidXRlCi0JCS8vIHRvIHRoZSB3cm9uZyBhcHBfaW1hZ2Ugb3RoZXJ3aXNlCi0JCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJCXByb2ZpbGVfdCBwcm9maWxlOwotCQkJaWYgKHBvcHVsYXRlX2Zyb21fZmlsZXMocHJvZmlsZSwgYWJmZCwgaXQtPmZpbGVzKSkgewotCQkJCWhlYWRlciA9IHByb2ZpbGUuZ2V0X2hlYWRlcigpOwotCQkJCXNhbXBsZXMuYWRkKHByb2ZpbGUsIGFiZmQsIGl0LT5hcHBfaW1hZ2UsIGkpOwotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0KLQkJfQotCX0KLQotCS8vIHdlIHNob3VsZG4ndCBjaGVjay93YXJuIGlmIGFuIGFyY2hpdmUgaXMgdXNlZAotCWlmIChhcmNoaXZlX3BhdGguZW1wdHkoKSAmJiBmb3VuZCA9PSB0cnVlICYmIGlwLmVycm9yID09IGltYWdlX29rKQotCQljaGVja19tdGltZShhYmZkLmdldF9maWxlbmFtZSgpLCBoZWFkZXIpOwotCi0JaWYgKGhhc19kZWJ1Z19pbmZvKQotCQkqaGFzX2RlYnVnX2luZm8gPSBhYmZkLmhhc19kZWJ1Z19pbmZvKCk7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9wb3B1bGF0ZS5oIGIvbGlicHAvcG9wdWxhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgyMTM2Zi4uMDAwMDAwMAotLS0gYS9saWJwcC9wb3B1bGF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBwb3B1bGF0ZS5oCi0gKiBGaWxsIHVwIGEgcHJvZmlsZV9jb250YWluZXIgZnJvbSBpbnZlcnRlZCBwcm9maWxlcwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpZm5kZWYgUE9QVUxBVEVfSAotI2RlZmluZSBQT1BVTEFURV9ICi0KLWNsYXNzIHByb2ZpbGVfY29udGFpbmVyOwotY2xhc3MgaW52ZXJ0ZWRfcHJvZmlsZTsKLWNsYXNzIHN0cmluZ19maWx0ZXI7Ci0KLQotLy8vIExvYWQgYWxsIHNhbXBsZSBmaWxlIGluZm9ybWF0aW9uIGZvciBleGFjdGx5IG9uZSBiaW5hcnkgaW1hZ2UuCi12b2lkCi1wb3B1bGF0ZV9mb3JfaW1hZ2Uoc3RkOjpzdHJpbmcgY29uc3QgJiBhcmNoaXZlX3BhdGgsCi0gICBwcm9maWxlX2NvbnRhaW5lciAmIHNhbXBsZXMsIGludmVydGVkX3Byb2ZpbGUgY29uc3QgJiBpcCwKLSAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1ib2xfZmlsdGVyLCBib29sICogaGFzX2RlYnVnX2luZm8pOwotCi0jZW5kaWYgLyogUE9QVUxBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicHAvcHJvZmlsZS5jcHAgYi9saWJwcC9wcm9maWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAwMDdkZC4uMDAwMDAwMAotLS0gYS9saWJwcC9wcm9maWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioKLSAqIEBmaWxlIHByb2ZpbGUuY3BwCi0gKiBFbmNhcHN1bGF0aW9uIGZvciBzYW1wbGVzIGZpbGVzIG92ZXIgYWxsIHByb2ZpbGUgY2xhc3NlcwotICogYmVsb25naW5nIHRvIHRoZSBzYW1lIGJpbmFyeSBpbWFnZQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSA8Y2Vycm5vPgotCi0jaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAib3BfaGVhZGVyLmgiCi0jaW5jbHVkZSAib3BfY29uZmlnLmgiCi0jaW5jbHVkZSAib3Bfc2FtcGxlX2ZpbGUuaCIKLSNpbmNsdWRlICJwcm9maWxlLmgiCi0jaW5jbHVkZSAib3BfYmZkLmgiCi0jaW5jbHVkZSAiY3ZlcmIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotcHJvZmlsZV90Ojpwcm9maWxlX3QoKQotCTogc3RhcnRfb2Zmc2V0KDApCi17Ci19Ci0KLQotLy8gc3RhdGljIG1lbWJlcgotdW5zaWduZWQgaW50IHByb2ZpbGVfdDo6c2FtcGxlX2NvdW50KHN0cmluZyBjb25zdCAmIGZpbGVuYW1lKQotewotCW9kYl90IHNhbXBsZXNfZGI7Ci0KLQlvcGVuX3NhbXBsZV9maWxlKGZpbGVuYW1lLCBzYW1wbGVzX2RiKTsKLQotCXVuc2lnbmVkIGludCBjb3VudCA9IDA7Ci0KLQlvZGJfbm9kZV9ucl90IG5vZGVfbnIsIHBvczsKLQlvZGJfbm9kZV90ICogbm9kZSA9IG9kYl9nZXRfaXRlcmF0b3IoJnNhbXBsZXNfZGIsICZub2RlX25yKTsKLQlmb3IgKHBvcyA9IDA7IHBvcyA8IG5vZGVfbnI7ICsrcG9zKSB7Ci0JCWlmIChub2RlW3Bvc10ua2V5KQotCQkJY291bnQgKz0gbm9kZVtwb3NdLnZhbHVlOwotCX0KLQotCW9kYl9jbG9zZSgmc2FtcGxlc19kYik7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8vc3RhdGljIG1lbWJlcgotdm9pZCBwcm9maWxlX3Q6Om9wZW5fc2FtcGxlX2ZpbGUoc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUsIG9kYl90ICYgZGIpCi17Ci0JaW50IHJjID0gb2RiX29wZW4oJmRiLCBmaWxlbmFtZS5jX3N0cigpLCBPREJfUkRPTkxZLAotCQlzaXplb2Yoc3RydWN0IG9wZF9oZWFkZXIpKTsKLQotCWlmIChyYykKLQkJdGhyb3cgb3BfZmF0YWxfZXJyb3IoZmlsZW5hbWUgKyAiOiAiICsgc3RyZXJyb3IocmMpKTsKLQotCW9wZF9oZWFkZXIgY29uc3QgJiBoZWFkID0KLQkJKnN0YXRpY19jYXN0PG9wZF9oZWFkZXIgKj4ob2RiX2dldF9kYXRhKCZkYikpOwotCi0JaWYgKGhlYWQudmVyc2lvbiAhPSBPUERfVkVSU0lPTikgewotCQlvc3RyaW5nc3RyZWFtIG9zOwotCQlvcyA8PCAib3Byb2ZwcDogc2FtcGxlcyBmaWxlcyB2ZXJzaW9uIG1pc21hdGNoLCBhcmUgeW91ICIKLQkJICAgPDwgInJ1bm5pbmcgYSBkYWVtb24gYW5kIHBvc3QtcHJvZmlsZSB0b29scyB3aXRoIHZlcnNpb24gIgotCQkgICA8PCAgIm1pc21hdGNoID9cbiI7Ci0JCXRocm93IG9wX2ZhdGFsX2Vycm9yKG9zLnN0cigpKTsKLQl9Ci19Ci0KLXZvaWQgcHJvZmlsZV90OjphZGRfc2FtcGxlX2ZpbGUoc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpCi17Ci0Jb2RiX3Qgc2FtcGxlc19kYjsKLQotCW9wZW5fc2FtcGxlX2ZpbGUoZmlsZW5hbWUsIHNhbXBsZXNfZGIpOwotCi0Jb3BkX2hlYWRlciBjb25zdCAmIGhlYWQgPQotCQkqc3RhdGljX2Nhc3Q8b3BkX2hlYWRlciAqPihvZGJfZ2V0X2RhdGEoJnNhbXBsZXNfZGIpKTsKLQotCS8vIGlmIHdlIGFscmVhZHkgcmVhZCBhIHNhbXBsZSBmaWxlIGhlYWRlciBwb2ludGVyIGlzIG5vbiBudWxsCi0JaWYgKGZpbGVfaGVhZGVyLmdldCgpKQotCQlvcF9jaGVja19oZWFkZXIoaGVhZCwgKmZpbGVfaGVhZGVyLCBmaWxlbmFtZSk7Ci0KLQlmaWxlX2hlYWRlci5yZXNldChuZXcgb3BkX2hlYWRlcihoZWFkKSk7Ci0KLQlvZGJfbm9kZV9ucl90IG5vZGVfbnIsIHBvczsKLQlvZGJfbm9kZV90ICogbm9kZSA9IG9kYl9nZXRfaXRlcmF0b3IoJnNhbXBsZXNfZGIsICZub2RlX25yKTsKLQotCWZvciAocG9zID0gMDsgcG9zIDwgbm9kZV9ucjsgKytwb3MpIHsKLQkJaWYgKG5vZGVbcG9zXS5rZXkpIHsKLQkJCW9yZGVyZWRfc2FtcGxlc190OjppdGVyYXRvciBpdCA9IAotCQkJCW9yZGVyZWRfc2FtcGxlcy5maW5kKG5vZGVbcG9zXS5rZXkpOwotCQkJaWYgKGl0ICE9IG9yZGVyZWRfc2FtcGxlcy5lbmQoKSkgewotCQkJCWl0LT5zZWNvbmQgKz0gbm9kZVtwb3NdLnZhbHVlOwotCQkJfSBlbHNlIHsKLQkJCQlvcmRlcmVkX3NhbXBsZXNfdDo6dmFsdWVfdHlwZQotCQkJCQl2YWwobm9kZVtwb3NdLmtleSwgbm9kZVtwb3NdLnZhbHVlKTsKLQkJCQlvcmRlcmVkX3NhbXBsZXMuaW5zZXJ0KHZhbCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlvZGJfY2xvc2UoJnNhbXBsZXNfZGIpOwotfQotCi0KLXZvaWQgcHJvZmlsZV90OjpzZXRfb2Zmc2V0KG9wX2JmZCBjb25zdCAmIGFiZmQpCi17Ci0Jb3BkX2hlYWRlciBjb25zdCAmIGhlYWRlciA9IGdldF9oZWFkZXIoKTsKLQlpZiAoaGVhZGVyLmFub25fc3RhcnQgfHwgaGVhZGVyLmlzX2tlcm5lbCkKLQkJc3RhcnRfb2Zmc2V0ID0gYWJmZC5nZXRfc3RhcnRfb2Zmc2V0KGhlYWRlci5hbm9uX3N0YXJ0KTsKLQljdmVyYiA8PCAodmRlYnVnKSA8PCAic3RhcnRfb2Zmc2V0IGlzIG5vdyAiIDw8IHN0YXJ0X29mZnNldCA8PCBlbmRsOwotfQotCi0KLXByb2ZpbGVfdDo6aXRlcmF0b3JfcGFpcgotcHJvZmlsZV90OjpzYW1wbGVzX3JhbmdlKG9kYl9rZXlfdCBzdGFydCwgb2RiX2tleV90IGVuZCkgY29uc3QKLXsKLQkvLyBDaGVjayB0aGUgc3RhcnQgcG9zaXRpb24gaXNuJ3QgYmVmb3JlIHN0YXJ0X29mZnNldDoKLQkvLyB0aGlzIGF2b2lkcyB3cmFwcGluZy91bmRlcmZsb3dpbmcgc3RhcnQvZW5kLgotCS8vIFRoaXMgY2FuIGhhcHBlbiBvbiBlLmcuIEFSTSBrZXJuZWxzLCB3aGVyZSAuaW5pdCBpcwotCS8vIG1hcHBlZCBiZWZvcmUgLnRleHQgLSB3ZSBqdXN0IGhhdmUgdG8gc2tpcCBhbnkgc3VjaAotCS8vIC5pbml0IHN5bWJvbHMuCi0JaWYgKHN0YXJ0IDwgc3RhcnRfb2Zmc2V0KSB7Ci0JCXJldHVybiBtYWtlX3BhaXIoY29uc3RfaXRlcmF0b3Iob3JkZXJlZF9zYW1wbGVzLmVuZCgpLCAwKSwgCi0JCQljb25zdF9pdGVyYXRvcihvcmRlcmVkX3NhbXBsZXMuZW5kKCksIDApKTsKLQl9Ci0JCi0Jc3RhcnQgLT0gc3RhcnRfb2Zmc2V0OwotCWVuZCAtPSBzdGFydF9vZmZzZXQ7Ci0KLQkvLyBzYW5pdHkgY2hlY2sgaWYgc3RhcnQgPiBlbmQgY2FsbGVyIHdpbGwgZW50ZXIgaW50byBhbiBpbmZpbml0ZSBsb29wCi0JaWYgKHN0YXJ0ID4gZW5kKSB7Ci0JCXRocm93IG9wX2ZhdGFsX2Vycm9yKCJwcm9maWxlX3Q6OnNhbXBsZXNfcmFuZ2UoKTogc3RhcnQgPiBlbmQiCi0JCQkiIHNvbWV0aGluZyB3cm9uZyB3aXRoIGtlcm5lbCBvciBtb2R1bGUgbGF5b3V0ID9cbiIKLQkJCSJwbGVhc2UgcmVwb3J0IHByb2JsZW0gdG8gIgotCQkJIm9wcm9maWxlLWxpc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0Iik7Ci0JfQotCi0Jb3JkZXJlZF9zYW1wbGVzX3Q6OmNvbnN0X2l0ZXJhdG9yIGZpcnN0ID0gCi0JCW9yZGVyZWRfc2FtcGxlcy5sb3dlcl9ib3VuZChzdGFydCk7Ci0Jb3JkZXJlZF9zYW1wbGVzX3Q6OmNvbnN0X2l0ZXJhdG9yIGxhc3QgPQotCQlvcmRlcmVkX3NhbXBsZXMubG93ZXJfYm91bmQoZW5kKTsKLQotCXJldHVybiBtYWtlX3BhaXIoY29uc3RfaXRlcmF0b3IoZmlyc3QsIHN0YXJ0X29mZnNldCksCi0JCWNvbnN0X2l0ZXJhdG9yKGxhc3QsIHN0YXJ0X29mZnNldCkpOwotfQotCi0KLXByb2ZpbGVfdDo6aXRlcmF0b3JfcGFpciBwcm9maWxlX3Q6OnNhbXBsZXNfcmFuZ2UoKSBjb25zdAotewotCW9yZGVyZWRfc2FtcGxlc190Ojpjb25zdF9pdGVyYXRvciBmaXJzdCA9IG9yZGVyZWRfc2FtcGxlcy5iZWdpbigpOwotCW9yZGVyZWRfc2FtcGxlc190Ojpjb25zdF9pdGVyYXRvciBsYXN0ID0gb3JkZXJlZF9zYW1wbGVzLmVuZCgpOwotCi0JcmV0dXJuIG1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihmaXJzdCwgc3RhcnRfb2Zmc2V0KSwKLQkJY29uc3RfaXRlcmF0b3IobGFzdCwgc3RhcnRfb2Zmc2V0KSk7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9wcm9maWxlLmggYi9saWJwcC9wcm9maWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzN2UzNTQuLjAwMDAwMDAKLS0tIGEvbGlicHAvcHJvZmlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qKgotICogQGZpbGUgcHJvZmlsZS5oCi0gKiBFbmNhcHN1bGF0aW9uIGZvciBzYW1wbGVzIGZpbGVzIG92ZXIgYWxsIHByb2ZpbGUgY2xhc3NlcwotICogYmVsb25naW5nIHRvIHRoZSBzYW1lIGJpbmFyeSBpbWFnZQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgUFJPRklMRV9ICi0jZGVmaW5lIFBST0ZJTEVfSAotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLQotI2luY2x1ZGUgIm9kYi5oIgotI2luY2x1ZGUgIm9wX3R5cGVzLmgiCi0jaW5jbHVkZSAidXRpbGl0eS5oIgotCi1jbGFzcyBvcGRfaGVhZGVyOwotY2xhc3Mgb3BfYmZkOwotCi0vKioKLSAqIENsYXNzIGNvbnRhaW5pbmcgYSBzaW5nbGUgc2FtcGxlIGZpbGUgY29udGVudHMuCi0gKiBpLmUuIHNldCBvZiBjb3VudCB2YWx1ZXMgZm9yIFZNQSBvZmZzZXRzIGZvcgotICogYSBwYXJ0aWN1bGFyIGJpbmFyeS4KLSAqLwotY2xhc3MgcHJvZmlsZV90IDogbm9uY29weWFibGUgewotcHVibGljOgotCS8qKgotCSAqIHByb2ZpbGVfdCAtIGNvbnN0cnVjdCBhbiBlbXB0eSAgcHJvZmlsZV90IG9iamVjdAotCSAqLwotCXByb2ZpbGVfdCgpOwotCi0JLy8vIHJldHVybiB0cnVlIGlmIG5vIHNhbXBsZSBmaWxlIGhhcyBiZWVuIGxvYWRlZAotCWJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiAhZmlsZV9oZWFkZXIuZ2V0KCk7IH0KLSAKLQkvLy8gcmV0dXJuIHRoZSBoZWFkZXIgb2YgdGhlIGxhc3Qgb3BlbmVkIHNhbXBsZXMgZmlsZQotCW9wZF9oZWFkZXIgY29uc3QgJiBnZXRfaGVhZGVyKCkgY29uc3QgewotCQlyZXR1cm4gKmZpbGVfaGVhZGVyOwotCX0KLQotCS8qKgotCSAqIGNvdW50IHNhbXBsZXMgY291bnQgdy9vIHJlY29yZGluZyB0aGVtCi0JICogQHBhcmFtIGZpbGVuYW1lIHNhbXBsZSBmaWxlbmFtZQotCSAqCi0JICogY29udmVuaWVuY2UgaW50ZXJmYWNlIGZvciByYXcgYWNjZXNzIHRvIHNhbXBsZSBjb3VudCB3L28gcmVjb3JkaW5nCi0JICogdGhlbS4gSXQncyBwbGFjZWQgaGVyZSBzbyBhbGwgYWNjZXNzIHRvIHNhbXBsZXMgZmlsZXMgZ28gdGhyb3VnaAotCSAqIHByb2ZpbGVfdCBzdGF0aWMgb3Igbm9uIHN0YXRpYyBtZW1iZXIuCi0JICovCi0Jc3RhdGljIHVuc2lnbmVkIGludCBzYW1wbGVfY291bnQoc3RkOjpzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSk7Ci0KLQkvKioKLQkgKiBjdW11bGF0ZSBzYW1wbGUgZmlsZSB0byBvdXIgY29udGFpbmVyIG9mIHNhbXBsZXMKLQkgKiBAcGFyYW0gZmlsZW5hbWUgIHNhbXBsZSBmaWxlIG5hbWUKLQkgKgotCSAqIHN0b3JlIHNhbXBsZXMgZm9yIG9uZSBzYW1wbGUgZmlsZSwgc2FtcGxlIGZpbGUgaGVhZGVyIGlzIHNhbml0aXplZC4KLQkgKgotCSAqIGFsbCBlcnJvciBhcmUgZmF0YWwKLQkgKi8KLQl2b2lkIGFkZF9zYW1wbGVfZmlsZShzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lKTsKLQotCS8vLyBTZXQgYW4gYXBwcm9wcmlhdGUgc3RhcnQgb2Zmc2V0LCBzZWUgY29tbWVudHMgYmVsb3cuCi0Jdm9pZCBzZXRfb2Zmc2V0KG9wX2JmZCBjb25zdCAmIGFiZmQpOwotCi0JY2xhc3MgY29uc3RfaXRlcmF0b3I7Ci0JdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBpdGVyYXRvcl9wYWlyOwotCi0JLyoqCi0JICogQHBhcmFtIHN0YXJ0ICBzdGFydCBvZmZzZXQKLQkgKiBAcGFyYW0gZW5kICBlbmQgb2Zmc2V0Ci0JICoKLQkgKiByZXR1cm4gYW4gaXRlcmF0b3IgcGFpciB0byBbc3RhcnQsIGVuZCkgcmFuZ2UKLQkgKi8KLQlpdGVyYXRvcl9wYWlyCi0Jc2FtcGxlc19yYW5nZShvZGJfa2V5X3Qgc3RhcnQsIG9kYl9rZXlfdCBlbmQpIGNvbnN0OwotCi0JLy8vIHJldHVybiBhIHBhaXIgb2YgaXRlcmF0b3IgZm9yIGFsbCBzYW1wbGVzCi0JaXRlcmF0b3JfcGFpciBzYW1wbGVzX3JhbmdlKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0JLy8vIGhlbHBlciBmb3Igc2FtcGxlX2NvdW50KCkgYW5kIGFkZF9zYW1wbGVfZmlsZSgpLiBBbGwgZXJyb3IgbGF1bmNoCi0JLy8vIGFuIGV4Y2VwdGlvbi4KLQlzdGF0aWMgdm9pZAotCW9wZW5fc2FtcGxlX2ZpbGUoc3RkOjpzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSwgb2RiX3QgJik7Ci0KLQkvLy8gY29weSBvZiB0aGUgc2FtcGxlcyBmaWxlIGhlYWRlcgotCXNjb3BlZF9wdHI8b3BkX2hlYWRlcj4gZmlsZV9oZWFkZXI7Ci0KLQkvLy8gc3RvcmFnZSB0eXBlIGZvciBzYW1wbGVzIHNvcnRlZCBieSBlaXAKLQl0eXBlZGVmIHN0ZDo6bWFwPG9kYl9rZXlfdCwgb2RiX3ZhbHVlX3Q+IG9yZGVyZWRfc2FtcGxlc190OwotCi0JLyoqCi0JICogU2FtcGxlcyBhcmUgc3RvcmVkIGluIGhhc2ggdGFibGUsIGl0ZXJhdGluZyBvdmVyIGhhc2ggdGFibGUgZG9uJ3QKLQkgKiBwcm92aWRlIGFueSBvcmRlcmluZywgdGhlIGFib3ZlIGNvdW50KCkgaW50ZXJmYWNlIHJlbHkgb24gc2FtcGxlcwotCSAqIG9yZGVyZWQgYnkgZWlwLiBUaGlzIG1hcCBpcyBvbmx5IGEgdGVtcG9yYXJ5IHN0b3JhZ2Ugd2hlcmUgc2FtcGxlcwotCSAqIGFyZSBvcmRlcmVkIGJ5IGVpcC4KLQkgKi8KLQlvcmRlcmVkX3NhbXBsZXNfdCBvcmRlcmVkX3NhbXBsZXM7Ci0KLQkvKioKLQkgKiBGb3IgY2VydGFpbiBwcm9maWxlcywgc3VjaCBhcyBrZXJuZWwvbW9kdWxlcywgYW5kIGFub24KLQkgKiByZWdpb25zIHdpdGggYSBtYXRjaGluZyBiaW5hcnksIHRoaXMgdmFsdWUgaXMgbm9uLXplcm8sCi0JICogYW5kIHJlcHJlc2VudHMgdGhlIGZpbGUgb2Zmc2V0IG9mIHRoZSByZWxldmFudCBzZWN0aW9uLgotCSAqCi0JICogRm9yIGtlcm5lbCBwcm9maWxlcywgdGhpcyBpcyBkb25lIGJlY2F1c2Ugd2UgdXNlIHRoZSBpbmZvcm1hdGlvbgotCSAqIHByb3ZpZGVkIGluIC9wcm9jL2tzeW1zLCB3aGljaCBvbmx5IGdpdmVzIHRoZSBtYXBwZWQgcG9zaXRpb24gb2YKLQkgKiAudGV4dCwgYW5kIHRoZSBzeW1ib2wgX3RleHQgZnJvbSB2bWxpbnV4LiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gZml4Ci0JICogdXAgdGhlIHNhbXBsZSBvZmZzZXRzIGZvciBrZXJuZWwgY29kZSBhcyBhIHJlc3VsdCBvZiB0aGlzIGRpZmZlcmVuY2UKLQkgKgotCSAqIEluIHVzZXItc3BhY2Ugc2FtcGxlcywgdGhlIHNhbXBsZSBvZmZzZXQgaXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlCi0JICogbWFwcGVkIGZpbGUsIGFzIHNlZW4gaW4gL3Byb2MvcGlkL21hcHMuIFRoaXMgaXMgZmluZSBmb3IKLQkgKiBtYXBwaW5ncyBvZiBwZXJtYW5lbnQgZmlsZXMsIGJ1dCB3aXRoIGFub24gbWFwcGluZ3MsIHdlIG5lZWQKLQkgKiB0byBhZGp1c3QgdGhlIGtleSB2YWx1ZXMgdG8gYmUgYSBmaWxlIG9mZnNldCBhZ2FpbnN0IHRoZQotCSAqICpiaW5hcnkqIChpZiB0aGVyZSBpcyBvbmUpLiBUaGlzIGNhbiBvYnZpb3VzbHkgYmUgZGlmZmVyZW50LgotCSAqIFNvIHdlIHBhc3Mgb3VyIGFub24gbWFwcGluZyBzdGFydCBWTUEgdG8gb3BfYmZkLCB3aGljaCBsb29rcwotCSAqIGZvciBhIHNlY3Rpb24gd2l0aCB0aGF0IFZNQSwgdGhlbiByZXR1cm5zIHRoZSBzZWN0aW9uJ3MKLQkgKiBmaWxlcG9zLiBTbyBhbGwgaXMgZ29vZC4KLQkgKgotCSAqIEZpbmFsbHksIG5vdGUgdGhhdCBmb3IgY2cgd2UgY2FuJ3QgdXNlIHRoaXMgaW5zaWRlIHRoZQotCSAqIHByb2ZpbGVfdCwgYXMgd2UncmUgc3RvcmluZyB0d28gb2Zmc2V0cyBpbiB0aGUga2V5IHZhbHVlLiBTbwotCSAqIHdlIGRvIGl0IGxhdGVyIGluIHRoYXQgY2FzZS4KLQkgKgotCSAqIFBoZXcuCi0JICovCi0JdTMyIHN0YXJ0X29mZnNldDsKLX07Ci0KLQotLy8gSXQgd2lsbCBiZSBlYXNpZXIgdG8gZGVyaXZlIHByb2ZpbGVfdDo6Y29uc3RfaXRlcmF0b3IgZnJvbQotLy8gc3RkOjppdGVyYXRvcjxzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZywgdW5zaWduZWQgaW50PiBidXQgdGhpcyBkb2Vzbid0Ci0vLyB3b3JrIGZvciBnY2MgPD0gMi45NSBzbyB3ZSBwcm92aWRlIHRoZSBuZWNjZXNzYXJ5IHR5cGVkZWYgaW4gdGhlIGhhcmQgd2F5LgotLy8gU2VlIElTTyBDKysgMTcuNC4zLjEgpyAxIGFuZCAxNC43LjMgpyA5LgotbmFtZXNwYWNlIHN0ZCB7Ci0JdGVtcGxhdGUgPD4KLQkJc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxwcm9maWxlX3Q6OmNvbnN0X2l0ZXJhdG9yPiB7Ci0JCQl0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0JCQl0eXBlZGVmIHVuc2lnbmVkIGludCB2YWx1ZV90eXBlOwotCQkJdHlwZWRlZiB1bnNpZ25lZCBpbnQgKiBwb2ludGVyOwotCQkJdHlwZWRlZiB1bnNpZ25lZCBpbnQgJiByZWZlcmVuY2U7Ci0JCQl0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKLQkJfTsKLX0KLQotCi1jbGFzcyBwcm9maWxlX3Q6OmNvbnN0X2l0ZXJhdG9yCi17Ci0JdHlwZWRlZiBvcmRlcmVkX3NhbXBsZXNfdDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3JfdDsKLXB1YmxpYzoKLQljb25zdF9pdGVyYXRvcigpIDogc3RhcnRfb2Zmc2V0KDApIHt9Ci0JY29uc3RfaXRlcmF0b3IoaXRlcmF0b3JfdCBpdF8sIHUzMiBzdGFydF9vZmZzZXRfKQotCQk6IGl0KGl0XyksIHN0YXJ0X29mZnNldChzdGFydF9vZmZzZXRfKSB7fQotCi0JdW5zaWduZWQgaW50IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIGl0LT5zZWNvbmQ7IH0KLQljb25zdF9pdGVyYXRvciAmIG9wZXJhdG9yKysoKSB7ICsraXQ7IHJldHVybiAqdGhpczsgfQotCi0Jb2RiX2tleV90IHZtYSgpIGNvbnN0IHsgcmV0dXJuIGl0LT5maXJzdCArIHN0YXJ0X29mZnNldDsgfQotCXVuc2lnbmVkIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuICoqdGhpczsgfQotCi0JYm9vbCBvcGVyYXRvciE9KGNvbnN0X2l0ZXJhdG9yIGNvbnN0ICYgcmhzKSBjb25zdCB7Ci0JCXJldHVybiBpdCAhPSByaHMuaXQ7Ci0JfQotCWJvb2wgb3BlcmF0b3I9PShjb25zdF9pdGVyYXRvciBjb25zdCAmIHJocykgY29uc3QgewotCQlyZXR1cm4gaXQgPT0gcmhzLml0OwotCX0KLQotcHJpdmF0ZToKLQlpdGVyYXRvcl90IGl0OwotCXUzMiBzdGFydF9vZmZzZXQ7Ci19OwotCi0jZW5kaWYgLyogIVBST0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwIGIvbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDQyMmQxLi4wMDAwMDAwCi0tLSBhL2xpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxOCArMCwwIEBACi0vKioKLSAqIEBmaWxlIHByb2ZpbGVfY29udGFpbmVyLmNwcAotICogcHJvZmlsZSBmaWxlIGNvbnRhaW5lcgotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bnVtZXJpYz4KLQotI2luY2x1ZGUgInN5bWJvbC5oIgotI2luY2x1ZGUgIm9wX2hlYWRlci5oIgotI2luY2x1ZGUgInByb2ZpbGUuaCIKLSNpbmNsdWRlICJzeW1ib2xfZnVuY3RvcnMuaCIKLSNpbmNsdWRlICJwcm9maWxlX2NvbnRhaW5lci5oIgotI2luY2x1ZGUgInNhbXBsZV9jb250YWluZXIuaCIKLSNpbmNsdWRlICJzeW1ib2xfY29udGFpbmVyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBmaWxlbmFtZV9ieV9zYW1wbGVzIHsKLQlmaWxlbmFtZV9ieV9zYW1wbGVzKGRlYnVnX25hbWVfaWQgaWQsIGRvdWJsZSBwZXJjZW50XykKLQkJOiBmaWxlbmFtZShpZCksIHBlcmNlbnQocGVyY2VudF8pCi0JCXt9Ci0KLQlib29sIG9wZXJhdG9yPChmaWxlbmFtZV9ieV9zYW1wbGVzIGNvbnN0ICYgbGhzKSBjb25zdCB7Ci0JCWlmIChwZXJjZW50ICE9IGxocy5wZXJjZW50KQotCQkJcmV0dXJuIHBlcmNlbnQgPCBsaHMucGVyY2VudDsKLQkJcmV0dXJuIGZpbGVuYW1lIDwgbGhzLmZpbGVuYW1lOwotCX0KLQotCWRlYnVnX25hbWVfaWQgZmlsZW5hbWU7Ci0JLy8gcmF0aW8gb2Ygc2FtcGxlcyB3aGljaCBiZWxvbmdzIHRvIHRoaXMgZmlsZW5hbWUuCi0JZG91YmxlIHBlcmNlbnQ7Ci19OwotCi19ICAvLyBhbm9uIG5hbWVzcGFjZQotCi0KLXByb2ZpbGVfY29udGFpbmVyOjpwcm9maWxlX2NvbnRhaW5lcihib29sIGRlYnVnX2luZm9fLCBib29sIG5lZWRfZGV0YWlsc18pCi0JOgotCXN5bWJvbHMobmV3IHN5bWJvbF9jb250YWluZXIpLAotCXNhbXBsZXMobmV3IHNhbXBsZV9jb250YWluZXIpLAotCWRlYnVnX2luZm8oZGVidWdfaW5mb18pLAotCW5lZWRfZGV0YWlscyhuZWVkX2RldGFpbHNfKQotewotfQotCi0KLXByb2ZpbGVfY29udGFpbmVyOjp+cHJvZmlsZV9jb250YWluZXIoKQotewotfQotIAotCi0vLyBQb3N0IGNvbmRpdGlvbjoKLS8vICB0aGUgc3ltYm9scy9zYW1wbGVzIGFyZSBzb3J0ZWQgYnkgaW5jcmVhc2luZyB2bWEuCi0vLyAgdGhlIHJhbmdlIG9mIHNhbXBsZV9lbnRyeSBpbnNpZGUgZWFjaCBzeW1ib2wgZW50cnkgYXJlIHZhbGlkCi0vLyAgdGhlIHNhbXBsZXNfYnlfZmlsZV9sb2MgbWVtYmVyIHZhciBpcyBjb3JyZWN0bHkgc2V0dXAuCi12b2lkIHByb2ZpbGVfY29udGFpbmVyOjphZGQocHJvZmlsZV90IGNvbnN0ICYgcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9iZmQgY29uc3QgJiBhYmZkLCBzdHJpbmcgY29uc3QgJiBhcHBfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGNsYXNzKQotewotCXN0cmluZyBjb25zdCBpbWFnZV9uYW1lID0gYWJmZC5nZXRfZmlsZW5hbWUoKTsKLQotCWZvciAoc3ltYm9sX2luZGV4X3QgaSA9IDA7IGkgPCBhYmZkLnN5bXMuc2l6ZSgpOyArK2kpIHsKLQotCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7Ci0JCXN5bWJvbF9lbnRyeSBzeW1iX2VudHJ5OwotCi0JCWFiZmQuZ2V0X3N5bWJvbF9yYW5nZShpLCBzdGFydCwgZW5kKTsKLQotCQlwcm9maWxlX3Q6Oml0ZXJhdG9yX3BhaXIgcF9pdCA9Ci0JCQlwcm9maWxlLnNhbXBsZXNfcmFuZ2Uoc3RhcnQsIGVuZCk7Ci0KLQkJdTMyIGNvdW50ID0gYWNjdW11bGF0ZShwX2l0LmZpcnN0LCBwX2l0LnNlY29uZCwgMCk7Ci0KLQkJLy8gc2tpcCBlbnRyaWVzIHdpdGggbm8gc2FtcGxlcwotCQlpZiAoY291bnQgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCXN5bWJfZW50cnkuc2FtcGxlLmNvdW50c1twY2xhc3NdID0gY291bnQ7Ci0JCXRvdGFsX2NvdW50W3BjbGFzc10gKz0gY291bnQ7Ci0KLQkJc3ltYl9lbnRyeS5zaXplID0gZW5kIC0gc3RhcnQ7Ci0KLQkJc3ltYl9lbnRyeS5uYW1lID0gc3ltYm9sX25hbWVzLmNyZWF0ZShhYmZkLnN5bXNbaV0ubmFtZSgpKTsKLQotCQlzeW1iX2VudHJ5LnNhbXBsZS5maWxlX2xvYy5saW5lbnIgPSAwOwotCQlpZiAoZGVidWdfaW5mbykgewotCQkJc3RyaW5nIGZpbGVuYW1lOwotCQkJaWYgKGFiZmQuZ2V0X2xpbmVucihpLCBzdGFydCwgZmlsZW5hbWUsCi0JCQkgICAgc3ltYl9lbnRyeS5zYW1wbGUuZmlsZV9sb2MubGluZW5yKSkgewotCQkJCXN5bWJfZW50cnkuc2FtcGxlLmZpbGVfbG9jLmZpbGVuYW1lID0KLQkJCQkJZGVidWdfbmFtZXMuY3JlYXRlKGZpbGVuYW1lKTsKLQkJCX0KLQkJfQotCi0JCXN5bWJfZW50cnkuaW1hZ2VfbmFtZSA9IGltYWdlX25hbWVzLmNyZWF0ZShpbWFnZV9uYW1lKTsKLQkJc3ltYl9lbnRyeS5hcHBfbmFtZSA9IGltYWdlX25hbWVzLmNyZWF0ZShhcHBfbmFtZSk7Ci0KLQkJYmZkX3ZtYSBiYXNlX3ZtYSA9IGFiZmQuc3ltc1tpXS52bWEoKTsKLQotCQlzeW1iX2VudHJ5LnNhbXBsZS52bWEgPSBhYmZkLnN5bV9vZmZzZXQoaSwgc3RhcnQpICsgYmFzZV92bWE7Ci0KLQkJc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sID0gc3ltYm9scy0+aW5zZXJ0KHN5bWJfZW50cnkpOwotCi0JCWlmIChuZWVkX2RldGFpbHMpIHsKLQkJCWFkZF9zYW1wbGVzKGFiZmQsIGksIHBfaXQsIHN5bWJvbCwgcGNsYXNzKTsKLQkJfQotCX0KLX0KLQotCi12b2lkCi1wcm9maWxlX2NvbnRhaW5lcjo6YWRkX3NhbXBsZXMob3BfYmZkIGNvbnN0ICYgYWJmZCwgc3ltYm9sX2luZGV4X3Qgc3ltX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVfdDo6aXRlcmF0b3JfcGFpciBjb25zdCAmIHBfaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sLCBzaXplX3QgcGNsYXNzKQotewotCWJmZF92bWEgYmFzZV92bWEgPSBhYmZkLnN5bXNbc3ltX2luZGV4XS52bWEoKTsKLQotCXByb2ZpbGVfdDo6Y29uc3RfaXRlcmF0b3IgaXQ7Ci0JZm9yIChpdCA9IHBfaXQuZmlyc3Q7IGl0ICE9IHBfaXQuc2Vjb25kIDsgKytpdCkgewotCQlzYW1wbGVfZW50cnkgc2FtcGxlOwotCi0JCXNhbXBsZS5jb3VudHNbcGNsYXNzXSA9IGl0LmNvdW50KCk7Ci0KLQkJc2FtcGxlLmZpbGVfbG9jLmxpbmVuciA9IDA7Ci0JCWlmIChkZWJ1Z19pbmZvKSB7Ci0JCQlzdHJpbmcgZmlsZW5hbWU7Ci0JCQlpZiAoYWJmZC5nZXRfbGluZW5yKHN5bV9pbmRleCwgaXQudm1hKCksIGZpbGVuYW1lLAotCQkJCQkgICAgc2FtcGxlLmZpbGVfbG9jLmxpbmVucikpIHsKLQkJCQlzYW1wbGUuZmlsZV9sb2MuZmlsZW5hbWUgPQotCQkJCQlkZWJ1Z19uYW1lcy5jcmVhdGUoZmlsZW5hbWUpOwotCQkJfQotCQl9Ci0KLQkJc2FtcGxlLnZtYSA9IGFiZmQuc3ltX29mZnNldChzeW1faW5kZXgsIGl0LnZtYSgpKSArIGJhc2Vfdm1hOwotCi0JCXNhbXBsZXMtPmluc2VydChzeW1ib2wsIHNhbXBsZSk7Ci0JfQotfQotCi0KLXN5bWJvbF9jb2xsZWN0aW9uIGNvbnN0Ci1wcm9maWxlX2NvbnRhaW5lcjo6c2VsZWN0X3N5bWJvbHMoc3ltYm9sX2Nob2ljZSAmIGNob2ljZSkgY29uc3QKLXsKLQlzeW1ib2xfY29sbGVjdGlvbiByZXN1bHQ7Ci0KLQlkb3VibGUgY29uc3QgdGhyZXNob2xkID0gY2hvaWNlLnRocmVzaG9sZCAvIDEwMC4wOwotCi0Jc3ltYm9sX2NvbnRhaW5lcjo6c3ltYm9sc190OjppdGVyYXRvciBpdCA9IHN5bWJvbHMtPmJlZ2luKCk7Ci0Jc3ltYm9sX2NvbnRhaW5lcjo6c3ltYm9sc190OjppdGVyYXRvciBjb25zdCBlbmQgPSBzeW1ib2xzLT5lbmQoKTsKLQotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJaWYgKGNob2ljZS5tYXRjaF9pbWFnZQotCQkgICAgJiYgKGltYWdlX25hbWVzLm5hbWUoaXQtPmltYWdlX25hbWUpICE9IGNob2ljZS5pbWFnZV9uYW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWRvdWJsZSBjb25zdCBwZXJjZW50ID0KLQkJCW9wX3JhdGlvKGl0LT5zYW1wbGUuY291bnRzWzBdLCB0b3RhbF9jb3VudFswXSk7Ci0KLQkJaWYgKHBlcmNlbnQgPj0gdGhyZXNob2xkKSB7Ci0JCQlyZXN1bHQucHVzaF9iYWNrKCYqaXQpOwotCi0JCQljaG9pY2UuaGludHMgPSBpdC0+b3V0cHV0X2hpbnQoY2hvaWNlLmhpbnRzKTsKLQkJfQotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLQotdmVjdG9yPGRlYnVnX25hbWVfaWQ+IGNvbnN0Ci1wcm9maWxlX2NvbnRhaW5lcjo6c2VsZWN0X2ZpbGVuYW1lKGRvdWJsZSB0aHJlc2hvbGQpIGNvbnN0Ci17Ci0Jc2V0PGRlYnVnX25hbWVfaWQ+IGZpbGVuYW1lX3NldDsKLQotCXRocmVzaG9sZCAvPSAxMDAuMDsKLQotCS8vIFRyeWluZyB0byBpdGVyYXRlIG9uIHN5bWJvbHMgdG8gY3JlYXRlIHRoZSBzZXQgb2YgZmlsZW5hbWVzIHdoaWNoCi0JLy8gY29udGFpbiBzYW1wbGUgZG9lcyBub3Qgd29yazogYSBzeW1ib2wgY2FuIGNvbnRhaW4gc2FtcGxlcyBhbmQgdGhpcwotCS8vIHN5bWJvbCBpcyBpbiBhIHNvdXJjZSBmaWxlIHRoYXQgY29udGFpbiB6ZXJvIHNhbXBsZSBiZWNhdXNlIG9ubHkKLQkvLyBpbmxpbmUgZnVuY3Rpb24gaW4gdGhpcyBzb3VyY2UgZmlsZSBjb250YWlucyBzYW1wbGVzLgotCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3Igc2l0ID0gc2FtcGxlcy0+YmVnaW4oKTsKLQlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGNvbnN0IHNlbmQgPSBzYW1wbGVzLT5lbmQoKTsKLQotCWZvciAoOyBzaXQgIT0gc2VuZDsgKytzaXQpIHsKLQkJZGVidWdfbmFtZV9pZCBuYW1lX2lkID0gc2l0LT5zZWNvbmQuZmlsZV9sb2MuZmlsZW5hbWU7Ci0JCWlmIChuYW1lX2lkLnNldCgpKSB7Ci0JCQlmaWxlbmFtZV9zZXQuaW5zZXJ0KG5hbWVfaWQpOwotCQl9Ci0JfQotCi0JLy8gR2l2ZSBhIHNvcnQgb3JkZXIgb24gZmlsZW5hbWUgZm9yIHRoZSBzZWxlY3RlZCBwY2xhc3MuCi0JdmVjdG9yPGZpbGVuYW1lX2J5X3NhbXBsZXM+IGZpbGVfYnlfc2FtcGxlczsKLQotCXNldDxkZWJ1Z19uYW1lX2lkPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWxlbmFtZV9zZXQuYmVnaW4oKTsKLQlzZXQ8ZGVidWdfbmFtZV9pZD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGZpbGVuYW1lX3NldC5lbmQoKTsKLQlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCS8vIEZJWE1FOiBpcyBzYW1wbGVzX2NvdW50KCkgdGhlIHJpZ2h0IGludGVyZmFjZSBub3cgPwotCQljb3VudF9hcnJheV90IGNvdW50cyA9IHNhbXBsZXNfY291bnQoKml0KTsKLQotCQlkb3VibGUgY29uc3QgcmF0aW8gPSBvcF9yYXRpbyhjb3VudHNbMF0sIHRvdGFsX2NvdW50WzBdKTsKLQkJZmlsZW5hbWVfYnlfc2FtcGxlcyBjb25zdCBmKCppdCwgcmF0aW8pOwotCi0JCWZpbGVfYnlfc2FtcGxlcy5wdXNoX2JhY2soZik7Ci0JfQotCi0JLy8gbm93IHNvcnQgdGhlIGZpbGVfYnlfc2FtcGxlcyBlbnRyeS4KLQlzb3J0KGZpbGVfYnlfc2FtcGxlcy5iZWdpbigpLCBmaWxlX2J5X3NhbXBsZXMuZW5kKCkpOwotCi0JLy8gMi45MS42NiBkb2Vzbid0IGxpa2UgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBpbiB0aGlzIGNvbnRleHQKLQl2ZWN0b3I8ZmlsZW5hbWVfYnlfc2FtcGxlcz46OnJldmVyc2VfaXRlcmF0b3IgY2l0Ci0JCT0gZmlsZV9ieV9zYW1wbGVzLnJiZWdpbigpOwotCXZlY3RvcjxmaWxlbmFtZV9ieV9zYW1wbGVzPjo6cmV2ZXJzZV9pdGVyYXRvciBjb25zdCBjZW5kCi0JCT0gZmlsZV9ieV9zYW1wbGVzLnJlbmQoKTsKLQotCXZlY3RvcjxkZWJ1Z19uYW1lX2lkPiByZXN1bHQ7Ci0JZm9yICg7IGNpdCAhPSBjZW5kOyArK2NpdCkgewotCQlpZiAoY2l0LT5wZXJjZW50ID49IHRocmVzaG9sZCkKLQkJCXJlc3VsdC5wdXNoX2JhY2soY2l0LT5maWxlbmFtZSk7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1jb3VudF9hcnJheV90IHByb2ZpbGVfY29udGFpbmVyOjpzYW1wbGVzX2NvdW50KCkgY29uc3QKLXsKLQlyZXR1cm4gdG90YWxfY291bnQ7Ci19Ci0KLQotLy8gUmVzdCBoZXJlIGFyZSBkZWxlZ2F0ZWQgdG8gb3VyIHByaXZhdGUgaW1wbGVtZW50YXRpb24uCi0KLXN5bWJvbF9lbnRyeSBjb25zdCAqCi1wcm9maWxlX2NvbnRhaW5lcjo6ZmluZF9zeW1ib2woc3RyaW5nIGNvbnN0ICYgaW1hZ2VfbmFtZSwgYmZkX3ZtYSB2bWEpIGNvbnN0Ci17Ci0JcmV0dXJuIHN5bWJvbHMtPmZpbmRfYnlfdm1hKGltYWdlX25hbWUsIHZtYSk7Ci19Ci0KLQotc3ltYm9sX2VudHJ5IGNvbnN0ICoKLXByb2ZpbGVfY29udGFpbmVyOjpmaW5kX3N5bWJvbChkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lLCBzaXplX3QgbGluZW5yKSBjb25zdAotewotCXJldHVybiBzeW1ib2xzLT5maW5kKGZpbGVuYW1lLCBsaW5lbnIpOwotfQotCi0KLXNhbXBsZV9lbnRyeSBjb25zdCAqCi1wcm9maWxlX2NvbnRhaW5lcjo6ZmluZF9zYW1wbGUoc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sLCBiZmRfdm1hIHZtYSkgY29uc3QKLXsKLQlyZXR1cm4gc2FtcGxlcy0+ZmluZF9ieV92bWEoc3ltYm9sLCB2bWEpOwotfQotCi0KLWNvdW50X2FycmF5X3QgcHJvZmlsZV9jb250YWluZXI6OnNhbXBsZXNfY291bnQoZGVidWdfbmFtZV9pZCBmaWxlbmFtZV9pZCkgY29uc3QKLXsKLQlyZXR1cm4gc2FtcGxlcy0+YWNjdW11bGF0ZV9zYW1wbGVzKGZpbGVuYW1lX2lkKTsKLX0KLQotCi1jb3VudF9hcnJheV90IHByb2ZpbGVfY29udGFpbmVyOjpzYW1wbGVzX2NvdW50KGRlYnVnX25hbWVfaWQgZmlsZW5hbWUsCi0JCQkJICAgIHNpemVfdCBsaW5lbnIpIGNvbnN0Ci17Ci0JcmV0dXJuIHNhbXBsZXMtPmFjY3VtdWxhdGVfc2FtcGxlcyhmaWxlbmFtZSwgbGluZW5yKTsKLX0KLQotCi1zYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yCi1wcm9maWxlX2NvbnRhaW5lcjo6YmVnaW4oc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sKSBjb25zdAotewotCXJldHVybiBzYW1wbGVzLT5iZWdpbihzeW1ib2wpOwotfQotCi0KLXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IKLXByb2ZpbGVfY29udGFpbmVyOjplbmQoc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sKSBjb25zdAotewotCXJldHVybiBzYW1wbGVzLT5lbmQoc3ltYm9sKTsKLX0KLQotCi1zYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIHByb2ZpbGVfY29udGFpbmVyOjpiZWdpbigpIGNvbnN0Ci17Ci0JcmV0dXJuIHNhbXBsZXMtPmJlZ2luKCk7Ci19Ci0KLQotc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBwcm9maWxlX2NvbnRhaW5lcjo6ZW5kKCkgY29uc3QKLXsKLQlyZXR1cm4gc2FtcGxlcy0+ZW5kKCk7Ci19Ci0KLXN5bWJvbF9lbnRyeSBjb25zdCAqIHByb2ZpbGVfY29udGFpbmVyOjpmaW5kKHN5bWJvbF9lbnRyeSBjb25zdCAmIHN5bWJvbCkgY29uc3QKLXsKLQlyZXR1cm4gc3ltYm9scy0+ZmluZChzeW1ib2wpOwotfQotCi1zeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIHByb2ZpbGVfY29udGFpbmVyOjpiZWdpbl9zeW1ib2woKSBjb25zdAotewotCXJldHVybiBzeW1ib2xzLT5iZWdpbigpOwotfQotCi1zeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIHByb2ZpbGVfY29udGFpbmVyOjplbmRfc3ltYm9sKCkgY29uc3QKLXsKLQlyZXR1cm4gc3ltYm9scy0+ZW5kKCk7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9wcm9maWxlX2NvbnRhaW5lci5oIGIvbGlicHAvcHJvZmlsZV9jb250YWluZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzZWNmYy4uMDAwMDAwMAotLS0gYS9saWJwcC9wcm9maWxlX2NvbnRhaW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qKgotICogQGZpbGUgcHJvZmlsZV9jb250YWluZXIuaAotICogQ29udGFpbmVyIGFzc29jaWF0aW5nIHN5bWJvbHMgYW5kIHNhbXBsZXMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIFBST0ZJTEVfQ09OVEFJTkVSX0gKLSNkZWZpbmUgUFJPRklMRV9DT05UQUlORVJfSAotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgInByb2ZpbGUuaCIKLSNpbmNsdWRlICJ1dGlsaXR5LmgiCi0jaW5jbHVkZSAib3BfYmZkLmgiCi0jaW5jbHVkZSAic2FtcGxlX2NvbnRhaW5lci5oIgotI2luY2x1ZGUgInN5bWJvbF9jb250YWluZXIuaCIKLSNpbmNsdWRlICJmb3JtYXRfZmxhZ3MuaCIKLQotY2xhc3Mgc3RyaW5nX2ZpbHRlcjsKLWNsYXNzIHN5bWJvbF9lbnRyeTsKLWNsYXNzIHNhbXBsZV9lbnRyeTsKLQotLyoqCi0gKiBTdG9yZSBtdWx0aXBsZSBzYW1wbGVzIGZpbGVzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBwcm9maWxpbmcgc2Vzc2lvbi4KLSAqIFRoaXMgaXMgdGhlIG1haW4gY29udGFpbmVyIGNhcGFibGUgb2YgaG9sZGluZyB0aGUgcHJvZmlsZXMgZm9yIGFyYml0cmFyeQotICogYmluYXJ5IGltYWdlcyBhbmQgYXJiaXRyYXJ5IHByb2ZpbGUgY2xhc3Nlcy4KLSAqLwotY2xhc3MgcHJvZmlsZV9jb250YWluZXIgOiBub25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0JLyoqCi0JICogQnVpbGQgYW4gb2JqZWN0IHRvIHN0b3JlIGluZm9ybWF0aW9uIG9uIHNhbXBsZXMuIEFsbCBwYXJhbWV0ZXJzCi0JICogYWN0cyBhcyBoaW50IGZvciB3aGF0IHlvdSB3aWxsIHJlcXVlc3QgYWZ0ZXIgcmVjb3JkaW5nIHNhbXBsZXMgYW5kCi0JICogc28gYWxsb3cgb3B0aW1pemF0aW9ucyBkdXJpbmcgcmVjb3JkaW5nIHRoZSBpbmZvcm1hdGlvbi4KLQkgKgotCSAqIEBwYXJhbSBkZWJ1Z19pbmZvIElmIHRydWUgbGluZSBudW1iZXJzIGFuZCBzb3VyY2UgZmlsZXMgYXJlIHJlY29yZGVkLgotCSAqCi0JICogQHBhcmFtIG5lZWRfZGV0YWlscyBJZiB0cnVlIGlmIHdlIG5lZWQgdG8gcmVjb3JkIGFsbCBzYW1wbGVzIG9yIHRvCi0JICogdG8gcmVjb3JkIHRoZW0gYXQgc3ltYm9sIGxldmVsLgotCSAqLwotCXByb2ZpbGVfY29udGFpbmVyKGJvb2wgZGVidWdfaW5mbywgYm9vbCBuZWVkX2RldGFpbHMpOwotCi0JfnByb2ZpbGVfY29udGFpbmVyKCk7Ci0gCi0JLyoqCi0JICogYWRkKCkgLSByZWNvcmQgc3ltYm9scy9zYW1wbGVzIGluIHRoZSB1bmRlcmx5aW5nIGNvbnRhaW5lcgotCSAqCi0JICogQHBhcmFtIHByb2ZpbGUgdGhlIHNhbXBsZXMgZmlsZXMgY29udGFpbmVyCi0JICogQHBhcmFtIGFiZmQgdGhlIGFzc29jaWF0ZWQgYmZkIG9iamVjdAotCSAqIEBwYXJhbSBhcHBfbmFtZSB0aGUgb3duaW5nIGFwcGxpY2F0aW9uIG5hbWUgb2Ygc2FtcGxlCi0JICogQHBhcmFtIHBjbGFzcyB0aGUgcHJvZmlsZSBjbGFzcyB0byBhZGQgcmVzdWx0cyBmb3IKLQkgKgotCSAqIGFkZCgpIGlzIGFuIGhlbHBlciBmb3IgZGVsYXllZCBjdG9yLiBUYWtlIGNhcmUgeW91IGNhbid0IHNhZmVseQotCSAqIG1ha2UgYW55IGNhbGwgdG8gYWRkIGFmdGVyIGFueSBvdGhlciBtZW1iZXIgZnVuY3Rpb24gY2FsbC4KLQkgKiBPYnZpb3VzbHkgeW91IGNhbiBhZGQgb25seSBzYW1wbGVzIGZpbGVzIHdoaWNoIGFyZSBjb2hlcmVudCAoc2FtZQotCSAqIHNhbXBsaW5nIHJhdGUsIHNhbWUgZXZlbnRzIGV0Yy4pCi0JICovCi0Jdm9pZCBhZGQocHJvZmlsZV90IGNvbnN0ICYgcHJvZmlsZSwgb3BfYmZkIGNvbnN0ICYgYWJmZCwKLQkJIHN0ZDo6c3RyaW5nIGNvbnN0ICYgYXBwX25hbWUsIHNpemVfdCBwY2xhc3MpOwotCi0JLy8vIEZpbmQgYSBzeW1ib2wgZnJvbSBpdHMgaW1hZ2VfbmFtZSwgdm1hLCByZXR1cm4gemVybyBpZiBubyBzeW1ib2wKLQkvLy8gZm9yIHRoaXMgaW1hZ2UgYXQgdGhpcyB2bWEKLQlzeW1ib2xfZW50cnkgY29uc3QgKiBmaW5kX3N5bWJvbChzdGQ6OnN0cmluZyBjb25zdCAmIGltYWdlX25hbWUsCi0JCQkJCSBiZmRfdm1hIHZtYSkgY29uc3Q7Ci0KLQkvLy8gRmluZCBhIHN5bWJvbCBmcm9tIGl0cyBmaWxlbmFtZSwgbGluZW5yLCByZXR1cm4gemVybyBpZiBubyBzeW1ib2wKLQkvLy8gYXQgdGhpcyBsb2NhdGlvbgotCXN5bWJvbF9lbnRyeSBjb25zdCAqIGZpbmRfc3ltYm9sKGRlYnVnX25hbWVfaWQgZmlsZW5hbWUsCi0JCQkJCXNpemVfdCBsaW5lbnIpIGNvbnN0OwotCi0JLy8vIEZpbmQgYSBzYW1wbGUgYnkgaXRzIHN5bWJvbCwgdm1hLCByZXR1cm4gemVybyBpZiB0aGVyZSBpcyBubyBzYW1wbGUKLQkvLy8gYXQgdGhpcyB2bWEKLQlzYW1wbGVfZW50cnkgY29uc3QgKiBmaW5kX3NhbXBsZShzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2wsCi0JCQkJCSBiZmRfdm1hIHZtYSkgY29uc3Q7Ci0KLQkvLy8gRmluZCBhIHN5bWJvbC4gUmV0dXJuIE5VTEwgaWYgbm90IGZvdW5kLgotCXN5bWJvbF9lbnRyeSBjb25zdCAqIGZpbmQoc3ltYm9sX2VudHJ5IGNvbnN0ICYgc3ltYm9sKSBjb25zdDsKLQotCS8vLyB1c2VkIGZvciBzZWxlY3Rfc3ltYm9scygpCi0Jc3RydWN0IHN5bWJvbF9jaG9pY2UgewotCQlzeW1ib2xfY2hvaWNlKCkKLQkJCTogaGludHMoY2Zfbm9uZSksIHRocmVzaG9sZCgwLjApLCBtYXRjaF9pbWFnZShmYWxzZSkge30KLQotCQkvLy8gaGludHMgZmlsbGVkIGluCi0JCWNvbHVtbl9mbGFncyBoaW50czsKLQkJLy8vIHBlcmNlbnRhZ2UgdGhyZXNob2xkCi0JCWRvdWJsZSB0aHJlc2hvbGQ7Ci0JCS8vLyBtYXRjaCB0aGUgaW1hZ2UgbmFtZSBvbmx5Ci0JCWJvb2wgbWF0Y2hfaW1hZ2U7Ci0JCS8vLyBvd25pbmcgaW1hZ2UgbmFtZQotCQlzdGQ6OnN0cmluZyBpbWFnZV9uYW1lOwotCX07Ci0KLQkvKioKLQkgKiBzZWxlY3Rfc3ltYm9scyAtIGNyZWF0ZSBhIHNldCBvZiBzeW1ib2xzIHNvcnRlZCBieSBzYW1wbGUgY291bnQKLQkgKiBAcGFyYW0gY2hvaWNlICBwYXJhbWV0ZXJzIHRvIHVzZS9maWxsIGluIHdoZW4gc2VsZWN0aW5nCi0JICovCi0Jc3ltYm9sX2NvbGxlY3Rpb24gY29uc3Qgc2VsZWN0X3N5bWJvbHMoc3ltYm9sX2Nob2ljZSAmIGNob2ljZSkgY29uc3Q7Ci0KLQkvLy8gTGlrZSBzZWxlY3Rfc3ltYm9scyBmb3IgZmlsZW5hbWUgd2l0aG91dCBhbGxvd2luZyBzb3J0IGJ5IHZtYS4KLQlzdGQ6OnZlY3RvcjxkZWJ1Z19uYW1lX2lkPiBjb25zdCBzZWxlY3RfZmlsZW5hbWUoZG91YmxlIHRocmVzaG9sZCkgY29uc3Q7Ci0KLQkvLy8gcmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2FtcGxlcwotCWNvdW50X2FycmF5X3Qgc2FtcGxlc19jb3VudCgpIGNvbnN0OwotCi0JLy8vIEdldCB0aGUgc2FtcGxlcyBjb3VudCB3aGljaCBiZWxvbmdzIHRvIGZpbGVuYW1lLiBSZXR1cm4gMCBpZgotCS8vLyBubyBzYW1wbGVzIGZvdW5kLgotCWNvdW50X2FycmF5X3Qgc2FtcGxlc19jb3VudChkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lX2lkKSBjb25zdDsKLQkvLy8gR2V0IHRoZSBzYW1wbGVzIGNvdW50IHdoaWNoIGJlbG9uZ3MgdG8gZmlsZW5hbWUsIGxpbmVuci4gUmV0dXJuCi0JLy8vIDAgaWYgbm8gc2FtcGxlcyBmb3VuZC4KLQljb3VudF9hcnJheV90IHNhbXBsZXNfY291bnQoZGVidWdfbmFtZV9pZCBmaWxlbmFtZSwKLQkJCSAgIHNpemVfdCBsaW5lbnIpIGNvbnN0OwotCi0JLy8vIHJldHVybiBhbiBpdGVyYXRvciB0byB0aGUgZmlyc3Qgc3ltYm9sCi0Jc3ltYm9sX2NvbnRhaW5lcjo6c3ltYm9sc190OjppdGVyYXRvciBiZWdpbl9zeW1ib2woKSBjb25zdDsKLQkvLy8gcmV0dXJuIGFuIGl0ZXJhdG9yIHRvIHRoZSBsYXN0IHN5bWJvbAotCXN5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3IgZW5kX3N5bWJvbCgpIGNvbnN0OwotCi0JLy8vIHJldHVybiBpdGVyYXRvciB0byB0aGUgZmlyc3Qgc2FtcGxlcwotCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLQkvLy8gcmV0dXJuIGl0ZXJhdG9yIHRvIHRoZSBsYXN0IHNhbXBsZXMKLQlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGVuZCgpIGNvbnN0OwotCi0JLy8vIHJldHVybiBpdGVyYXRvciB0byB0aGUgZmlyc3Qgc2FtcGxlcyBmb3IgdGhpcyBzeW1ib2wKLQlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGJlZ2luKHN5bWJvbF9lbnRyeSBjb25zdCAqKSBjb25zdDsKLQkvLy8gcmV0dXJuIGl0ZXJhdG9yIHRvIHRoZSBsYXN0IHNhbXBsZXMgZm9yIHRoaXMgc3ltYm9sCi0Jc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBlbmQoc3ltYm9sX2VudHJ5IGNvbnN0ICopIGNvbnN0OwotCi1wcml2YXRlOgotCS8vLyBoZWxwZXIgZm9yIGFkZCgpCi0Jdm9pZCBhZGRfc2FtcGxlcyhvcF9iZmQgY29uc3QgJiBhYmZkLCBzeW1ib2xfaW5kZXhfdCBzeW1faW5kZXgsCi0JICAgICAgICAgICAgICAgICBwcm9maWxlX3Q6Oml0ZXJhdG9yX3BhaXIgY29uc3QgJiwKLQkgICAgICAgICAgICAgICAgIHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWJvbCwgc2l6ZV90IHBjbGFzcyk7Ci0KLQkvKioKLQkgKiBjcmVhdGUgYW4gdW5pcXVlIGFydGlmaWNpYWwgc3ltYm9sIGZvciBhbiBvZmZzZXQgcmFuZ2UuIFRoZSByYW5nZQotCSAqIGlzIG9ubHkgYSBoaW50IG9mIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNyZWF0ZWQgc3ltYm9sLiBXZQotCSAqIGdpdmUgdG8gdGhlIHN5bWJvbCBhbiB1bmlxdWUgbmFtZSBhcyA/aW1hZ2VfZmlsZV9uYW1lI29yZGVyIGFuZAotCSAqIGEgcmFuZ2UgdXAgdG8gdGhlIG5lYXJlc3Qgb2Ygc3ltcyBvciBmb3IgdGhlIHdob2xlIHJhbmdlIGlmIG5vCi0JICogc3ltcyBleGlzdCBhZnRlciB0aGUgc3RhcnQgb2Zmc2V0LiB0aGUgZW5kIHBhcmFtZXRlciBpcyB1cGRhdGVkCi0JICogdG8gcmVmbGVjdCB0aGUgc3ltYm9sIHJhbmdlLgotCSAqCi0JICogVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRvIHRyeSB0byBjcmVhdGUgc3ltYm9scyBmb3IgYWxpZ25tZW50IGJldHdlZW4KLQkgKiBmdW5jdGlvbiBhcyBsaXR0bGUgYXMgcG9zc2libGUgYW5kIHRvIGNyZWF0ZSBtZWFuaW5nZnVsbCBzeW1ib2xzCi0JICogZm9yIHNwZWNpYWwgY2FzZSBzdWNoIGltYWdlIHcvbyBzeW1ib2wuCi0JICovCi0Jc3RkOjpzdHJpbmcgY3JlYXRlX2FydGlmaWNpYWxfc3ltYm9sKG9wX2JmZCBjb25zdCAmIGFiZmQsIHUzMiBzdGFydCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICYgZW5kLCBzaXplX3QgJiBvcmRlcik7Ci0KLQkvLy8gVGhlIHN5bWJvbHMgY29sbGVjdGVkIGJ5IHBwIHRvb2xzIHNvcnRlZCBieSBpbmNyZWFzZWQgdm1hLCBwcm92aWRlCi0JLy8vIGFsc28gYSBzb3J0IG9yZGVyIG9uIHNhbXBsZXMgY291bnQgZm9yIGVhY2ggcHJvZmlsZSBjbGFzcwotCXNjb3BlZF9wdHI8c3ltYm9sX2NvbnRhaW5lcj4gc3ltYm9sczsKLQkvLy8gVGhlIHNhbXBsZXMgY291bnQgY29sbGVjdGVkIGJ5IHBwIHRvb2xzIHNvcnRlZCBieSBpbmNyZWFzZWQgdm1hLAotCS8vLyBwcm92aWRlIGFsc28gYSBzb3J0IG9yZGVyIG9uIChmaWxlbmFtZSwgbGluZW5yKQotCXNjb3BlZF9wdHI8c2FtcGxlX2NvbnRhaW5lcj4gc2FtcGxlczsKLQkvLy8gYnVpbGQoKSBtdXN0IGNvdW50IHNhbXBsZXMgY291bnQgZm9yIGVhY2ggcHJvZmlsZSBjbGFzcyBzbyBjYWNoZSBpdAotCS8vLyBoZXJlIHNpbmNlIHVzZXIgb2YgcHJvZmlsZV9jb250YWluZXIgb2Z0ZW4gbmVlZCBpdCBsYXRlci4KLQljb3VudF9hcnJheV90IHRvdGFsX2NvdW50OwotCi0JLyoqCi0JICogT3B0aW1pemF0aW9uIGhpbnRzIGZvciB3aGF0IGluZm9ybWF0aW9uIHdlIGFyZSBnb2luZyB0byBuZWVkLAotCSAqIHNlZSB0aGUgZXhwbGFuYXRpb24gaW4gcHJvZmlsZV9jb250YWluZXIoKQkKLQkgKi8KLQkvL0B7Ci0JYm9vbCBkZWJ1Z19pbmZvOwotCWJvb2wgbmVlZF9kZXRhaWxzOwotCS8vQH0KLX07Ci0KLSNlbmRpZiAvKiAhUFJPRklMRV9DT05UQUlORVJfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicHAvcHJvZmlsZV9zcGVjLmNwcCBiL2xpYnBwL3Byb2ZpbGVfc3BlYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNDRlN2MuLjAwMDAwMDAKLS0tIGEvbGlicHAvcHJvZmlsZV9zcGVjLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0NyArMCwwIEBACi0vKioKLSAqIEBmaWxlIHByb2ZpbGVfc3BlYy5jcHAKLSAqIENvbnRhaW5zIGEgUFAgcHJvZmlsZSBzcGVjaWZpY2F0aW9uCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLSNpbmNsdWRlICJmaWxlX21hbmlwLmgiCi0jaW5jbHVkZSAib3BfY29uZmlnLmgiCi0jaW5jbHVkZSAicHJvZmlsZV9zcGVjLmgiCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0jaW5jbHVkZSAiZ2xvYl9maWx0ZXIuaCIKLSNpbmNsdWRlICJsb2NhdGVfaW1hZ2VzLmgiCi0jaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFBQOjMuNywgZnVsbCBwYXRoLCBvciByZWxhdGl2ZSBwYXRoLiBJZiB3ZSBjYW4ndCBmaW5kIGl0LAotLy8gd2Ugc2hvdWxkIG1haW50YWluIHRoZSBvcmlnaW5hbCB0byBtYWludGFpbiB0aGUgd29yZGV4cCBldGMuCi1zdHJpbmcgY29uc3QgZml4dXBfaW1hZ2Vfc3BlYyhzdHJpbmcgY29uc3QgJiBzdHIsIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQotewotCXN0cmluZyBkdW1teV9hcmNoaXZlX3BhdGg7Ci0JLy8gRklYTUU6IHdoYXQgdG9kbyBpZiBhbiBlcnJvciBpbiBmaW5kX2ltYWdlX3BhdGgoKSA/Ci0JaW1hZ2VfZXJyb3IgZXJyb3I7Ci0JcmV0dXJuIGZpbmRfaW1hZ2VfcGF0aChkdW1teV9hcmNoaXZlX3BhdGgsIHN0ciwgZXh0cmEsIGVycm9yKTsKLX0KLQotCi12b2lkIGZpeHVwX2ltYWdlX3NwZWModmVjdG9yPHN0cmluZz4gJiBpbWFnZXMsIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQotewotCXZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciBpdCA9IGltYWdlcy5iZWdpbigpOwotCXZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciBjb25zdCBlbmQgPSBpbWFnZXMuZW5kKCk7Ci0KLQlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCSppdCA9IGZpeHVwX2ltYWdlX3NwZWMoKml0LCBleHRyYSk7Ci0JfQotfQotCi19ICAvLyBhbm9uIG5hbWVzcGFjZQotCi0KLXByb2ZpbGVfc3BlYzo6cHJvZmlsZV9zcGVjKGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQotCTogZXh0cmEoZXh0cmEpCi17Ci0JcGFyc2VfdGFibGVbImFyY2hpdmUiXSA9ICZwcm9maWxlX3NwZWM6OnBhcnNlX2FyY2hpdmVfcGF0aDsKLQlwYXJzZV90YWJsZVsic2Vzc2lvbiJdID0gJnByb2ZpbGVfc3BlYzo6cGFyc2Vfc2Vzc2lvbjsKLQlwYXJzZV90YWJsZVsic2Vzc2lvbi1leGNsdWRlIl0gPQotCQkmcHJvZmlsZV9zcGVjOjpwYXJzZV9zZXNzaW9uX2V4Y2x1ZGU7Ci0JcGFyc2VfdGFibGVbImltYWdlIl0gPSAmcHJvZmlsZV9zcGVjOjpwYXJzZV9pbWFnZTsKLQlwYXJzZV90YWJsZVsiaW1hZ2UtZXhjbHVkZSJdID0gJnByb2ZpbGVfc3BlYzo6cGFyc2VfaW1hZ2VfZXhjbHVkZTsKLQlwYXJzZV90YWJsZVsibGliLWltYWdlIl0gPSAmcHJvZmlsZV9zcGVjOjpwYXJzZV9saWJfaW1hZ2U7Ci0JcGFyc2VfdGFibGVbImV2ZW50Il0gPSAmcHJvZmlsZV9zcGVjOjpwYXJzZV9ldmVudDsKLQlwYXJzZV90YWJsZVsiY291bnQiXSA9ICZwcm9maWxlX3NwZWM6OnBhcnNlX2NvdW50OwotCXBhcnNlX3RhYmxlWyJ1bml0LW1hc2siXSA9ICZwcm9maWxlX3NwZWM6OnBhcnNlX3VuaXRtYXNrOwotCXBhcnNlX3RhYmxlWyJ0aWQiXSA9ICZwcm9maWxlX3NwZWM6OnBhcnNlX3RpZDsKLQlwYXJzZV90YWJsZVsidGdpZCJdID0gJnByb2ZpbGVfc3BlYzo6cGFyc2VfdGdpZDsKLQlwYXJzZV90YWJsZVsiY3B1Il0gPSAmcHJvZmlsZV9zcGVjOjpwYXJzZV9jcHU7Ci19Ci0KLQotdm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlKHN0cmluZyBjb25zdCAmIHRhZ192YWx1ZSkKLXsKLQlzdHJpbmcgdmFsdWU7Ci0JYWN0aW9uX3QgYWN0aW9uID0gZ2V0X2hhbmRsZXIodGFnX3ZhbHVlLCB2YWx1ZSk7Ci0JaWYgKCFhY3Rpb24pIHsKLQkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicHJvZmlsZV9zcGVjOjpwYXJzZSgpOiBub3QgIgotCQkJCSAgICAgICAiYSB2YWxpZCB0YWcgXCIiICsgdGFnX3ZhbHVlICsgIlwiIik7Ci0JfQotCi0JKHRoaXMtPiphY3Rpb24pKHZhbHVlKTsKLX0KLQotCi1ib29sIHByb2ZpbGVfc3BlYzo6aXNfdmFsaWRfdGFnKHN0cmluZyBjb25zdCAmIHRhZ192YWx1ZSkKLXsKLQlzdHJpbmcgdmFsdWU7Ci0JcmV0dXJuIGdldF9oYW5kbGVyKHRhZ192YWx1ZSwgdmFsdWUpOwotfQotCi0KLXZvaWQgcHJvZmlsZV9zcGVjOjpzZXRfaW1hZ2Vfb3JfbGliX25hbWUoc3RyaW5nIGNvbnN0ICYgc3RyKQotewotCS8qIEZJWE1FOiB3aGF0IGRvZXMgc3BlYyBzYXkgYWJvdXQgdGhpcyBiZWluZyBhbGxvd2VkIHRvIGJlCi0JICogYSBjb21tYSBsaXN0IG9yIG5vdCA/ICovCi0JaW1hZ2Vfb3JfbGliX2ltYWdlLnB1c2hfYmFjayhmaXh1cF9pbWFnZV9zcGVjKHN0ciwgZXh0cmEpKTsKLX0KLQotCi12b2lkIHByb2ZpbGVfc3BlYzo6cGFyc2VfYXJjaGl2ZV9wYXRoKHN0cmluZyBjb25zdCAmIHN0cikKLXsKLQlhcmNoaXZlX3BhdGggPSBvcF9yZWFscGF0aChzdHIpOwotfQotCi0KLXN0cmluZyBwcm9maWxlX3NwZWM6OmdldF9hcmNoaXZlX3BhdGgoKSBjb25zdAotewotCXJldHVybiBhcmNoaXZlX3BhdGg7Ci19Ci0KLQotdm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlX3Nlc3Npb24oc3RyaW5nIGNvbnN0ICYgc3RyKQotewotCXNlc3Npb24gPSBzZXBhcmF0ZV90b2tlbihzdHIsICcsJyk7Ci19Ci0KLQotdm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlX3Nlc3Npb25fZXhjbHVkZShzdHJpbmcgY29uc3QgJiBzdHIpCi17Ci0Jc2Vzc2lvbl9leGNsdWRlID0gc2VwYXJhdGVfdG9rZW4oc3RyLCAnLCcpOwotfQotCi0KLXZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV9pbWFnZShzdHJpbmcgY29uc3QgJiBzdHIpCi17Ci0JaW1hZ2UgPSBzZXBhcmF0ZV90b2tlbihzdHIsICcsJyk7Ci0JZml4dXBfaW1hZ2Vfc3BlYyhpbWFnZSwgZXh0cmEpOwotfQotCi0KLXZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV9pbWFnZV9leGNsdWRlKHN0cmluZyBjb25zdCAmIHN0cikKLXsKLQlpbWFnZV9leGNsdWRlID0gc2VwYXJhdGVfdG9rZW4oc3RyLCAnLCcpOwotfQotCi0KLXZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV9saWJfaW1hZ2Uoc3RyaW5nIGNvbnN0ICYgc3RyKQotewotCWxpYl9pbWFnZSA9IHNlcGFyYXRlX3Rva2VuKHN0ciwgJywnKTsKLQlmaXh1cF9pbWFnZV9zcGVjKGltYWdlLCBleHRyYSk7Ci19Ci0KLQotdm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlX2V2ZW50KHN0cmluZyBjb25zdCAmIHN0cikKLXsKLQlldmVudC5zZXQoc3RyKTsKLX0KLQotCi12b2lkIHByb2ZpbGVfc3BlYzo6cGFyc2VfY291bnQoc3RyaW5nIGNvbnN0ICYgc3RyKQotewotCWNvdW50LnNldChzdHIpOwotfQotCi0KLXZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV91bml0bWFzayhzdHJpbmcgY29uc3QgJiBzdHIpCi17Ci0JdW5pdG1hc2suc2V0KHN0cik7Ci19Ci0KLQotdm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlX3RpZChzdHJpbmcgY29uc3QgJiBzdHIpCi17Ci0JdGlkLnNldChzdHIpOwotfQotCi0KLXZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV90Z2lkKHN0cmluZyBjb25zdCAmIHN0cikKLXsKLQl0Z2lkLnNldChzdHIpOwotfQotCi0KLXZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV9jcHUoc3RyaW5nIGNvbnN0ICYgc3RyKQotewotCWNwdS5zZXQoc3RyKTsKLX0KLQotCi1wcm9maWxlX3NwZWM6OmFjdGlvbl90Ci1wcm9maWxlX3NwZWM6OmdldF9oYW5kbGVyKHN0cmluZyBjb25zdCAmIHRhZ192YWx1ZSwgc3RyaW5nICYgdmFsdWUpCi17Ci0Jc3RyaW5nOjpzaXplX3R5cGUgcG9zID0gdGFnX3ZhbHVlLmZpbmRfZmlyc3Rfb2YoJzonKTsKLQlpZiAocG9zID09IHN0cmluZzo6bnBvcykgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzdHJpbmcgdGFnKHRhZ192YWx1ZS5zdWJzdHIoMCwgcG9zKSk7Ci0JdmFsdWUgPSB0YWdfdmFsdWUuc3Vic3RyKHBvcyArIDEpOwotCi0JcGFyc2VfdGFibGVfdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXJzZV90YWJsZS5maW5kKHRhZyk7Ci0JaWYgKGl0ID09IHBhcnNlX3RhYmxlLmVuZCgpKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiBpdC0+c2Vjb25kOwotfQotCi0KLW5hbWVzcGFjZSB7Ci0KLS8vLyByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgZnJvbSB0aGUgcHJvZmlsZSBzcGVjIG1heSBtYXRjaCB0aGUgY29tbWEKLS8vLyBsaXN0Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBjb21tYV9tYXRjaChjb21tYV9saXN0PFQ+IGNvbnN0ICYgY2wsIGdlbmVyaWNfc3BlYzxUPiBjb25zdCAmIHZhbHVlKQotewotCS8vIGlmIHRoZSBwcm9maWxlIHNwZWMgaXMgImFsbCIgd2UgbWF0Y2ggdGhlIHNhbXBsZSBmaWxlCi0JaWYgKCFjbC5pc19zZXQoKSkKLQkJcmV0dXJuIHRydWU7Ci0JCi0JLy8gYW4gImFsbCIgc2FtcGxlIGZpbGUgc2hvdWxkIG5ldmVyIG1hdGNoIHNwZWNpZmllZCBwcm9maWxlCi0JLy8gc3BlYyB2YWx1ZXMKLQlpZiAoIXZhbHVlLmlzX3NldCgpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvLyBub3cgbWF0Y2ggZWFjaCBwcm9maWxlIHNwZWMgdmFsdWUgYWdhaW5zdCB0aGUgc2FtcGxlIGZpbGUKLQlyZXR1cm4gY2wubWF0Y2godmFsdWUudmFsdWUoKSk7Ci19Ci0KLX0KLQotCi1ib29sIHByb2ZpbGVfc3BlYzo6bWF0Y2goZmlsZW5hbWVfc3BlYyBjb25zdCAmIHNwZWMpIGNvbnN0Ci17Ci0JYm9vbCBtYXRjaGVkX2J5X2ltYWdlX29yX2xpYl9pbWFnZSA9IGZhbHNlOwotCi0JLy8gUFA6My4xOQotCWlmICghaW1hZ2Vfb3JfbGliX2ltYWdlLmVtcHR5KCkpIHsKLQkJLy8gTmVlZCB0aGUgcGF0aCBzZWFyY2ggZm9yIHRoZSBiZW5lZml0IG9mIG1vZHVsZXMKLQkJLy8gd2hpY2ggaGF2ZSAiL29wcm9maWxlIiBvciBzaW1pbGFyCi0JCXN0cmluZyBzaW1hZ2UgPSBmaXh1cF9pbWFnZV9zcGVjKHNwZWMuaW1hZ2UsIGV4dHJhKTsKLQkJc3RyaW5nIHNsaWJfaW1hZ2UgPSBmaXh1cF9pbWFnZV9zcGVjKHNwZWMubGliX2ltYWdlLCBleHRyYSk7Ci0JCWdsb2JfZmlsdGVyIGZpbHRlcihpbWFnZV9vcl9saWJfaW1hZ2UsIGltYWdlX2V4Y2x1ZGUpOwotCQlpZiAoZmlsdGVyLm1hdGNoKHNpbWFnZSkgfHwgZmlsdGVyLm1hdGNoKHNsaWJfaW1hZ2UpKSB7Ci0JCQltYXRjaGVkX2J5X2ltYWdlX29yX2xpYl9pbWFnZSA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlpZiAoIW1hdGNoZWRfYnlfaW1hZ2Vfb3JfbGliX2ltYWdlKSB7Ci0JCS8vIFBQOjMuNyAzLjgKLQkJaWYgKCFpbWFnZS5lbXB0eSgpKSB7Ci0JCQlnbG9iX2ZpbHRlciBmaWx0ZXIoaW1hZ2UsIGltYWdlX2V4Y2x1ZGUpOwotCQkJaWYgKCFmaWx0ZXIubWF0Y2goc3BlYy5pbWFnZSkpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoIWltYWdlX29yX2xpYl9pbWFnZS5lbXB0eSgpKSB7Ci0JCQkvLyBpbWFnZS5lbXB0eSgpIG1lYW5zIG1hdGNoIGFsbCBleGNlcHQgaWYgdXNlcgotCQkJLy8gc3BlY2lmaWVkIGltYWdlX29yX2xpYl9pbWFnZQotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJLy8gUFA6My45IDMuMTAKLQkJaWYgKCFsaWJfaW1hZ2UuZW1wdHkoKSkgewotCQkJZ2xvYl9maWx0ZXIgZmlsdGVyKGxpYl9pbWFnZSwgaW1hZ2VfZXhjbHVkZSk7Ci0JCQlpZiAoIWZpbHRlci5tYXRjaChzcGVjLmxpYl9pbWFnZSkpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoaW1hZ2UuZW1wdHkoKSAmJiAhaW1hZ2Vfb3JfbGliX2ltYWdlLmVtcHR5KCkpIHsKLQkJCS8vIGxpYl9pbWFnZSBlbXB0eSBtZWFucyBtYXRjaCBhbGwgZXhjZXB0IGlmIHVzZXIKLQkJCS8vIHNwZWNpZmllZCBpbWFnZV9vcl9saWJfaW1hZ2UgKm9yKiB3ZSBhbHJlYWR5Ci0JCQkvLyBtYXRjaGVkIHRoaXMgc3BlYyB0aHJvdWdoIGltYWdlCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlpZiAoIW1hdGNoZWRfYnlfaW1hZ2Vfb3JfbGliX2ltYWdlKSB7Ci0JCS8vIGlmIHdlIGRvbid0IG1hdGNoIGJ5IGltYWdlX29yX2xpYl9pbWFnZSB3ZSBtdXN0IHRyeSB0bwotCQkvLyBleGNsdWRlIGZyb20gc3BlYywgZXhjbHVzaW9uIGZyb20gaW1hZ2Vfb3JfbGliX2ltYWdlIGhhcwotCQkvLyBiZWVuIGhhbmRsZWQgYWJvdmUKLQkJdmVjdG9yPHN0cmluZz4gZW1wdHk7Ci0JCWdsb2JfZmlsdGVyIGZpbHRlcihlbXB0eSwgaW1hZ2VfZXhjbHVkZSk7Ci0JCWlmICghZmlsdGVyLm1hdGNoKHNwZWMuaW1hZ2UpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJaWYgKCFzcGVjLmxpYl9pbWFnZS5lbXB0eSgpICYmICFmaWx0ZXIubWF0Y2goc3BlYy5saWJfaW1hZ2UpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlpZiAoIWV2ZW50Lm1hdGNoKHNwZWMuZXZlbnQpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIWNvdW50Lm1hdGNoKHNwZWMuY291bnQpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIXVuaXRtYXNrLm1hdGNoKHNwZWMudW5pdG1hc2spKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIWNvbW1hX21hdGNoKGNwdSwgc3BlYy5jcHUpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIWNvbW1hX21hdGNoKHRpZCwgc3BlYy50aWQpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIWNvbW1hX21hdGNoKHRnaWQsIHNwZWMudGdpZCkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCi0KLXByb2ZpbGVfc3BlYyBwcm9maWxlX3NwZWM6OmNyZWF0ZShsaXN0PHN0cmluZz4gY29uc3QgJiBhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQotewotCXByb2ZpbGVfc3BlYyBzcGVjKGV4dHJhKTsKLQlzZXQ8c3RyaW5nPiB0YWdfc2VlbjsKLQotCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7Ci0JbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOwotCi0JZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotCQlpZiAoc3BlYy5pc192YWxpZF90YWcoKml0KSkgewotCQkJaWYgKHRhZ19zZWVuLmZpbmQoKml0KSAhPSB0YWdfc2Vlbi5lbmQoKSkgewotCQkJCXRocm93IG9wX3J1bnRpbWVfZXJyb3IoInRhZyBzcGVjaWZpZWQgIgotCQkJCSAgICAgICAibW9yZSB0aGFuIG9uY2U6ICIgKyAqaXQpOwotCQkJfQotCQkJdGFnX3NlZW4uaW5zZXJ0KCppdCk7Ci0JCQlzcGVjLnBhcnNlKCppdCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJpbmcgY29uc3QgZmlsZSA9IG9wX3JlYWxwYXRoKCppdCk7Ci0JCQlzcGVjLnNldF9pbWFnZV9vcl9saWJfbmFtZShmaWxlKTsKLQkJfQotCX0KLQotCS8vIFBQOjMuNSBubyBzZXNzaW9uIGdpdmVuIG1lYW5zIHVzZSB0aGUgY3VycmVudCBzZXNzaW9uLgotCWlmIChzcGVjLnNlc3Npb24uZW1wdHkoKSkgewotCQlzcGVjLnNlc3Npb24ucHVzaF9iYWNrKCJjdXJyZW50Iik7Ci0JfQotCi0JcmV0dXJuIHNwZWM7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLXZlY3RvcjxzdHJpbmc+IGZpbHRlcl9zZXNzaW9uKHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgc2Vzc2lvbiwKLQkJCSAgICAgIHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgc2Vzc2lvbl9leGNsdWRlKQotewotCXZlY3RvcjxzdHJpbmc+IHJlc3VsdChzZXNzaW9uKTsKLQotCWlmIChyZXN1bHQuZW1wdHkoKSkgewotCQlyZXN1bHQucHVzaF9iYWNrKCJjdXJyZW50Iik7Ci0JfQotCi0JZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgc2Vzc2lvbl9leGNsdWRlLnNpemUoKSA7ICsraSkgewotCQkvLyBGSVhNRTogd291bGQgd2UgdXNlIGZubWF0Y2ggb24gZWFjaCBpdGVtLCBhcmUgd2UgYWxsb3dlZAotCQkvLyB0byAtLXNlc3Npb249Y3VycmVudCogPwotCQl2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IgaXQgPQotCQkJZmluZChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBzZXNzaW9uX2V4Y2x1ZGVbaV0pOwotCi0JCWlmIChpdCAhPSByZXN1bHQuZW5kKCkpIHsKLQkJCXJlc3VsdC5lcmFzZShpdCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0KLWJvb2wgdmFsaWRfY2FuZGlkYXRlKHN0cmluZyBjb25zdCAmIGJhc2VfZGlyLCBzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVfc3BlYyBjb25zdCAmIHNwZWMsIGJvb2wgZXhjbHVkZV9kZXBlbmRlbnQsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVfY2cpCi17Ci0JaWYgKGV4Y2x1ZGVfY2cgJiYgZmlsZW5hbWUuZmluZCgie2NnfSIpICE9IHN0cmluZzo6bnBvcykKLQkJcmV0dXJuIGZhbHNlOwotCi0JLy8gc3RyaXAgb3V0IG5vbiBzYW1wbGUgZmlsZXMKLQlzdHJpbmcgY29uc3QgJiBzdWIgPSBmaWxlbmFtZS5zdWJzdHIoYmFzZV9kaXIuc2l6ZSgpLCBzdHJpbmc6Om5wb3MpOwotCWlmICghaXNfcHJlZml4KHN1YiwgIi97cm9vdH0vIikgJiYgIWlzX3ByZWZpeChzdWIsICIve2tlcm59LyIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlmaWxlbmFtZV9zcGVjIGZpbGVfc3BlYyhmaWxlbmFtZSk7Ci0JaWYgKHNwZWMubWF0Y2goZmlsZV9zcGVjKSkgewotCQlpZiAoZXhjbHVkZV9kZXBlbmRlbnQgJiYgZmlsZV9zcGVjLmlzX2RlcGVuZGVudCgpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotCi1saXN0PHN0cmluZz4gcHJvZmlsZV9zcGVjOjpnZW5lcmF0ZV9maWxlX2xpc3QoYm9vbCBleGNsdWRlX2RlcGVuZGVudCwKLSAgYm9vbCBleGNsdWRlX2NnKSBjb25zdAotewotCS8vIEZJWE1FOiBpc24ndCByZW1vdmVfZHVwbGljYXRlcyBmYXN0ZXIgdGhhbiBkb2luZyB0aGlzLCB0aGVuIGNvcHkoKSA/Ci0Jc2V0PHN0cmluZz4gdW5pcXVlX2ZpbGVzOwotCi0JdmVjdG9yPHN0cmluZz4gc2Vzc2lvbnMgPSBmaWx0ZXJfc2Vzc2lvbihzZXNzaW9uLCBzZXNzaW9uX2V4Y2x1ZGUpOwotCi0JaWYgKHNlc3Npb25zLmVtcHR5KCkpIHsKLQkJb3N0cmluZ3N0cmVhbSBvczsKLQkJb3MgPDwgIk5vIHNlc3Npb24gZ2l2ZW5cbiIKLQkJICAgPDwgImluY2x1ZGVkIHNlc3Npb24gd2FzOlxuIjsKLQkJY29weShzZXNzaW9uLmJlZ2luKCksIHNlc3Npb24uZW5kKCksCi0JCSAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KG9zLCAiXG4iKSk7Ci0JCW9zIDw8ICJleGNsdWRlZCBzZXNzaW9uIHdhczpcbiI7Ci0JCWNvcHkoc2Vzc2lvbl9leGNsdWRlLmJlZ2luKCksIHNlc3Npb25fZXhjbHVkZS5lbmQoKSwKLQkJICAgICBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4ob3MsICJcbiIpKTsKLQkJdGhyb3cgaW52YWxpZF9hcmd1bWVudChvcy5zdHIoKSk7Ci0JfQotCi0JYm9vbCBmb3VuZF9maWxlID0gZmFsc2U7Ci0KLQl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY2l0ID0gc2Vzc2lvbnMuYmVnaW4oKTsKLQl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2Vzc2lvbnMuZW5kKCk7Ci0KLQlmb3IgKDsgY2l0ICE9IGVuZDsgKytjaXQpIHsKLQkJaWYgKGNpdC0+ZW1wdHkoKSkKLQkJCWNvbnRpbnVlOwotCi0JCXN0cmluZyBiYXNlX2RpcjsKLQkJaWYgKCgqY2l0KVswXSAhPSAnLicgJiYgKCpjaXQpWzBdICE9ICcvJykKLQkJCWJhc2VfZGlyID0gYXJjaGl2ZV9wYXRoICsgT1BfU0FNUExFU19ESVI7Ci0JCWJhc2VfZGlyICs9ICpjaXQ7Ci0KLQkJYmFzZV9kaXIgPSBvcF9yZWFscGF0aChiYXNlX2Rpcik7Ci0KLQkJbGlzdDxzdHJpbmc+IGZpbGVzOwotCQljcmVhdGVfZmlsZV9saXN0KGZpbGVzLCBiYXNlX2RpciwgIioiLCB0cnVlKTsKLQotCQlpZiAoIWZpbGVzLmVtcHR5KCkpCi0JCQlmb3VuZF9maWxlID0gdHJ1ZTsKLQotCQlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmlsZXMuYmVnaW4oKTsKLQkJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBmZW5kID0gZmlsZXMuZW5kKCk7Ci0JCWZvciAoOyBpdCAhPSBmZW5kOyArK2l0KSB7Ci0JCQlpZiAodmFsaWRfY2FuZGlkYXRlKGJhc2VfZGlyLCAqaXQsICp0aGlzLAotCQkJICAgIGV4Y2x1ZGVfZGVwZW5kZW50LCBleGNsdWRlX2NnKSkgewotCQkJCXVuaXF1ZV9maWxlcy5pbnNlcnQoKml0KTsKLQkJCX0KLQkJfQotCX0KLQotCWlmICghZm91bmRfZmlsZSkgewotCQlvc3RyaW5nc3RyZWFtIG9zOwotCQlvcyAgPDwgIk5vIHNhbXBsZSBmaWxlIGZvdW5kOiB0cnkgcnVubmluZyBvcGNvbnRyb2wgLS1kdW1wXG4iCi0JCSAgICA8PCAib3Igc3BlY2lmeSBhIHNlc3Npb24gY29udGFpbmluZyBzYW1wbGUgZmlsZXNcbiI7Ci0JCXRocm93IG9wX2ZhdGFsX2Vycm9yKG9zLnN0cigpKTsKLQl9Ci0KLQlsaXN0PHN0cmluZz4gcmVzdWx0OwotCWNvcHkodW5pcXVlX2ZpbGVzLmJlZ2luKCksIHVuaXF1ZV9maWxlcy5lbmQoKSwgYmFja19pbnNlcnRlcihyZXN1bHQpKTsKLQotCXJldHVybiByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9wcm9maWxlX3NwZWMuaCBiL2xpYnBwL3Byb2ZpbGVfc3BlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTAyYWJiLi4wMDAwMDAwCi0tLSBhL2xpYnBwL3Byb2ZpbGVfc3BlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKgotICogQGZpbGUgcHJvZmlsZV9zcGVjLmgKLSAqIENvbnRhaW5zIGEgUFAgcHJvZmlsZSBzcGVjaWZpY2F0aW9uCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpZm5kZWYgUFJPRklMRV9TUEVDX0gKLSNkZWZpbmUgUFJPRklMRV9TUEVDX0gKLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8bGlzdD4KLQotI2luY2x1ZGUgImZpbGVuYW1lX3NwZWMuaCIKLSNpbmNsdWRlICJjb21tYV9saXN0LmgiCi0KLWNsYXNzIGV4dHJhX2ltYWdlczsKLQotLyoqCi0gKiBIb2xkcyBhIHBhcnNlZCBwcm9maWxlIHNwZWMgY29tcG9zZWQgb2YgdGFnOnZhbHVlIHBhaXJzLCBhcyBnaXZlbiBpbgotICogcHBfaW50ZXJmYWNlIGRvY3VtZW50YXRpb24uCi0gKgotICogIEBpbnRlcm5hbCBpbXBsZW1lbnRlZCB0aHJvdWdoIGEgbWFwIG9mIHN0cmluZywgcG9pbnRlciB0byBmdW5jdGlvbiBtZW1iZXIKLSAqICBpbmRleGVkIGJ5IHRhZ19uYW1lLgotICovCi1jbGFzcyBwcm9maWxlX3NwZWMKLXsKLXB1YmxpYzoKLQkvKioKLQkgKiBAcGFyYW0gYXJncyAgYSB2ZWN0b3Igb2Ygbm9uIG9wdGlvbnMgc3RyaW5ncwotCSAqIEBwYXJhbSBleHRyYSBleHRyYSBpbWFnZSBwYXRocyB0byBzZWFyY2gKLQkgKgotCSAqIEZhY3RvcnkgcmV0dXJuaW5nIGEgcHJvZmlsZV9zcGVjIGluc3RhbmNlIHN0b3JpbmcgYWxsIHZhbGlkCi0JICogdGFnOnZhbHVlIGNvbnRhaW5lZCBpbiBhcmdzIHZlY3RvciBkb2luZyBhbHNvIGFsaWFzCi0JICogc3Vic3RpdHV0aW9uLCBub24tdmFsaWQgdGFnOnZhbHVlIG9wdGlvbnMgYXJlIGNvbnNpZGVyZWQKLQkgKiBhcyBpbWFnZTp2YWx1ZQotCSAqLwotCXN0YXRpYyBwcm9maWxlX3NwZWMgY3JlYXRlKHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gY29uc3QgJiBhcmdzLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKTsKLQotCS8qKgotCSAqIEBwYXJhbSBleGNsdWRlX2RlcGVuZGVudCAgd2hldGhlciB0byBleGNsdWRlIGRlcGVuZGVudCBzdWItaW1hZ2VzCi0JICogQHBhcmFtIGV4Y2x1ZGVfY2cgIHdoZXRoZXIgdG8gZXhjbHVkZSBjYWxsIGdyYXBoIGZpbGUKLQkgKgotCSAqIFVzZSB0aGUgc3BlYyB0byBnZW5lcmF0ZSB0aGUgbGlzdCBvZiBjYW5kaWRhdGUgc2FtcGxlIGZpbGVzLgotCSAqLwotCXN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4KLQlnZW5lcmF0ZV9maWxlX2xpc3QoYm9vbCBleGNsdWRlX2RlcGVuZGVudCwgYm9vbCBleGNsdWRlX2NnKSBjb25zdDsKLQotCS8qKgotCSAqIEBwYXJhbSBmaWxlX3NwZWMgIHRoZSBmaWxlbmFtZSBzcGVjaWZpY2F0aW9uIHRvIGNoZWNrCi0JICoKLQkgKiByZXR1cm4gdHJ1ZSBpZiBmaWxlbmFtZSBtYXRjaCB0aGUgc3BlYy4gUFA6My4yNCBpbnRlcm5hbCBsb29wCi0JICovCi0JYm9vbCBtYXRjaChmaWxlbmFtZV9zcGVjIGNvbnN0ICYgZmlsZV9zcGVjKSBjb25zdDsKLQotCS8qKgotCSAqIHJldHVybiBhcmNoaXZlIG5hbWUKLQkgKiByZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiBub3QgdXNpbmcgYW4gYXJjaGl2ZS4KLQkgKi8KLQlzdGQ6OnN0cmluZyBnZXRfYXJjaGl2ZV9wYXRoKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0JcHJvZmlsZV9zcGVjKGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKTsKLQotCS8qKgotCSAqIEBwYXJhbSB0YWdfdmFsdWUgIGEgInRhZzp2YWx1ZSIgdG8gaW50ZXJwcmV0LCBhbGwgZXJyb3IgdGhyb3cgYW4KLQkgKiBpbnZhbGlkX2FyZ3VtZW50IGV4Y2VwdGlvbi4KLQkgKi8KLQl2b2lkIHBhcnNlKHN0ZDo6c3RyaW5nIGNvbnN0ICYgdGFnX3ZhbHVlKTsKLQotCS8qKgotCSAqIEBwYXJhbSBpbWFnZSBhbiBpbWFnZSBvciBhIGxpYnJheSBuYW1lIGdpdmVuIG9uIGNvbW1hbmQgbGluZQotCSAqCi0JICogVXNlZCBmb3IgZS5nLiAib3ByZXBvcnQgL2Jpbi9teWJpbmFyeSIuIFdlIGRvbid0IGtub3cgeWV0Ci0JICogaWYgdGhpcyBpcyBhbiBhcHBsaWNhdGlvbiBvciBhIGRlcGVuZGVudCBpbWFnZS4KLQkgKi8KLQl2b2lkIHNldF9pbWFnZV9vcl9saWJfbmFtZShzdGQ6OnN0cmluZyBjb25zdCAmIGltYWdlKTsKLQotCS8qKgotCSAqIEBwYXJhbSBzdHIgIGEgInRhZzp2YWx1ZSIKLQkgKgotCSAqIHJldHVybiB0cnVlIGlmIHRhZyBpcyBhIHZhbGlkIHRhZwotCSAqLwotCWJvb2wgaXNfdmFsaWRfdGFnKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKTsKLQotCS8qKgotCSAqIGltcGxlbWVudCB0YWcgcGFyc2luZzogUFA6My4zIHRvIDMuMTYKLQkgKi8KLQl2b2lkIHBhcnNlX2FyY2hpdmVfcGF0aChzdGQ6OnN0cmluZyBjb25zdCAmKTsKLQl2b2lkIHBhcnNlX3Nlc3Npb24oc3RkOjpzdHJpbmcgY29uc3QgJik7Ci0Jdm9pZCBwYXJzZV9zZXNzaW9uX2V4Y2x1ZGUoc3RkOjpzdHJpbmcgY29uc3QgJik7Ci0Jdm9pZCBwYXJzZV9pbWFnZShzdGQ6OnN0cmluZyBjb25zdCAmKTsKLQl2b2lkIHBhcnNlX2ltYWdlX2V4Y2x1ZGUoc3RkOjpzdHJpbmcgY29uc3QgJik7Ci0Jdm9pZCBwYXJzZV9saWJfaW1hZ2Uoc3RkOjpzdHJpbmcgY29uc3QgJik7Ci0Jdm9pZCBwYXJzZV9ldmVudChzdGQ6OnN0cmluZyBjb25zdCAmKTsKLQl2b2lkIHBhcnNlX2NvdW50KHN0ZDo6c3RyaW5nIGNvbnN0ICYpOwotCXZvaWQgcGFyc2VfdW5pdG1hc2soc3RkOjpzdHJpbmcgY29uc3QgJik7Ci0Jdm9pZCBwYXJzZV90aWQoc3RkOjpzdHJpbmcgY29uc3QgJik7Ci0Jdm9pZCBwYXJzZV90Z2lkKHN0ZDo6c3RyaW5nIGNvbnN0ICYpOwotCXZvaWQgcGFyc2VfY3B1KHN0ZDo6c3RyaW5nIGNvbnN0ICYpOwotCi0JdHlwZWRlZiB2b2lkIChwcm9maWxlX3NwZWM6OiphY3Rpb25fdCkoc3RkOjpzdHJpbmcgY29uc3QgJik7Ci0JdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgYWN0aW9uX3Q+IHBhcnNlX3RhYmxlX3Q7Ci0JcGFyc2VfdGFibGVfdCBwYXJzZV90YWJsZTsKLQotCS8qKgotCSAqIEBwYXJhbSB0YWdfdmFsdWUgIGlucHV0ICJ0YWc6dmFsdWUiIHN0cmluZwotCSAqIEBwYXJhbSB2YWx1ZSAgaWYgc3VjY2VzcyByZXR1cm4gdGhlIHZhbHVlIHBhcnQgb2YgdGFnX3ZhbHVlCi0JICogaGVscGVyIGZvciBzZXQvaXNfdmFsaWRfdGFnIHB1YmxpYyBpbnRlcmZhY2UKLQkgKgotCSAqIHJldHVybiBudWxsIGlmIHRhZyBpcyBub3QgdmFsaWQsIGVsc2UgcmV0dXJuIHRoZSBwb2ludGVyIHRvIG1lbWJlcgotCSAqIGZ1bmN0aW9uIHRvIGFwcGx5IGFuZCB0aGUgdmFsdWUgaW4gdmFsdWUgcGFyYW1ldGVyCi0JICovCi0JYWN0aW9uX3QgZ2V0X2hhbmRsZXIoc3RkOjpzdHJpbmcgY29uc3QgJiB0YWdfdmFsdWUsCi0JCQkgICAgIHN0ZDo6c3RyaW5nICYgdmFsdWUpOwotCi0Jc3RkOjpzdHJpbmcgYXJjaGl2ZV9wYXRoOwotCXN0ZDo6c3RyaW5nIGJpbmFyeTsKLQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2Vzc2lvbjsKLQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2Vzc2lvbl9leGNsdWRlOwotCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbWFnZTsKLQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW1hZ2VfZXhjbHVkZTsKLQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGliX2ltYWdlOwotCWNvbW1hX2xpc3Q8c3RkOjpzdHJpbmc+IGV2ZW50OwotCWNvbW1hX2xpc3Q8aW50PiBjb3VudDsKLQljb21tYV9saXN0PHVuc2lnbmVkIGludD4gdW5pdG1hc2s7Ci0JY29tbWFfbGlzdDxwaWRfdD4gdGlkOwotCWNvbW1hX2xpc3Q8cGlkX3Q+IHRnaWQ7Ci0JY29tbWFfbGlzdDxpbnQ+IGNwdTsKLQkvLyBzcGVjaWZpZWQgYnkgdXNlciBvbiBjb21tYW5kIGxpa2Ugb3ByZXBvcnQgaW1hZ2UxIGltYWdlMiAuLi4KLQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW1hZ2Vfb3JfbGliX2ltYWdlOwotCi0JLy8vIGV4dHJhIHNlYXJjaCBwYXRoIGZvciBpbWFnZXMKLQlleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYTsKLX07Ci0KLSNlbmRpZiAvKiAhUFJPRklMRV9TUEVDX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwIGIvbGlicHAvc2FtcGxlX2NvbnRhaW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhOWY0YWYuLjAwMDAwMDAKLS0tIGEvbGlicHAvc2FtcGxlX2NvbnRhaW5lci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBzYW1wbGVfY29udGFpbmVyLmNwcAotICogSW50ZXJuYWwgY29udGFpbmVyIGZvciBzYW1wbGVzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxudW1lcmljPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJzYW1wbGVfY29udGFpbmVyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIEZJWE1FOiBlZmZpY2llbmN5ID8KLWNvdW50X2FycmF5X3QgYWRkX2NvdW50cyhjb3VudF9hcnJheV90IGNvbnN0ICYgY291bnRzLAotCQkJICAgc2FtcGxlX2VudHJ5IGNvbnN0ICogcykKLXsKLQljb3VudF9hcnJheV90IHRlbXAoY291bnRzKTsKLQl0ZW1wICs9IHMtPmNvdW50czsKLQlyZXR1cm4gdGVtcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYW5vbgotCi0KLXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3Igc2FtcGxlX2NvbnRhaW5lcjo6YmVnaW4oKSBjb25zdAotewotCXJldHVybiBzYW1wbGVzLmJlZ2luKCk7Ci19Ci0KLQotc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBzYW1wbGVfY29udGFpbmVyOjplbmQoKSBjb25zdAotewotCXJldHVybiBzYW1wbGVzLmVuZCgpOwotfQotCi0KLXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IKLXNhbXBsZV9jb250YWluZXI6OmJlZ2luKHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWJvbCkgY29uc3QKLXsKLQlzYW1wbGVzX3N0b3JhZ2U6OmtleV90eXBlIGtleShzeW1ib2wsIDApOwotCi0JcmV0dXJuIHNhbXBsZXMubG93ZXJfYm91bmQoa2V5KTsKLX0KLQotCi1zYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIAotc2FtcGxlX2NvbnRhaW5lcjo6ZW5kKHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWJvbCkgY29uc3QKLXsKLQlzYW1wbGVzX3N0b3JhZ2U6OmtleV90eXBlIGtleShzeW1ib2wsIH5iZmRfdm1hKDApKTsKLQotCXJldHVybiBzYW1wbGVzLnVwcGVyX2JvdW5kKGtleSk7Ci19Ci0KLQotdm9pZCBzYW1wbGVfY29udGFpbmVyOjppbnNlcnQoc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX2VudHJ5IGNvbnN0ICYgc2FtcGxlKQotewotCXNhbXBsZXNfc3RvcmFnZTo6a2V5X3R5cGUga2V5KHN5bWJvbCwgc2FtcGxlLnZtYSk7Ci0KLQlzYW1wbGVzX3N0b3JhZ2U6Oml0ZXJhdG9yIGl0ID0gc2FtcGxlcy5maW5kKGtleSk7Ci0JaWYgKGl0ICE9IHNhbXBsZXMuZW5kKCkpIHsKLQkJaXQtPnNlY29uZC5jb3VudHMgKz0gc2FtcGxlLmNvdW50czsKLQl9IGVsc2UgewotCQlzYW1wbGVzW2tleV0gPSBzYW1wbGU7Ci0JfQotfQotCi0KLWNvdW50X2FycmF5X3QKLXNhbXBsZV9jb250YWluZXI6OmFjY3VtdWxhdGVfc2FtcGxlcyhkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lX2lkKSBjb25zdAotewotCWJ1aWxkX2J5X2xvYygpOwotCi0Jc2FtcGxlX2VudHJ5IGxvd2VyLCB1cHBlcjsKLQotCWxvd2VyLmZpbGVfbG9jLmZpbGVuYW1lID0gdXBwZXIuZmlsZV9sb2MuZmlsZW5hbWUgPSBmaWxlbmFtZV9pZDsKLQlsb3dlci5maWxlX2xvYy5saW5lbnIgPSAwOwotCXVwcGVyLmZpbGVfbG9jLmxpbmVuciA9IElOVF9NQVg7Ci0KLQl0eXBlZGVmIHNhbXBsZXNfYnlfbG9jX3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotCi0JaXRlcmF0b3IgaXQxID0gc2FtcGxlc19ieV9sb2MubG93ZXJfYm91bmQoJmxvd2VyKTsKLQlpdGVyYXRvciBpdDIgPSBzYW1wbGVzX2J5X2xvYy51cHBlcl9ib3VuZCgmdXBwZXIpOwotCi0JcmV0dXJuIGFjY3VtdWxhdGUoaXQxLCBpdDIsIGNvdW50X2FycmF5X3QoKSwgYWRkX2NvdW50cyk7Ci19Ci0KLQotc2FtcGxlX2VudHJ5IGNvbnN0ICoKLXNhbXBsZV9jb250YWluZXI6OmZpbmRfYnlfdm1hKHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWJvbCwgYmZkX3ZtYSB2bWEpIGNvbnN0Ci17Ci0Jc2FtcGxlX2luZGV4X3Qga2V5KHN5bWJvbCwgdm1hKTsKLQlzYW1wbGVzX2l0ZXJhdG9yIGl0ID0gc2FtcGxlcy5maW5kKGtleSk7Ci0JaWYgKGl0ICE9IHNhbXBsZXMuZW5kKCkpCi0JCXJldHVybiAmaXQtPnNlY29uZDsKLQotCXJldHVybiAwOwotfQotCi0KLWNvdW50X2FycmF5X3QKLXNhbXBsZV9jb250YWluZXI6OmFjY3VtdWxhdGVfc2FtcGxlcyhkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsaW5lbnIpIGNvbnN0Ci17Ci0JYnVpbGRfYnlfbG9jKCk7Ci0KLQlzYW1wbGVfZW50cnkgc2FtcGxlOwotCi0Jc2FtcGxlLmZpbGVfbG9jLmZpbGVuYW1lID0gZmlsZW5hbWU7Ci0Jc2FtcGxlLmZpbGVfbG9jLmxpbmVuciA9IGxpbmVucjsKLQotCXR5cGVkZWYgcGFpcjxzYW1wbGVzX2J5X2xvY190Ojpjb25zdF9pdGVyYXRvciwKLQkJc2FtcGxlc19ieV9sb2NfdDo6Y29uc3RfaXRlcmF0b3I+IGl0X3BhaXI7Ci0KLQlpdF9wYWlyIGl0cCA9IHNhbXBsZXNfYnlfbG9jLmVxdWFsX3JhbmdlKCZzYW1wbGUpOwotCi0JcmV0dXJuIGFjY3VtdWxhdGUoaXRwLmZpcnN0LCBpdHAuc2Vjb25kLCBjb3VudF9hcnJheV90KCksIGFkZF9jb3VudHMpOwotfQotCi0KLXZvaWQgc2FtcGxlX2NvbnRhaW5lcjo6YnVpbGRfYnlfbG9jKCkgY29uc3QKLXsKLQlpZiAoIXNhbXBsZXNfYnlfbG9jLmVtcHR5KCkpCi0JCXJldHVybjsKLQotCXNhbXBsZXNfaXRlcmF0b3IgY2l0ID0gc2FtcGxlcy5iZWdpbigpOwotCXNhbXBsZXNfaXRlcmF0b3IgZW5kID0gc2FtcGxlcy5lbmQoKTsKLQlmb3IgKDsgY2l0ICE9IGVuZDsgKytjaXQpCi0JCXNhbXBsZXNfYnlfbG9jLmluc2VydCgmY2l0LT5zZWNvbmQpOwotfQpkaWZmIC0tZ2l0IGEvbGlicHAvc2FtcGxlX2NvbnRhaW5lci5oIGIvbGlicHAvc2FtcGxlX2NvbnRhaW5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGM5YWIwLi4wMDAwMDAwCi0tLSBhL2xpYnBwL3NhbXBsZV9jb250YWluZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKgotICogQGZpbGUgc2FtcGxlX2NvbnRhaW5lci5oCi0gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBzYW1wbGUgY29udGFpbmVyCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBTQU1QTEVfQ09OVEFJTkVSX0gKLSNkZWZpbmUgU0FNUExFX0NPTlRBSU5FUl9ICi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgInN5bWJvbC5oIgotI2luY2x1ZGUgInN5bWJvbF9mdW5jdG9ycy5oIgotCi0vKioKLSAqIEFyYml0cmFyeSBjb250YWluZXIgb2Ygc2FtcGxlIGVudHJpZXMuIENhbiByZXR1cm4KLSAqIG51bWJlciBvZiBzYW1wbGVzIGZvciBhIGZpbGUgb3IgbGluZSBudW1iZXIgYW5kCi0gKiByZXR1cm4gdGhlIHBhcnRpY3VsYXIgc2FtcGxlIGluZm9ybWF0aW9uIGZvciBhIFZNQS4KLSAqLwotY2xhc3Mgc2FtcGxlX2NvbnRhaW5lciB7Ci0JdHlwZWRlZiBzdGQ6OnBhaXI8c3ltYm9sX2VudHJ5IGNvbnN0ICosIGJmZF92bWE+IHNhbXBsZV9pbmRleF90OwotcHVibGljOgotCXR5cGVkZWYgc3RkOjptYXA8c2FtcGxlX2luZGV4X3QsIHNhbXBsZV9lbnRyeT4gc2FtcGxlc19zdG9yYWdlOwotCXR5cGVkZWYgc2FtcGxlc19zdG9yYWdlOjpjb25zdF9pdGVyYXRvciBzYW1wbGVzX2l0ZXJhdG9yOwotCi0JLy8vIHJldHVybiBpdGVyYXRvciB0byB0aGUgZmlyc3Qgc2FtcGxlcyBmb3IgdGhpcyBzeW1ib2wKLQlzYW1wbGVzX2l0ZXJhdG9yIGJlZ2luKHN5bWJvbF9lbnRyeSBjb25zdCAqKSBjb25zdDsKLQkvLy8gcmV0dXJuIGl0ZXJhdG9yIHRvIHRoZSBsYXN0IHNhbXBsZXMgZm9yIHRoaXMgc3ltYm9sCi0Jc2FtcGxlc19pdGVyYXRvciBlbmQoc3ltYm9sX2VudHJ5IGNvbnN0ICopIGNvbnN0OwotCi0JLy8vIHJldHVybiBpdGVyYXRvciB0byB0aGUgZmlyc3Qgc2FtcGxlcwotCXNhbXBsZXNfaXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLQkvLy8gcmV0dXJuIGl0ZXJhdG9yIHRvIHRoZSBsYXN0IHNhbXBsZXMKLQlzYW1wbGVzX2l0ZXJhdG9yIGVuZCgpIGNvbnN0OwotCi0JLy8vIGluc2VydCBhIHNhbXBsZSBlbnRyeSBieSBjcmVhdGluZyBhIG5ldyBlbnRyeSBvciBieSBjdW11bGF0aW5nCi0JLy8vIHNhbXBsZXMgaW50byBhbiBleGlzdGluZyBvbmUuIENhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGFueSBsb29rdXBzCi0Jdm9pZCBpbnNlcnQoc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sLCBzYW1wbGVfZW50cnkgY29uc3QgJik7Ci0KLQkvLy8gcmV0dXJuIG5yIG9mIHNhbXBsZXMgaW4gdGhlIGdpdmVuIGZpbGVuYW1lCi0JY291bnRfYXJyYXlfdCBhY2N1bXVsYXRlX3NhbXBsZXMoZGVidWdfbmFtZV9pZCBmaWxlbmFtZV9pZCkgY29uc3Q7Ci0KLQkvLy8gcmV0dXJuIG5yIG9mIHNhbXBsZXMgYXQgdGhlIGdpdmVuIGxpbmUgbnIgaW4gdGhlIGdpdmVuIGZpbGUKLQljb3VudF9hcnJheV90IGFjY3VtdWxhdGVfc2FtcGxlcyhkZWJ1Z19uYW1lX2lkLCBzaXplX3QgbGluZW5yKSBjb25zdDsKLQotCS8vLyByZXR1cm4gdGhlIHNhbXBsZSBlbnRyeSBmb3IgdGhlIGdpdmVuIGltYWdlX25hbWUgYW5kIHZtYSBpZiBhbnkKLQlzYW1wbGVfZW50cnkgY29uc3QgKiBmaW5kX2J5X3ZtYShzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2wsCi0JCQkJCSBiZmRfdm1hIHZtYSkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0JLy8vIGJ1aWxkIHRoZSBzeW1ib2wgYnkgZmlsZS1sb2NhdGlvbiBjYWNoZQotCXZvaWQgYnVpbGRfYnlfbG9jKCkgY29uc3Q7Ci0KLQkvLy8gbWFpbiBzYW1wbGUgZW50cnkgY29udGFpbmVyCi0Jc2FtcGxlc19zdG9yYWdlIHNhbXBsZXM7Ci0KLQl0eXBlZGVmIHN0ZDo6bXVsdGlzZXQ8c2FtcGxlX2VudHJ5IGNvbnN0ICosIGxlc3NfYnlfZmlsZV9sb2M+Ci0JCXNhbXBsZXNfYnlfbG9jX3Q7Ci0KLQkvLyBtdXN0IGJlIGRlY2xhcmVkIGFmdGVyIHRoZSBzYW1wbGVzX3N0b3JhZ2UgdG8gZW5zdXJlIGEKLQkvLyBjb3JyZWN0IGxpZmUtdGltZS4KLQotCS8qKgotCSAqIFNhbXBsZSBlbnRyaWVzIGJ5IGZpbGUgbG9jYXRpb24uIExhemlseSBidWlsdCB3aGVuIG5lY2Vzc2FyeSwKLQkgKiBzbyBtdXRhYmxlLgotCSAqLwotCW11dGFibGUgc2FtcGxlc19ieV9sb2NfdCBzYW1wbGVzX2J5X2xvYzsKLX07Ci0KLSNlbmRpZiAvKiBTQU1QTEVfQ09OVEFJTkVSX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnBwL3N5bWJvbC5jcHAgYi9saWJwcC9zeW1ib2wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDk0NDEyLi4wMDAwMDAwCi0tLSBhL2xpYnBwL3N5bWJvbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioKLSAqIEBmaWxlIHN5bWJvbC5jcHAKLSAqIFN5bWJvbCBjb250YWluZXJzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwNCBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotCi0jaW5jbHVkZSAic3ltYm9sLmgiCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLXVzaW5nIHN0ZDo6Y2VycjsKLXVzaW5nIHN0ZDo6ZW5kbDsKLQotY29sdW1uX2ZsYWdzIHN5bWJvbF9lbnRyeTo6b3V0cHV0X2hpbnQoY29sdW1uX2ZsYWdzIGZsKSBjb25zdAotewotCWlmIChhcHBfbmFtZSAhPSBpbWFnZV9uYW1lKQotCQlmbCA9IGNvbHVtbl9mbGFncyhmbCB8IGNmX2ltYWdlX25hbWUpOwotCi0JLy8gRklYTUU6IHNlZSBjb21tZW50IGluIHN5bWJvbC5oOiB3aHkgd2UgZG9uJ3QgdXNlIHNhbXBsZS52bWEgKyBzaXplID8KLQlpZiAoc2FtcGxlLnZtYSAmIH4weGZmZmZmZmZmTExVKQotCQlmbCA9IGNvbHVtbl9mbGFncyhmbCB8IGNmXzY0Yml0X3ZtYSk7Ci0KLQlyZXR1cm4gZmw7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9zeW1ib2wuaCBiL2xpYnBwL3N5bWJvbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDcyZDljLi4wMDAwMDAwCi0tLSBhL2xpYnBwL3N5bWJvbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKgotICogQGZpbGUgc3ltYm9sLmgKLSAqIFN5bWJvbCBjb250YWluZXJzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwNCBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBTWU1CT0xfSAotI2RlZmluZSBTWU1CT0xfSAotCi0jaW5jbHVkZSAibmFtZV9zdG9yYWdlLmgiCi0jaW5jbHVkZSAiZ3Jvd2FibGVfdmVjdG9yLmgiCi0jaW5jbHVkZSAiZm9ybWF0X2ZsYWdzLmgiCi0jaW5jbHVkZSAib3BfdHlwZXMuaCIKLQotI2luY2x1ZGUgPGJmZC5oPgotCi0jaW5jbHVkZSA8bGlzdD4KLQotCi0vLy8gZm9yIHN0b3Jpbmcgc2FtcGxlIGNvdW50cwotdHlwZWRlZiBncm93YWJsZV92ZWN0b3I8dTMyPiBjb3VudF9hcnJheV90OwotCi0KLS8vLyBBIHNpbXBsZSBjb250YWluZXIgZm9yIGEgZmlsZW5vOmxpbmVuciBsb2NhdGlvbi4KLXN0cnVjdCBmaWxlX2xvY2F0aW9uIHsKLQlmaWxlX2xvY2F0aW9uKCkgOiBsaW5lbnIoMCkge30KLQkvLy8gZW1wdHkgaWYgbm90IHZhbGlkLgotCWRlYnVnX25hbWVfaWQgZmlsZW5hbWU7Ci0JLy8vIDAgbWVhbnMgaW52YWxpZCBvciBjb2RlIGlzIGdlbmVyYXRlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlcgotCXVuc2lnbmVkIGludCBsaW5lbnI7Ci0KLQlib29sIG9wZXJhdG9yPChmaWxlX2xvY2F0aW9uIGNvbnN0ICYgcmhzKSBjb25zdCB7Ci0JCS8vIE5vdGUgd2Ugc29ydCBvbiBmaWxlbmFtZSBpZCBub3Qgb24gc3RyaW5nCi0JCXJldHVybiBmaWxlbmFtZSA8IHJocy5maWxlbmFtZSB8fAotCQkgIChmaWxlbmFtZSA9PSByaHMuZmlsZW5hbWUgJiYgbGluZW5yIDwgcmhzLmxpbmVucik7Ci0JfQotfTsKLQotCi0vLy8gYXNzb2NpYXRlIHZtYSBhZGRyZXNzIHdpdGggYSBmaWxlIGxvY2F0aW9uIGFuZCBhIHNhbXBsZXMgY291bnQKLXN0cnVjdCBzYW1wbGVfZW50cnkgewotCXNhbXBsZV9lbnRyeSgpIDogdm1hKDApIHt9Ci0JLy8vIEZyb20gd2hlcmUgZmlsZSBsb2NhdGlvbiBjb21lcyB0aGUgc2FtcGxlcwotCWZpbGVfbG9jYXRpb24gZmlsZV9sb2M7Ci0JLy8vIEZyb20gd2hlcmUgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBjb21lcyB0aGUgc2FtcGxlcwotCWJmZF92bWEgdm1hOwotCS8vLyB0aGUgc2FtcGxlcyBjb3VudAotCWNvdW50X2FycmF5X3QgY291bnRzOwotfTsKLQotCi0vLy8gYXNzb2NpYXRlIGEgc3ltYm9sIHdpdGggYSBmaWxlIGxvY2F0aW9uLCBzYW1wbGVzIGNvdW50IGFuZCB2bWEgYWRkcmVzcwotc3RydWN0IHN5bWJvbF9lbnRyeSB7Ci0Jc3ltYm9sX2VudHJ5KCkgOiBzaXplKDApIHt9Ci0JLy8vIHdoaWNoIGltYWdlIHRoaXMgc3ltYm9sIGJlbG9uZ3MgdG8KLQlpbWFnZV9uYW1lX2lkIGltYWdlX25hbWU7Ci0JLy8vIG93bmluZyBhcHBsaWNhdGlvbiBuYW1lOiBpZGVudGljYWwgdG8gaW1hZ2UgbmFtZSBpZiBwcm9maWxpbmcKLQkvLy8gc2Vzc2lvbiBkaWQgbm90IHNlcGFyYXRlIHNhbXBsZXMgZm9yIHNoYXJlZCBsaWJzIG9yIGlmIGltYWdlX25hbWUKLQkvLy8gaXMgbm90IGEgc2hhcmVkIGxpYgotCWltYWdlX25hbWVfaWQgYXBwX25hbWU7Ci0JLy8vIGZpbGUgbG9jYXRpb24sIHZtYSBhbmQgY3VtdWxhdGVkIHNhbXBsZXMgY291bnQgZm9yIHRoaXMgc3ltYm9sCi0Jc2FtcGxlX2VudHJ5IHNhbXBsZTsKLQkvLy8gbmFtZSBvZiBzeW1ib2wKLQlzeW1ib2xfbmFtZV9pZCBuYW1lOwotCS8vLyBzeW1ib2wgc2l6ZSBhcyBjYWxjdWxhdGVkIGJ5IG9wX2JmZCwgc3RhcnQgb2Ygc3ltYm9sIGlzIHNhbXBsZS52bWEKLQlzaXplX3Qgc2l6ZTsKLQotCS8qKgotCSAqIEBwYXJhbSBmbCAgaW5wdXQgaGludAotCSAqCi0JICogY29tYmluZSBmbCB3aXRoIHRoZSBjYWxjdWxhdGVkIGhpbnQuIEl0J3MgdGhlb3JldGljYWxseSBwb3NzaWJsZQotCSAqIHRoYXQgd2UgZ2V0IGEgc3ltYm9sIHdoZXJlIGl0cyBzYW1wbGVzIHBhc3MgdGhlIGJvcmRlciBsaW5lLCBidXQKLQkgKiB0aGUgc3RhcnQgaXMgYmVsb3cgaXQsIGJ1dCB0aGUgdGhlIGhpbnQgaXMgb25seSB1c2VkIGZvciBmb3JtYXR0aW5nCi0JICovCi0JY29sdW1uX2ZsYWdzIG91dHB1dF9oaW50KGNvbHVtbl9mbGFncyBmbCkgY29uc3Q7Ci19OwotCi0KLS8vLyBhIGNvbGxlY3Rpb24gb2Ygc29ydGVkIHN5bWJvbHMKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8c3ltYm9sX2VudHJ5IGNvbnN0ICo+IHN5bWJvbF9jb2xsZWN0aW9uOwotCi0KLS8qKgotICogVGhlIHB1YmxpYyBkYXRhIGZvciBjYWxsLWdyYXBoIHN5bWJvbHMuIEVhY2ggY2FsbGVyL2NhbGxlZSBoYXMKLSAqIHRoZSBzYW1wbGUgY291bnRzIHJlcGxhY2VkIHdpdGggdGhlIHJlbGV2YW50IGFyYyBjb3VudHMsIHdoaWxzdAotICogdGhlIGNnX3N5bWJvbCByZXRhaW5zIGl0cyBzZWxmIGNvdW50LgotICovCi1zdHJ1Y3QgY2dfc3ltYm9sIDogcHVibGljIHN5bWJvbF9lbnRyeSB7Ci0JY2dfc3ltYm9sKHN5bWJvbF9lbnRyeSBjb25zdCAmIHN5bSkgOiBzeW1ib2xfZW50cnkoc3ltKSB7fQotCi0JdHlwZWRlZiBzdGQ6OnZlY3RvcjxzeW1ib2xfZW50cnk+IGNoaWxkcmVuOwotCi0JLy8vIGFsbCBjYWxsZXJzIG9mIHRoaXMgc3ltYm9sCi0JY2hpbGRyZW4gY2FsbGVyczsKLQkvLy8gdG90YWwgY291bnQgb2YgY2FsbGVycwotCWNvdW50X2FycmF5X3QgdG90YWxfY2FsbGVyX2NvdW50OwotCi0JLy8vIGFsbCBzeW1ib2xzIGNhbGxlZCBieSB0aGlzIHN5bWJvbAotCWNoaWxkcmVuIGNhbGxlZXM7Ci0JLy8vIHRvdGFsIGNvdW50IG9mIGNhbGxlZXMKLQljb3VudF9hcnJheV90IHRvdGFsX2NhbGxlZV9jb3VudDsKLX07Ci0KLQotLy8vIGEgY29sbGVjdGlvbiBvZiBzb3J0ZWQgY2FsbGdyYXBoIHN5bWJvbHMKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8Y2dfc3ltYm9sPiBjZ19jb2xsZWN0aW9uOwotCi0KLS8vLyBmb3Igc3RvcmluZyBkaWZmICVhZ2VzCi10eXBlZGVmIGdyb3dhYmxlX3ZlY3Rvcjxkb3VibGU+IGRpZmZfYXJyYXlfdDsKLQotCi0vKioKLSAqIERhdGEgZm9yIGEgZGlmZmVkIHN5bWJvbC4KLSAqLwotc3RydWN0IGRpZmZfc3ltYm9sIDogcHVibGljIHN5bWJvbF9lbnRyeSAgewotCWRpZmZfc3ltYm9sKHN5bWJvbF9lbnRyeSBjb25zdCAmIHN5bSkgOiBzeW1ib2xfZW50cnkoc3ltKSB7fQotCi0JLy8vIGRpZmYgJWFnZSB2YWx1ZXMgZm9yIGVhY2ggcHJvZmlsZSBjbGFzcwotCWRpZmZfYXJyYXlfdCBkaWZmczsKLX07Ci0KLQotLy8vIGEgY29sbGVjdGlvbiBvZiBkaWZmZWQgc3ltYm9scwotdHlwZWRlZiBzdGQ6OnZlY3RvcjxkaWZmX3N5bWJvbD4gZGlmZl9jb2xsZWN0aW9uOwotCi0KLSNlbmRpZiAvKiAhU1lNQk9MX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwIGIvbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YTZkM2UuLjAwMDAwMDAKLS0tIGEvbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBzeW1ib2xfY29udGFpbmVyLmNwcAotICogSW50ZXJuYWwgY29udGFpbmVyIGZvciBzeW1ib2xzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgInN5bWJvbF9jb250YWluZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotc3ltYm9sX2NvbnRhaW5lcjo6c2l6ZV90eXBlIHN5bWJvbF9jb250YWluZXI6OnNpemUoKSBjb25zdAotewotCXJldHVybiBzeW1ib2xzLnNpemUoKTsKLX0KLQotCi1zeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2xfY29udGFpbmVyOjppbnNlcnQoc3ltYm9sX2VudHJ5IGNvbnN0ICYgc3ltYikKLXsKLQlwYWlyPHN5bWJvbHNfdDo6aXRlcmF0b3IsIGJvb2w+IHAgPSBzeW1ib2xzLmluc2VydChzeW1iKTsKLQlpZiAoIXAuc2Vjb25kKSB7Ci0JCS8vIHNhZmU6IGNvdW50IGlzIG5vdCB1c2VkIGJ5IHNvcnRpbmcgY3JpdGVyaWEKLQkJc3ltYm9sX2VudHJ5ICogc3ltYm9sID0gY29uc3RfY2FzdDxzeW1ib2xfZW50cnkqPigmKnAuZmlyc3QpOwotCQlzeW1ib2wtPnNhbXBsZS5jb3VudHMgKz0gc3ltYi5zYW1wbGUuY291bnRzOwotCX0KLQotCXJldHVybiAmKnAuZmlyc3Q7Ci19Ci0KLQotc3ltYm9sX2VudHJ5IGNvbnN0ICoKLXN5bWJvbF9jb250YWluZXI6OmZpbmQoZGVidWdfbmFtZV9pZCBmaWxlbmFtZSwgc2l6ZV90IGxpbmVucikgY29uc3QKLXsKLQlidWlsZF9ieV9sb2MoKTsKLQotCXN5bWJvbF9lbnRyeSBzeW1ib2w7Ci0Jc3ltYm9sLnNhbXBsZS5maWxlX2xvYy5maWxlbmFtZSA9IGZpbGVuYW1lOwotCXN5bWJvbC5zYW1wbGUuZmlsZV9sb2MubGluZW5yID0gbGluZW5yOwotCi0Jc3ltYm9sc19ieV9sb2NfdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzeW1ib2xzX2J5X2xvYy5maW5kKCZzeW1ib2wpOwotCi0JaWYgKGl0ICE9IHN5bWJvbHNfYnlfbG9jLmVuZCgpKQotCQlyZXR1cm4gKml0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotdm9pZCBzeW1ib2xfY29udGFpbmVyOjpidWlsZF9ieV9sb2MoKSBjb25zdAotewotCWlmICghc3ltYm9sc19ieV9sb2MuZW1wdHkoKSkKLQkJcmV0dXJuOwotCi0Jc3ltYm9sc190Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBzeW1ib2xzLmJlZ2luKCk7Ci0Jc3ltYm9sc190Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzeW1ib2xzLmVuZCgpOwotCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkKLQkJc3ltYm9sc19ieV9sb2MuaW5zZXJ0KCYqY2l0KTsKLX0KLQotCi1zeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2xfY29udGFpbmVyOjpmaW5kX2J5X3ZtYShzdHJpbmcgY29uc3QgJiBpbWFnZV9uYW1lLAotCQkJCQkJICAgYmZkX3ZtYSB2bWEpIGNvbnN0Ci17Ci0JLy8gRklYTUU6IHRoaXMgaXMgdG9vIGluZWZmaWNpZW50IHByb2JhYmx5Ci0Jc3ltYm9sc190Ojpjb25zdF9pdGVyYXRvciBpdDsKLQlmb3IgKGl0ID0gc3ltYm9scy5iZWdpbigpOyBpdCAhPSBzeW1ib2xzLmVuZCgpOyArK2l0KSB7Ci0JCWlmIChpdC0+c2FtcGxlLnZtYSA9PSB2bWEgJiYKLQkJICAgIGltYWdlX25hbWVzLm5hbWUoaXQtPmltYWdlX25hbWUpID09IGltYWdlX25hbWUpCi0JCQlyZXR1cm4gJippdDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIHN5bWJvbF9jb250YWluZXI6OmJlZ2luKCkKLXsKLQlyZXR1cm4gc3ltYm9scy5iZWdpbigpOwotfQotCi0KLXN5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3Igc3ltYm9sX2NvbnRhaW5lcjo6ZW5kKCkKLXsKLQlyZXR1cm4gc3ltYm9scy5lbmQoKTsKLX0KLQotc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sX2NvbnRhaW5lcjo6ZmluZChzeW1ib2xfZW50cnkgY29uc3QgJiBzeW1ib2wpIGNvbnN0Ci17Ci0Jc3ltYm9sc190Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN5bWJvbHMuZmluZChzeW1ib2wpOwotCXJldHVybiBpdCA9PSBzeW1ib2xzLmVuZCgpID8gMCA6ICYqaXQ7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9zeW1ib2xfY29udGFpbmVyLmggYi9saWJwcC9zeW1ib2xfY29udGFpbmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczY2E1ODEuLjAwMDAwMDAKLS0tIGEvbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBzeW1ib2xfY29udGFpbmVyLmgKLSAqIEludGVybmFsIGNvbnRhaW5lciBmb3Igc3ltYm9scwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIsIDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgU1lNQk9MX0NPTlRBSU5FUl9ICi0jZGVmaW5lIFNZTUJPTF9DT05UQUlORVJfSAotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHNldD4KLQotI2luY2x1ZGUgInN5bWJvbC5oIgotI2luY2x1ZGUgInN5bWJvbF9mdW5jdG9ycy5oIgotCi0vKioKLSAqIEFuIGFyYml0cmFyeSBjb250YWluZXIgb2Ygc3ltYm9scy4gU3VwcG9ydHMgbG9va3VwCi0gKiBieSBuYW1lLCBieSBWTUEsIGFuZCBieSBmaWxlIGxvY2F0aW9uLgotICoKLSAqIExvb2t1cCBieSBuYW1lIG9yIGJ5IFZNQSBpcyBPKG4pLiBMb29rdXAgYnkgZmlsZSBsb2NhdGlvbgotICogaXMgTyhsb2cobikpLgotICovCi1jbGFzcyBzeW1ib2xfY29udGFpbmVyIHsKLXB1YmxpYzoKLQkvLy8gY29udGFpbmVyIHR5cGUKLQl0eXBlZGVmIHN0ZDo6c2V0PHN5bWJvbF9lbnRyeSwgbGVzc19zeW1ib2w+IHN5bWJvbHNfdDsKLQotCXR5cGVkZWYgc3ltYm9sc190OjpzaXplX3R5cGUgc2l6ZV90eXBlOwotCi0JLy8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgc3RvcmVkCi0Jc2l6ZV90eXBlIHNpemUoKSBjb25zdDsKLQotCS8qKgotCSAqIEluc2VydCBhIG5ldyBzeW1ib2wuIElmIHRoZSBzeW1ib2wgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGNvbnRhaW5lciwKLQkgKiB0aGVuIHRoZSBzYW1wbGUgY291bnRzIGFyZSBhY2N1bXVsYXRlZC4KLQkgKiBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIHN5bWJvbCBvciB0aGUgZXhpc3Rpbmcgb25lLiBUaGlzIHBvaW50ZXIKLQkgKiByZW1haW5zIHZhbGlkIGR1cmluZyB0aGUgd2hvbGUgbGlmZSB0aW1lIG9mIGEgc3ltYm9sX2NvbnRhaW5lcgotCSAqIG9iamVjdCBhbmQgaXMgd2FycmFudGVkIHVuaXF1ZSBhY2NvcmRpbmcgdG8gbGVzc19zeW1ib2wgY29tcGFyYXRvci4KLQkgKiBDYW4gb25seSBiZSBkb25lIGJlZm9yZSBhbnkgZmlsZS1sb2NhdGlvbiBiYXNlZCBsb29rdXBzLCBzaW5jZSB0aGUKLQkgKiB0d28gbG9va3VwIG1ldGhvZHMgYXJlIG5vdCBzeW5jaHJvbmlzZWQuCi0JICovCi0Jc3ltYm9sX2VudHJ5IGNvbnN0ICogaW5zZXJ0KHN5bWJvbF9lbnRyeSBjb25zdCAmKTsKLQotCS8vLyBmaW5kIHRoZSBzeW1ib2wgYXQgdGhlIGdpdmVuIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlciwgaWYgYW55Ci0Jc3ltYm9sX2VudHJ5IGNvbnN0ICogZmluZChkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxpbmVucikgY29uc3Q7Ci0KLQkvLy8gZmluZCB0aGUgc3ltYm9sIHdpdGggdGhlIGdpdmVuIGltYWdlX25hbWUgdm1hIGlmIGFueQotCXN5bWJvbF9lbnRyeSBjb25zdCAqIGZpbmRfYnlfdm1hKHN0ZDo6c3RyaW5nIGNvbnN0ICYgaW1hZ2VfbmFtZSwKLQkJCQkJIGJmZF92bWEgdm1hKSBjb25zdDsKLQotCS8vLyBTZWFyY2ggYSBzeW1ib2wuIFJldHVybiBOVUxMIGlmIG5vdCBmb3VuZC4KLQlzeW1ib2xfZW50cnkgY29uc3QgKiBmaW5kKHN5bWJvbF9lbnRyeSBjb25zdCAmIHN5bWJvbCkgY29uc3Q7Ci0KLQkvLy8gcmV0dXJuIHN0YXJ0IG9mIHN5bWJvbHMKLQlzeW1ib2xzX3Q6Oml0ZXJhdG9yIGJlZ2luKCk7Ci0KLQkvLy8gcmV0dXJuIGVuZCBvZiBzeW1ib2xzCi0Jc3ltYm9sc190OjppdGVyYXRvciBlbmQoKTsKLQotcHJpdmF0ZToKLQkvLy8gYnVpbGQgdGhlIHN5bWJvbCBieSBmaWxlLWxvY2F0aW9uIGNhY2hlCi0Jdm9pZCBidWlsZF9ieV9sb2MoKSBjb25zdDsKLQotCS8qKgotCSAqIFRoZSBtYWluIGNvbnRhaW5lciBvZiBzeW1ib2xzLiBNdWx0aXBsZSBzeW1ib2xzIHdpdGggdGhlIHNhbWUKLQkgKiBuYW1lIGFyZSBhbGxvd2VkLgotCSAqLwotCXN5bWJvbHNfdCBzeW1ib2xzOwotCi0JLyoqCi0JICogRGlmZmVyZW50bHktbmFtZWQgc3ltYm9sIGF0IHNhbWUgZmlsZSBsb2NhdGlvbiBhcmUgYWxsb3dlZCBlLmcuCi0JICogdGVtcGxhdGUgaW5zdGFudGlhdGlvbi4KLQkgKi8KLQl0eXBlZGVmIHN0ZDo6bXVsdGlzZXQ8c3ltYm9sX2VudHJ5IGNvbnN0ICosIGxlc3NfYnlfZmlsZV9sb2M+Ci0JCXN5bWJvbHNfYnlfbG9jX3Q7Ci0KLQkvLyBtdXN0IGJlIGRlY2xhcmVkIGFmdGVyIHRoZSBzZXQgdG8gZW5zdXJlIGEgY29ycmVjdCBsaWZlLXRpbWUuCi0KLQkvKioKLQkgKiBTeW1ib2xzIHNvcnRlZCBieSBsb2NhdGlvbiBvcmRlci4gTGF6aWx5IGJ1aWx0IG9uIHJlcXVlc3QsCi0JICogc28gbXV0YWJsZS4KLQkgKi8KLQltdXRhYmxlIHN5bWJvbHNfYnlfbG9jX3Qgc3ltYm9sc19ieV9sb2M7Ci19OwotCi0jZW5kaWYgLyogU1lNQk9MX0NPTlRBSU5FUl9IICovCmRpZmYgLS1naXQgYS9saWJwcC9zeW1ib2xfZnVuY3RvcnMuY3BwIGIvbGlicHAvc3ltYm9sX2Z1bmN0b3JzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQxMDdjMy4uMDAwMDAwMAotLS0gYS9saWJwcC9zeW1ib2xfZnVuY3RvcnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBzeW1ib2xfZnVuY3RvcnMuY3BwCi0gKiBGdW5jdG9ycyBmb3Igc3ltYm9sL3NhbXBsZSBjb21wYXJpc29uCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2luY2x1ZGUgInN5bWJvbF9mdW5jdG9ycy5oIgotCi1ib29sIGxlc3Nfc3ltYm9sOjpvcGVyYXRvcigpKHN5bWJvbF9lbnRyeSBjb25zdCAmIGxocywKLQkJCSAgICAgc3ltYm9sX2VudHJ5IGNvbnN0ICYgcmhzKSBjb25zdAotewotCWlmIChsaHMuaW1hZ2VfbmFtZSAhPSByaHMuaW1hZ2VfbmFtZSkKLQkJcmV0dXJuIGxocy5pbWFnZV9uYW1lIDwgcmhzLmltYWdlX25hbWU7Ci0KLQlpZiAobGhzLmFwcF9uYW1lICE9IHJocy5hcHBfbmFtZSkKLQkJcmV0dXJuIGxocy5hcHBfbmFtZSA8IHJocy5hcHBfbmFtZTsKLQotCWlmIChsaHMubmFtZSAhPSByaHMubmFtZSkKLQkJcmV0dXJuIGxocy5uYW1lIDwgcmhzLm5hbWU7Ci0KLQlpZiAobGhzLnNhbXBsZS52bWEgIT0gcmhzLnNhbXBsZS52bWEpCi0JCXJldHVybiBsaHMuc2FtcGxlLnZtYSA8IHJocy5zYW1wbGUudm1hOwotCi0JcmV0dXJuIGxocy5zaXplIDwgcmhzLnNpemU7Ci19CmRpZmYgLS1naXQgYS9saWJwcC9zeW1ib2xfZnVuY3RvcnMuaCBiL2xpYnBwL3N5bWJvbF9mdW5jdG9ycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2E3MjUzLi4wMDAwMDAwCi0tLSBhL2xpYnBwL3N5bWJvbF9mdW5jdG9ycy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBzeW1ib2xfZnVuY3RvcnMuaAotICogRnVuY3RvcnMgZm9yIHN5bWJvbC9zYW1wbGUgY29tcGFyaXNvbgotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIsIDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgU1lNQk9MX0ZVTkNUT1JTX0gKLSNkZWZpbmUgU1lNQk9MX0ZVTkNUT1JTX0gKLQotI2luY2x1ZGUgInN5bWJvbC5oIgotCi0vLy8gY29tcGFyZSBiYXNlZCBvbiBmaWxlIGxvY2F0aW9uCi1zdHJ1Y3QgbGVzc19ieV9maWxlX2xvYyB7Ci0JYm9vbCBvcGVyYXRvcigpKHNhbXBsZV9lbnRyeSBjb25zdCAqIGxocywKLQkJCXNhbXBsZV9lbnRyeSBjb25zdCAqIHJocykgY29uc3QgewotCQlyZXR1cm4gbGhzLT5maWxlX2xvYyA8IHJocy0+ZmlsZV9sb2M7Ci0JfQotCi0JYm9vbCBvcGVyYXRvcigpKHN5bWJvbF9lbnRyeSBjb25zdCAqIGxocywKLQkJCXN5bWJvbF9lbnRyeSBjb25zdCAqIHJocykgY29uc3QgewotCQlyZXR1cm4gbGhzLT5zYW1wbGUuZmlsZV9sb2MgPCByaHMtPnNhbXBsZS5maWxlX2xvYzsKLQl9Ci19OwotCi0KLS8vLyBjb21wYXJlIGJhc2VkIG9uIHN5bWJvbCBjb250ZW50cwotc3RydWN0IGxlc3Nfc3ltYm9sIHsKLQkvLyBpbXBsZW1lbnRhdGlvbiBjb21wYXJlIGJ5IGlkIHJhdGhlciB0aGFuIGJ5IHN0cmluZwotCWJvb2wgb3BlcmF0b3IoKShzeW1ib2xfZW50cnkgY29uc3QgJiBsaHMsCi0JCQlzeW1ib2xfZW50cnkgY29uc3QgJiByaHMpIGNvbnN0OwotfTsKLQotI2VuZGlmIC8qIFNZTUJPTF9GVU5DVE9SU19IICovCmRpZmYgLS1naXQgYS9saWJwcC9zeW1ib2xfc29ydC5jcHAgYi9saWJwcC9zeW1ib2xfc29ydC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMThlNTkuLjAwMDAwMDAKLS0tIGEvbGlicHAvc3ltYm9sX3NvcnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8qKgotICogQGZpbGUgc3ltYm9sX3NvcnQuY3BwCi0gKiBTb3J0aW5nIHN5bWJvbHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaW5jbHVkZSAic3ltYm9sX3NvcnQuaCIKLSNpbmNsdWRlICJzeW1ib2xfZnVuY3RvcnMuaCIKLQotI2luY2x1ZGUgIm5hbWVfc3RvcmFnZS5oIgotI2luY2x1ZGUgIm9wX2V4Y2VwdGlvbi5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0KLWJvb2wgbG9uZ19maWxlbmFtZXM7Ci0KLWludCBpbWFnZV9jb21wYXJlKGltYWdlX25hbWVfaWQgbCwgaW1hZ2VfbmFtZV9pZCByKQotewotCWlmIChsb25nX2ZpbGVuYW1lcykKLQkJcmV0dXJuIGltYWdlX25hbWVzLm5hbWUobCkuY29tcGFyZShpbWFnZV9uYW1lcy5uYW1lKHIpKTsKLQlyZXR1cm4gaW1hZ2VfbmFtZXMuYmFzZW5hbWUobCkuY29tcGFyZShpbWFnZV9uYW1lcy5iYXNlbmFtZShyKSk7Ci19Ci0KLQotaW50IGRlYnVnX2NvbXBhcmUoZGVidWdfbmFtZV9pZCBsLCBkZWJ1Z19uYW1lX2lkIHIpCi17Ci0JaWYgKGxvbmdfZmlsZW5hbWVzKQotCQlyZXR1cm4gZGVidWdfbmFtZXMubmFtZShsKS5jb21wYXJlKGRlYnVnX25hbWVzLm5hbWUocikpOwotCXJldHVybiBkZWJ1Z19uYW1lcy5iYXNlbmFtZShsKS5jb21wYXJlKGRlYnVnX25hbWVzLmJhc2VuYW1lKHIpKTsKLX0KLQotCi1pbnQgY29tcGFyZV9ieShzb3J0X29wdGlvbnM6OnNvcnRfb3JkZXIgb3JkZXIsCi0gICAgICAgICAgICAgICBzeW1ib2xfZW50cnkgY29uc3QgJiBsaHMsIHN5bWJvbF9lbnRyeSBjb25zdCAmIHJocykKLXsKLQlzd2l0Y2ggKG9yZGVyKSB7Ci0JCWNhc2Ugc29ydF9vcHRpb25zOjpzYW1wbGU6Ci0JCQlpZiAobGhzLnNhbXBsZS5jb3VudHNbMF0gPCByaHMuc2FtcGxlLmNvdW50c1swXSkKLQkJCQlyZXR1cm4gMTsKLQkJCWlmIChsaHMuc2FtcGxlLmNvdW50c1swXSA+IHJocy5zYW1wbGUuY291bnRzWzBdKQotCQkJCXJldHVybiAtMTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2Ugc29ydF9vcHRpb25zOjpzeW1ib2w6Ci0JCQlyZXR1cm4gc3ltYm9sX25hbWVzLmRlbWFuZ2xlKGxocy5uYW1lKS5jb21wYXJlKAotCQkJCXN5bWJvbF9uYW1lcy5kZW1hbmdsZShyaHMubmFtZSkpOwotCi0JCWNhc2Ugc29ydF9vcHRpb25zOjppbWFnZToKLQkJCXJldHVybiBpbWFnZV9jb21wYXJlKGxocy5pbWFnZV9uYW1lLCByaHMuaW1hZ2VfbmFtZSk7Ci0KLQkJY2FzZSBzb3J0X29wdGlvbnM6OmFwcF9uYW1lOgotCQkJcmV0dXJuIGltYWdlX2NvbXBhcmUobGhzLmFwcF9uYW1lLCByaHMuYXBwX25hbWUpOwotCi0JCWNhc2Ugc29ydF9vcHRpb25zOjp2bWE6Ci0JCQlpZiAobGhzLnNhbXBsZS52bWEgPCByaHMuc2FtcGxlLnZtYSkKLQkJCQlyZXR1cm4gLTE7Ci0JCQlpZiAobGhzLnNhbXBsZS52bWEgPiByaHMuc2FtcGxlLnZtYSkKLQkJCQlyZXR1cm4gMTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2Ugc29ydF9vcHRpb25zOjpkZWJ1ZzogewotCQkJZmlsZV9sb2NhdGlvbiBjb25zdCAmIGYxID0gbGhzLnNhbXBsZS5maWxlX2xvYzsKLQkJCWZpbGVfbG9jYXRpb24gY29uc3QgJiBmMiA9IHJocy5zYW1wbGUuZmlsZV9sb2M7Ci0JCQlpbnQgcmV0ID0gZGVidWdfY29tcGFyZShmMS5maWxlbmFtZSwgZjIuZmlsZW5hbWUpOwotCQkJaWYgKHJldCA9PSAwKQotCQkJCXJldCA9IGYxLmxpbmVuciAtIGYyLmxpbmVucjsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlkZWZhdWx0OiB7Ci0JCQkvLyBzdGF0aWNfY2FzdDw+IHRvIHNodXQgdXAgZysrIDIuOTEuNjYgd2hpY2ggd2FybgotCQkJLy8gYWJvdXQgYW1iaWd1aXR5IGJldHdlZW4gPDwoaW50KSBhbmQgPDwobG9uZyBpbnQpCi0JCQlvc3RyaW5nc3RyZWFtIG9zOwotCQkJb3MgPDwgImNvbXBhcmVfYnkoKTogdW5rbm93biBzb3J0IG9wdGlvbjogIgotCQkJICAgPDwgc3RhdGljX2Nhc3Q8aW50PihvcmRlcikgPDwgZW5kbDsKLQkJCXRocm93IG9wX2ZhdGFsX2Vycm9yKG9zLnN0cigpKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0cnVjdCBzeW1ib2xfY29tcGFyZSB7Ci0Jc3ltYm9sX2NvbXBhcmUodmVjdG9yPHNvcnRfb3B0aW9uczo6c29ydF9vcmRlcj4gY29uc3QgJiBvcmRlciwKLQkgICAgICAgICAgICAgICBib29sIHJldmVyc2UpCi0JCTogY29tcGFyZV9vcmRlcihvcmRlciksIHJldmVyc2Vfc29ydChyZXZlcnNlKSB7fQotCi0JYm9vbCBvcGVyYXRvcigpKHN5bWJvbF9lbnRyeSBjb25zdCAqIGxocywKLQkJCXN5bWJvbF9lbnRyeSBjb25zdCAqIHJocykgY29uc3QgewotCQlyZXR1cm4gb3BlcmF0b3IoKSgqbGhzLCAqcmhzKTsKLQl9Ci0KLQlib29sIG9wZXJhdG9yKCkoc3ltYm9sX2VudHJ5IGNvbnN0ICYgbGhzLAotCQkJc3ltYm9sX2VudHJ5IGNvbnN0ICYgcmhzKSBjb25zdDsKLQotcHJvdGVjdGVkOgotCXZlY3Rvcjxzb3J0X29wdGlvbnM6OnNvcnRfb3JkZXI+IGNvbnN0ICYgY29tcGFyZV9vcmRlcjsKLQlib29sIHJldmVyc2Vfc29ydDsKLX07Ci0KLQotYm9vbCBzeW1ib2xfY29tcGFyZTo6b3BlcmF0b3IoKShzeW1ib2xfZW50cnkgY29uc3QgJiBsaHMsCi0JCQkJc3ltYm9sX2VudHJ5IGNvbnN0ICYgcmhzKSBjb25zdAotewotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcGFyZV9vcmRlci5zaXplKCk7ICsraSkgewotCQlpbnQgcmV0ID0gY29tcGFyZV9ieShjb21wYXJlX29yZGVyW2ldLCBsaHMsIHJocyk7Ci0KLQkJaWYgKHJldmVyc2Vfc29ydCkKLQkJCXJldCA9IC1yZXQ7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXJldHVybiByZXQgPCAwOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLQotdm9pZCBzb3J0X29wdGlvbnM6Ogotc29ydChzeW1ib2xfY29sbGVjdGlvbiAmIHN5bXMsIGJvb2wgcmV2ZXJzZV9zb3J0LCBib29sIGxmKSBjb25zdAotewotCWxvbmdfZmlsZW5hbWVzID0gbGY7Ci0KLQl2ZWN0b3I8c29ydF9vcmRlcj4gc29ydF9vcHRpb24ob3B0aW9ucyk7Ci0JZm9yIChzb3J0X29yZGVyIGN1ciA9IGZpcnN0OyBjdXIgIT0gbGFzdDsgY3VyID0gc29ydF9vcmRlcihjdXIgKyAxKSkgewotCQlpZiAoZmluZChzb3J0X29wdGlvbi5iZWdpbigpLCBzb3J0X29wdGlvbi5lbmQoKSwgY3VyKSA9PQotCQkgICAgc29ydF9vcHRpb24uZW5kKCkpCi0JCQlzb3J0X29wdGlvbi5wdXNoX2JhY2soY3VyKTsKLQl9Ci0KLQlzdGFibGVfc29ydChzeW1zLmJlZ2luKCksIHN5bXMuZW5kKCksCi0JICAgICAgICAgICAgc3ltYm9sX2NvbXBhcmUoc29ydF9vcHRpb24sIHJldmVyc2Vfc29ydCkpOwotfQotCi0KLXZvaWQgc29ydF9vcHRpb25zOjoKLXNvcnQoY2dfY29sbGVjdGlvbiAmIHN5bXMsIGJvb2wgcmV2ZXJzZV9zb3J0LCBib29sIGxmKSBjb25zdAotewotCWxvbmdfZmlsZW5hbWVzID0gbGY7Ci0KLQl2ZWN0b3I8c29ydF9vcmRlcj4gc29ydF9vcHRpb24ob3B0aW9ucyk7Ci0JZm9yIChzb3J0X29yZGVyIGN1ciA9IGZpcnN0OyBjdXIgIT0gbGFzdDsgY3VyID0gc29ydF9vcmRlcihjdXIgKyAxKSkgewotCQlpZiAoZmluZChzb3J0X29wdGlvbi5iZWdpbigpLCBzb3J0X29wdGlvbi5lbmQoKSwgY3VyKSA9PQotCQkgICAgc29ydF9vcHRpb24uZW5kKCkpCi0JCQlzb3J0X29wdGlvbi5wdXNoX2JhY2soY3VyKTsKLQl9Ci0KLQlzdGFibGVfc29ydChzeW1zLmJlZ2luKCksIHN5bXMuZW5kKCksCi0JICAgICAgICAgICAgc3ltYm9sX2NvbXBhcmUoc29ydF9vcHRpb24sIHJldmVyc2Vfc29ydCkpOwotfQotCi0KLXZvaWQgc29ydF9vcHRpb25zOjoKLXNvcnQoZGlmZl9jb2xsZWN0aW9uICYgc3ltcywgYm9vbCByZXZlcnNlX3NvcnQsIGJvb2wgbGYpIGNvbnN0Ci17Ci0JbG9uZ19maWxlbmFtZXMgPSBsZjsKLQotCXZlY3Rvcjxzb3J0X29yZGVyPiBzb3J0X29wdGlvbihvcHRpb25zKTsKLQlmb3IgKHNvcnRfb3JkZXIgY3VyID0gZmlyc3Q7IGN1ciAhPSBsYXN0OyBjdXIgPSBzb3J0X29yZGVyKGN1ciArIDEpKSB7Ci0JCWlmIChmaW5kKHNvcnRfb3B0aW9uLmJlZ2luKCksIHNvcnRfb3B0aW9uLmVuZCgpLCBjdXIpID09Ci0JCSAgICBzb3J0X29wdGlvbi5lbmQoKSkKLQkJCXNvcnRfb3B0aW9uLnB1c2hfYmFjayhjdXIpOwotCX0KLQotCXN0YWJsZV9zb3J0KHN5bXMuYmVnaW4oKSwgc3ltcy5lbmQoKSwKLQkgICAgICAgICAgICBzeW1ib2xfY29tcGFyZShzb3J0X29wdGlvbiwgcmV2ZXJzZV9zb3J0KSk7Ci19Ci0KLQotdm9pZCBzb3J0X29wdGlvbnM6OmFkZF9zb3J0X29wdGlvbihzdHJpbmcgY29uc3QgJiBuYW1lKQotewotCWlmIChuYW1lID09ICJ2bWEiKSB7Ci0JCW9wdGlvbnMucHVzaF9iYWNrKHZtYSk7Ci0JfSBlbHNlIGlmIChuYW1lID09ICJzYW1wbGUiKSB7Ci0JCW9wdGlvbnMucHVzaF9iYWNrKHNhbXBsZSk7Ci0JfSBlbHNlIGlmIChuYW1lID09ICJzeW1ib2wiKSB7Ci0JCW9wdGlvbnMucHVzaF9iYWNrKHN5bWJvbCk7Ci0JfSBlbHNlIGlmIChuYW1lID09ICJkZWJ1ZyIpIHsKLQkJb3B0aW9ucy5wdXNoX2JhY2soZGVidWcpOwotCX0gZWxzZSBpZiAobmFtZSA9PSAiaW1hZ2UiKSB7Ci0JCW9wdGlvbnMucHVzaF9iYWNrKGltYWdlKTsKLQl9IGVsc2UgaWYgKG5hbWUgPT0gImFwcC1uYW1lIikgewotCQlvcHRpb25zLnB1c2hfYmFjayhhcHBfbmFtZSk7Ci0JfSBlbHNlIHsKLQkJb3N0cmluZ3N0cmVhbSBvczsKLQkJb3MgPDwgInVua25vd24gc29ydCBvcHRpb246ICIgPDwgbmFtZSA8PCBlbmRsOwotCQl0aHJvdyBvcF9mYXRhbF9lcnJvcihvcy5zdHIoKSk7Ci0JfQotfQotCi0KLXZvaWQgc29ydF9vcHRpb25zOjphZGRfc29ydF9vcHRpb24oc29ydF9vcHRpb25zOjpzb3J0X29yZGVyIG9yZGVyKQotewotCW9wdGlvbnMucHVzaF9iYWNrKG9yZGVyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnBwL3N5bWJvbF9zb3J0LmggYi9saWJwcC9zeW1ib2xfc29ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTkzZDA0Li4wMDAwMDAwCi0tLSBhL2xpYnBwL3N5bWJvbF9zb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioKLSAqIEBmaWxlIHN5bWJvbF9zb3J0LmgKLSAqIFNvcnRpbmcgc3ltYm9scwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIsIDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgU1lNQk9MX1NPUlRfSAotI2RlZmluZSBTWU1CT0xfU09SVF9ICi0KLSNpbmNsdWRlICJzeW1ib2wuaCIKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLXN0cnVjdCBzb3J0X29wdGlvbnMgewotCWVudW0gc29ydF9vcmRlciB7Ci0JCS8vIG9yZGVyIGdpdmUgc29ydCBvcmRlciBpZiBjYWxsZXIgZG9lc24ndCBzcGVjaWZ5IG9uZQotCQlmaXJzdCwKLQkJc2FtcGxlID0gZmlyc3QsCi0JCWltYWdlLAotCQlhcHBfbmFtZSwKLQkJc3ltYm9sLAotCQlkZWJ1ZywKLQkJdm1hLAotCQlsYXN0Ci0JfTsKLQotCXNvcnRfb3B0aW9ucygpIHt9Ci0KLQl2b2lkIGFkZF9zb3J0X29wdGlvbihzdGQ6OnN0cmluZyBjb25zdCAmIG5hbWUpOwotCXZvaWQgYWRkX3NvcnRfb3B0aW9uKHNvcnRfb3JkZXIgb3JkZXIpOwotCi0JLyoqCi0JICogU29ydCB0aGUgZ2l2ZW4gY29udGFpbmVyIGJ5IHRoZSBnaXZlbiBjcml0ZXJpYS4KLQkgKi8KLQl2b2lkIHNvcnQoc3ltYm9sX2NvbGxlY3Rpb24gJiBzeW1zLCBib29sIHJldmVyc2Vfc29ydCwKLQkgICAgICAgICAgYm9vbCBsb25nX2ZpbGVuYW1lcykgY29uc3Q7Ci0KLQkvKioKLQkgKiBTb3J0IHRoZSBnaXZlbiBjb250YWluZXIgYnkgdGhlIGdpdmVuIGNyaXRlcmlhLgotCSAqLwotCXZvaWQgc29ydChjZ19jb2xsZWN0aW9uICYgc3ltcywgYm9vbCByZXZlcnNlX3NvcnQsCi0JICAgICAgICAgIGJvb2wgbG9uZ19maWxlbmFtZXMpIGNvbnN0OwotCi0JLyoqCi0JICogU29ydCB0aGUgZ2l2ZW4gY29udGFpbmVyIGJ5IHRoZSBnaXZlbiBjcml0ZXJpYS4KLQkgKi8KLQl2b2lkIHNvcnQoZGlmZl9jb2xsZWN0aW9uICYgc3ltcywgYm9vbCByZXZlcnNlX3NvcnQsCi0JICAgICAgICAgIGJvb2wgbG9uZ19maWxlbmFtZXMpIGNvbnN0OwotCi0Jc3RkOjp2ZWN0b3I8c29ydF9vcmRlcj4gb3B0aW9uczsKLX07Ci0KLSNlbmRpZiAvLyBTWU1CT0xfU09SVF9ICmRpZmYgLS1naXQgYS9saWJyZWdleC9NYWtlZmlsZS5hbSBiL2xpYnJlZ2V4L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmUxMTRiLi4wMDAwMDAwCi0tLSBhL2xpYnJlZ2V4L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotU1VCRElSUyA9IC4gdGVzdHMKLQotQU1fQ1BQRkxBR1MgPSAtSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKwotQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi0KLW5vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcF9yZWdleC5hCi0KLWxpYm9wX3JlZ2V4X2FfU09VUkNFUyA9IFwKLQlvcF9yZWdleC5jcHAgXAotCW9wX3JlZ2V4LmggXAotCWRlbWFuZ2xlX3N5bWJvbC5oIFwKLQlkZW1hbmdsZV9zeW1ib2wuY3BwCi0KLWRhdGFkaXIgPSAkKHByZWZpeCkvc2hhcmUvb3Byb2ZpbGUKLW5vZGlzdF9kYXRhX0RBVEEgPSBzdGwucGF0CmRpZmYgLS1naXQgYS9saWJyZWdleC9NYWtlZmlsZS5pbiBiL2xpYnJlZ2V4L01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTcwOWIzLi4wMDAwMDAwCi0tLSBhL2xpYnJlZ2V4L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTk0ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS41IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1TT1VSQ0VTID0gJChsaWJvcF9yZWdleF9hX1NPVVJDRVMpCi0KLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSBASU5TVEFMTEAKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLXN1YmRpciA9IGxpYnJlZ2V4Ci1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAotCSQoc3JjZGlyKS9zdGwucGF0LmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPSBzdGwucGF0Ci1MSUJSQVJJRVMgPSAkKG5vaW5zdF9MSUJSQVJJRVMpCi1BUiA9IGFyCi1BUkZMQUdTID0gY3J1Ci1saWJvcF9yZWdleF9hX0FSID0gJChBUikgJChBUkZMQUdTKQotbGlib3BfcmVnZXhfYV9MSUJBREQgPQotYW1fbGlib3BfcmVnZXhfYV9PQkpFQ1RTID0gb3BfcmVnZXguJChPQkpFWFQpIFwKLQlkZW1hbmdsZV9zeW1ib2wuJChPQkpFWFQpCi1saWJvcF9yZWdleF9hX09CSkVDVFMgPSAkKGFtX2xpYm9wX3JlZ2V4X2FfT0JKRUNUUykKLURFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1DWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCi0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKLUNYWExEID0gJChDWFgpCi1DWFhMSU5LID0gJChDWFhMRCkgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotU09VUkNFUyA9ICQobGlib3BfcmVnZXhfYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJvcF9yZWdleF9hX1NPVVJDRVMpCi1SRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAotCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgXAotCXBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCi0JdW5pbnN0YWxsLXJlY3Vyc2l2ZQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGRhdGFkaXIpIgotbm9kaXN0X2RhdGFEQVRBX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkKLURBVEEgPSAkKG5vZGlzdF9kYXRhX0RBVEEpCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1ESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACi1BTVRBUiA9IEBBTVRBUkAKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkZEX0xJQlMgPSBAQkZEX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFURSA9IEBEQVRFQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVYRUVYVCA9IEBFWEVFWFRACi1FWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUtJTkMgPSBAS0lOQ0AKLUtTUkMgPSBAS1NSQ0AKLUtWRVJTID0gQEtWRVJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKLVhfTElCUyA9IEBYX0xJQlNACi1YX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWRhdGFkaXIgPSAkKHByZWZpeCkvc2hhcmUvb3Byb2ZpbGUKLWVuYWJsZV9hYmlfRkFMU0UgPSBAZW5hYmxlX2FiaV9GQUxTRUAKLWVuYWJsZV9hYmlfVFJVRSA9IEBlbmFibGVfYWJpX1RSVUVACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhhdmVfcXRfRkFMU0UgPSBAaGF2ZV9xdF9GQUxTRUAKLWhhdmVfcXRfVFJVRSA9IEBoYXZlX3F0X1RSVUVACi1oYXZlX3hzbHRwcm9jX0ZBTFNFID0gQGhhdmVfeHNsdHByb2NfRkFMU0VACi1oYXZlX3hzbHRwcm9jX1RSVUUgPSBAaGF2ZV94c2x0cHJvY19UUlVFQAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAota2VybmVsX3N1cHBvcnRfRkFMU0UgPSBAa2VybmVsX3N1cHBvcnRfRkFMU0VACi1rZXJuZWxfc3VwcG9ydF9UUlVFID0gQGtlcm5lbF9zdXBwb3J0X1RSVUVACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10b3BkaXIgPSBAdG9wZGlyQAotU1VCRElSUyA9IC4gdGVzdHMKLUFNX0NQUEZMQUdTID0gLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysKLUFNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotbm9pbnN0X0xJQlJBUklFUyA9IGxpYm9wX3JlZ2V4LmEKLWxpYm9wX3JlZ2V4X2FfU09VUkNFUyA9IFwKLQlvcF9yZWdleC5jcHAgXAotCW9wX3JlZ2V4LmggXAotCWRlbWFuZ2xlX3N5bWJvbC5oIFwKLQlkZW1hbmdsZV9zeW1ib2wuY3BwCi0KLW5vZGlzdF9kYXRhX0RBVEEgPSBzdGwucGF0Ci1hbGw6IGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuY3BwIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYnJlZ2V4L01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJyZWdleC9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLXN0bC5wYXQ6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9zdGwucGF0LmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLQotY2xlYW4tbm9pbnN0TElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCi1saWJvcF9yZWdleC5hOiAkKGxpYm9wX3JlZ2V4X2FfT0JKRUNUUykgJChsaWJvcF9yZWdleF9hX0RFUEVOREVOQ0lFUykgCi0JLXJtIC1mIGxpYm9wX3JlZ2V4LmEKLQkkKGxpYm9wX3JlZ2V4X2FfQVIpIGxpYm9wX3JlZ2V4LmEgJChsaWJvcF9yZWdleF9hX09CSkVDVFMpICQobGlib3BfcmVnZXhfYV9MSUJBREQpCi0JJChSQU5MSUIpIGxpYm9wX3JlZ2V4LmEKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RlbWFuZ2xlX3N5bWJvbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BfcmVnZXguUG9AYW1fX3F1b3RlQAotCi0uY3BwLm86Ci1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJaWYgJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmNwcC5vYmo6Ci1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJaWYgJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFhDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi11bmluc3RhbGwtaW5mby1hbToKLWluc3RhbGwtbm9kaXN0X2RhdGFEQVRBOiAkKG5vZGlzdF9kYXRhX0RBVEEpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChkYXRhZGlyKSIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQoZGF0YWRpcikiCi0JQGxpc3Q9JyQobm9kaXN0X2RhdGFfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQobm9kaXN0X2RhdGFEQVRBX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChkYXRhZGlyKS8kJGYnIjsgXAotCSAgJChub2Rpc3RfZGF0YURBVEFfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKGRhdGFkaXIpLyQkZiI7IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1ub2Rpc3RfZGF0YURBVEE6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChub2Rpc3RfZGF0YV9EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQoZGF0YWRpcikvJCRmJyI7IFwKLQkgIHJtIC1mICIkKERFU1RESVIpJChkYXRhZGlyKS8kJGYiOyBcCi0JZG9uZQotCi0jIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAotIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCi0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCi0jICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKLSMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7Ci0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgotJChSRUNVUlNJVkVfVEFSR0VUUyk6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBkb3Rfc2Vlbj15ZXM7IFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKLW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgotCUBmYWlsY29tPSdleGl0IDEnOyBcCi0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAotCSAgY2FzZSAkJGYgaW4gXAotCSAgICAqPSogfCAtLVsha10qKTs7IFwKLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAotCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JcmV2PSIkJHJldiAuIjsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgotdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAotCWRvbmUKLWN0YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAotCWRvbmUKLQotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUwotCi1UQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD0uOyBcCi0JZWxzZSBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD07IFwKLQlmaTsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAotCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCi0JZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgIHx8ICQobWtkaXJfcCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIChjZCAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKSAkKERBVEEpCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChkYXRhZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLW5vaW5zdExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1yZWN1cnNpdmUKLQotZHZpLWFtOgotCi1odG1sOiBodG1sLXJlY3Vyc2l2ZQotCi1pbmZvOiBpbmZvLXJlY3Vyc2l2ZQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtbm9kaXN0X2RhdGFEQVRBCi0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbSB1bmluc3RhbGwtbm9kaXN0X2RhdGFEQVRBCi0KLXVuaW5zdGFsbC1pbmZvOiB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIFwKLQljbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLW5vaW5zdExJQlJBUklFUyBjbGVhbi1yZWN1cnNpdmUgXAotCWN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAotCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBcCi0JZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLW5vZGlzdF9kYXRhREFUQSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1yZWN1cnNpdmUgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKLQl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIFwKLQl1bmluc3RhbGwtbm9kaXN0X2RhdGFEQVRBCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHAgYi9saWJyZWdleC9kZW1hbmdsZV9zeW1ib2wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDFhYjczLi4wMDAwMDAwCi0tLSBhL2xpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioKLSAqIEBmaWxlIGRlbWFuZ2xlX3N5bWJvbC5jcHAKLSAqIERlbWFuZ2xlIGEgQysrIHN5bWJvbAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJkZW1hbmdsZV9zeW1ib2wuaCIKLSNpbmNsdWRlICJvcF9yZWdleC5oIgotCi0vLyBmcm9tIGxpYmliZXJ0eQotLypAe1xuYW1lIGRlbWFuZ2xlIG9wdGlvbiBwYXJhbWV0ZXIgKi8KLSNpZm5kZWYgRE1HTF9QQVJBTVMKLSMgZGVmaW5lIERNR0xfUEFSQU1TICAgICAoMSA8PCAwKSAgICAgICAgLyoqPCBJbmNsdWRlIGZ1bmN0aW9uIGFyZ3MgKi8KLSNlbmRpZgotI2lmbmRlZiBETUdMX0FOU0kKLSMgZGVmaW5lIERNR0xfQU5TSSAgICAgICAoMSA8PCAxKSAgICAgICAgLyoqPCBJbmNsdWRlIGNvbnN0LCB2b2xhdGlsZSwgZXRjICovCi0jZW5kaWYKLS8qQH0qLwotZXh0ZXJuICJDIiBjaGFyICogY3BsdXNfZGVtYW5nbGUoY2hhciBjb25zdCAqIG1hbmdsZWQsIGludCBvcHRpb25zKTsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIG9wdGlvbnMgewotCWV4dGVybiBkZW1hbmdsZV90eXBlIGRlbWFuZ2xlOwotfQotCi1zdHJpbmcgY29uc3QgZGVtYW5nbGVfc3ltYm9sKHN0cmluZyBjb25zdCAmIG5hbWUpCi17Ci0JaWYgKG9wdGlvbnM6OmRlbWFuZ2xlID09IGRtdF9ub25lKQotCQlyZXR1cm4gbmFtZTsKLQotCS8vIERvIG5vdCB0cnkgdG8gc3RyaXAgbGVhZGluZyB1bmRlcnNjb3JlLCB0aGlzIGxlYWRzIHRvIG1hbnkKLQkvLyBDKysgZGVtYW5nbGluZyBmYWlsdXJlcy4KLQljaGFyICogdW5tYW5nbGVkID0gY3BsdXNfZGVtYW5nbGUobmFtZS5jX3N0cigpLCBETUdMX1BBUkFNUyB8IERNR0xfQU5TSSk7Ci0KLQlpZiAoIXVubWFuZ2xlZCkKLQkJcmV0dXJuIG5hbWU7Ci0KLQlzdHJpbmcgcmVzdWx0KHVubWFuZ2xlZCk7Ci0JZnJlZSh1bm1hbmdsZWQpOwotCi0JaWYgKG9wdGlvbnM6OmRlbWFuZ2xlID09IGRtdF9zbWFydCkgewotCQlzdGF0aWMgYm9vbCBpbml0ID0gZmFsc2U7Ci0JCXN0YXRpYyByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZSByZWdleDsKLQkJaWYgKGluaXQgPT0gZmFsc2UpIHsKLQkJCXNldHVwX3JlZ2V4KHJlZ2V4LCBPUF9EQVRBRElSICIvc3RsLnBhdCIpOwotCQkJaW5pdCA9IHRydWU7Ci0JCX0KLQkJLy8gd2UgZG9uJ3QgcHJvdGVjdCBhZ2FpbnN0IGV4Y2VwdGlvbiBoZXJlLCBwYXR0ZXJuIG11c3QgYmUKLQkJLy8gcmlnaHQgYW5kIHVzZXIgY2FuIGVhc2lseSB3b3JrLWFyb3VuZCBieSB1c2luZyAtZAotCQlyZWdleC5leGVjdXRlKHJlc3VsdCk7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2xpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5oIGIvbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyY2VmYTMuLjAwMDAwMDAKLS0tIGEvbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioKLSAqIEBmaWxlIGRlbWFuZ2xlX3N5bWJvbC5oCi0gKiBEZW1hbmdsZSBhIEMrKyBzeW1ib2wKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBERU1BTkdMRV9TWU1CT0xfSAotI2RlZmluZSBERU1BTkdMRV9TWU1CT0xfSAotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0vLy8gZGVtYW5nbGUgdHlwZTogc3BlY2lmeSB3aGF0IGRlbWFuZ2xpbmcgd2UgdXNlCi1lbnVtIGRlbWFuZ2xlX3R5cGUgewotCS8vLyBubyBkZW1hbmdsaW5nLgotCWRtdF9ub25lLAotCS8vLyB1c2UgY3BsdXNfZGVtYW5nbGUoKQotCWRtdF9ub3JtYWwsCi0JLy8vIG5vcm1hbCBwbHVzIGEgcGFzcyB0aHJvdWdoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2ltcGxpZnkKLQkvLy8gdGhlIG1hbmdsZWQgbmFtZQotCWRtdF9zbWFydAotfTsKLQotLyoqCi0gKiBkZW1hbmdsZV9zeW1ib2wgLSBkZW1hbmdsZSBhIHN5bWJvbAotICogQHBhcmFtIG5hbWUgdGhlIG1hbmdsZWQgc3ltYm9sIG5hbWUKLSAqIEByZXR1cm4gdGhlIGRlbWFuZ2xlZCBuYW1lCi0gKgotICogRGVtYW5nbGUgdGhlIHN5bWJvbCBuYW1lLCBpZiB0aGUgZ2xvYmFsCi0gKiB2YXJpYWJsZSBkZW1hbmdsZSBpcyB0cnVlLgotICoKLSAqIFRoZSBkZW1hbmdsZWQgbmFtZSBsaXN0cyB0aGUgcGFyYW1ldGVycyBhbmQgdHlwZQotICogcXVhbGlmaWVycyBzdWNoIGFzICJjb25zdCIuCi0gKi8KLXN0ZDo6c3RyaW5nIGNvbnN0IGRlbWFuZ2xlX3N5bWJvbChzdGQ6OnN0cmluZyBjb25zdCAmIG5hbWUpOwotCi0jZW5kaWYgLy8gREVNQU5HTEVfU1lNQk9MX0gKZGlmZiAtLWdpdCBhL2xpYnJlZ2V4L29wX3JlZ2V4LmNwcCBiL2xpYnJlZ2V4L29wX3JlZ2V4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5ZWVhNS4uMDAwMDAwMAotLS0gYS9saWJyZWdleC9vcF9yZWdleC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTMgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9yZWdleC5jcHAKLSAqIFRoaXMgZmlsZSBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBmb3IgYSBsaWdodHdlaWdodCB3cmFwcGVyIGFyb3VuZAotICogbGliYyByZWdleCwgcHJvdmlkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBhbmQgcmVwbGFjZSBmYWNpbGl0eS4KLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKiBAcmVtYXJrIElkZWEgY29tZXMgZnJvbSBUZXh0RmlsdCBwcm9qZWN0IDxodHRwOi8vdGV4dGZpbHQuc291cmNlZm9yZ2UubmV0PgotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxjZXJybm8+Ci0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxmc3RyZWFtPgotCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0KLSNpbmNsdWRlICJvcF9yZWdleC5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgewotCi1zdHJpbmcgb3BfcmVnZXJyb3IoaW50IGVyciwgcmVnZXhfdCBjb25zdCAmIHJlZ2V4cCkKLXsKLQlzaXplX3QgbmVlZGVkX3NpemUgPSByZWdlcnJvcihlcnIsICZyZWdleHAsIDAsIDApOwotCWNoYXIgKiBidWZmZXIgPSBuZXcgY2hhcltuZWVkZWRfc2l6ZV07Ci0JcmVnZXJyb3IoZXJyLCAmcmVnZXhwLCBidWZmZXIsIG5lZWRlZF9zaXplKTsKLQotCXJldHVybiBidWZmZXI7Ci19Ci0KLQotdm9pZCBvcF9yZWdjb21wKHJlZ2V4X3QgJiByZWdleHAsIHN0cmluZyBjb25zdCAmIHBhdHRlcm4pCi17Ci0JaW50IGVyciA9IHJlZ2NvbXAoJnJlZ2V4cCwgcGF0dGVybi5jX3N0cigpLCBSRUdfRVhURU5ERUQpOwotCWlmIChlcnIpIHsKLQkJdGhyb3cgYmFkX3JlZ2V4KCJyZWdjb21wIGVycm9yOiAiICsgb3BfcmVnZXJyb3IoZXJyLCByZWdleHApCi0JCQkJKyAiIGZvciBwYXR0ZXJuIDogIiArIHBhdHRlcm4pOwotCX0KLX0KLQotCi1ib29sIG9wX3JlZ2V4ZWMocmVnZXhfdCBjb25zdCAmIHJlZ2V4LCBzdHJpbmcgY29uc3QgJiBzdHIsIHJlZ21hdGNoX3QgKiBtYXRjaCwKLQkgICAgICAgc2l6ZV90IG5tYXRjaCkKLXsKLQlyZXR1cm4gcmVnZXhlYygmcmVnZXgsIHN0ci5jX3N0cigpLCBubWF0Y2gsIG1hdGNoLCAwKSAhPSBSRUdfTk9NQVRDSDsKLX0KLQotCi12b2lkIG9wX3JlZ2ZyZWUocmVnZXhfdCAmIHJlZ2V4cCkKLXsKLQlyZWdmcmVlKCZyZWdleHApOwotfQotCi0KLS8vIHJldHVybiB0aGUgaW5kZXggbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgc2VlbiBpbiBhICJceCIuCi0vLyBBbGxvd2VkIHJhbmdlIGFyZSBmb3IgeCBpcyBbMC05YS16XSByZXR1cm4gc2l6ZV90KC0xKSBpZiB4IGlzIG5vdCBpbgotLy8gdGhlc2UgcmFuZ2VzLgotc2l6ZV90IHN1YmV4cHJfaW5kZXgoY2hhciBjaCkKLXsKLQlpZiAoaXNkaWdpdChjaCkpCi0JCXJldHVybiBjaCAtICcwJzsKLQlpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykKLQkJcmV0dXJuIGNoIC0gJ2EnICsgMTA7Ci0JcmV0dXJuIHNpemVfdCgtMSk7Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotCi1iYWRfcmVnZXg6OmJhZF9yZWdleChzdHJpbmcgY29uc3QgJiBwYXR0ZXJuKQotCTogb3BfZXhjZXB0aW9uKHBhdHRlcm4pCi17Ci19Ci0KLQotcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2U6OnJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlKHNpemVfdCBsaW1pdF8sCi0JCQkJCQkgICAgICAgc2l6ZV90IGxpbWl0X2RlZnMpCi0JOgotCWxpbWl0KGxpbWl0XyksCi0JbGltaXRfZGVmc19leHBhbnNpb24obGltaXRfZGVmcykKLXsKLX0KLQotCi1yZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6fnJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlKCkKLXsKLQlmb3IgKHNpemVfdCBpID0gMCA7IGkgPCByZWdleF9yZXBsYWNlLnNpemUoKSA7ICsraSkKLQkJb3BfcmVnZnJlZShyZWdleF9yZXBsYWNlW2ldLnJlZ2V4cCk7Ci19Ci0KLQotdm9pZCByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6YWRkX2RlZmluaXRpb24oc3RyaW5nIGNvbnN0ICYgbmFtZSwKLQkJCQkJCXN0cmluZyBjb25zdCAmIGRlZmluaXRpb24pCi17Ci0JZGVmc1tuYW1lXSA9IGV4cGFuZF9zdHJpbmcoZGVmaW5pdGlvbik7Ci19Ci0KLQotdm9pZCByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6YWRkX3BhdHRlcm4oc3RyaW5nIGNvbnN0ICYgcGF0dGVybiwKLQkJCQkJICAgICBzdHJpbmcgY29uc3QgJiByZXBsYWNlKQotewotCXN0cmluZyBleHBhbmRlZF9wYXR0ZXJuID0gZXhwYW5kX3N0cmluZyhwYXR0ZXJuKTsKLQotCXJlZ2V4X3QgcmVnZXhwOwotCW9wX3JlZ2NvbXAocmVnZXhwLCBleHBhbmRlZF9wYXR0ZXJuKTsKLQlyZXBsYWNlX3QgcmVnZXggPSB7IHJlZ2V4cCwgcmVwbGFjZSB9OwotCXJlZ2V4X3JlcGxhY2UucHVzaF9iYWNrKHJlZ2V4KTsKLX0KLQotCi1zdHJpbmcgcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2U6OmV4cGFuZF9zdHJpbmcoc3RyaW5nIGNvbnN0ICYgaW5wdXQpCi17Ci0Jc3RyaW5nIGxhc3QsIGV4cGFuZGVkKGlucHV0KTsKLQlzaXplX3QgaSA9IDA7Ci0JZm9yIChpID0gMCA7IGkgPCBsaW1pdF9kZWZzX2V4cGFuc2lvbiA7ICsraSkgewotCQlsYXN0ID0gZXhwYW5kZWQ7Ci0JCWV4cGFuZGVkID0gc3Vic3RpdHV0ZV9kZWZpbml0aW9uKGxhc3QpOwotCQlpZiAoZXhwYW5kZWQgPT0gbGFzdCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChpID09IGxpbWl0X2RlZnNfZXhwYW5zaW9uKQotCQl0aHJvdyBiYWRfcmVnZXgoInRvbyBtYW55IHN1YnN0aXR1dGlvbiBmb3I6ICsgaW5wdXQiKTsKLQotCXJldHVybiBsYXN0OwotfQotCi0KLXN0cmluZyByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6c3Vic3RpdHV0ZV9kZWZpbml0aW9uKHN0cmluZyBjb25zdCAmIHBhdHRlcm4pCi17Ci0Jc3RyaW5nIHJlc3VsdDsKLQlib29sIHByZXZpb3VzX2lzX2VzY2FwZSA9IGZhbHNlOwotCi0JZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgcGF0dGVybi5sZW5ndGgoKSA7ICsraSkgewotCQlpZiAocGF0dGVybltpXSA9PSAnJCcgJiYgIXByZXZpb3VzX2lzX2VzY2FwZSkgewotCQkJc2l6ZV90IHBvcyA9IHBhdHRlcm4uZmluZCgneycsIGkpOwotCQkJaWYgKHBvcyAhPSBpICsgMSkgewotCQkJCXRocm93IGJhZF9yZWdleCgiaW52YWxpZCAkIGluIHBhdHRlcm46ICIgKyBwYXR0ZXJuKTsKLQkJCX0KLQkJCXNpemVfdCBlbmQgPSBwYXR0ZXJuLmZpbmQoJ30nLCBpKTsKLQkJCWlmIChlbmQgPT0gc3RyaW5nOjpucG9zKSB7Ci0JCQkJdGhyb3cgYmFkX3JlZ2V4KCJubyBtYXRjaGluZyAnfScgaW4gcGF0dGVybjogIiArIHBhdHRlcm4pOwotCQkJfQotCQkJc3RyaW5nIGRlZl9uYW1lID0gcGF0dGVybi5zdWJzdHIocG9zKzEsIChlbmQtcG9zKSAtIDEpOwotCQkJaWYgKGRlZnMuZmluZChkZWZfbmFtZSkgPT0gZGVmcy5lbmQoKSkgewotCQkJCXRocm93IGJhZF9yZWdleCgiZGVmaW5pdGlvbiBub3QgZm91bmQgYW5kIHVzZWQgaW4gcGF0dGVybjogKCIgKyBkZWZfbmFtZSArICIpICIgKyBwYXR0ZXJuKTsKLQkJCX0KLQkJCXJlc3VsdCArPSBkZWZzW2RlZl9uYW1lXTsKLQkJCWkgPSBlbmQ7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGF0dGVybltpXSA9PSAnXFwnICYmICFwcmV2aW91c19pc19lc2NhcGUpIHsKLQkJCQlwcmV2aW91c19pc19lc2NhcGUgPSB0cnVlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c19pc19lc2NhcGUgPSBmYWxzZTsKLQkJCX0KLQkJCXJlc3VsdCArPSBwYXR0ZXJuW2ldOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vLyBGSVhNRSBsaW1pdCBvdXRwdXQgc3RyaW5nIHNpemUgPyAoY2F1c2Ugd2UgY2FuIGhhdmUgZXhwb25lbnRpYWwgZ3Jvd2luZwotLy8gb2Ygb3V0cHV0IHN0cmluZyB0aHJvdWdoIGEgcnVsZSAiYSIgPSAiYWEiKQotYm9vbCByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6ZXhlY3V0ZShzdHJpbmcgJiBzdHIpIGNvbnN0Ci17Ci0JYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKLQlmb3IgKHNpemVfdCBucl9pdGVyID0gMDsgY2hhbmdlZCAmJiBucl9pdGVyIDwgbGltaXQgOyArK25yX2l0ZXIpIHsKLQkJY2hhbmdlZCA9IGZhbHNlOwotCQlmb3IgKHNpemVfdCBpID0gMCA7IGkgPCByZWdleF9yZXBsYWNlLnNpemUoKSA7ICsraSkgewotCQkJaWYgKGRvX2V4ZWN1dGUoc3RyLCByZWdleF9yZXBsYWNlW2ldKSkgewotCQkJCWNoYW5nZWQgPSB0cnVlOwotCQkJfQotCQl9Ci0JfQotCi0JLy8gdGhpcyBkb24ndCByZXR1cm4gaWYgdGhlIGlucHV0IHN0cmluZyBoYXMgYmVlbiBjaGFuZ2VkIGJ1dCBpZgotCS8vIHdlIHJlYWNoIHRoZSBsaW1pdCBudW1iZXIgb2YgaXRlcmF0aW9uLgotCXJldHVybiBjaGFuZ2VkID09IGZhbHNlOwotfQotCi0KLWJvb2wgcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2U6OmRvX2V4ZWN1dGUoc3RyaW5nICYgc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlX3QgY29uc3QgJiByZWdleHApIGNvbnN0Ci17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0KLQlyZWdtYXRjaF90IG1hdGNoW21heF9tYXRjaF07Ci0JZm9yIChzaXplX3QgaXRlciA9IDA7Ci0JICAgICBvcF9yZWdleGVjKHJlZ2V4cC5yZWdleHAsIHN0ciwgbWF0Y2gsIG1heF9tYXRjaCkgJiYgaXRlciA8IGxpbWl0OwotCSAgICAgaXRlcisrKSB7Ci0JCWNoYW5nZWQgPSB0cnVlOwotCQlkb19yZXBsYWNlKHN0ciwgcmVnZXhwLnJlcGxhY2UsIG1hdGNoKTsKLQl9Ci0KLQlyZXR1cm4gY2hhbmdlZDsKLX0KLQotCi1yZWdtYXRjaF90IGNvbnN0ICYKLXJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlOjpnZXRfbWF0Y2gocmVnbWF0Y2hfdCBjb25zdCAqIG1hdGNoLCBjaGFyIGlkeCkgY29uc3QKLXsKLQlzaXplX3Qgc3ViX2V4cHIgPSBzdWJleHByX2luZGV4KGlkeCk7Ci0JaWYgKHN1Yl9leHByID09IHNpemVfdCgtMSkpCi0JCXRocm93IGJhZF9yZWdleCgiZXhwZWN0IGdyb3VwIGluZGV4OiAiICsgaWR4KTsKLQlpZiAoc3ViX2V4cHIgPj0gbWF4X21hdGNoKQotCQl0aHJvdyBiYWRfcmVnZXgoImlsbGVnYWwgZ3JvdXAgaW5kZXggOiIgKyBpZHgpOwotCXJldHVybiBtYXRjaFtzdWJfZXhwcl07Ci19Ci0KLXZvaWQgcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2U6OmRvX3JlcGxhY2UKLShzdHJpbmcgJiBzdHIsIHN0cmluZyBjb25zdCAmIHJlcGxhY2UsIHJlZ21hdGNoX3QgY29uc3QgKiBtYXRjaCkgY29uc3QKLXsKLQlzdHJpbmcgaW5zZXJ0ZWQ7Ci0JZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgcmVwbGFjZS5sZW5ndGgoKSA7ICsraSkgewotCQlpZiAocmVwbGFjZVtpXSA9PSAnXFwnKSB7Ci0JCQlpZiAoaSA9PSByZXBsYWNlLmxlbmd0aCgpIC0gMSkgewotCQkJCXRocm93IGJhZF9yZWdleCgiaWxsZWdhbCBcXCB0cmFpbGVyOiAiICsKLQkJCQkgICAgICAgICAgICAgICAgcmVwbGFjZSk7Ci0JCQl9Ci0JCQkrK2k7Ci0JCQlpZiAocmVwbGFjZVtpXSA9PSAnXFwnKSB7Ci0JCQkJaW5zZXJ0ZWQgKz0gJ1xcJzsKLQkJCX0gIGVsc2UgewotCQkJCXJlZ21hdGNoX3QgY29uc3QgJiBtYXRjaGVkID0gZ2V0X21hdGNoKG1hdGNoLAotCQkJCQlyZXBsYWNlW2ldKTsKLQkJCQlpZiAobWF0Y2hlZC5ybV9zbyA9PSAtMSAmJiAKLQkJCQkgICAgbWF0Y2hlZC5ybV9lbyA9PSAtMSkgewotCQkJCQkvLyBlbXB0eSBtYXRjaDogbm90aGluZyB0b2RvCi0JCQkJfSBlbHNlIGlmIChtYXRjaGVkLnJtX3NvID09IC0xIHx8Ci0JCQkJCSAgIG1hdGNoZWQucm1fZW8gPT0gLTEpIHsKLQkJCQkJdGhyb3cgYmFkX3JlZ2V4KCJpbGxlZ2FsIG1hdGNoOiAiICsKLQkJCQkJCXJlcGxhY2UpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWluc2VydGVkICs9IHN0ci5zdWJzdHIobWF0Y2hlZC5ybV9zbywKLQkJCQkJICAgIG1hdGNoZWQucm1fZW8gLSBtYXRjaGVkLnJtX3NvKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpbnNlcnRlZCArPSByZXBsYWNlW2ldOwotCQl9Ci0JfQotCi0Jc2l6ZV90IGZpcnN0ID0gbWF0Y2hbMF0ucm1fc287Ci0Jc2l6ZV90IGNvdW50ID0gbWF0Y2hbMF0ucm1fZW8gLSBtYXRjaFswXS5ybV9zbzsKLQotCXN0ci5yZXBsYWNlKGZpcnN0LCBjb3VudCwgaW5zZXJ0ZWQpOwotfQotCi0KLXZvaWQgc2V0dXBfcmVnZXgocmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2UgJiByZWdleCwKLSAgICAgICAgICAgICAgICAgc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpCi17Ci0JaWZzdHJlYW0gaW4oZmlsZW5hbWUuY19zdHIoKSk7Ci0JaWYgKCFpbikgewotCQl0aHJvdyBvcF9ydW50aW1lX2Vycm9yKCJDYW4ndCBvcGVuIGZpbGUgIiArIGZpbGVuYW1lICsKLQkJCQkiIGZvciByZWFkaW5nIiwgZXJybm8pOwotCX0KLQotCXJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlIHZhcl9uYW1lX3J1bGU7Ci0JdmFyX25hbWVfcnVsZS5hZGRfcGF0dGVybigiXlxcJChbX2EtekEtWl1bX2EtekEtWjAtOV0qKVsgXSo9LioiLCAiXFwxIik7Ci0JcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2UgdmFyX3ZhbHVlX3J1bGU7Ci0JdmFyX3ZhbHVlX3J1bGUuYWRkX3BhdHRlcm4oIi4qPVsgXSpcIiguKilcIiIsICJcXDEiKTsKLQotCXJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlIGxlZnRfcnVsZTsKLQlsZWZ0X3J1bGUuYWRkX3BhdHRlcm4oIlsgXSpcIiguKilcIlsgXSo9LioiLCAiXFwxIik7Ci0JcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2UgcmlnaHRfcnVsZTsKLQlyaWdodF9ydWxlLmFkZF9wYXR0ZXJuKCIuKj1bIF0qXCIoLiopXCIiLCAiXFwxIik7Ci0KLQlzdHJpbmcgbGluZTsKLQl3aGlsZSAoZ2V0bGluZShpbiwgbGluZSkpIHsKLQkJbGluZSA9IHRyaW0obGluZSk7Ci0JCWlmIChsaW5lLmVtcHR5KCkgfHwgbGluZVswXSA9PSAnIycpCi0JCQljb250aW51ZTsKLQotCQlzdHJpbmcgdGVtcCA9IGxpbmU7Ci0JCXZhcl9uYW1lX3J1bGUuZXhlY3V0ZSh0ZW1wKTsKLQkJaWYgKHRlbXAgPT0gbGluZSkgewotCQkJc3RyaW5nIGxlZnQgPSBsaW5lOwotCQkJbGVmdF9ydWxlLmV4ZWN1dGUobGVmdCk7Ci0JCQlpZiAobGVmdCA9PSBsaW5lKSB7Ci0JCQkJdGhyb3cgYmFkX3JlZ2V4KCJpbnZhbGlkIGlucHV0IGZpbGU6ICIgKwotCQkJCQkJJyInICsgbGluZSArICciJyk7Ci0JCQl9Ci0KLQkJCXN0cmluZyByaWdodCA9IGxpbmU7Ci0JCQlyaWdodF9ydWxlLmV4ZWN1dGUocmlnaHQpOwotCQkJaWYgKHJpZ2h0ID09IGxpbmUpIHsKLQkJCQl0aHJvdyBiYWRfcmVnZXgoImludmFsaWQgaW5wdXQgZmlsZTogIgotCQkJCQkJKyAnIicgKyBsaW5lICsgJyInKTsKLQkJCX0KLQotCQkJcmVnZXguYWRkX3BhdHRlcm4obGVmdCwgcmlnaHQpOwotCQl9IGVsc2UgewotCQkJLy8gdGVtcCAhPSBsaW5lID09PiB2YXJfbmFtZV9ydWxlIHN1Y2NlZWQgdG8gc3Vic3RpdHV0ZQotCQkJLy8gaW50byB0ZW1wIHRoZSB2YXJfbmFtZSBwcmVzZW50IGluIGxpbmUKLQkJCXN0cmluZyB2YXJfbmFtZSA9IHRlbXA7Ci0JCQlzdHJpbmcgdmFyX3ZhbHVlID0gbGluZTsKLQkJCXZhcl92YWx1ZV9ydWxlLmV4ZWN1dGUodmFyX3ZhbHVlKTsKLQkJCWlmICh2YXJfdmFsdWUgPT0gbGluZSkgewotCQkJCXRocm93IGJhZF9yZWdleCgiaW52YWxpZCBpbnB1dCBmaWxlOiAiICsKLQkJCQkJCSciJyArIGxpbmUgKyAnIicpOwotCQkJfQotCi0JCQlyZWdleC5hZGRfZGVmaW5pdGlvbih2YXJfbmFtZSwgdmFyX3ZhbHVlKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYnJlZ2V4L29wX3JlZ2V4LmggYi9saWJyZWdleC9vcF9yZWdleC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjNiOTgwLi4wMDAwMDAwCi0tLSBhL2xpYnJlZ2V4L29wX3JlZ2V4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9yZWdleC5oCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdmFyaW91cyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIGZvciBhCi0gKiBsaWdodHdlaWdodCB3cmFwcGVyIGFyb3VuZCBsaWJjIHJlZ2V4LCBwcm92aWRpbmcgbWF0Y2gKLSAqIGFuZCByZXBsYWNlIGZhY2lsaXR5LgotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqIEByZW1hcmsgSWRlYSBjb21lcyBmcm9tIFRleHRGaWx0IHByb2plY3QgPGh0dHA6Ly90ZXh0ZmlsdC5zb3VyY2Vmb3JnZS5uZXQ+Ci0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUF9SRUdFWF9ICi0jZGVmaW5lIE9QX1JFR0VYX0gKLQotLy8gcmVxdWlyZWQgYnkgcG9zaXggYmVmb3JlIGluY2x1ZGluZyByZWdleC5oCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8cmVnZXguaD4KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8bWFwPgotCi0jaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCi0KLS8qKgotICogaWxsIGZvcm1lZCByZWd1bGFyIGV4cHJlc3Npb24gb3IgZXhwcmVzc2lvbiB0aHJvdyBzdWNoIGV4Y2VwdGlvbgotICovCi1zdHJ1Y3QgYmFkX3JlZ2V4IDogb3BfZXhjZXB0aW9uIHsKLQliYWRfcmVnZXgoc3RkOjpzdHJpbmcgY29uc3QgJiBwYXR0ZXJuKTsKLX07Ci0KLS8qKgotICogbGlnaHR3ZWlnaHQgZW5jYXBzdWxhdGlvbiBvZiByZWdleCBsaWIgc2VhcmNoIGFuZCByZXBsYWNlCi0gKgotICogU2VlIHN0bC5wYXQgZm9yIGZ1cnRoZXIgZGV0YWlscyBhbmQgZXhhbXBsZXMgb2YgdXNlZCBzeW50YXguCi0gKi8KLWNsYXNzIHJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlIHsKLXB1YmxpYzoKLQkvKioKLQkgKiBAcGFyYW0gbGltaXQgbGltaXQgb24gbnVtYmVyIG9mIHNlYXJjaCBhbmQgcmVwbGFjZSBkb25lCi0JICogQHBhcmFtIGxpbWl0X2RlZnNfZXhwYW5zaW9uIGxpbWl0IG9uIG51bWJlciBvZiBleHBhbnNpb24gZG9uZQotCSAqICBkdXJpbmcgcmVwbGFjZW1lbnQgb2YgcmVndWxhciBkZWZpbml0aW9uIG5hbWUgYnkgdGhlaXIgZXhwYW5zaW9uCi0JICoKLQkgKiBidWlsZCBhbiBvYmplY3QgaG9sZGluZyByZWd1bGFyIGRlZmludGlvbiBhbmQgcmVndWxhciBleHByZXNzaW9uCi0JICogJiByZXBsYWNlLCBwcmVwYXJpbmcgaXQgZm9yIHN1YnN0aXR1dGlvbiBhbGEgc2VkCi0JICovCi0JcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2Uoc2l6ZV90IGxpbWl0ID0gMTAwLAotCQkJCSAgIHNpemVfdCBsaW1pdF9kZWZzX2V4cGFuc2lvbiA9IDEwMCk7Ci0JfnJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlKCk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZSBhIHJlZ3VsYXIgZGVmaW5pdGlvbiBuYW1lCi0JICogQHBhcmFtIHJlcGxhY2UgdGhlIHN0cmluZyB0byBzdWJzaXR1dGUgaW4gb3RoZXIgcmVndWxhciBkZWZpbml0aW9uCi0JICogb3IgcmVndWxhciBleGVwcmVzc2lvbiB3aGVuIHRoaXMgcmVndWxhciBkZWZpbnRpb24gbmFtZSBpcwotCSAqIGVuY291dGVyZWQuCi0JICovCi0Jdm9pZCBhZGRfZGVmaW5pdGlvbihzdGQ6OnN0cmluZyBjb25zdCAmIG5hbWUsCi0JCQkgICAgc3RkOjpzdHJpbmcgY29uc3QgJiByZXBsYWNlKTsKLQkvKioKLQkgKiBAcGFyYW0gcGF0dGVybiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLCBQT1NJWCBleHRlbmRlZCBub3RhdGlvbgotCSAqIEBwYXJhbSByZXBsYWNlIHRoZSByZXBsYWNlIHN0cmluZyB0byB1c2Ugd2hlbiB0aGlzIHJlZ3VsYXIKLQkgKiAgZXhwcmVzc2lvbiBpcyBtYXRjaGVkCi0JICoKLQkgKiBZb3UgY2FuIGltYmVkIHJlZ3VsYXIgZGVmaW5pdGlvbiBpbiBwYXR0ZXJuIGJ1dCBub3QgaW4gcmVwbGFjZS4KLQkgKi8KLQl2b2lkIGFkZF9wYXR0ZXJuKHN0ZDo6c3RyaW5nIGNvbnN0ICYgcGF0dGVybiwKLQkJCSBzdGQ6OnN0cmluZyBjb25zdCAmIHJlcGxhY2UpOwotCi0JLyoqCi0JICogQHBhcmFtIHN0ciB0aGUgaW5wdXQvb3V0cHV0IHN0cmluZyB3aGVyZSB3ZSBzZWFyY2ggcGF0dGVybiBhbmQKLQkgKiByZXBsYWNlIHRoZW0uCi0JICoKLQkgKiBFeGVjdXRlIGxvb3AgYXQgbWF4IGxpbWl0IHRpbWUgb24gdGhlIHNldCBvZiByZWd1bGFyIGV4cHJlc3Npb24KLQkgKgotCSAqIFJldHVybiB0cnVlIGlmIHRvbyBtYW55IG1hdGNoIG9jY3VyIGFuZCByZXBsYWNpbmcgaGFzIGJlZW4gc3RvcHBlZAotCSAqIGR1ZSB0byByZWFjaCBsaW1pdF9kZWZzX2V4cGFuc2lvbi4gWW91IGNhbiB0ZXN0IGlmIHNvbWUgcGF0dGVybiBoYXMKLQkgKiBiZWVuIG1hdGNoZWQgYnkgc2F2aW5nIHRoZSBpbnB1dCBzdHJpbmcgYW5kIGNvbXBhcmluZyBpdCB0byB0aGUgbmV3Ci0JICogdmFsdWUuIFRoZXJlIGlzIG5vIHdheSB0byBkZXRlY3Qgcy9hL2EgYmVjYXVzZSB0aGUgb3V0cHV0IHN0cmluZwotCSAqIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBpbnB1dCBzdHJpbmcuCi0JICovCi0JYm9vbCBleGVjdXRlKHN0ZDo6c3RyaW5nICYgc3RyKSBjb25zdDsKLXByaXZhdGU6Ci0Jc3RydWN0IHJlcGxhY2VfdCB7Ci0JCS8vIHdoZW4gdGhpcyByZWdleHAgaXMgbWF0Y2hlZAotCQlyZWdleF90IHJlZ2V4cDsKLQkJLy8gcmVwbGFjZSB0aGUgbWF0Y2hlZCBwYXJ0IHdpdGggdGhpcyBzdHJpbmcKLQkJc3RkOjpzdHJpbmcgcmVwbGFjZTsKLQl9OwotCi0JLy8gaGVscGVyIHRvIGV4ZWN1dGUKLQlib29sIGRvX2V4ZWN1dGUoc3RkOjpzdHJpbmcgJiBzdHIsIHJlcGxhY2VfdCBjb25zdCAmIHJlZ2V4cCkgY29uc3Q7Ci0Jdm9pZCBkb19yZXBsYWNlKHN0ZDo6c3RyaW5nICYgc3RyLCBzdGQ6OnN0cmluZyBjb25zdCAmIHJlcGxhY2UsCi0JCQlyZWdtYXRjaF90IGNvbnN0ICogbWF0Y2gpIGNvbnN0OwotCi0JLy8gaGVscGVyIHRvIGFkZF9kZWZpbml0aW9uKCkgYW5kIGFkZF9wYXR0ZXJuKCkKLQlzdGQ6OnN0cmluZyBleHBhbmRfc3RyaW5nKHN0ZDo6c3RyaW5nIGNvbnN0ICYgaW5wdXQpOwotCi0JLy8gaGVscGVyIHRvIGFkZF9wYXR0ZXJuCi0Jc3RkOjpzdHJpbmcgc3Vic3RpdHV0ZV9kZWZpbml0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0ICYgcGF0dGVybik7Ci0KLQkvLyByZXR1cm4gdGhlIG1hdGNoIG9mIHRocm93IGlmIGlkeCBpcyBpbnZhbGlkCi0JcmVnbWF0Y2hfdCBjb25zdCAmIGdldF9tYXRjaChyZWdtYXRjaF90IGNvbnN0ICogbWF0Y2gsIGNoYXIgaWR4KSBjb25zdDsKLQotCS8vIGRvbid0IGluY3JlYXNlIHRvbywgaXQgaGF2ZSBkaXJlY3QgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLiBUaGlzIGxpbWl0Ci0JLy8gdGhlIG51bWJlciBvZiBncm91cGluZyBleHByZXNzaW9uIGFsbG93ZWQgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24KLQkvLyBOb3RlIHRoYW4geW91IGNhbiB1c2UgZ3JvdXBpbmcgbWF0Y2ggb3BlcmF0b3IgPiA5IG9ubHkgaW4gdGhlCi0JLy8gcmVwbGFjZSBydWxlIG5vdCBpbiBtYXRjaCByZWd1bGFyIGV4cHJlc3Npb24gc2luY2UgUE9TSVggZG9uJ3QgYWxsb3cKLQkvLyBtb3JlIHRoYW4gXDkgaW4gbWF0Y2hpbmcgc2VxdWVuY2UuCi0Jc3RhdGljIGNvbnN0IHNpemVfdCBtYXhfbWF0Y2ggPSAxNjsKLQotCXNpemVfdCBsaW1pdDsKLQlzaXplX3QgbGltaXRfZGVmc19leHBhbnNpb247Ci0Jc3RkOjp2ZWN0b3I8cmVwbGFjZV90PiByZWdleF9yZXBsYWNlOwotCS8vLyBkaWN0aW9uYXJ5IG9mIHJlZ3VsYXIgZGVmaW5pdGlvbgotCXR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBkZWZzX2RpY3Q7Ci0JZGVmc19kaWN0IGRlZnM7Ci19OwotCi0vKioKLSAqIEBwYXJhbSByZWdleCB0aGUgcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2UgdG8gZmlsbAotICogQHBhcmFtIGZpbGVuYW1lIHRoZSBmaWxlbmFtZSBmcm9tIHdoZXJlIHRoZSBkZWlmbml0aW9uIGFuZCBwYXR0ZXJuIGFyZSByZWFkCi0gKgotICogYWRkIHRvIHJlZ2V4IHBhdHRlcm4gYW5kIHJlZ3VsYXIgZGVmaW5pdGlvbiByZWFkIGZyb20gdGhlIGdpdmVuIGZpbGUKLSAqLwotdm9pZCBzZXR1cF9yZWdleChyZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZSYgcmVnZXgsCi0JCSBzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lKTsKLQotI2VuZGlmIC8qICFPUF9SRUdFWF9IICovCmRpZmYgLS1naXQgYS9saWJyZWdleC9zdGwucGF0LmluIGIvbGlicmVnZXgvc3RsLnBhdC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhZWFmOS4uMDAwMDAwMAotLS0gYS9saWJyZWdleC9zdGwucGF0LmluCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLSMgZm9ybWF0IDoKLSMgJG5hbWUgPSAicmVndWxhcl9kZWZpbml0aW9uIgotIyAicGF0dGVybiIgPSAic3Vic3RpdHVlZF9wYXR0ZXJuIgotIyBwYXR0ZXJuIGNhbiBjb250YWluIHJlZmVyZW5jZSB0byByZWd1bGFyIGRlZmluaXRpb24gd2l0aCAke25hbWV9Ci0jIHRoaXMgb2NjdXJlbmNlIGFyZSBzdWJzdGl0dWVkIGluIHBhdHRlcm4gYnkgdGhlaXIgZGVmaW5pdGlvbgotCi0jIHJlZ3VsYXJfZGVmaW5pdGlvbiBjb250YWluaW5nIG90aGVyIHJlZ3VsYXJfZGVmaW5pdGlvbiByZWZlciBhbHdheXMgdG8gYQotIyBwcmV2aW91c2x5IGRlZmluZWQgcmVndWxhciBkZWZpbml0aW9uIHNvIHRoZXkgY2FuIGxvb2sgbGlrZSByZWN1cnNpdmUgYnV0IGFyZQotIyBub3QuIG9wX3JlZ2V4LmNwcCBkbyBzdWNlc3NpdmUgYXBwbHkgb2YgcGF0dGVybiB3aGlsc3QgY2hhbmdlIG9jY3VyICh3aXRoIGEKLSMgaGFyZCBsaW1pdCBvbiBudW1iZXIgb2Ygc3Vic2l0dXRpb25zKSBzbyB5b3UgY2FuIGFwcGx5IHN1Y2Nlc3NpdmUgY2hhbmdlIHRvCi0jIHRyYW5zbGF0ZSBmaXJzdCB0byBhbiBpbnRlcm1lZGlhdGUgc2ltcGxpZmllZCBmb3JtIHRoZW4gY29udGludWUgc3Vic3RpdHV0aW9uCi0jIGluIGFub3RoZXIgcGF0dGVybiAoc2VlIGlvc2Z3ZCBzZWN0aW9uKS4gVGhlIG51bWJlciBvZiBncm91cGluZyByZWdleHAgaXMKLSMgbGltaXRlZCwgc2VlIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4X21hdGNoOyBpbiBvcF9yZWdleC5oLiBOb3RlIHRoYW4gbWFuZ2xlZAotIyBuYW1lIHByb2R1Y2UgY2FuIGJlIGlsbGVnYWwgYXMgSSBjaG9vc2UgdG8gb3V0cHV0IGxpa2UgdmVjdG9yPHR5cGU8VD4+IHJhdGhlcgotIyB0aGFuIHZlY3Rvcjx0eXBlPFQ+ID4KLQotIyBtYW4gcmVnZXggaXMgYSBmcmllbmQsIGlzIGl0IHlvdXIgPwotCi0kaW50ZWdlciA9ICJcPFswLTldKyIKLSRpZGVudGlmaWVyID0gIlw8W19hLXpBLVpdW19hLXpBLVowLTldKiIKLSR0eXBlbmFtZSA9ICIke2lkZW50aWZpZXJ9KDo6JHtpZGVudGlmaWVyfSkqIgotJHR5cGVuYW1lID0gIiR7dHlwZW5hbWV9KDwke3R5cGVuYW1lfSgsICR7dHlwZW5hbWV9KSo+KSoiCi0jIGFkZGluZyBtb3JlIHN1YnN0aXR1dGlvbiBhbGxvdyBtb3JlIG5lc3RlZCB0ZW1wbGF0ZWQgdHlwZSBidXQgd2UgcnVuIG91dCBvZgotIyBcZGlnaXQgd2hpY2ggaXMgYSB3YWxsLiBJbmRlZWQgaWYgeW91IGFkZCBtb3JlICgpIGdyb3VwaW5nIHlvdSBuZWVkIHRvCi0jIHJlbmFtZSBhbGwgcmVsZXZhbnQgXGRpZ2l0IGluIHBhdHRlcm4gd2hpY2ggdXNlIHRoaXMgcmVndWxhciBkZWZpbml0aW9uCi0jICR0eXBlbmFtZSA9ICIke3R5cGVuYW1lfSg8JHt0eXBlbmFtZX0oLCAke3R5cGVuYW1lfSkqPikqIgotIyBmaW5hbGx5IGFkZCBzdGFuZGFyZCBDIHR5cGUgbm90IHJlY29nbml6ZWQgYnkgYWJvdmUgcGF0dGVybnMsIHRoZSB3YXkgdG8gYWRkCi0jIHBvaW50ZXIgaXMgdWdseSBidXQgd2UgY2FuJ3QgYWRkIGFueSBncm91cGluZyB0byBub3Qgb3ZlcnJ1biA5IG1heCBncm91cAotIyBpbiBsZWZ0IHBhdHRlcm4gcnVsZXMgc2lkZS4uCi0kdHlwZW5hbWUgPSAiKCR7dHlwZW5hbWV9WyBdKlwqKnx1bnNpZ25lZCBzaG9ydFsgXSoqXCoqfHVuc2lnbmVkIGludFsgXSpcKip8dW5zaWduZWQgbG9uZ1sgXSpcKip8dW5zaWduZWQgY2hhclsgXSpcKip8c2lnbmVkIGNoYXJbIF0qXCoqfGxvbmcgbG9uZ1sgXSpcKip8dW5zaWduZWQgbG9uZyBsb25nWyBdKlwqKnxsb25nIGRvdWJsZVsgXSpcKiopIgotCi0jIEZJWE1FOiByZWFsbHkgZGlzY3Vzc2FibGUgYnV0IHNpbXBsaWZ5IG91dHB1dCBhbmQgdGhlIG5leHQgcGF0dGVybi4KLSJcPHN0ZDo6IiA9ICIiCi0iID4iID0gIj4iCi0jIGZvciB0aGVzZSB0d28gd2UgY2FuJ3QgbWF0Y2ggYmVnaW4gb2Ygd29yZC4KLSJce2Fub255bW91c1x9OjoiID0gIiIKLSJcKGFub255bW91cyBuYW1lc3BhY2VcKTo6IiA9ICIiCi0KLSMgc3BlY2lmaWMgdG8gZ2NjIDIuOTUKLSJcPGJhc2ljX3N0cmluZzxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPj4iID0gInN0cmluZyIKLSMgdHdvIHBhc3MsIGZpcnN0IHNocmluayBhbGxvY2F0b3I8PiB0aGVuIGxlc3M8PiBhbGxvd2luZyBtYXAgd2l0aCB1c2VyIGRlZmluZWQKLSMgY29tcGFyYXRvcgotIlw8KG11bHRpKT9tYXA8JHt0eXBlbmFtZX0sICR7dHlwZW5hbWV9LCAke3R5cGVuYW1lfSwgYWxsb2NhdG9yPFw4Pj4iID0gIlwxbWFwPFwyLCBcOCwgXGU+IgotIlw8KG11bHRpKT9tYXA8JHt0eXBlbmFtZX0sICR7dHlwZW5hbWV9LCBsZXNzPFwyPj4iID0gIlwxbWFwPFwyLCBcOD4iCi0KLSJcPGJpdHNldDwoJHtpbnRlZ2VyfSksIHVuc2lnbmVkIGxvbmc+IiA9ICJiaXRzZXQ8XDE+IgotIlw8KFtpb11zdHJlYW1faXRlcmF0b3IpPGNoYXIsIEBQVFJESUZGX1RfVFlQRUA+IiA9ICJcMTxjaGFyPiIKLQotIyBjb21tb24gdG8gYWxsIHN1cHBvcnRlZCBnY2MgdmVyc2lvbi4KLSJcPGRlcXVlPCR7dHlwZW5hbWV9LCBhbGxvY2F0b3I8XDE+LCAwPiIgPSAiZGVxdWU8XDE+IgotIlw8KHN0YWNrfHF1ZXVlKTwke3R5cGVuYW1lfSwgZGVxdWU8XDI+PiIgPSAiXDE8XDI+IgotIlw8KHZlY3RvcnxsaXN0fGRlcXVlKTwke3R5cGVuYW1lfSwgYWxsb2NhdG9yPFwyPj4iID0gIlwxPFwyPiIKLSMgc3RyaWN0bHkgc3BlYWtpbmcgM3JkIHBhcmFtZXRlcnMgaXMgbGVzczxDb250YWluZXJUeXBlOjp2YWx1ZV90eXBlPgotIlw8cHJpb3JpdHlfcXVldWU8JHt0eXBlbmFtZX0sIHZlY3RvcjxcMT4sIGxlc3M8XDE+PiIgPSAicHJpb3JpdHlfcXVldWU8XDE+IgotIyB0d28gcGFzcywgZmlyc3Qgc2hyaW5rIGFsbG9jYXRvcjw+IHRoZW4gbGVzczw+IGFsbG93aW5nIG1hcCB3aXRoIHVzZXIgZGVmaW5lZAotIyBjb21wYXJhdG9yCi0iXDwobXVsdGkpP3NldDwke3R5cGVuYW1lfSwgJHt0eXBlbmFtZX0sIGFsbG9jYXRvcjxcMj4+IiA9ICJcMXNldDxcMiwgXDg+IgotIlw8KG11bHRpKT9zZXQ8JHt0eXBlbmFtZX0sIGxlc3M8XDI+PiIgPSAiXDFzZXQ8XDI+IgotCi0jIGdldCByaWRlIG9mIF9SYl90cmVlIGl0ZXJhdG9yIHR5cGVkZWYsIHRoZXNlIGFyZSBhbHNvIG1hcHBlZCBieSBtYXAvc2V0IGJ1dAotIyB3ZSBjYW4ndCBkaXN0aW5ndWlzaCBhIHNldDxwYWlyPGludCwgaW50Pj46Oml0ZXJhdG9yIGFuZCBhCi0jIG1hcDxpbnQsIGludD46Oml0ZXJhdG9yIGFzIHRoZXkgZGVjYXkgdG8gYW4gaWRlbnRpY2FsIHR5cGVkZWYgc28gd2UgZG9uJ3QgdHJ5Ci0jIHRvIGJlIGNsZXZlciBoZXJlLgotIlw8X1JiX3RyZWVfaXRlcmF0b3I8JHt0eXBlbmFtZX0sIFwxIGNvbnN0WyBdKiYsIFwxIGNvbnN0WyBdKlwqPiIgPSAiX1JiX3RyZWU8XDE+Ojpjb25zdF9pdGVyYXRvciIKLSJcPF9SYl90cmVlX2l0ZXJhdG9yPCR7dHlwZW5hbWV9LCBcMVsgXSomLCBcMVsgXSpcKj4iID0gIl9SYl90cmVlPFwxPjo6aXRlcmF0b3IiCi0jIGltcG9ydGFudCBzcGVjaWFsIGNhc2UgZm9yIG1hcC9tdWx0aW1hcCBpdGVyYXRvcgotIlw8X1JiX3RyZWVfaXRlcmF0b3I8KHBhaXI8JHt0eXBlbmFtZX0gY29uc3QsICR7dHlwZW5hbWV9PiksIFwxIGNvbnN0WyBdKiYsIFwxIGNvbnN0WyBdKlwqPiIgPSAiX1JiX3RyZWU8XDE+Ojpjb25zdF9pdGVyYXRvciIKLSJcPF9SYl90cmVlX2l0ZXJhdG9yPChwYWlyPCR7dHlwZW5hbWV9IGNvbnN0LCAke3R5cGVuYW1lfT4pLCBcMVsgXSomLCBcMVsgXSpcKj4iID0gIl9SYl90cmVlPFwxPjo6aXRlcmF0b3IiCi0jIDIuOTUvMy4yIHNldC9tdWx0aXNldCBpbXBsZW1lbnRhdGlvbgotIlw8X1JiX3RyZWU8JHt0eXBlbmFtZX0sIFwxLCBfSWRlbnRpdHk8XDE+LCAke3R5cGVuYW1lfSwgYWxsb2NhdG9yPFwxPj4iID0gIl9SYl90cmVlPFwxLCBcMSwgX0lkZW50aXR5PFwxPiwgXDc+IgotIl9SYl90cmVlPCR7dHlwZW5hbWV9LCBcMSwgX0lkZW50aXR5PFwxPiwgbGVzczxcMT4+IiA9ICJfUmJfdHJlZTxcMSwgXDEsIF9JZGVudGl0eTxcMT4+IgotIyAyLjk1IG1hcC9tdWx0aW1hcCBpbXBsZW1lbnRhdGlvbgotIlw8X1JiX3RyZWU8JHt0eXBlbmFtZX0sIHBhaXI8XDEgY29uc3QsICgke3R5cGVuYW1lfSggY29uc3QpPyk+LCBfU2VsZWN0MXN0PHBhaXI8XDEgY29uc3QsIFw3Pj4sIGxlc3M8XDE+LCBhbGxvY2F0b3I8XDc+PiIgPSAiX1JiX3RyZWU8XDEsIHBhaXI8XDEgY29uc3QsIFw3PiwgX1NlbGVjdDFzdDxwYWlyPFwxIGNvbnN0LCBcNz4+LCBsZXNzPFwxPj4iCi0jIDMuMiBtYXAvbXVsdGltYXAgaW1wbGVtZW50YXRpb24KLSJcPF9SYl90cmVlPCR7dHlwZW5hbWV9LCBwYWlyPFwxIGNvbnN0LCAke3R5cGVuYW1lfT4sIF9TZWxlY3Qxc3Q8cGFpcjxcMSBjb25zdCwgXDc+PiwgbGVzczxcMT4sIGFsbG9jYXRvcjxwYWlyPFwxIGNvbnN0LCBcNz4+PiIgPSAiX1JiX3RyZWU8XDEsIHBhaXI8XDEgY29uc3QsIFw3PiwgX1NlbGVjdDFzdDxwYWlyPFwxIGNvbnN0LCBcNz4+LCBsZXNzPFwxPj4iCi0jIG5vdyB3ZSBjYW4gc2hyaW5rIGRlZmF1bHQgY29tcGFyYXRvci4KLSJcPF9SYl90cmVlPCR7dHlwZW5hbWV9LCBwYWlyPFwxIGNvbnN0LCAoJHt0eXBlbmFtZX0oIGNvbnN0KT8pPiwgX1NlbGVjdDFzdDxwYWlyPFwxIGNvbnN0LCBcNz4+LCBsZXNzPFwxPj4iID0gIl9SYl90cmVlPFwxLCBwYWlyPFwxIGNvbnN0LCBcNz4sIF9TZWxlY3Qxc3Q8cGFpcjxcMSBjb25zdCwgXDc+Pj4iCi0jIGdldCByaWQgb2YgX1NlbGVjdDFzdCBhbmQgX0lkZW50aXR5Ci0jIEZJWE1FOiB0aGUgcHJlc2VuY2Ugb2QgX0lkZW50aXR5PD4gYW5kIF9TZWxlY3Qxc3Q8PiBhbGxvd2VkIHRvIHF1aWNrbHkKLSMgZGlmZmVyZW50aWF0ZSBhIHNldCBvciBhIG1hcCwgdGhlIHJ1bGUgbm93IHRvIGRpZmZlcmVudGlhdGUgdGhlbSBpczoKLSMgc2Vjb25kIHBhcmFtZXRlciB0byBfUmJfdHJlZSogaXMgYSBwYWlyPD4gPT0+IG1hcCBlbHNlIHNldDw+LiBFaXRoZXIgd2UgbmVlZAotIyB0byBkb2N1bWVudCB0aGlzIG9yIHJlbW92ZSBfSWRlbnRpdHkgYW5kIF9TZWxlY3Qxc3QgcGF0dGVybgotIlw8X0lkZW50aXR5PCR7dHlwZW5hbWV9PiIgPSAiXDEiCi0iXDxfU2VsZWN0MXN0PHBhaXI8JHt0eXBlbmFtZX0gY29uc3QsICR7dHlwZW5hbWV9KCBjb25zdCk/Pj4iID0gIlwxIGNvbnN0IgotCi0iXDxfTGlzdF9iYXNlPCR7dHlwZW5hbWV9LCBhbGxvY2F0b3I8XDE+PiIgPSAiX0xpc3RfYmFzZTxcMT4iCi0KLSMgMi45NSB0ZW1wbGF0aXplZCBvcGVyYXRvcjw8IGFuZCA+PiBleGlzdCBvbmx5IGZvciBzdGQ6OnN0cmluZwotIlw8b3N0cmVhbSAmIG9wZXJhdG9yPDw8Y2hhciwgc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXI+LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4+XChvc3RyZWFtICYsIHN0cmluZyBjb25zdCAmXCkiID0gIm9zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiwgc3RyaW5nIGNvbnN0ICYpIgotIlw8aXN0cmVhbSAmIChvcGVyYXRvcj4+fGdldGxpbmUpPGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+PlwoaXN0cmVhbSAmLCBzdHJpbmcgJlwpIiA9ICJpc3RyZWFtICYgXDEoaXN0cmVhbSAmLCBzdHJpbmcgJikiCi0KLSMgMy4wIHRlbXBsYXRpemVkIG9wZXJhdG9yPDwgYW5kID4+IGV4aXN0IG9ubHkgZm9yIHN0ZDo6c3RyaW5nCi0iXDxvc3RyZWFtJiBvcGVyYXRvcjw8IDxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiwgYWxsb2NhdG9yPGNoYXI+Plwob3N0cmVhbSYsIHN0cmluZyBjb25zdCZcKSIgPSAib3N0cmVhbSAmIG9wZXJhdG9yPDwob3N0cmVhbSAmLCBzdHJpbmcgY29uc3QgJikiCi0iXDxpc3RyZWFtJiAob3BlcmF0b3I+PnxnZXRsaW5lKSA8Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4sIGFsbG9jYXRvcjxjaGFyPj5cKGlzdHJlYW0mLCBzdHJpbmcmXCkiID0gImlzdHJlYW0gJiBcMShpc3RyZWFtICYsIHN0cmluZyAmKSIKLQotIyAyLjk1LzMuMiBhbGdvcml0aG0KLSJcPCgke3R5cGVuYW1lfSggY29uc3QpPykgXCogZmluZDxcMSBcKiwgJHt0eXBlbmFtZX0+XChcMSBcKiwgXDEgXCosIFw5IGNvbnN0ICYsICR7dHlwZW5hbWV9XCkiID0gIlwxICogZmluZChcMSAqLCBcMSAqLCBcOSBjb25zdCAmLCBcZikiCi0KLSJcPCgke3R5cGVuYW1lfSggY29uc3QpPykgXCogZmluZF9pZjxcMSBcKiwgJHt0eXBlbmFtZX0+XChcMSBcKiwgXDEgXCosIFw5LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykiID0gIlwxICogZmluZF9pZihcMSAqLCBcMSAqLCBcOSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIgotCi0jIGdjYyAzLjIsIG5vdCB0ZXN0ZWQgb24gMy4wLCAzLjEgYnV0IHByb2JhYmx5IHdvcmsuCi0jIEZJWE1FOiB0aGVyZSBpcyBhIHBvdGVudGlhbCBwcm9ibGVtIGhlcmUgd2l0aCBtYXA8aW50IGNvbnN0LCBsb25nPgotIyB0aGUgcGFpciBiZWNvbWUgcGFpcjxcMiwgXDg+IG5vdCBwYWlyPFwyIGNvbnN0LCBcOD4sIHdobyB1c2UgdGhlIGFib3ZlLAotIyBpcyBpdCBsZWdhbCA/Ci0jIHR3byBwYXNzLCBmaXJzdCBzaHJpbmsgYWxsb2NhdG9yPD4gdGhlbiBsZXNzPD4gYWxsb3dpbmcgbWFwIHdpdGggdXNlciBkZWZpbmVkCi0jIGNvbXBhcmF0b3IKLSJcPChtdWx0aSk/bWFwPCR7dHlwZW5hbWV9LCAke3R5cGVuYW1lfSwgJHt0eXBlbmFtZX0sIGFsbG9jYXRvcjxwYWlyPFwyIGNvbnN0LCBcOD4+PiIgPSAiXDFtYXA8XDIsIFw4LCBcZT4iCi0jIHRoaXMgb25lIGV4aXN0IGFscmVhZHkgZm9yIDIuOTUgdGhlIGZpcnN0IHRyYW5zZm9ybWF0aW9uIGdpdmluZyBhIGNvbW1vbgotIyBmb3JtIGZvciAyLjk1LzMuMgotIyAiXDwobXVsdGkpP21hcDwke3R5cGVuYW1lfSwgJHt0eXBlbmFtZX0sIGxlc3M8XDI+PiIgPSAiXDFtYXA8XDIsIFw4PiIKLQotIlw8Yml0c2V0PFwoQFNJWkVfVF9UWVBFQFwpKCR7aW50ZWdlcn0pPiIgPSAiYml0c2V0PFwxPiIKLQotIyBpdGVyYXRvcgotIlw8aXRlcmF0b3I8KGlucHV0fG91dHB1dHxmb3J3YXJkfGJpZGlyZWN0aW9uYWx8cmFuZG9tKV9pdGVyYXRvcl90YWcsICR7dHlwZW5hbWV9LCAoQFBUUkRJRkZfVF9UWVBFQCksIFw4XCosIFw4Jj4iID0gIml0ZXJhdG9yPFwxX2l0ZXJhdG9yX3RhZywgXDI+IgotIlw8KFtpb11zdHJlYW1faXRlcmF0b3IpPCR7dHlwZW5hbWV9LCBjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiwgQFBUUkRJRkZfVF9UWVBFQD4iID0gIlwxPFwyPiIKLQotIyBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yIGFyZSB1c2VkIGluIHR3byBjb250ZXh0OiBiYXNpY19zdHJpbmc8PiBhbmQKLSMgdmVjdG9yPFQ+IHdlIGRlY2F5IHRoZW0gdG8gc3RyaW5nOjppdGVyYXRvciwgdmVjdG9yPFQ+OjppdGVyYXRvcgotIlw8X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjaGFyIGNvbnN0XCosIHN0cmluZz4iID0gInN0cmluZzo6Y29uc3RfaXRlcmF0b3IiCi0iXDxfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNoYXJcKiwgc3RyaW5nPiIgPSAic3RyaW5nOjppdGVyYXRvciIKLSJcPF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8d2NoYXJfdCBjb25zdFwqLCB3c3RyaW5nPiIgPSAid3N0cmluZzo6Y29uc3RfaXRlcmF0b3IiCi0iXDxfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHdjaGFyX3RcKiwgd3N0cmluZz4iID0gIndzdHJpbmc6Oml0ZXJhdG9yIgotIlw8X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjwke3R5cGVuYW1lfSBjb25zdFwqLCB2ZWN0b3I8XDE+PiIgPSAidmVjdG9yPFwxPjo6Y29uc3RfaXRlcmF0b3IiCi0iXDxfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPCR7dHlwZW5hbWV9XCosIHZlY3RvcjxcMT4+IiA9ICJ2ZWN0b3I8XDE+OjppdGVyYXRvciIKLQotIyAyLjk1IHVzZSBvbmx5IF9MaXN0X2l0ZXJhdG9yLCAzLjIgdXNlIGFsc28gX0xpc3RfaXRlcmF0b3JfYmFzZSBidXQgc2luY2UKLSMgbGlzdDo6aXRlcmF0b3IgaXMgYSB0eXBlZGVmIHRvIF9MaXN0X2l0ZXJhdG9yIHdlIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoCi0jIF9MaXN0X2l0ZXJhdG9yX2Jhc2UKLSJcPF9MaXN0X2l0ZXJhdG9yPCR7dHlwZW5hbWV9LCBcMVsgXSomLCBcMVsgXSpcKj4iID0gImxpc3Q8XDE+OjppdGVyYXRvciIKLSJcPF9MaXN0X2l0ZXJhdG9yPCR7dHlwZW5hbWV9LCBcMSBjb25zdFsgXSomLCBcMSBjb25zdFsgXSpcKj4iID0gImxpc3Q8XDE+Ojpjb25zdF9pdGVyYXRvciIKLQotIyBpb3Nmd2QsIHN0ZDo6c3RyaW5nIGFuZCBzdGQ6OndzdHJpbmcKLSMgZmlyc3QgdHJhbnNsYXRlIGZyb20gImJhc2ljX3h4eDxULCBjaGFyX3RyYWl0czxUPj4iIHRvICJiYXNpY194eHg8VD4iCi0iXDwoW2lvXXN0cmVhbWJ1Zl9pdGVyYXRvcnxiYXNpY18oaW9zfHN0cmVhbWJ1ZnwoW2lvXXxpbylzdHJlYW18ZmlsZWJ1ZnxbaW9dP2ZzdHJlYW0pKTwke3R5cGVuYW1lfSwgY2hhcl90cmFpdHM8XDQ+PiIgPSAiXDE8XDQ+IgotIyBhcyBhYm92ZSB0cmFuc2xhdGUgZnJvbSAiYmFzaWNfeHh4PFQsIGNoYXJfdHJhaXRzPFQ+LCAuLi4+IiB0byAiYmFzaWNfeHh4PFQ+IgotIlw8YmFzaWNfKHN0cmluZyhidWYpP3xbaW9dP3N0cmluZ3N0cmVhbSk/PCR7dHlwZW5hbWV9LCBjaGFyX3RyYWl0czxcMz4sIGFsbG9jYXRvcjxcMz4+IiA9ICJiYXNpY19cMTxcMz4iCi0jIG5vdyB3ZSBjYW4gdHJhbnNsYXRlIHRoZSB0d28gYWJvdmUgZm9yIGNoYXIsIHdjaGFyX3QgdG8gc3RhbmRhcmRlc2UgdHlwZWRlZgotJGlvc2Z3ZF9uYW1lID0gIlw8YmFzaWNfKHN0cmluZ3xpb3N8KHN0cmVhbXxmaWxlfHN0cmluZylidWZ8KGl8b3xpbylzdHJlYW18W2lvXT8oZnN0cmVhbXxzdHJpbmdzdHJlYW0pKSIKLSJcPCR7aW9zZndkX25hbWV9PGNoYXI+IiA9ICJcMSIKLSJcPCR7aW9zZndkX25hbWV9PHdjaGFyX3Q+IiA9ICJ3XDEiCi0KLSMgc3RyZWFtcG9zIGFuZCB3c3RyZWFtcG9zIGRlY2F5IHRvIHRoZSBzYW1lIHR5cGUsIHRoZXkgYXJlIHVuZGlzdGluZ3VzaGFibGUKLSMgaW4gbWFuZ2xlZCBuYW1lIHNvIHN1YnN0aXR1dGUgZm9yIHRoZSBtb3N0IHByb2JhYmxlLCBub3QgYSBiaWcgZGVhbAotIlw8ZnBvczxfX21ic3RhdGVfdD4iID0gInN0cmVhbXBvcyIKLQotIyBsb2NhbGUKLSMgc3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBhY2NlcHQgbnVtX3B1dDwuLi4sIGlzdHJlYW1faXRlcmF0b3I8Li4uPiA+IG9yCi0jIG51bV9nZXQ8Li4uLCBvc3RyZWFtX2l0ZXJhdG9yPC4uLj4gPiBidXQgdGhpcyBjYW4ndCBjb21waWxlIHNvIG5vIGJpZyBkZWFsCi0iXDwobW9uZXl8dGltZXxudW0pXyhwdXR8Z2V0KTwke3R5cGVuYW1lfSwgKGl8bylzdHJlYW1idWZfaXRlcmF0b3I8XDM+PiIgPSAiXDFfXDI8XDM+IgotIlw8bW9uZXlwdW5jdChfYnluYW1lKT88JHt0eXBlbmFtZX0sIFwoYm9vbFwpMD4iID0gIm1vbmV5cHVuY3RcMTxcMj4iCi0KLSMgMy4yIGFsZ29yaXRobQotIlw8KHZlY3Rvcjwke3R5cGVuYW1lfT46Oihjb25zdF8pP2l0ZXJhdG9yKSBmaW5kPFwxLCAke3R5cGVuYW1lfT5cKFwxLCBcMSwgXDkgY29uc3QmLCAke3R5cGVuYW1lfVwpIiA9ICJcMSBmaW5kKFwxLCBcMSwgXDkgY29uc3QmLCBcZikiCi0KLSJcPCgoc3RyaW5nfHdzdHJpbmcpOjooY29uc3RfKT9pdGVyYXRvcikgZmluZDxcMSwgJHt0eXBlbmFtZX0+XChcMSwgXDEsIFw0IGNvbnN0JiwgJHt0eXBlbmFtZX1cKSIgPSAiXDEgZmluZChcMSwgXDEsIFw0IGNvbnN0JiwgXGEpIgotCi0iXDwodmVjdG9yPCR7dHlwZW5hbWV9Pjo6KGNvbnN0Xyk/aXRlcmF0b3IpIGZpbmRfaWY8XDEsICR7dHlwZW5hbWV9PlwoXDEsIFwxLCBcOSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWdcKSIgPSAiXDEgZmluZF9pZihcMSwgXDEsIFw5LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykiCi0KLSJcPCgoc3RyaW5nfHdzdHJpbmcpOjooY29uc3RfKT9pdGVyYXRvcikgZmluZF9pZjxcMSwgJHt0eXBlbmFtZX0+XChcMSwgXDEsIFw0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZ1wpIiA9ICJcMSBmaW5kX2lmKFwxLCBcMSwgXDQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSIKZGlmZiAtLWdpdCBhL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtIGIvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNGM5NzAuLjAwMDAwMDAKLS0tIGEvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1BTV9DUFBGTEFHUyA9IFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJyZWdleAotCi1BTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLQotY2hlY2tfUFJPR1JBTVMgPSByZWdleF90ZXN0Ci0KLXJlZ2V4X3Rlc3RfU09VUkNFUyA9IHJlZ2V4X3Rlc3QuY3BwCi1yZWdleF90ZXN0X0xEQUREID0gXAotCS4uL2xpYm9wX3JlZ2V4LmEgXAotCS4uLy4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYQotCi1FWFRSQV9ESVNUID0gbWFuZ2xlZC1uYW1lLmluCi0KLVRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KZGlmZiAtLWdpdCBhL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmluIGIvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNGJiYWYuLjAwMDAwMDAKLS0tIGEvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1MTYgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotU09VUkNFUyA9ICQocmVnZXhfdGVzdF9TT1VSQ0VTKQotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uLy4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1jaGVja19QUk9HUkFNUyA9IHJlZ2V4X3Rlc3QkKEVYRUVYVCkKLXN1YmRpciA9IGxpYnJlZ2V4L3Rlc3RzCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAotCSQoc3JjZGlyKS9tYW5nbGVkLW5hbWUuaW4KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9IG1hbmdsZWQtbmFtZQotYW1fcmVnZXhfdGVzdF9PQkpFQ1RTID0gcmVnZXhfdGVzdC4kKE9CSkVYVCkKLXJlZ2V4X3Rlc3RfT0JKRUNUUyA9ICQoYW1fcmVnZXhfdGVzdF9PQkpFQ1RTKQotcmVnZXhfdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9saWJvcF9yZWdleC5hIC4uLy4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYQotREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLUNYWENPTVBJTEUgPSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKLQkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQotQ1hYTEQgPSAkKENYWCkKLUNYWExJTksgPSAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1TT1VSQ0VTID0gJChyZWdleF90ZXN0X1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKHJlZ2V4X3Rlc3RfU09VUkNFUykKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKLUFNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKLUFNVEFSID0gQEFNVEFSQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CRkRfTElCUyA9IEBCRkRfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRFID0gQERBVEVACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVhFRVhUID0gQEVYRUVYVEAKLUVYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotS0lOQyA9IEBLSU5DQAotS1NSQyA9IEBLU1JDQAotS1ZFUlMgPSBAS1ZFUlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NT0MgPSBATU9DQAotTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAotT0JKRVhUID0gQE9CSkVYVEAKLU9QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACi1PUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKLU9QX0NGTEFHUyA9IEBPUF9DRkxBR1NACi1PUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLU9QX0RPQ0RJUiA9IEBPUF9ET0NESVJACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAotUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACi1RVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKLVFUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKLVFUX0xJQiA9IEBRVF9MSUJACi1RVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAotU1RSSVAgPSBAU1RSSVBACi1VSUMgPSBAVUlDQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAotWF9MSUJTID0gQFhfTElCU0AKLVhfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACi1hY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJUEAKLWFtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACi1hbV9fZmFzdGRlcENYWF9GQUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKLWFtX19mYXN0ZGVwQ1hYX1RSVUUgPSBAYW1fX2Zhc3RkZXBDWFhfVFJVRUAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZW5hYmxlX2FiaV9GQUxTRSA9IEBlbmFibGVfYWJpX0ZBTFNFQAotZW5hYmxlX2FiaV9UUlVFID0gQGVuYWJsZV9hYmlfVFJVRUAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaGF2ZV9xdF9GQUxTRSA9IEBoYXZlX3F0X0ZBTFNFQAotaGF2ZV9xdF9UUlVFID0gQGhhdmVfcXRfVFJVRUAKLWhhdmVfeHNsdHByb2NfRkFMU0UgPSBAaGF2ZV94c2x0cHJvY19GQUxTRUAKLWhhdmVfeHNsdHByb2NfVFJVRSA9IEBoYXZlX3hzbHRwcm9jX1RSVUVACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1rZXJuZWxfc3VwcG9ydF9GQUxTRSA9IEBrZXJuZWxfc3VwcG9ydF9GQUxTRUAKLWtlcm5lbF9zdXBwb3J0X1RSVUUgPSBAa2VybmVsX3N1cHBvcnRfVFJVRUAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRvcGRpciA9IEB0b3BkaXJACi1BTV9DUFBGTEFHUyA9IFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJyZWdleAotCi1BTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLXJlZ2V4X3Rlc3RfU09VUkNFUyA9IHJlZ2V4X3Rlc3QuY3BwCi1yZWdleF90ZXN0X0xEQUREID0gXAotCS4uL2xpYm9wX3JlZ2V4LmEgXAotCS4uLy4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYQotCi1FWFRSQV9ESVNUID0gbWFuZ2xlZC1uYW1lLmluCi1URVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9Ci1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jcHAgLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotbWFuZ2xlZC1uYW1lOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvbWFuZ2xlZC1uYW1lLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLQotY2xlYW4tY2hlY2tQUk9HUkFNUzoKLQktdGVzdCAteiAiJChjaGVja19QUk9HUkFNUykiIHx8IHJtIC1mICQoY2hlY2tfUFJPR1JBTVMpCi1yZWdleF90ZXN0JChFWEVFWFQpOiAkKHJlZ2V4X3Rlc3RfT0JKRUNUUykgJChyZWdleF90ZXN0X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHJlZ2V4X3Rlc3QkKEVYRUVYVCkKLQkkKENYWExJTkspICQocmVnZXhfdGVzdF9MREZMQUdTKSAkKHJlZ2V4X3Rlc3RfT0JKRUNUUykgJChyZWdleF90ZXN0X0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZWdleF90ZXN0LlBvQGFtX19xdW90ZUAKLQotLmNwcC5vOgotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACWlmICQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jcHAub2JqOgotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACWlmICQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotdW5pbnN0YWxsLWluZm8tYW06Ci0KLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKLQotVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKLQlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1jaGVjay1URVNUUzogJChURVNUUykKLQlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKLQlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCi0JbGlzdD0nJChURVNUUyknOyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBmb3IgdHN0IGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mIC4vJCR0c3Q7IHRoZW4gZGlyPS4vOyBcCi0JICAgIGVsaWYgdGVzdCAtZiAkJHRzdDsgdGhlbiBkaXI9OyBcCi0JICAgIGVsc2UgZGlyPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgICAgaWYgJChURVNUU19FTlZJUk9OTUVOVCkgJCR7ZGlyfSQkdHN0OyB0aGVuIFwKLQkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAotCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKLQkgICAgICAqIiAkJHRzdCAiKikgXAotCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKLQkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKLQkJZWNobyAiWFBBU1M6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICAqKSBcCi0JCWVjaG8gIlBBU1M6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICBlc2FjOyBcCi0JICAgIGVsaWYgdGVzdCAkJD8gLW5lIDc3OyB0aGVuIFwKLQkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAotCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKLQkgICAgICAqIiAkJHRzdCAiKikgXAotCQl4ZmFpbD1gZXhwciAkJHhmYWlsICsgMWA7IFwKLQkJZWNobyAiWEZBSUw6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICAqKSBcCi0JCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCi0JCWVjaG8gIkZBSUw6ICQkdHN0IjsgXAotCSAgICAgIDs7IFwKLQkgICAgICBlc2FjOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIHNraXA9YGV4cHIgJCRza2lwICsgMWA7IFwKLQkgICAgICBlY2hvICJTS0lQOiAkJHRzdCI7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCi0JICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKLQkgICAgICBiYW5uZXI9IkFsbCAkJGFsbCB0ZXN0cyBwYXNzZWQiOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIGJhbm5lcj0iQWxsICQkYWxsIHRlc3RzIGJlaGF2ZWQgYXMgZXhwZWN0ZWQgKCQkeGZhaWwgZXhwZWN0ZWQgZmFpbHVyZXMpIjsgXAotCSAgICBmaTsgXAotCSAgZWxzZSBcCi0JICAgIGlmIHRlc3QgIiQkeHBhc3MiIC1lcSAwOyB0aGVuIFwKLQkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsIHRlc3RzIGZhaWxlZCI7IFwKLQkgICAgZWxzZSBcCi0JICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCB0ZXN0cyBkaWQgbm90IGJlaGF2ZSBhcyBleHBlY3RlZCAoJCR4cGFzcyB1bmV4cGVjdGVkIHBhc3NlcykiOyBcCi0JICAgIGZpOyBcCi0JICBmaTsgXAotCSAgZGFzaGVzPSIkJGJhbm5lciI7IFwKLQkgIHNraXBwZWQ9IiI7IFwKLQkgIGlmIHRlc3QgIiQkc2tpcCIgLW5lIDA7IHRoZW4gXAotCSAgICBza2lwcGVkPSIoJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikiOyBcCi0JICAgIHRlc3QgYGVjaG8gIiQkc2tpcHBlZCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAotCSAgICAgIGRhc2hlcz0iJCRza2lwcGVkIjsgXAotCSAgZmk7IFwKLQkgIHJlcG9ydD0iIjsgXAotCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwICYmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbiBcCi0JICAgIHJlcG9ydD0iUGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IFwKLQkgICAgdGVzdCBgZWNobyAiJCRyZXBvcnQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKLQkgICAgICBkYXNoZXM9IiQkcmVwb3J0IjsgXAotCSAgZmk7IFwKLQkgIGRhc2hlcz1gZWNobyAiJCRkYXNoZXMiIHwgc2VkIHMvLi89L2dgOyBcCi0JICBlY2hvICIkJGRhc2hlcyI7IFwKLQkgIGVjaG8gIiQkYmFubmVyIjsgXAotCSAgdGVzdCAteiAiJCRza2lwcGVkIiB8fCBlY2hvICIkJHNraXBwZWQiOyBcCi0JICB0ZXN0IC16ICIkJHJlcG9ydCIgfHwgZWNobyAiJCRyZXBvcnQiOyBcCi0JICBlY2hvICIkJGRhc2hlcyI7IFwKLQkgIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgXAotCWVsc2UgOjsgZmkKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAotCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLVRFU1RTIGNoZWNrLWFtIGNsZWFuIFwKLQljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY3RhZ3MgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCi0JZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIFwKLQl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lLmluIGIvbGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWU0YmM4Li4wMDAwMDAwCi0tLSBhL2xpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ1MyArMCwwIEBACi0jIHRlc3QgZm9yIHN0bCBiZWF1dGlmaWVyLCBkbyBvcF9yZWdleF90ZXN0IDwgbWFuZ2xlZC1uYW1lLnR4dAotIyBsaW5lIGdvIGJ5IGNvdXBsZSBtYW5nbGVkIG5hbWUgdGhlbiBleHBlY3RlZCBuYW1lIGFmdGVyIHJ1biwgbGluZQotIyBzdGFydGluZyBieSAjIGFuZCBibGFuayBsaW5lIGFyZSBpZ25vcmVkLiBUaGUgdGVzdCBtdXN0IG91dHB1dCBub3RoaW5nIGlmCi0jIHN1Y2Nlc3NmdWxsCi0KLSMgYmVmb3JlIHJlbW92aW5nIHRlc3RzIHRoaW5rIGl0IHRha2UgdGltZSB0byB3cml0ZSB0aGVtLiBUaGlzIGlzIGludGVuZGVkCi0jIHRvIGJlIGEgY292ZXJhZ2UgdGVzdCBvZiBhbGwgcGF0dGVybiBpbiBzdGwucGF0LgotCi0jIGcrKyAyLjk1IHN0bCBtYW5nbGVkIG5hbWUKLQotYmFzaWNfc3RyaW5nPGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+ID4KLXN0cmluZwotCi1wcmVmaXhfYmFzaWNfc3RyaW5nPGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+ID4KLXByZWZpeF9iYXNpY19zdHJpbmc8Y2hhciwgc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXI+LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4+Ci0KLXZlY3RvcjxiYXNpY19zdHJpbmc8Y2hhciwgc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXI+LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gPiwgYWxsb2NhdG9yPGJhc2ljX3N0cmluZzxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiA+ID4gPgotdmVjdG9yPHN0cmluZz4KLQotbWFwPGludCwgaW1hZ2VfbmFtZSwgbGVzczxpbnQ+LCBhbGxvY2F0b3I8aW1hZ2VfbmFtZT4gPgotbWFwPGludCwgaW1hZ2VfbmFtZT4KLQotbWFwPGJhc2ljX3N0cmluZzxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiA+LCBpbWFnZV9uYW1lLCBsZXNzPGJhc2ljX3N0cmluZzxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiA+ID4sIGFsbG9jYXRvcjxpbWFnZV9uYW1lPiA+Ci1tYXA8c3RyaW5nLCBpbWFnZV9uYW1lPgotCi1tdWx0aW1hcDxpbnQsIGxvbmcsIGxlc3M8aW50PiwgYWxsb2NhdG9yPGxvbmc+ID4KLW11bHRpbWFwPGludCwgbG9uZz4KLQotcHJlZml4X211bHRpbWFwPGludCwgbG9uZywgbGVzczxpbnQ+LCBhbGxvY2F0b3I8bG9uZz4gPgotcHJlZml4X211bHRpbWFwPGludCwgbG9uZywgbGVzczxpbnQ+LCBhbGxvY2F0b3I8bG9uZz4+Ci0KLW1hcDxpbnQsIGxvbmcsIGNvbXBhcmUsIGFsbG9jYXRvcjxsb25nPiA+Ci1tYXA8aW50LCBsb25nLCBjb21wYXJlPgotCi1iaXRzZXQ8MzMsIHVuc2lnbmVkIGxvbmc+Ci1iaXRzZXQ8MzM+Ci0KLWlzdHJlYW1faXRlcmF0b3I8Y2hhciwgQFBUUkRJRkZfVF9UWVBFQD4KLWlzdHJlYW1faXRlcmF0b3I8Y2hhcj4KLQotb3N0cmVhbV9pdGVyYXRvcjxjaGFyLCBAUFRSRElGRl9UX1RZUEVAPgotb3N0cmVhbV9pdGVyYXRvcjxjaGFyPgotCi0jIHNoYXJlZCBiZXR3ZWVuIGFsbCBzdXBwb3J0ZWQgZ2NjIHZlcnNpb24KLWRlcXVlPGludCwgYWxsb2NhdG9yPGludD4sIDA+Ci1kZXF1ZTxpbnQ+Ci0KLXN0ZDo6ZGVxdWU8aW50LCBzdGQ6OmFsbG9jYXRvcjxpbnQ+LCAwPgotZGVxdWU8aW50PgotCi1wcmVmaXhfZGVxdWU8aW50LCBhbGxvY2F0b3I8aW50PiwgMD4KLXByZWZpeF9kZXF1ZTxpbnQsIGFsbG9jYXRvcjxpbnQ+LCAwPgotCi1saXN0PGludCwgYWxsb2NhdG9yPGludD4gPgotbGlzdDxpbnQ+Ci0KLWxpc3Q8b3BfYmZkX3N5bWJvbCwgYWxsb2NhdG9yPG9wX2JmZF9zeW1ib2w+ID4KLWxpc3Q8b3BfYmZkX3N5bWJvbD4KLQotX0xpc3RfaXRlcmF0b3I8aW50LCBpbnQgY29uc3QgJiwgaW50IGNvbnN0ICo+Ci1saXN0PGludD46OmNvbnN0X2l0ZXJhdG9yCi0KLV9MaXN0X2l0ZXJhdG9yPGludCwgaW50ICYsIGludCAqPgotbGlzdDxpbnQ+OjppdGVyYXRvcgotCi1wcmVmaXhfbGlzdDxpbnQsIGFsbG9jYXRvcjxpbnQ+ID4KLXByZWZpeF9saXN0PGludCwgYWxsb2NhdG9yPGludD4+Ci0KLXN0ZDo6bGlzdDxpbnQsIHN0ZDo6YWxsb2NhdG9yPGludD4gPgotbGlzdDxpbnQ+Ci0KLXF1ZXVlPGludCwgZGVxdWU8aW50LCBhbGxvY2F0b3I8aW50PiwgMD4gPgotcXVldWU8aW50PgotCi1wcmVmaXhfcXVldWU8aW50LCBkZXF1ZTxpbnQsIGFsbG9jYXRvcjxpbnQ+LCAwPiA+Ci1wcmVmaXhfcXVldWU8aW50LCBkZXF1ZTxpbnQ+PgotCi1zdGQ6OnF1ZXVlPGludCwgc3RkOjpkZXF1ZTxpbnQsIGFsbG9jYXRvcjxpbnQ+LCAwPiA+Ci1xdWV1ZTxpbnQ+Ci0KLSMgZ2V0IHJpZGUgb2YgX1JiX3RyZWUgdHlwZWRlZiwgdGhlc2UgYXJlIGFsc28gbWFwcGVkIGJ5IG1hcC9zZXQgYnV0IHdlIGNhbid0Ci0jIGRpc3Rpbmd1aXNoIGEgc2V0PHBhaXI8aW50LCBpbnQ+Pjo6aXRlcmF0b3IgYW5kIGEgIG1hcDxpbnQsIGludD46Oml0ZXJhdG9yCi0jIGFzIHRoZXkgZGVjYXkgdG8gYW4gaWRlbnRpY2FsIHR5cGVkZWYgc28gd2UgZG9uJ3QgdHJ5IHRvIGJlIGNsZXZlciBoZXJlLgotX1JiX3RyZWVfaXRlcmF0b3I8VCwgVCBjb25zdCAmLCBUIGNvbnN0ICo+Ci1fUmJfdHJlZTxUPjo6Y29uc3RfaXRlcmF0b3IKLQotX1JiX3RyZWVfaXRlcmF0b3I8VCwgVCAmLCBUICo+Ci1fUmJfdHJlZTxUPjo6aXRlcmF0b3IKLQotIyB0aGlzIHJ1biB0aHJvdWdoIHNwZWNpYWwgY2FzZSBwYXR0ZXJuCi1fUmJfdHJlZV9pdGVyYXRvcjxwYWlyPHN0cmluZyBjb25zdCwgaW1hZ2VfbmFtZT4sIHBhaXI8c3RyaW5nIGNvbnN0LCBpbWFnZV9uYW1lPiBjb25zdCAmLCBwYWlyPHN0cmluZyBjb25zdCwgaW1hZ2VfbmFtZT4gY29uc3QgKj4KLV9SYl90cmVlPHBhaXI8c3RyaW5nIGNvbnN0LCBpbWFnZV9uYW1lPj46OmNvbnN0X2l0ZXJhdG9yCi0KLV9SYl90cmVlX2l0ZXJhdG9yPHBhaXI8c3RyaW5nIGNvbnN0LCBpbWFnZV9uYW1lPiwgcGFpcjxzdHJpbmcgY29uc3QsIGltYWdlX25hbWU+ICYsIHBhaXI8c3RyaW5nIGNvbnN0LCBpbWFnZV9uYW1lPiAqPgotX1JiX3RyZWU8cGFpcjxzdHJpbmcgY29uc3QsIGltYWdlX25hbWU+Pjo6aXRlcmF0b3IKLQotX1JiX3RyZWU8aW50LCBpbnQsIF9JZGVudGl0eTxpbnQ+LCBsZXNzPGludD4sIGFsbG9jYXRvcjxpbnQ+ID4KLV9SYl90cmVlPGludCwgaW50LCBpbnQ+Ci0KLV9SYl90cmVlPHN0cmluZywgcGFpcjxzdHJpbmcgY29uc3QsIGludCBjb25zdD4sIF9TZWxlY3Qxc3Q8cGFpcjxzdHJpbmcgY29uc3QsIGludCBjb25zdD4+LCBsZXNzPHN0cmluZz4sIGFsbG9jYXRvcjxpbnQgY29uc3Q+PgotX1JiX3RyZWU8c3RyaW5nLCBwYWlyPHN0cmluZyBjb25zdCwgaW50IGNvbnN0Piwgc3RyaW5nIGNvbnN0PgotCi1fU2VsZWN0MXN0PHBhaXI8aW50IGNvbnN0LCBsb25nPiA+Ci1pbnQgY29uc3QKLQotX1NlbGVjdDFzdDxwYWlyPGludCBjb25zdCwgbG9uZyBjb25zdD4gPgotaW50IGNvbnN0Ci0KLV9TZWxlY3Qxc3Q8cGFpcjxzdHJpbmcgY29uc3QsIHNwbGl0X3NhbXBsZV9maWxlbmFtZSBjb25zdD4+Ci1zdHJpbmcgY29uc3QKLQotX0lkZW50aXR5PGludD4KLWludAotCi0jIHRoaXMgdGVzdCBmYWlsIHNpbmNlIHBhaXI8PiBpcyBub3QgcmVjb2duaXplZCBhcyBhIHR5cGUKLSMgX1NlbGVjdDFzdDxwYWlyPHBhaXI8c3ltYm9sX2VudHJ5IGNvbnN0ICosIHVuc2lnbmVkIGxvbmcgbG9uZz4gY29uc3QsIHNhbXBsZV9lbnRyeT4+Ci0jIHBhaXI8c3ltYm9sX2VudHJ5IGNvbnN0ICosIHVuc2lnbmVkIGxvbmcgbG9uZz4gY29uc3QKLQotIyAyLjk1IG1hcC9tdWx0aW1hcAotX1JiX3RyZWU8aW50LCBwYWlyPGludCBjb25zdCwgbG9uZz4sIF9TZWxlY3Qxc3Q8cGFpcjxpbnQgY29uc3QsIGxvbmc+ID4sIGxlc3M8aW50PiwgYWxsb2NhdG9yPGxvbmc+ID4KLV9SYl90cmVlPGludCwgcGFpcjxpbnQgY29uc3QsIGxvbmc+LCBpbnQgY29uc3Q+Ci0jIDMuMiBtYXAvbXVsdGltYXAKLV9SYl90cmVlPGludCwgcGFpcjxpbnQgY29uc3QsIGxvbmc+LCBfU2VsZWN0MXN0PHBhaXI8aW50IGNvbnN0LCBsb25nPiA+LCBsZXNzPGludD4sIGFsbG9jYXRvcjxwYWlyPGludCBjb25zdCwgbG9uZz4gPiA+Ci1fUmJfdHJlZTxpbnQsIHBhaXI8aW50IGNvbnN0LCBsb25nPiwgaW50IGNvbnN0PgotCi1fTGlzdF9iYXNlPHN0cmluZywgYWxsb2NhdG9yPHN0cmluZz4+Ci1fTGlzdF9iYXNlPHN0cmluZz4KLQotIyBzdHJpY3RseSBzcGVha2luZyAzcmQgcGFyYW1ldGVycyBpcyBsZXNzPENvbnRhaW5lclR5cGU6OnZhbHVlX3R5cGU+Ci1wcmlvcml0eV9xdWV1ZTxpbnQsIHZlY3RvcjxpbnQsIGFsbG9jYXRvcjxpbnQ+ID4sIGxlc3M8aW50PiA+Ci1wcmlvcml0eV9xdWV1ZTxpbnQ+Ci0KLXByZWZpeF9wcmlvcml0eV9xdWV1ZTxpbnQsIHZlY3RvcjxpbnQsIGFsbG9jYXRvcjxpbnQ+ID4sIGxlc3M8aW50PiA+Ci1wcmVmaXhfcHJpb3JpdHlfcXVldWU8aW50LCB2ZWN0b3I8aW50PiwgbGVzczxpbnQ+PgotCi1zdGQ6OnByaW9yaXR5X3F1ZXVlPGludCwgc3RkOjp2ZWN0b3I8aW50LCBzdGQ6OmFsbG9jYXRvcjxpbnQ+ID4sIHN0ZDo6bGVzczxpbnQ+ID4KLXByaW9yaXR5X3F1ZXVlPGludD4KLQotdmVjdG9yPGludCwgYWxsb2NhdG9yPGludD4gPgotdmVjdG9yPGludD4KLQotdmVjdG9yPGJvb2wsIGFsbG9jYXRvcjxib29sPiA+Ci12ZWN0b3I8Ym9vbD4KLQotdmVjdG9yPGJsb2NrMTo6YmxvY2syLCBhbGxvY2F0b3I8YmxvY2sxOjpibG9jazI+ID4KLXZlY3RvcjxibG9jazE6OmJsb2NrMj4KLQotc3RhY2s8aW50LCBkZXF1ZTxpbnQsIGFsbG9jYXRvcjxpbnQ+LCAwPiA+Ci1zdGFjazxpbnQ+Ci0KLXByZWZpeF9zdGFjazxpbnQsIGRlcXVlPGludCwgYWxsb2NhdG9yPGludD4sIDA+ID4KLXByZWZpeF9zdGFjazxpbnQsIGRlcXVlPGludD4+Ci0KLXN0ZDo6c3RhY2s8aW50LCBzdGQ6OmRlcXVlPGludCwgc3RkOjphbGxvY2F0b3I8aW50PiwgMD4gPgotc3RhY2s8aW50PgotCi0jIHRlc3QgY29tcGxleCB0eXBlbmFtZSwgd2UgZG9uJ3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIGxldmVsIG9mIG5lc3RpbmcKLXZlY3RvcjxsaXN0PGludCwgYWxsb2NhdG9yPGludD4gPiwgYWxsb2NhdG9yPGxpc3Q8aW50LCBhbGxvY2F0b3I8aW50PiA+ID4gPgotdmVjdG9yPGxpc3Q8aW50Pj4KLQotc3RkOjp2ZWN0b3I8c3RkOjpsaXN0PGludCwgc3RkOjphbGxvY2F0b3I8aW50PiA+LCBzdGQ6OmFsbG9jYXRvcjxsaXN0PGludCwgc3RkOjphbGxvY2F0b3I8aW50PiA+ID4gPgotdmVjdG9yPGxpc3Q8aW50Pj4KLQotc2V0PGludCwgbGVzczxpbnQ+LCBhbGxvY2F0b3I8aW50PiA+Ci1zZXQ8aW50PgotCi1zZXQ8YmFzaWNfc3RyaW5nPGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+ID4sIGxlc3M8YmFzaWNfc3RyaW5nPGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+ID4gPiwgYWxsb2NhdG9yPGJhc2ljX3N0cmluZzxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiA+ID4gPgotc2V0PHN0cmluZz4KLQotc2V0PGludCwgbGVzc19ieV9maWxlX2xvYywgYWxsb2NhdG9yPGludD4gPgotc2V0PGludCwgbGVzc19ieV9maWxlX2xvYz4KLQotcHJlZml4X3NldDxpbnQsIGxlc3M8aW50PiwgYWxsb2NhdG9yPGludD4gPgotcHJlZml4X3NldDxpbnQsIGxlc3M8aW50PiwgYWxsb2NhdG9yPGludD4+Ci0KLXByZWZpeF9zZXQ8aW50LCBsZXNzPGludD4sIGFsbG9jYXRvcjxpbnQ+ID4KLXByZWZpeF9zZXQ8aW50LCBsZXNzPGludD4sIGFsbG9jYXRvcjxpbnQ+PgotCi1tdWx0aXNldDxpbnQsIGxlc3M8aW50PiwgYWxsb2NhdG9yPGludD4gPgotbXVsdGlzZXQ8aW50PgotCi0jIHRlc3QgdGhhbiBwb2ludGVyIGFuZCByZWZlcmVuY2UgdG8gcG9pbnRlciBhcmUgaGFuZGxlZAotdmVjdG9yPGludCAqLCBhbGxvY2F0b3I8aW50ICo+ID4KLXZlY3RvcjxpbnQgKj4KLQotdmVjdG9yPHVuc2lnbmVkIGludCAqLCBhbGxvY2F0b3I8dW5zaWduZWQgaW50ICo+ID4KLXZlY3Rvcjx1bnNpZ25lZCBpbnQgKj4KLQotIyBhbGdvcml0aG0sIHdpbGwgd29yayBmb3IgMy4yIHRvby4KLWludCAqIGZpbmQ8aW50ICosIGludD4oaW50ICosIGludCAqLCBpbnQgY29uc3QgJiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCi1pbnQgKiBmaW5kKGludCAqLCBpbnQgKiwgaW50IGNvbnN0ICYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQotY2hhciBjb25zdCAqIGZpbmRfaWY8Y2hhciBjb25zdCAqLCBjb21wYXJlPihjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKiwgY29tcGFyZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCi1jaGFyIGNvbnN0ICogZmluZF9pZihjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKiwgY29tcGFyZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCi0KLSMgZ2NjIDMuMgotc3RkOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgotc3RyaW5nCi0KLXN0ZDo6YmFzaWNfc3RyaW5nPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4sIHN0ZDo6YWxsb2NhdG9yPHdjaGFyX3Q+ID4KLXdzdHJpbmcKLQotIyBfX25vcm1hbF9pdGVyYXRvciBhcmUgdHJlYXRlZCBhIHBhcnQKLV9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y2hhciBjb25zdCosIHN0cmluZz4KLXN0cmluZzo6Y29uc3RfaXRlcmF0b3IKLV9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y2hhciosIHN0cmluZz4KLXN0cmluZzo6aXRlcmF0b3IKLV9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8d2NoYXJfdCosIHdzdHJpbmc+Ci13c3RyaW5nOjppdGVyYXRvcgotX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjx3Y2hhcl90IGNvbnN0Kiwgd3N0cmluZz4KLXdzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yCi1zdGQ6OnJldmVyc2VfaXRlcmF0b3I8X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjaGFyKiwgc3RyaW5nPj4KLXJldmVyc2VfaXRlcmF0b3I8c3RyaW5nOjppdGVyYXRvcj4KLQotX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxpbnQgY29uc3QqLCB2ZWN0b3I8aW50Pj4KLXZlY3RvcjxpbnQ+Ojpjb25zdF9pdGVyYXRvcgotX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxpbnQqLCB2ZWN0b3I8aW50Pj4KLXZlY3RvcjxpbnQ+OjppdGVyYXRvcgotc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8aW50IGNvbnN0KiwgdmVjdG9yPGludD4+Ci1yZXZlcnNlX2l0ZXJhdG9yPHZlY3RvcjxpbnQ+Ojpjb25zdF9pdGVyYXRvcgotCi1zdGQ6Om1hcDxpbnQsIGxvbmcsIHN0ZDo6bGVzczxpbnQ+LCBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8aW50IGNvbnN0LCBsb25nPiA+ID4KLW1hcDxpbnQsIGxvbmc+Ci0KLXN0ZDo6bXVsdGltYXA8aW50LCBsb25nLCBzdGQ6Omxlc3M8aW50Piwgc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGludCBjb25zdCwgbG9uZz4gPiA+Ci1tdWx0aW1hcDxpbnQsIGxvbmc+Ci0KLXN0ZDo6bWFwPGludCwgbG9uZywgY29tcGFyZSwgc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGludCBjb25zdCwgbG9uZz4gPiA+Ci1tYXA8aW50LCBsb25nLCBjb21wYXJlPgotCi0jIHBhcmFtZXRlciBpcyBzaXplX3Qgb24geDg2IGl0J3MgYW4gdW5zaWduZWQKLWJpdHNldDwoQFNJWkVfVF9UWVBFQCkzMz4KLWJpdHNldDwzMz4KLQotIyAzLCA0LCA1dGggcGFyYW1zIGFyZSBwdHJkaWZmX3QgaXQncyBhbiBpbnQgb24geDg2Ci1zdGQ6Oml0ZXJhdG9yPHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnLCBpbnQsIEBQVFJESUZGX1RfVFlQRUAsIEBQVFJESUZGX1RfVFlQRUAqLCBAUFRSRElGRl9UX1RZUEVAJj4KLWl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgaW50PgotCi1zdGQ6Oml0ZXJhdG9yPHN0ZDo6b3V0cHV0X2l0ZXJhdG9yX3RhZywgaW50LCBAUFRSRElGRl9UX1RZUEVALCBAUFRSRElGRl9UX1RZUEVAKiwgQFBUUkRJRkZfVF9UWVBFQCY+Ci1pdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCBpbnQ+Ci0KLXN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgaW50LCBAUFRSRElGRl9UX1RZUEVALCBAUFRSRElGRl9UX1RZUEVAKiwgQFBUUkRJRkZfVF9UWVBFQCY+Ci1pdGVyYXRvcjxmb3J3YXJkX2l0ZXJhdG9yX3RhZywgaW50PgotCi1zdGQ6Oml0ZXJhdG9yPHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGludCwgQFBUUkRJRkZfVF9UWVBFQCwgQFBUUkRJRkZfVF9UWVBFQCosIEBQVFJESUZGX1RfVFlQRUAmPgotaXRlcmF0b3I8YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGludD4KLQotc3RkOjppdGVyYXRvcjxzdGQ6OnJhbmRvbV9pdGVyYXRvcl90YWcsIGludCwgQFBUUkRJRkZfVF9UWVBFQCwgQFBUUkRJRkZfVF9UWVBFQCosIEBQVFJESUZGX1RfVFlQRUAmPgotaXRlcmF0b3I8cmFuZG9tX2l0ZXJhdG9yX3RhZywgaW50PgotCi0jIDR0aCBwYXJtcyBpcyBwdHJkaWZmX3QKLXN0ZDo6aXN0cmVhbV9pdGVyYXRvcjxsb25nLCBjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBAUFRSRElGRl9UX1RZUEVAPgotaXN0cmVhbV9pdGVyYXRvcjxsb25nPgotCi1zdGQ6Om9zdHJlYW1faXRlcmF0b3I8bG9uZywgY2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgQFBUUkRJRkZfVF9UWVBFQD4KLW9zdHJlYW1faXRlcmF0b3I8bG9uZz4KLQotIyBzaW1wbGUgZW5vdWdoLCBpdCdzIGp1c3QgPGlvc2Z3ZD4KLXN0ZDo6YmFzaWNfaW9zPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KLWJhc2ljX2lvczxpbnQ+Ci0KLXN0ZDo6YmFzaWNfc3RyZWFtYnVmPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KLWJhc2ljX3N0cmVhbWJ1ZjxpbnQ+Ci0KLXN0ZDo6YmFzaWNfaXN0cmVhbTxpbnQsIHN0ZDo6Y2hhcl90cmFpdHM8aW50PiA+Ci1iYXNpY19pc3RyZWFtPGludD4KLQotc3RkOjpiYXNpY19vc3RyZWFtPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KLWJhc2ljX29zdHJlYW08aW50PgotCi1zdGQ6OmJhc2ljX2lvc3RyZWFtPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KLWJhc2ljX2lvc3RyZWFtPGludD4KLQotc3RkOjpiYXNpY19maWxlYnVmPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KLWJhc2ljX2ZpbGVidWY8aW50PgotCi1zdGQ6OmJhc2ljX2lmc3RyZWFtPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KLWJhc2ljX2lmc3RyZWFtPGludD4KLQotc3RkOjpiYXNpY19vZnN0cmVhbTxpbnQsIHN0ZDo6Y2hhcl90cmFpdHM8aW50PiA+Ci1iYXNpY19vZnN0cmVhbTxpbnQ+Ci0KLXN0ZDo6YmFzaWNfZnN0cmVhbTxpbnQsIHN0ZDo6Y2hhcl90cmFpdHM8aW50PiA+Ci1iYXNpY19mc3RyZWFtPGludD4KLQotc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGxvbmcsIHN0ZDo6Y2hhcl90cmFpdHM8bG9uZz4gPgotaXN0cmVhbWJ1Zl9pdGVyYXRvcjxsb25nPgotCi1zdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8bG9uZywgc3RkOjpjaGFyX3RyYWl0czxsb25nPiA+Ci1vc3RyZWFtYnVmX2l0ZXJhdG9yPGxvbmc+Ci0KLXN0ZDo6YmFzaWNfc3RyaW5nYnVmPGxvbmcsIHN0ZDo6Y2hhcl90cmFpdHM8bG9uZz4sIHN0ZDo6YWxsb2NhdG9yPGxvbmc+ID4KLWJhc2ljX3N0cmluZ2J1Zjxsb25nPgotCi1zdGQ6OmJhc2ljX2lzdHJpbmdzdHJlYW08bG9uZywgc3RkOjpjaGFyX3RyYWl0czxsb25nPiwgc3RkOjphbGxvY2F0b3I8bG9uZz4gPgotYmFzaWNfaXN0cmluZ3N0cmVhbTxsb25nPgotCi1zdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08bG9uZywgc3RkOjpjaGFyX3RyYWl0czxsb25nPiwgc3RkOjphbGxvY2F0b3I8bG9uZz4gPgotYmFzaWNfb3N0cmluZ3N0cmVhbTxsb25nPgotCi1zdGQ6OmJhc2ljX3N0cmluZ3N0cmVhbTxsb25nLCBzdGQ6OmNoYXJfdHJhaXRzPGxvbmc+LCBzdGQ6OmFsbG9jYXRvcjxsb25nPiA+Ci1iYXNpY19zdHJpbmdzdHJlYW08bG9uZz4KLQotIyBhbGwgdGhlIGFib3ZlIGludGFudGlhdGVkIHdpdGggY2hhciBhbmQgd2NoYXJfdCBmYWxsYmFjayB0byBzdGFuZGFyZGlzZWQKLSMgdHlwZWRlZiBleGNlcHQgaXN0cmVhbWJ1Zl9pdGVyYXRvciBhbmQgb3N0cmVhbWJ1Zl9pdGVyYXRvcgotCi1zdGQ6OmJhc2ljX2lvczxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+ID4KLWlvcwotc3RkOjpiYXNpY19pb3M8d2NoYXJfdCwgc3RkOjpjaGFyX3RyYWl0czx3Y2hhcl90PiA+Ci13aW9zCi0KLXN0ZDo6YmFzaWNfc3RyZWFtYnVmPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgotc3RyZWFtYnVmCi1zdGQ6OmJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+ID4KLXdzdHJlYW1idWYKLQotc3RkOjpiYXNpY19pc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgotaXN0cmVhbQotc3RkOjpiYXNpY19pc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4gPgotd2lzdHJlYW0KLQotc3RkOjpiYXNpY19vc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgotb3N0cmVhbQotc3RkOjpiYXNpY19vc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4gPgotd29zdHJlYW0KLQotc3RkOjpiYXNpY19pb3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+ID4KLWlvc3RyZWFtCi1zdGQ6OmJhc2ljX2lvc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4gPgotd2lvc3RyZWFtCi0KLXN0ZDo6YmFzaWNfZmlsZWJ1ZjxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+ID4KLWZpbGVidWYKLXN0ZDo6YmFzaWNfZmlsZWJ1Zjx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+ID4KLXdmaWxlYnVmCi0KLXN0ZDo6YmFzaWNfaWZzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiA+Ci1pZnN0cmVhbQotc3RkOjpiYXNpY19pZnN0cmVhbTx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+ID4KLXdpZnN0cmVhbQotCi1zdGQ6OmJhc2ljX29mc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgotb2ZzdHJlYW0KLXN0ZDo6YmFzaWNfb2ZzdHJlYW08d2NoYXJfdCwgc3RkOjpjaGFyX3RyYWl0czx3Y2hhcl90PiA+Ci13b2ZzdHJlYW0KLQotc3RkOjpiYXNpY19mc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgotZnN0cmVhbQotc3RkOjpiYXNpY19mc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4gPgotd2ZzdHJlYW0KLQotc3RkOjpiYXNpY19zdHJpbmdidWY8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgotc3RyaW5nYnVmCi1zdGQ6OmJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+LCBzdGQ6OmFsbG9jYXRvcjx3Y2hhcl90PiA+Ci13c3RyaW5nYnVmCi0KLXN0ZDo6YmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+Ci1pc3RyaW5nc3RyZWFtCi1zdGQ6OmJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdCwgc3RkOjpjaGFyX3RyYWl0czx3Y2hhcl90Piwgc3RkOjphbGxvY2F0b3I8d2NoYXJfdD4gPgotd2lzdHJpbmdzdHJlYW0KLQotc3RkOjpiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KLW9zdHJpbmdzdHJlYW0KLXN0ZDo6YmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+LCBzdGQ6OmFsbG9jYXRvcjx3Y2hhcl90PiA+Ci13b3N0cmluZ3N0cmVhbQotCi1zdGQ6OmJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+Ci1zdHJpbmdzdHJlYW0KLXN0ZDo6YmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4sIHN0ZDo6YWxsb2NhdG9yPHdjaGFyX3Q+ID4KLXdzdHJpbmdzdHJlYW0KLQotIyB0aGVzZSB0d28gYXJlIGFsc28gaW4gaW9zZncsIG5hbWVseQotIyB0eXBlZGVmIGZwb3M8Y2hhcl90cmFpdHM8Y2hhcj46OnN0YXRlX3R5cGU+ICBzdHJlYW1wb3M7Ci0jIHR5cGVkZWYgZnBvczxjaGFyX3RyYWl0czx3Y2hhcl90Pjo6c3RhdGVfdHlwZT4gd3N0cmVhbXBvczsKLSMgYnV0IHR3aWNlIGRlY2F5IHRvIGZwb3M8X19tYnN0YXRlPiwgd2UgY2hvb3NlZCB0byB0cmFuc2xhdGUgdG8gc3RyZWFtcG9zCi1zdGQ6OmZwb3M8X19tYnN0YXRlX3Q+Ci1zdHJlYW1wb3MKLQotIyBsb2NhbGUKLXN0ZDo6bnVtX3B1dDxjaGFyLCBzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPgotbnVtX3B1dDxjaGFyPgotc3RkOjpudW1fcHV0PHdjaGFyX3QsIHN0ZDo6b3N0cmVhbWJ1Zl9pdGVyYXRvcjx3Y2hhcl90PiA+Ci1udW1fcHV0PHdjaGFyX3Q+Ci1zdGQ6Om51bV9nZXQ8Y2hhciwgc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID4KLW51bV9nZXQ8Y2hhcj4KLXN0ZDo6bnVtX2dldDx3Y2hhcl90LCBzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8d2NoYXJfdD4gPgotbnVtX2dldDx3Y2hhcl90PgotCi1zdGQ6OnRpbWVfcHV0PGNoYXIsIHN0ZDo6b3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+Ci10aW1lX3B1dDxjaGFyPgotc3RkOjp0aW1lX3B1dDx3Y2hhcl90LCBzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8d2NoYXJfdD4gPgotdGltZV9wdXQ8d2NoYXJfdD4KLXN0ZDo6dGltZV9nZXQ8Y2hhciwgc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID4KLXRpbWVfZ2V0PGNoYXI+Ci1zdGQ6OnRpbWVfZ2V0PHdjaGFyX3QsIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjx3Y2hhcl90PiA+Ci10aW1lX2dldDx3Y2hhcl90PgotCi1zdGQ6Om1vbmV5X3B1dDxjaGFyLCBzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPgotbW9uZXlfcHV0PGNoYXI+Ci1zdGQ6Om1vbmV5X3B1dDx3Y2hhcl90LCBzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8d2NoYXJfdD4gPgotbW9uZXlfcHV0PHdjaGFyX3Q+Ci1zdGQ6Om1vbmV5X2dldDxjaGFyLCBzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPgotbW9uZXlfZ2V0PGNoYXI+Ci1zdGQ6Om1vbmV5X2dldDx3Y2hhcl90LCBzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8d2NoYXJfdD4gPgotbW9uZXlfZ2V0PHdjaGFyX3Q+Ci0KLXN0ZDo6bW9uZXlwdW5jdDxjaGFyLCAoYm9vbCkwPgotbW9uZXlwdW5jdDxjaGFyPgotc3RkOjptb25leXB1bmN0PHdjaGFyX3QsIChib29sKTA+Ci1tb25leXB1bmN0PHdjaGFyX3Q+Ci1zdGQ6Om1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIChib29sKTA+Ci1tb25leXB1bmN0X2J5bmFtZTxjaGFyPgotc3RkOjptb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCAoYm9vbCkwPgotbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdD4KLQotIyBhbGdvcml0aG0KLXZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciBmaW5kPHZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciwgc3RyaW5nPih2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IsIHZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciwgc3RyaW5nIGNvbnN0JiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCi12ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IgZmluZCh2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IsIHZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciwgc3RyaW5nIGNvbnN0JiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCi0KLXN0cmluZzo6aXRlcmF0b3IgZmluZDxzdHJpbmc6Oml0ZXJhdG9yLCBpbnQ+KHN0cmluZzo6aXRlcmF0b3IsIHN0cmluZzo6aXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQotc3RyaW5nOjppdGVyYXRvciBmaW5kKHN0cmluZzo6aXRlcmF0b3IsIHN0cmluZzo6aXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQotCi12ZWN0b3I8aW50Pjo6aXRlcmF0b3IgZmluZDx2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGludD4odmVjdG9yPGludD46Oml0ZXJhdG9yLCB2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQotdmVjdG9yPGludD46Oml0ZXJhdG9yIGZpbmQodmVjdG9yPGludD46Oml0ZXJhdG9yLCB2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQotCi1jaGFyIGNvbnN0ICogZmluZDxjaGFyIGNvbnN0ICosIGludD4oY2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICosIGludCBjb25zdCAmLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKLWNoYXIgY29uc3QgKiBmaW5kKGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqLCBpbnQgY29uc3QgJiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCi0KLXN0cmluZzo6Y29uc3RfaXRlcmF0b3IgZmluZDxzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yLCBpbnQ+KHN0cmluZzo6Y29uc3RfaXRlcmF0b3IsIHN0cmluZzo6Y29uc3RfaXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQotc3RyaW5nOjpjb25zdF9pdGVyYXRvciBmaW5kKHN0cmluZzo6Y29uc3RfaXRlcmF0b3IsIHN0cmluZzo6Y29uc3RfaXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQotCi1zdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGZpbmRfaWY8c3RyaW5nOjpjb25zdF9pdGVyYXRvciwgY29tcGFyZT4oc3RyaW5nOjpjb25zdF9pdGVyYXRvciwgc3RyaW5nOjpjb25zdF9pdGVyYXRvciwgY29tcGFyZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCi1zdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGZpbmRfaWYoc3RyaW5nOjpjb25zdF9pdGVyYXRvciwgc3RyaW5nOjpjb25zdF9pdGVyYXRvciwgY29tcGFyZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCi0KLXZlY3RvcjxpbnQ+OjppdGVyYXRvciBmaW5kX2lmPHZlY3RvcjxpbnQ+OjppdGVyYXRvciwgY29tcGFyZT4odmVjdG9yPGludD46Oml0ZXJhdG9yLCB2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGNvbXBhcmUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQotdmVjdG9yPGludD46Oml0ZXJhdG9yIGZpbmRfaWYodmVjdG9yPGludD46Oml0ZXJhdG9yLCB2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGNvbXBhcmUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQotCi1vc3RyZWFtICYgb3BlcmF0b3I8PDxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPj4ob3N0cmVhbSAmLCBzdHJpbmcgY29uc3QgJikKLW9zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiwgc3RyaW5nIGNvbnN0ICYpCi0KLWlzdHJlYW0gJiBvcGVyYXRvcj4+PGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+Pihpc3RyZWFtICYsIHN0cmluZyAmKQotaXN0cmVhbSAmIG9wZXJhdG9yPj4oaXN0cmVhbSAmLCBzdHJpbmcgJikKLQotaXN0cmVhbSAmIGdldGxpbmU8Y2hhciwgc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXI+LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4+KGlzdHJlYW0gJiwgc3RyaW5nICYpCi1pc3RyZWFtICYgZ2V0bGluZShpc3RyZWFtICYsIHN0cmluZyAmKQotCi1vc3RyZWFtJiBvcGVyYXRvcjw8IDxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiwgYWxsb2NhdG9yPGNoYXI+Pihvc3RyZWFtJiwgc3RyaW5nIGNvbnN0JikKLW9zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiwgc3RyaW5nIGNvbnN0ICYpCi0KLWlzdHJlYW0mIG9wZXJhdG9yPj4gPGNoYXIsIGNoYXJfdHJhaXRzPGNoYXI+LCBhbGxvY2F0b3I8Y2hhcj4+KGlzdHJlYW0mLCBzdHJpbmcmKQotaXN0cmVhbSAmIG9wZXJhdG9yPj4oaXN0cmVhbSAmLCBzdHJpbmcgJikKLQotc3RkOjpiYXNpY19vc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPjo6b3BlcmF0b3I8PChsb25nKQotb3N0cmVhbTo6b3BlcmF0b3I8PChsb25nKQpkaWZmIC0tZ2l0IGEvbGlicmVnZXgvdGVzdHMvcmVnZXhfdGVzdC5jcHAgYi9saWJyZWdleC90ZXN0cy9yZWdleF90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYyNjFhNS4uMDAwMDAwMAotLS0gYS9saWJyZWdleC90ZXN0cy9yZWdleF90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKgotICogQGZpbGUgcmVnZXhfdGVzdC5jcHAKLSAqCi0gKiBBIHNpbXBsZSB0ZXN0IGZvciBsaWJyZWdleC4gUnVuIGl0IHRocm91Z2g6Ci0gKiAkIHJlZ2V4X3Rlc3QKLSAqIG9yCi0gKiAkIHJlZ2V4X3Rlc3QgZmlsZW5hbWUocykKLSAqIHdoZW4gbm8gYXJndW1lbnQgaXMgcHJvdmlkZWQgIm1hbmdsZWQtbmFtZSIgaXMgdXNlZCwKLSAqIHNlZSBpdCBmb3IgdGhlIGlucHV0IGZpbGUgZm9ybWF0Ci0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKLQotI2luY2x1ZGUgIm9wX3JlZ2V4LmgiCi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxmc3RyZWFtPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgaW50IG5yX2Vycm9yID0gMDsKLQotc3RhdGljIHZvaWQgZG9fdGVzdChpc3RyZWFtJiBmaW4pCi17Ci0JcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2UgcmVwOwotCi0Jc2V0dXBfcmVnZXgocmVwLCAiLi4vc3RsLnBhdCIpOwotCi0Jc3RyaW5nIHRlc3QsIGV4cGVjdCwgbGFzdDsKLQlib29sIGZpcnN0ID0gdHJ1ZTsKLQl3aGlsZSAoZ2V0bGluZShmaW4sIGxhc3QpKSB7Ci0JCWxhc3QgPSB0cmltKGxhc3QpOwotCQlpZiAobGFzdC5sZW5ndGgoKSA9PSAwIHx8IGxhc3RbMF0gPT0gJyMnKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGZpcnN0KSB7Ci0JCQl0ZXN0ID0gbGFzdDsKLQkJCWZpcnN0ID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlleHBlY3QgPSBsYXN0OwotCQkJZmlyc3QgPSB0cnVlOwotCQkJc3RyaW5nIHN0cih0ZXN0KTsKLQkJCXJlcC5leGVjdXRlKHN0cik7Ci0JCQlpZiAoc3RyICE9IGV4cGVjdCkgewotCQkJCWNlcnIgPDwgIm1pc3RtYXRjaDogdGVzdCwgZXhwZWN0LCByZXR1cm5lZFxuIgotCQkJCSAgICAgPDwgJyInIDw8IHRlc3QgPDwgJyInIDw8IGVuZGwKLQkJCQkgICAgIDw8ICciJyA8PCBleHBlY3QgPDwgJyInIDw8IGVuZGwKLQkJCQkgICAgIDw8ICciJyA8PCBzdHIgPDwgJyInIDw8IGVuZGw7Ci0JCQkJKytucl9lcnJvcjsKLQkJCX0KLQkJfQotCX0KLQotCWlmICghZmlyc3QpIHsKLQkJY2VyciA8PCAiaW5wdXQgZmlsZSBpbGwgZm9ybWVkXG4iOwotCX0KLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCi17Ci0JdHJ5IHsKLQkJaWYgKGFyZ2MgPiAxKSB7Ci0JCQlmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgewotCQkJCWlmc3RyZWFtIGZpbihhcmd2W2ldKTsKLQkJCQlkb190ZXN0KGZpbik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZnN0cmVhbSBmaW4oIm1hbmdsZWQtbmFtZSIpOwotCQkJaWYgKCFmaW4pIHsKLQkJCQljZXJyIDw8ICJVbmFibGUgdG8gb3BlbiBpbnB1dCB0ZXN0ICIKLQkJCQkgICAgIDw8ICJcIm1hbmdsZWRfbmFtZVwiXG4iIDw8IGVuZGw7Ci0JCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQkJfQotCQkJZG9fdGVzdChmaW4pOwotCQl9Ci0JfQotCWNhdGNoIChiYWRfcmVnZXggY29uc3QgJiBlKSB7Ci0JCWNlcnIgPDwgImJhZF9yZWdleCAiIDw8IGUud2hhdCgpIDw8IGVuZGw7Ci0JCXJldHVybiBFWElUX0ZBSUxVUkU7Ci0JfQotCWNhdGNoIChleGNlcHRpb24gY29uc3QgJiBlKSB7Ci0JCWNlcnIgPDwgImV4Y2VwdGlvbjogIiA8PCBlLndoYXQoKSA8PCBlbmRsOwotCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwotCX0KLQotCXJldHVybiBucl9lcnJvciA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKLX0KLQpkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL01ha2VmaWxlLmFtIGIvbGlidXRpbCsrL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yzg5NGE0Li4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLVNVQkRJUlMgPSAuIHRlc3RzCi0KLUFNX0NQUEZMQUdTPSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wCi1BTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLQotbm9pbnN0X0xJQlJBUklFUyA9IGxpYnV0aWwrKy5hCi1saWJ1dGlsX19fYV9TT1VSQ0VTID0gXAotCW9wX2JmZC5jcHAgXAotCW9wX2JmZC5oIFwKLQliZmRfc3VwcG9ydC5jcHAgXAotCWJmZF9zdXBwb3J0LmggXAotCXN0cmluZ19maWx0ZXIuY3BwIFwKLQlzdHJpbmdfZmlsdGVyLmggXAotCWdsb2JfZmlsdGVyLmNwcCBcCi0JZ2xvYl9maWx0ZXIuaCBcCi0JZ3Jvd2FibGVfdmVjdG9yLmggXAotCXBhdGhfZmlsdGVyLmNwcCBcCi0JcGF0aF9maWx0ZXIuaCBcCi0JZmlsZV9tYW5pcC5jcHAgXAotCWZpbGVfbWFuaXAuaCBcCi0Jc3RyZWFtX3V0aWwuY3BwIFwKLQlzdHJlYW1fdXRpbC5oIFwKLQlzdHJpbmdfbWFuaXAuY3BwIFwKLQlzdHJpbmdfbWFuaXAuaCBcCi0JY3ZlcmIuY3BwIFwKLQljdmVyYi5oIFwKLQlnZW5lcmljX3NwZWMuaCBcCi0Jb3BfZXhjZXB0aW9uLmNwcCBcCi0Jb3BfZXhjZXB0aW9uLmggXAotCWNoaWxkX3JlYWRlci5jcHAgXAotCWNoaWxkX3JlYWRlci5oIFwKLQl1bmlxdWVfc3RvcmFnZS5oIFwKLQl1dGlsaXR5LmggXAotCWNhY2hlZF92YWx1ZS5oIFwKLQljb21tYV9saXN0LmgKZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9NYWtlZmlsZS5pbiBiL2xpYnV0aWwrKy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNmOTQwNS4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1OTcgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1TT1VSQ0VTID0gJChsaWJ1dGlsX19fYV9TT1VSQ0VTKQotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1zdWJkaXIgPSBsaWJ1dGlsKysKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUxJQlJBUklFUyA9ICQobm9pbnN0X0xJQlJBUklFUykKLUFSID0gYXIKLUFSRkxBR1MgPSBjcnUKLWxpYnV0aWxfX19hX0FSID0gJChBUikgJChBUkZMQUdTKQotbGlidXRpbF9fX2FfTElCQUREID0KLWFtX2xpYnV0aWxfX19hX09CSkVDVFMgPSBvcF9iZmQuJChPQkpFWFQpIGJmZF9zdXBwb3J0LiQoT0JKRVhUKSBcCi0Jc3RyaW5nX2ZpbHRlci4kKE9CSkVYVCkgZ2xvYl9maWx0ZXIuJChPQkpFWFQpIFwKLQlwYXRoX2ZpbHRlci4kKE9CSkVYVCkgZmlsZV9tYW5pcC4kKE9CSkVYVCkgXAotCXN0cmVhbV91dGlsLiQoT0JKRVhUKSBzdHJpbmdfbWFuaXAuJChPQkpFWFQpIGN2ZXJiLiQoT0JKRVhUKSBcCi0Jb3BfZXhjZXB0aW9uLiQoT0JKRVhUKSBjaGlsZF9yZWFkZXIuJChPQkpFWFQpCi1saWJ1dGlsX19fYV9PQkpFQ1RTID0gJChhbV9saWJ1dGlsX19fYV9PQkpFQ1RTKQotREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLUNYWENPTVBJTEUgPSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKLQkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQotQ1hYTEQgPSAkKENYWCkKLUNYWExJTksgPSAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1TT1VSQ0VTID0gJChsaWJ1dGlsX19fYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJ1dGlsX19fYV9TT1VSQ0VTKQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKLQlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKLQlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCXVuaW5zdGFsbC1yZWN1cnNpdmUKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKLUFNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKLUFNVEFSID0gQEFNVEFSQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CRkRfTElCUyA9IEBCRkRfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRFID0gQERBVEVACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVhFRVhUID0gQEVYRUVYVEAKLUVYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotS0lOQyA9IEBLSU5DQAotS1NSQyA9IEBLU1JDQAotS1ZFUlMgPSBAS1ZFUlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NT0MgPSBATU9DQAotTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAotT0JKRVhUID0gQE9CSkVYVEAKLU9QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACi1PUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKLU9QX0NGTEFHUyA9IEBPUF9DRkxBR1NACi1PUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLU9QX0RPQ0RJUiA9IEBPUF9ET0NESVJACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAotUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACi1RVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKLVFUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKLVFUX0xJQiA9IEBRVF9MSUJACi1RVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAotU1RSSVAgPSBAU1RSSVBACi1VSUMgPSBAVUlDQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAotWF9MSUJTID0gQFhfTElCU0AKLVhfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACi1hY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJUEAKLWFtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACi1hbV9fZmFzdGRlcENYWF9GQUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKLWFtX19mYXN0ZGVwQ1hYX1RSVUUgPSBAYW1fX2Zhc3RkZXBDWFhfVFJVRUAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZW5hYmxlX2FiaV9GQUxTRSA9IEBlbmFibGVfYWJpX0ZBTFNFQAotZW5hYmxlX2FiaV9UUlVFID0gQGVuYWJsZV9hYmlfVFJVRUAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaGF2ZV9xdF9GQUxTRSA9IEBoYXZlX3F0X0ZBTFNFQAotaGF2ZV9xdF9UUlVFID0gQGhhdmVfcXRfVFJVRUAKLWhhdmVfeHNsdHByb2NfRkFMU0UgPSBAaGF2ZV94c2x0cHJvY19GQUxTRUAKLWhhdmVfeHNsdHByb2NfVFJVRSA9IEBoYXZlX3hzbHRwcm9jX1RSVUVACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1rZXJuZWxfc3VwcG9ydF9GQUxTRSA9IEBrZXJuZWxfc3VwcG9ydF9GQUxTRUAKLWtlcm5lbF9zdXBwb3J0X1RSVUUgPSBAa2VybmVsX3N1cHBvcnRfVFJVRUAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRvcGRpciA9IEB0b3BkaXJACi1TVUJESVJTID0gLiB0ZXN0cwotQU1fQ1BQRkxBR1MgPSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wCi0KLUFNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotbm9pbnN0X0xJQlJBUklFUyA9IGxpYnV0aWwrKy5hCi1saWJ1dGlsX19fYV9TT1VSQ0VTID0gXAotCW9wX2JmZC5jcHAgXAotCW9wX2JmZC5oIFwKLQliZmRfc3VwcG9ydC5jcHAgXAotCWJmZF9zdXBwb3J0LmggXAotCXN0cmluZ19maWx0ZXIuY3BwIFwKLQlzdHJpbmdfZmlsdGVyLmggXAotCWdsb2JfZmlsdGVyLmNwcCBcCi0JZ2xvYl9maWx0ZXIuaCBcCi0JZ3Jvd2FibGVfdmVjdG9yLmggXAotCXBhdGhfZmlsdGVyLmNwcCBcCi0JcGF0aF9maWx0ZXIuaCBcCi0JZmlsZV9tYW5pcC5jcHAgXAotCWZpbGVfbWFuaXAuaCBcCi0Jc3RyZWFtX3V0aWwuY3BwIFwKLQlzdHJlYW1fdXRpbC5oIFwKLQlzdHJpbmdfbWFuaXAuY3BwIFwKLQlzdHJpbmdfbWFuaXAuaCBcCi0JY3ZlcmIuY3BwIFwKLQljdmVyYi5oIFwKLQlnZW5lcmljX3NwZWMuaCBcCi0Jb3BfZXhjZXB0aW9uLmNwcCBcCi0Jb3BfZXhjZXB0aW9uLmggXAotCWNoaWxkX3JlYWRlci5jcHAgXAotCWNoaWxkX3JlYWRlci5oIFwKLQl1bmlxdWVfc3RvcmFnZS5oIFwKLQl1dGlsaXR5LmggXAotCWNhY2hlZF92YWx1ZS5oIFwKLQljb21tYV9saXN0LmgKLQotYWxsOiBhbGwtcmVjdXJzaXZlCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmNwcCAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJ1dGlsKysvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYnV0aWwrKy9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotY2xlYW4tbm9pbnN0TElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCi1saWJ1dGlsKysuYTogJChsaWJ1dGlsX19fYV9PQkpFQ1RTKSAkKGxpYnV0aWxfX19hX0RFUEVOREVOQ0lFUykgCi0JLXJtIC1mIGxpYnV0aWwrKy5hCi0JJChsaWJ1dGlsX19fYV9BUikgbGlidXRpbCsrLmEgJChsaWJ1dGlsX19fYV9PQkpFQ1RTKSAkKGxpYnV0aWxfX19hX0xJQkFERCkKLQkkKFJBTkxJQikgbGlidXRpbCsrLmEKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2JmZF9zdXBwb3J0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jaGlsZF9yZWFkZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2N2ZXJiLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9maWxlX21hbmlwLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nbG9iX2ZpbHRlci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BfYmZkLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9leGNlcHRpb24uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BhdGhfZmlsdGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJlYW1fdXRpbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyaW5nX2ZpbHRlci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyaW5nX21hbmlwLlBvQGFtX19xdW90ZUAKLQotLmNwcC5vOgotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACWlmICQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jcHAub2JqOgotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACWlmICQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotdW5pbnN0YWxsLWluZm8tYW06Ci0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCi0kKFJFQ1VSU0lWRV9UQVJHRVRTKToKLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKLQkgIGNhc2UgJCRmIGluIFwKLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCi0JICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1tb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAotbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZG90X3NlZW49bm87IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCi0JICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQlyZXY9IiQkcmV2IC4iOyBcCi0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCi0JZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCi10YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCi0JZG9uZQotY3RhZ3MtcmVjdXJzaXZlOgotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCi0JZG9uZQotCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCi0KLVRBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKLQlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKLQkgICAgZGlyPSIvJCRkaXIiOyBcCi0JICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKLQkgIGVsc2UgXAotCSAgICBkaXI9Jyc7IFwKLQkgIGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi0JbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgfHwgJChta2Rpcl9wKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgKGNkICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAotCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyKSBcCi0JICAgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1yZWN1cnNpdmUKLWFsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbm9pbnN0TElCUkFSSUVTIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYwotCi1wZGY6IHBkZi1yZWN1cnNpdmUKLQotcGRmLWFtOgotCi1wczogcHMtcmVjdXJzaXZlCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCi0KLXVuaW5zdGFsbC1pbmZvOiB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIFwKLQljbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLW5vaW5zdExJQlJBUklFUyBjbGVhbi1yZWN1cnNpdmUgXAotCWN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAotCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBcCi0JZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgXAotCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcCBiL2xpYnV0aWwrKy9iZmRfc3VwcG9ydC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmODNiMWQuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1NiArMCwwIEBACi0vKioKLSAqIEBmaWxlIGJmZF9zdXBwb3J0LmNwcAotICogQkZEIG11Y2sgd2UgaGF2ZSB0byBkZWFsIHdpdGguCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNSBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlICJiZmRfc3VwcG9ydC5oIgotCi0jaW5jbHVkZSAib3BfYmZkLmgiCi0jaW5jbHVkZSAib3BfZmlsZWlvLmgiCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0jaW5jbHVkZSAiY3ZlcmIuaCIKLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGZzdHJlYW0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWV4dGVybiB2ZXJib3NlIHZiZmQ7Ci0KLW5hbWVzcGFjZSB7Ci0KLQotdm9pZCBjaGVja19mb3JtYXQoc3RyaW5nIGNvbnN0ICYgZmlsZSwgYmZkICoqIGliZmQpCi17Ci0JaWYgKCFiZmRfY2hlY2tfZm9ybWF0X21hdGNoZXMoKmliZmQsIGJmZF9vYmplY3QsIE5VTEwpKSB7Ci0JCWN2ZXJiIDw8IHZiZmQgPDwgIkJGRCBmb3JtYXQgZmFpbHVyZSBmb3IgIiA8PCBmaWxlIDw8IGVuZGw7Ci0JCWJmZF9jbG9zZSgqaWJmZCk7Ci0JCSppYmZkID0gTlVMTDsKLQl9Ci19Ci0KLQotYm9vbCBzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyhzdHJpbmcgY29uc3QgJiBuYW1lLCB1bnNpZ25lZCBsb25nIGNvbnN0IGNyYykKLXsKLQl1bnNpZ25lZCBsb25nIGZpbGVfY3JjID0gMDsKLQkvLyBUaGUgc2l6ZSBvZiAyICogMTAyNCBlbGVtZW50cyBmb3IgdGhlIGJ1ZmZlciBpcyBhcmJpdHJhcnkuCi0JY2hhciBidWZmZXJbMiAqIDEwMjRdOwotCQotCWlmc3RyZWFtIGZpbGUobmFtZS5jX3N0cigpKTsKLQlpZiAoIWZpbGUpCi0JCXJldHVybiBmYWxzZTsKLQotCWN2ZXJiIDw8IHZiZmQgPDwgImZvdW5kICIgPDwgbmFtZTsKLQl3aGlsZSAoZmlsZSkgewotCQlmaWxlLnJlYWQoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0JCWZpbGVfY3JjID0gY2FsY19jcmMzMihmaWxlX2NyYywgCi0JCQkJICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KCZidWZmZXJbMF0pLAotCQkJCSAgICAgIGZpbGUuZ2NvdW50KCkpOwotCX0KLQljdmVyYiA8PCB2YmZkIDw8ICIgd2l0aCBjcmMzMiA9ICIgPDwgaGV4IDw8IGZpbGVfY3JjIDw8IGVuZGw7Ci0JcmV0dXJuIGNyYyA9PSBmaWxlX2NyYzsKLX0KLQotCi1ib29sIGdldF9kZWJ1Z19saW5rX2luZm8oYmZkICogaWJmZCwgc3RyaW5nICYgZmlsZW5hbWUsIHVuc2lnbmVkIGxvbmcgJiBjcmMzMikKLXsKLQlhc2VjdGlvbiAqIHNlY3Q7Ci0KLQljdmVyYiA8PCB2YmZkIDw8ICJmZXRjaGluZyAuZ251X2RlYnVnbGluayBzZWN0aW9uIiA8PCBlbmRsOwotCXNlY3QgPSBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZShpYmZkLCAiLmdudV9kZWJ1Z2xpbmsiKTsKLQkKLQlpZiAoc2VjdCA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0JCi0JYmZkX3NpemVfdHlwZSBkZWJ1Z2xpbmtfc2l6ZSA9IGJmZF9zZWN0aW9uX3NpemUoaWJmZCwgc2VjdCk7ICAKLQljaGFyIGNvbnRlbnRzW2RlYnVnbGlua19zaXplXTsKLQljdmVyYiA8PCB2YmZkCi0JICAgICAgPDwgIi5nbnVfZGVidWdsaW5rIHNlY3Rpb24gaGFzIHNpemUgIiA8PCBkZWJ1Z2xpbmtfc2l6ZSA8PCBlbmRsOwotCQotCWJmZF9nZXRfc2VjdGlvbl9jb250ZW50cyhpYmZkLCBzZWN0LCAKLQkJCQkgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGNvbnRlbnRzKSwgCi0JCQkJIHN0YXRpY19jYXN0PGZpbGVfcHRyPigwKSwgZGVidWdsaW5rX3NpemUpOwotCQotCS8qIENSQyB2YWx1ZSBpcyBzdG9yZWQgYWZ0ZXIgdGhlIGZpbGVuYW1lLCBhbGlnbmVkIHVwIHRvIDQgYnl0ZXMuICovCi0Jc2l6ZV90IGZpbGVuYW1lX2xlbiA9IHN0cmxlbihjb250ZW50cyk7Ci0Jc2l6ZV90IGNyY19vZmZzZXQgPSBmaWxlbmFtZV9sZW4gKyAxOwotCWNyY19vZmZzZXQgPSAoY3JjX29mZnNldCArIDMpICYgfjM7Ci0JCi0JY3JjMzIgPSBiZmRfZ2V0XzMyKGliZmQsIAotCQkJICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8YmZkX2J5dGUgKj4oY29udGVudHMgKyBjcmNfb2Zmc2V0KSk7Ci0JZmlsZW5hbWUgPSBzdHJpbmcoY29udGVudHMsIGZpbGVuYW1lX2xlbik7Ci0JY3ZlcmIgPDwgdmJmZCA8PCAiLmdudV9kZWJ1Z2xpbmsgZmlsZW5hbWUgaXMgIiA8PCBmaWxlbmFtZSA8PCBlbmRsOwotCXJldHVybiB0cnVlOwotfQotCi0KLS8qKgotICogV2l0aCBPYmplY3RpdmUgQywgd2UnbGwgZ2V0IHN0cmluZ3MgbGlrZToKLSAqCi0gKiBfaV9HU1VuaWNvZGVTdHJpbmdfX3JhbmdlT2ZDaGFyYWN0ZXJTZXRGcm9tU2V0X29wdGlvbnNfcmFuZ2UKLSAqCi0gKiBmb3IgdGhlIHN5bWJvbCBuYW1lLCBhbmQ6Ci0gKiAtW0dTVW5pY29kZVN0cmluZyByYW5nZU9mQ2hhcmFjdGVyRnJvbVNldDpvcHRpb25zOnJhbmdlOl0KLSAqCi0gKiBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUsIHNvIHdlIGhhdmUgdG8gZG8gc29tZSBsb29zZXIgbWF0Y2hpbmcKLSAqIHRoYW4gZm9yIG90aGVyIGxhbmd1YWdlcyAodW5mb3J0dW5hdGVseSwgaXQncyBub3QgcG9zc2libGUKLSAqIHRvIGRlbWFuZ2xlIE9iamVjdGl2ZSBDIHN5bWJvbHMpLgotICovCi1ib29sIG9iamNfbWF0Y2goc3RyaW5nIGNvbnN0ICYgc3ltLCBzdHJpbmcgY29uc3QgJiBtZXRob2QpCi17Ci0JaWYgKG1ldGhvZC5sZW5ndGgoKSA8IDMpCi0JCXJldHVybiBmYWxzZTsKLQotCXN0cmluZyBtYW5nbGVkOwotCi0JaWYgKGlzX3ByZWZpeChtZXRob2QsICItWyIpKSB7Ci0JCW1hbmdsZWQgKz0gIl9pXyI7Ci0JfSBlbHNlIGlmIChpc19wcmVmaXgobWV0aG9kLCAiK1siKSkgewotCQltYW5nbGVkICs9ICJfY18iOwotCX0gZWxzZSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWV0aG9kLmJlZ2luKCkgKyAyOwotCXN0cmluZzo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gbWV0aG9kLmVuZCgpOwotCi0JYm9vbCBmb3VuZF9wYXJlbiA9IGZhbHNlOwotCi0JZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotCQlzd2l0Y2ggKCppdCkgewotCQljYXNlICcgJzoKLQkJCW1hbmdsZWQgKz0gJ18nOwotCQkJaWYgKCFmb3VuZF9wYXJlbikKLQkJCQltYW5nbGVkICs9ICdfJzsKLQkJCWJyZWFrOwotCQljYXNlICc6JzoKLQkJCW1hbmdsZWQgKz0gJ18nOwotCQkJYnJlYWs7Ci0JCWNhc2UgJyknOgotCQljYXNlICddJzoKLQkJCWJyZWFrOwotCQljYXNlICcoJzoKLQkJCWZvdW5kX3BhcmVuID0gdHJ1ZTsKLQkJCW1hbmdsZWQgKz0gJ18nOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQltYW5nbGVkICs9ICppdDsJCi0JCX0KLQl9Ci0KLQlyZXR1cm4gc3ltID09IG1hbmdsZWQ7Ci19Ci0KLQotLyoKLSAqIFdpdGggYSBiaW5hcnkgaW1hZ2Ugd2hlcmUgc29tZSBvYmplY3RzIGFyZSBtaXNzaW5nIGRlYnVnCi0gKiBpbmZvLCB3ZSBjYW4gZW5kIHVwIGF0dHJpYnV0aW5nIHRvIGEgY29tcGxldGVseSBkaWZmZXJlbnQKLSAqIGZ1bmN0aW9uICgjNDg0NjYwKTogYmZkX25lYXJlc3RfbGluZSgpIHdpbGwgaGFwcGlseSBtb3ZlIGZyb20gb25lCi0gKiBzeW1ib2wgdG8gdGhlIG5lYXJlc3Qgb25lIGl0IGNhbiBmaW5kIHdpdGggZGVidWcgaW5mb3JtYXRpb24uCi0gKiBUbyBtaXRpZ2F0ZSB0aGlzIHByb2JsZW0sIHdlIGNoZWNrIHRoYXQgdGhlIHN5bWJvbCBuYW1lCi0gKiBtYXRjaGVzIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBuYW1lLgotICoKLSAqIEhvd2V2ZXIsIHRoaXMgY2hlY2sgZmFpbHMgaW4gc29tZSBjYXNlcyBpdCBzaG91bGRuJ3Q6Ci0gKiBPYmplY3RpdmUgQywgYW5kIEMrKyBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyAoYXMgZGlzY3Vzc2VkIGluCi0gKiBHQ0MgYnVnemlsbGEgIzExNzc0KS4gU28sIHdlIGhhdmUgYSBsb29zZXIgY2hlY2sgdGhhdAotICogYWNjZXB0cyBtZXJlbHkgYSBzdWJzdHJpbmcsIHBsdXMgc29tZSBtYWdpYyBmb3IgT2JqZWN0aXZlIEMuCi0gKgotICogSWYgZXZlbiB0aGUgbG9vc2UgY2hlY2sgZmFpbHMsIHRoZW4gd2UgZ2l2ZSB1cC4KLSAqLwotYm9vbCBpc19jb3JyZWN0X2Z1bmN0aW9uKHN0cmluZyBjb25zdCAmIGZ1bmN0aW9uLCBzdHJpbmcgY29uc3QgJiBuYW1lKQotewotCWlmIChuYW1lID09IGZ1bmN0aW9uKQotCQlyZXR1cm4gdHJ1ZTsKLQotCWlmIChvYmpjX21hdGNoKG5hbWUsIGZ1bmN0aW9uKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQkvLyB3YXJuIHRoZSB1c2VyIGlmIHdlIGhhZCB0byB1c2UgdGhlIGxvb3NlIGNoZWNrCi0JaWYgKG5hbWUuZmluZChmdW5jdGlvbikgIT0gc3RyaW5nOjpucG9zKSB7Ci0JCXN0YXRpYyBib29sIHdhcm5lZCA9IGZhbHNlOwotCQlpZiAoIXdhcm5lZCkgewotCQkJY2VyciA8PCAid2FybmluZzogc29tZSBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aG91dCAiCi0JCQkgICAgIDw8ICJkZWJ1ZyBpbmZvcm1hdGlvbiBtYXkgaGF2ZSBpbmNvcnJlY3Qgc291cmNlICIKLQkJCSAgICAgPDwgImxpbmUgYXR0cmlidXRpb25zIiA8PCBlbmRsOwotCQkJCXdhcm5lZCA9IHRydWU7Ci0JCX0KLQkJY3ZlcmIgPDwgdmJmZCA8PCAiaXNfY29ycmVjdF9mdW5jdGlvbigiIDw8IGZ1bmN0aW9uIDw8ICIsICIKLQkJICAgICAgPDwgbmFtZSA8PCAiKSBmdXp6eSBtYXRjaC4iIDw8IGVuZGw7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotCi0vKgotICogYmludXRpbHMgMi4xMiBhbmQgYmVsb3cgaGF2ZSBhIHNtYWxsIGJ1ZyB3aGVyZSBmdW5jdGlvbnMgd2l0aG91dCBhCi0gKiBkZWJ1ZyBlbnRyeSBhdCB0aGUgcHJvbG9ndWUgc3RhcnQgZG8gbm90IGdpdmUgYSB1c2VmdWwgbGluZSBudW1iZXIKLSAqIGZyb20gYmZkX2ZpbmRfbmVhcmVzdF9saW5lKCkuIFRoaXMgY2FuIGhhcHBlbiB3aXRoIGNlcnRhaW4gZ2NjCi0gKiB2ZXJzaW9ucyBzdWNoIGFzIDIuOTUuCi0gKgotICogV2Ugd29yayBhcm91bmQgdGhpcyBwcm9ibGVtIGJ5IHNjYW5uaW5nIGZvcndhcmQgZm9yIGEgdm1hIHdpdGggdmFsaWQKLSAqIGxpbmVuciBpbmZvLCBpZiB3ZSBjYW4ndCBnZXQgYSB2YWxpZCBsaW5lIG51bWJlci4gIFByb2JsZW0gdW5jb3ZlcmVkCi0gKiBieSBOb3JiZXJ0IEthdWZtYW5uLiBUaGUgd29yay1hcm91bmQgZGVjcmVhc2VzLCBvbiB0aGUgdGluY2FzCi0gKiBhcHBsaWNhdGlvbiwgdGhlIG51bWJlciBvZiBmYWlsdXJlIHRvIHJldHJpZXZlIGxpbmVuciBpbmZvIGZyb20gODM1Ci0gKiB0byAxNzMuIE1vc3Qgb2YgdGhlIHJlbWFpbmluZyBhcmUgYysrIGlubGluZSBmdW5jdGlvbnMgbWFpbmx5IGZyb20KLSAqIHRoZSBTVEwgbGlicmFyeS4gRml4ICM1Mjk2MjIKLSAqLwotdm9pZCBmaXh1cF9saW5lbnIoYmZkICogYWJmZCwgYXNlY3Rpb24gKiBzZWN0aW9uLCBhc3ltYm9sICoqIHN5bXMsCi0JCSAgc3RyaW5nIGNvbnN0ICYgbmFtZSwgYmZkX3ZtYSBwYywKLSAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiogZmlsZW5hbWUsIHVuc2lnbmVkIGludCAqIGxpbmUpCi17Ci0JY2hhciBjb25zdCAqIGNmaWxlbmFtZTsKLQljaGFyIGNvbnN0ICogZnVuY3Rpb247Ci0JdW5zaWduZWQgaW50IGxpbmVucjsKLQotCS8vIEZJWE1FOiBsb29raW5nIGF0IGRlYnVnIGluZm8gZm9yIGFsbCBnY2MgdmVyc2lvbiBzaG93cyB0aGFuCi0JLy8gdGhlIHNhbWUgcHJvYmxlbXMgY2FuIC1wZXJoYXBzLSBvY2N1ciBmb3IgZXBpbG9nIGNvZGU6IGZpbmQgYQotCS8vIHNhbXBsZXMgZmlsZXMgd2l0aCBzYW1wbGVzIGluIGVwaWxvZyBhbmQgdHJ5IG9wcmVwb3J0IC1sIC1nCi0JLy8gb24gaXQsIGNoZWNrIGl0IGFsc28gd2l0aCBvcGFubm90YXRlLgotCi0JLy8gZmlyc3QgcmVzdHJpY3QgdGhlIHNlYXJjaCBvbiBhIHNlbnNpYmxlIHJhbmdlIG9mIHZtYSwgMTYgaXMKLQkvLyBhbiBpbnR1aXRpdmUgdmFsdWUgYmFzZWQgb24gZXBpbG9nIGNvZGUgbG9vawotCXNpemVfdCBtYXhfc2VhcmNoID0gMTY7Ci0Jc2l6ZV90IHNlY3Rpb25fc2l6ZSA9IGJmZF9zZWN0aW9uX3NpemUoYWJmZCwgc2VjdGlvbik7Ci0JaWYgKHBjICsgbWF4X3NlYXJjaCA+IHNlY3Rpb25fc2l6ZSkKLQkJbWF4X3NlYXJjaCA9IHNlY3Rpb25fc2l6ZSAtIHBjOwotCi0JZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtYXhfc2VhcmNoOyArK2kpIHsKLQkJYm9vbCByZXQgPSBiZmRfZmluZF9uZWFyZXN0X2xpbmUoYWJmZCwgc2VjdGlvbiwgc3ltcywgcGMgKyBpLAotCQkJCQkJICZjZmlsZW5hbWUsICZmdW5jdGlvbiwKLQkJCQkJCSAmbGluZW5yKTsKLQotCQlpZiAocmV0ICYmIGNmaWxlbmFtZSAmJiBmdW5jdGlvbiAmJiBsaW5lbnIgIT0gMAotCQkgICAgJiYgaXNfY29ycmVjdF9mdW5jdGlvbihmdW5jdGlvbiwgbmFtZSkpIHsKLQkJCSpmaWxlbmFtZSA9IGNmaWxlbmFtZTsKLQkJCSpsaW5lID0gbGluZW5yOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQotCi0KLX0gLy8gbmFtZXNwYWNlIGFub24KLQotCi1iZmQgKiBvcGVuX2JmZChzdHJpbmcgY29uc3QgJiBmaWxlKQotewotCS8qIGJmZCBrZWVwcyBpdHMgb3duIHJlZmVyZW5jZSB0byB0aGUgZmlsZW5hbWUgY2hhciAqLAotCSAqIHNvIGl0IG11c3QgaGF2ZSBhIGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoZSBpYmZkICovCi0JYmZkICogaWJmZCA9IGJmZF9vcGVucihmaWxlLmNfc3RyKCksIE5VTEwpOwotCWlmICghaWJmZCkgewotCQljdmVyYiA8PCB2YmZkIDw8ICJiZmRfb3BlbnIgZmFpbGVkIGZvciAiIDw8IGZpbGUgPDwgZW5kbDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JY2hlY2tfZm9ybWF0KGZpbGUsICZpYmZkKTsKLQotCXJldHVybiBpYmZkOwotfQotCi0KLWJmZCAqIGZkb3Blbl9iZmQoc3RyaW5nIGNvbnN0ICYgZmlsZSwgaW50IGZkKQotewotCS8qIGJmZCBrZWVwcyBpdHMgb3duIHJlZmVyZW5jZSB0byB0aGUgZmlsZW5hbWUgY2hhciAqLAotCSAqIHNvIGl0IG11c3QgaGF2ZSBhIGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoZSBpYmZkICovCi0JYmZkICogaWJmZCA9IGJmZF9mZG9wZW5yKGZpbGUuY19zdHIoKSwgTlVMTCwgZmQpOwotCWlmICghaWJmZCkgewotCQljdmVyYiA8PCB2YmZkIDw8ICJiZmRfb3BlbnIgZmFpbGVkIGZvciAiIDw8IGZpbGUgPDwgZW5kbDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JY2hlY2tfZm9ybWF0KGZpbGUsICZpYmZkKTsKLQotCXJldHVybiBpYmZkOwotfQotCi0KLWJvb2wgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlKGJmZCAqIGliZmQsIHN0cmluZyBjb25zdCAmIGRpcl9pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBjb25zdCAmIGdsb2JhbF9pbiwgc3RyaW5nICYgZmlsZW5hbWUpCi17Ci0Jc3RyaW5nIGRpcihkaXJfaW4pOwotCXN0cmluZyBnbG9iYWwoZ2xvYmFsX2luKTsKLQlzdHJpbmcgYmFzZW5hbWU7Ci0JdW5zaWduZWQgbG9uZyBjcmMzMjsKLQkKLQlpZiAoIWdldF9kZWJ1Z19saW5rX2luZm8oaWJmZCwgYmFzZW5hbWUsIGNyYzMyKSkKLQkJcmV0dXJuIGZhbHNlOwotCQotCWlmIChkaXIuc2l6ZSgpID4gMCAmJiBkaXIuYXQoZGlyLnNpemUoKSAtIDEpICE9ICcvJykKLQkJZGlyICs9ICcvJzsKLQkKLQlpZiAoZ2xvYmFsLnNpemUoKSA+IDAgJiYgZ2xvYmFsLmF0KGdsb2JhbC5zaXplKCkgLSAxKSAhPSAnLycpCi0JCWdsb2JhbCArPSAnLyc7Ci0KLQljdmVyYiA8PCB2YmZkIDw8ICJsb29raW5nIGZvciBkZWJ1Z2dpbmcgZmlsZSAiIDw8IGJhc2VuYW1lIAotCSAgICAgIDw8ICIgd2l0aCBjcmMzMiA9ICIgPDwgaGV4IDw8IGNyYzMyIDw8IGVuZGw7Ci0JCi0Jc3RyaW5nIGZpcnN0X3RyeShkaXIgKyBiYXNlbmFtZSk7Ci0Jc3RyaW5nIHNlY29uZF90cnkoZGlyICsgIi5kZWJ1Zy8iICsgYmFzZW5hbWUpOwotCi0JaWYgKGRpci5zaXplKCkgPiAwICYmIGRpclswXSA9PSAnLycpCi0JCWRpciA9IGRpci5zdWJzdHIoMSk7Ci0KLQlzdHJpbmcgdGhpcmRfdHJ5KGdsb2JhbCArIGRpciArIGJhc2VuYW1lKTsKLQkKLQlpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9leGlzdHMoZmlyc3RfdHJ5LCBjcmMzMikpIAotCQlmaWxlbmFtZSA9IGZpcnN0X3RyeTsgCi0JZWxzZSBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9leGlzdHMoc2Vjb25kX3RyeSwgY3JjMzIpKQotCQlmaWxlbmFtZSA9IHNlY29uZF90cnk7Ci0JZWxzZSBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9leGlzdHModGhpcmRfdHJ5LCBjcmMzMikpCi0JCWZpbGVuYW1lID0gdGhpcmRfdHJ5OwotCWVsc2UKLQkJcmV0dXJuIGZhbHNlOwotCQotCXJldHVybiB0cnVlOwotfQotCi0KLWJvb2wgaW50ZXJlc3Rpbmdfc3ltYm9sKGFzeW1ib2wgKiBzeW0pCi17Ci0JLy8gIzcxNzcyMCBzb21lIGJpbnV0aWxzIGFyZSBtaXNjb21waWxlZCBieSBnY2MgMi45NSwgb25lIG9mIHRoZQotCS8vIHR5cGljYWwgc3ltcHRvbSBjYW4gYmUgY2F0Y2hlZCBoZXJlLgotCWlmICghc3ltLT5zZWN0aW9uKSB7Ci0JCW9zdHJpbmdzdHJlYW0gb3M7Ci0JCW9zIDw8ICJZb3VyIHZlcnNpb24gb2YgYmludXRpbHMgc2VlbXMgdG8gaGF2ZSBhIGJ1Zy5cbiIKLQkJICAgPDwgIlJlYWQgaHR0cDovL29wcm9maWxlLnNmLm5ldC9mYXEvI2JpbnV0aWxzYnVnXG4iOwotCQl0aHJvdyBvcF9ydW50aW1lX2Vycm9yKG9zLnN0cigpKTsKLQl9Ci0KLQlpZiAoIShzeW0tPnNlY3Rpb24tPmZsYWdzICYgU0VDX0NPREUpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvLyByZXR1cm5pbmcgdHJ1ZSBmb3IgZml4IHVwIGluIG9wX2JmZF9zeW1ib2woKQotCWlmICghc3ltLT5uYW1lIHx8IHN5bS0+bmFtZVswXSA9PSAnXDAnKQotCQlyZXR1cm4gdHJ1ZTsKLQotCS8vIEMrKyBleGNlcHRpb24gc3R1ZmYKLQlpZiAoc3ltLT5uYW1lWzBdID09ICcuJyAmJiBzeW0tPm5hbWVbMV0gPT0gJ0wnKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKiBUaGlzIGNhc2UgY2Fubm90IGJlIG1vdmVkIHRvIGJvcmluZ19zeW1ib2woKSwKLQkgKiBiZWNhdXNlIHRoYXQncyBvbmx5IHVzZWQgZm9yIGR1cGxpY2F0ZSBWTUFzLAotCSAqIGFuZCBzb21ldGltZXMgdGhpcyBzeW1ib2wgYXBwZWFycyBhdCBhbiBhZGRyZXNzCi0JICogZGlmZmVyZW50IGZyb20gYWxsIG90aGVyIHN5bWJvbHMuCi0JICovCi0JaWYgKCFzdHJjbXAoImdjYzJfY29tcGlsZWQuIiwgc3ltLT5uYW1lKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLQotYm9vbCBib3Jpbmdfc3ltYm9sKG9wX2JmZF9zeW1ib2wgY29uc3QgJiBmaXJzdCwgb3BfYmZkX3N5bWJvbCBjb25zdCAmIHNlY29uZCkKLXsKLQlpZiAoZmlyc3QubmFtZSgpID09ICJMZXRleHQiKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlIGlmIChzZWNvbmQubmFtZSgpID09ICJMZXRleHQiKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoZmlyc3QubmFtZSgpLnN1YnN0cigwLCAyKSA9PSAiPz8iKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlIGlmIChzZWNvbmQubmFtZSgpLnN1YnN0cigwLCAyKSA9PSAiPz8iKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoZmlyc3QuaGlkZGVuKCkgJiYgIXNlY29uZC5oaWRkZW4oKSkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZSBpZiAoIWZpcnN0LmhpZGRlbigpICYmIHNlY29uZC5oaWRkZW4oKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGZpcnN0Lm5hbWUoKVswXSA9PSAnXycgJiYgc2Vjb25kLm5hbWUoKVswXSAhPSAnXycpCi0JCXJldHVybiB0cnVlOwotCWVsc2UgaWYgKGZpcnN0Lm5hbWUoKVswXSAhPSAnXycgJiYgc2Vjb25kLm5hbWUoKVswXSA9PSAnXycpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChmaXJzdC53ZWFrKCkgJiYgIXNlY29uZC53ZWFrKCkpCi0JCXJldHVybiB0cnVlOwotCWVsc2UgaWYgKCFmaXJzdC53ZWFrKCkgJiYgc2Vjb25kLndlYWsoKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgYmZkX2luZm86Omhhc19kZWJ1Z19pbmZvKCkgY29uc3QKLXsKLQlpZiAoIXZhbGlkKCkpCi0JCXJldHVybiBmYWxzZTsKLQotCWZvciAoYXNlY3Rpb24gY29uc3QgKiBzZWN0ID0gYWJmZC0+c2VjdGlvbnM7IHNlY3Q7IHNlY3QgPSBzZWN0LT5uZXh0KSB7Ci0JCWlmIChzZWN0LT5mbGFncyAmIFNFQ19ERUJVR0dJTkcpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLQotYmZkX2luZm86On5iZmRfaW5mbygpCi17Ci0JZnJlZShzeW50aF9zeW1zKTsKLQljbG9zZSgpOwotfQotCi0KLXZvaWQgYmZkX2luZm86OmNsb3NlKCkKLXsKLQlpZiAoYWJmZCkKLQkJYmZkX2Nsb3NlKGFiZmQpOwotfQotCi0KLSNpZiBTWU5USEVTSVpFX1NZTUJPTFMKLWJvb2wgYmZkX2luZm86OmdldF9zeW50aF9zeW1ib2xzKCkKLXsKLQlleHRlcm4gY29uc3QgYmZkX3RhcmdldCBiZmRfZWxmNjRfcG93ZXJwY192ZWM7Ci0JZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgYmZkX2VsZjY0X3Bvd2VycGNsZV92ZWM7Ci0JYm9vbCBpc19lbGY2NF9wb3dlcnBjX3RhcmdldCA9IChhYmZkLT54dmVjID09ICZiZmRfZWxmNjRfcG93ZXJwY192ZWMpCi0JCXx8IChhYmZkLT54dmVjID09ICZiZmRfZWxmNjRfcG93ZXJwY2xlX3ZlYyk7Ci0KLQlpZiAoIWlzX2VsZjY0X3Bvd2VycGNfdGFyZ2V0KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQl2b2lkICogYnVmOwotCXVpbnQgdG1wOwotCWxvbmcgbnJfbWluaV9zeW1zID0gYmZkX3JlYWRfbWluaXN5bWJvbHMoYWJmZCwgMCwgJmJ1ZiwgJnRtcCk7Ci0JaWYgKG5yX21pbmlfc3ltcyA8IDEpCi0JCXJldHVybiBmYWxzZTsKLQotCWFzeW1ib2wgKiogbWluaV9zeW1zID0gKGFzeW1ib2wgKiopYnVmOwotCWJ1ZiA9IE5VTEw7Ci0KLQlsb25nIG5yX3N5bnRoX3N5bXMgPSBiZmRfZ2V0X3N5bnRoZXRpY19zeW10YWIoYWJmZCwgbnJfbWluaV9zeW1zLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pX3N5bXMsIDAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZzeW50aF9zeW1zKTsKLQotCWlmIChucl9zeW50aF9zeW1zIDwgMCkgewotCQlmcmVlKG1pbmlfc3ltcyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQljdmVyYiA8PCB2YmZkIDw8ICJtaW5pX3N5bXM6ICIgPDwgZGVjIDw8IG5yX21pbmlfc3ltcyA8PCBoZXggPDwgZW5kbDsKLQljdmVyYiA8PCB2YmZkIDw8ICJzeW50aF9zeW1zOiAiIDw8IGRlYyA8PCBucl9zeW50aF9zeW1zIDw8IGhleCA8PCBlbmRsOwotCi0JbnJfc3ltcyA9IG5yX21pbmlfc3ltcyArIG5yX3N5bnRoX3N5bXM7Ci0Jc3ltcy5yZXNldChuZXcgYXN5bWJvbCAqW25yX3N5bXMgKyAxXSk7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IChzaXplX3QpbnJfbWluaV9zeW1zOyArK2kpCi0JCXN5bXNbaV0gPSBtaW5pX3N5bXNbaV07Ci0KLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKHNpemVfdClucl9zeW50aF9zeW1zOyArK2kpCi0JCXN5bXNbbnJfbWluaV9zeW1zICsgaV0gPSBzeW50aF9zeW1zICsgaTsKLQkKLQotCWZyZWUobWluaV9zeW1zKTsKLQotCS8vIGJmZF9jYW5vbmljYWxpemVfc3ltdGFiIGRvZXMgdGhpcywgc28gc2hhbGwgd2UKLQlzeW1zW25yX3N5bXNdID0gTlVMTDsKLQotCXJldHVybiB0cnVlOwotfQotI2Vsc2UKLWJvb2wgYmZkX2luZm86OmdldF9zeW50aF9zeW1ib2xzKCkKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYgLyogU1lOVEhFU0laRV9TWU1CT0xTICovCi0KLQotdm9pZCBiZmRfaW5mbzo6Z2V0X3N5bWJvbHMoKQotewotCWlmICghYWJmZCkKLQkJcmV0dXJuOwotCi0JY3ZlcmIgPDwgdmJmZCA8PCAiYmZkX2luZm86OmdldF9zeW1ib2xzKCkgZm9yICIKLQkgICAgICA8PCBiZmRfZ2V0X2ZpbGVuYW1lKGFiZmQpIDw8IGVuZGw7Ci0KLQlpZiAoZ2V0X3N5bnRoX3N5bWJvbHMoKSkKLQkJcmV0dXJuOwotCi0JaWYgKGJmZF9nZXRfZmlsZV9mbGFncyhhYmZkKSAmIEhBU19TWU1TKQotCQlucl9zeW1zID0gYmZkX2dldF9zeW10YWJfdXBwZXJfYm91bmQoYWJmZCk7Ci0KLQljdmVyYiA8PCB2YmZkIDw8ICJiZmRfZ2V0X3N5bXRhYl91cHBlcl9ib3VuZDogIiA8PCBkZWMKLQkgICAgICA8PCBucl9zeW1zIDw8IGhleCA8PCBlbmRsOwotCi0JbnJfc3ltcyAvPSBzaXplb2YoYXN5bWJvbCAqKTsKLQotCWlmIChucl9zeW1zIDwgMSkKLQkJcmV0dXJuOwotCi0Jc3ltcy5yZXNldChuZXcgYXN5bWJvbCAqW25yX3N5bXNdKTsKLQotCW5yX3N5bXMgPSBiZmRfY2Fub25pY2FsaXplX3N5bXRhYihhYmZkLCBzeW1zLmdldCgpKTsKLQotCWN2ZXJiIDw8IHZiZmQgPDwgImJmZF9jYW5vbmljYWxpemVfc3ltdGFiOiAiIDw8IGRlYwotCSAgICAgIDw8IG5yX3N5bXMgPDwgaGV4IDw8IGVuZGw7Ci19Ci0KLQotbGluZW5yX2luZm8gY29uc3QKLWZpbmRfbmVhcmVzdF9saW5lKGJmZF9pbmZvIGNvbnN0ICYgYiwgb3BfYmZkX3N5bWJvbCBjb25zdCAmIHN5bSwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQpCi17Ci0JY2hhciBjb25zdCAqIGZ1bmN0aW9uID0gIiI7Ci0JY2hhciBjb25zdCAqIGNmaWxlbmFtZSA9ICIiOwotCXVuc2lnbmVkIGludCBsaW5lbnIgPSAwOwotCWxpbmVucl9pbmZvIGluZm87Ci0JYmZkICogYWJmZDsKLQlhc3ltYm9sICoqIHN5bXM7Ci0JYXNlY3Rpb24gKiBzZWN0aW9uOwotCWJmZF92bWEgcGM7Ci0JYm9vbCByZXQ7Ci0KLQlpZiAoIWIudmFsaWQoKSkKLQkJZ290byBmYWlsOwotCi0JLy8gdGFrZSBjYXJlIGFib3V0IGFydGlmaWNpYWwgc3ltYm9sCi0JaWYgKCFzeW0uc3ltYm9sKCkpCi0JCWdvdG8gZmFpbDsKLQotCWFiZmQgPSBiLmFiZmQ7Ci0Jc3ltcyA9IGIuc3ltcy5nZXQoKTsKLQlzZWN0aW9uID0gc3ltLnN5bWJvbCgpLT5zZWN0aW9uOwotCXBjID0gKHN5bS52YWx1ZSgpICsgb2Zmc2V0KSAtIHN5bS5maWxlcG9zKCk7Ci0KLQlpZiAoKGJmZF9nZXRfc2VjdGlvbl9mbGFncyhhYmZkLCBzZWN0aW9uKSAmIFNFQ19BTExPQykgPT0gMCkKLQkJZ290byBmYWlsOwotCi0JaWYgKHBjID49IGJmZF9zZWN0aW9uX3NpemUoYWJmZCwgc2VjdGlvbikpCi0JCWdvdG8gZmFpbDsKLQotCXJldCA9IGJmZF9maW5kX25lYXJlc3RfbGluZShhYmZkLCBzZWN0aW9uLCBzeW1zLCBwYywgJmNmaWxlbmFtZSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnVuY3Rpb24sICZsaW5lbnIpOwotCi0JaWYgKCFyZXQgfHwgIWNmaWxlbmFtZSkKLQkJZ290byBmYWlsOwotCi0JaWYgKCFpc19jb3JyZWN0X2Z1bmN0aW9uKGZ1bmN0aW9uLCBzeW0ubmFtZSgpKSkKLQkJZ290byBmYWlsOwotCi0JaWYgKGxpbmVuciA9PSAwKSB7Ci0JCWZpeHVwX2xpbmVucihhYmZkLCBzZWN0aW9uLCBzeW1zLCBzeW0ubmFtZSgpLCBwYywgJmNmaWxlbmFtZSwKLQkJICAgICAgICAgICAgICZsaW5lbnIpOwotCX0KLQotCWluZm8uZm91bmQgPSB0cnVlOwotCWluZm8uZmlsZW5hbWUgPSBjZmlsZW5hbWU7Ci0JaW5mby5saW5lID0gbGluZW5yOwotCXJldHVybiBpbmZvOwotCi1mYWlsOgotCWluZm8uZm91bmQgPSBmYWxzZTsKLQkvLyBzb21lIHN0bCBsYWNrcyBzdHJpbmc6OmNsZWFyKCkKLQlpbmZvLmZpbGVuYW1lLmVyYXNlKGluZm8uZmlsZW5hbWUuYmVnaW4oKSwgaW5mby5maWxlbmFtZS5lbmQoKSk7Ci0JaW5mby5saW5lID0gMDsKLQlyZXR1cm4gaW5mbzsKLX0KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9iZmRfc3VwcG9ydC5oIGIvbGlidXRpbCsrL2JmZF9zdXBwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiOTI2NTUuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL2JmZF9zdXBwb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBiZmRfc3VwcG9ydC5oCi0gKiBCRkQgbXVjayB3ZSBoYXZlIHRvIGRlYWwgd2l0aC4KLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDA1IE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBCRkRfU1VQUE9SVF9ICi0jZGVmaW5lIEJGRF9TVVBQT1JUX0gKLQotI2luY2x1ZGUgInV0aWxpdHkuaCIKLSNpbmNsdWRlICJvcF90eXBlcy5oIgotCi0jaW5jbHVkZSA8YmZkLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLWNsYXNzIG9wX2JmZF9zeW1ib2w7Ci0KLS8vLyBob2xkZXIgZm9yIEJGRCBzdGF0ZSB3ZSBtdXN0IGtlZXAKLXN0cnVjdCBiZmRfaW5mbyB7Ci0JYmZkX2luZm8oKSA6IGFiZmQoMCksIG5yX3N5bXMoMCksIHN5bnRoX3N5bXMoMCkge30KLQotCX5iZmRfaW5mbygpOwotCi0JLy8vIGNsb3NlIHRoZSBCRkQsIHNldHRpbmcgYWJmZCB0byBOVUxMCi0Jdm9pZCBjbG9zZSgpOwotCi0JLy8vIHJldHVybiB0cnVlIGlmIEJGRCBpcyByZWFkYWJsZQotCWJvb2wgdmFsaWQoKSBjb25zdCB7IHJldHVybiBhYmZkOyB9Ci0KLQkvLy8gcmV0dXJuIHRydWUgaWYgQkZEIGhhcyBkZWJ1ZyBpbmZvCi0JYm9vbCBoYXNfZGVidWdfaW5mbygpIGNvbnN0OwotCi0JLy8vIHBpY2sgb3V0IHRoZSBzeW1ib2xzIGZyb20gdGhlIGJmZCwgaWYgd2UgY2FuCi0Jdm9pZCBnZXRfc3ltYm9scygpOwotCi0JLy8vIHRoZSBhY3R1YWwgQkZECi0JYmZkICogYWJmZDsKLQkvLy8gbm9ybWFsIHN5bWJvbHMgKGluY2x1ZGVzIHN5bnRoZXNpemVkIHN5bWJvbHMpCi0Jc2NvcGVkX2FycmF5PGFzeW1ib2wgKj4gc3ltczsKLQkvLy8gbnIuIHN5bWJvbHMKLQlzaXplX3QgbnJfc3ltczsKLQotcHJpdmF0ZToKLQkvKioKLQkgKiBBY3F1aXJlIHRoZSBzeW50aGV0aWMgc3ltYm9scyBpZiB3ZSBuZWVkIHRvLgotCSAqLwotCWJvb2wgZ2V0X3N5bnRoX3N5bWJvbHMoKTsKLQotCS8qKgotCSAqIE9uIFBQQzY0LCBzeW50aF9zeW1zIHBvaW50cyB0byBhbiBhcnJheSBvZiBzeW50aGV0aWMgYXN5bWJvbAotCSAqIHN0cnVjdHMgcmV0dXJuZWQgZnJvbSBiZmRfZ2V0X3N5bnRoZXRpY19zeW10YWIuICBUaGUgc3ltcwotCSAqIG1lbWJlciBwb2ludHMgaW50byB0aGlzIGFycmF5LCBzbyB3ZSBoYXZlIHRvIGtlZXAgaXQgYXJvdW5kCi0JICogdW50aWwgfmJmZF9pbmZvIHRpbWUuCi0JICovCi0JYXN5bWJvbCAqIHN5bnRoX3N5bXM7Ci0KLX07Ci0KLQotLyoKLSAqIGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZSAtIHJldHVybiB0cnVlIGlmIGEgdmFsaWQgc2VwYXJhdGUgZGVidWcgZmlsZSBmb3VuZAotICogQHBhcmFtIGliZmQgYmluYXJ5IGZpbGUKLSAqIEBwYXJhbSBkaXJfaW4gZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGJpbmFyeSBmaWxlCi0gKiBAcGFyYW0gZ2xvYmFsX2luCi0gKiBAcGFyYW0gZmlsZW5hbWUgcGF0aCB0byB2YWxpZCBkZWJ1ZyBmaWxlCi0gKgotICogU2VhcmNoIG9yZGVyIGZvciBkZWJ1ZyBmaWxlIGFuZCB1c2UgZmlyc3Qgb25lIGZvdW5kOgotICogMSkgZGlyX2luIGRpcmVjdG9yeQotICogMikgZGlyX2luLy5kZWJ1ZyBkaXJlY3RvcnkKLSAqIDMpIGdsb2JhbF9pbi9kaXJfaW4gZGlyZWN0b3J5Ci0gKgotICogTmV3ZXIgYmludXRpbHMgYW5kIExpbnV4IGRpc3RyaWJ1dGlvbnMgKGUuZy4gRmVkb3JhKSBhbGxvdyB0aGUKLSAqIGNyZWF0aW9uIG9mIGRlYnVnIGZpbGVzIHRoYXQgYXJlIHNlcGFyYXRlIGZyb20gdGhlIGJpbmFyeS4gVGhlCi0gKiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgc3RyaXBwZWQgb3V0IG9mIHRoZSBiaW5hcnkgZmlsZSwgcGxhY2VkIGluCi0gKiB0aGlzIHNlcGFyYXRlIGZpbGUsIGFuZCBhIGxpbmsgdG8gdGhlIG5ldyBmaWxlIGlzIHBsYWNlZCBpbiB0aGUKLSAqIGJpbmFyeS4gVGhlIGRlYnVnIGZpbGVzIGhvbGQgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCBieSB0aGUgZGVidWdnZXIKLSAqIChhbmQgT1Byb2ZpbGUpIHRvIG1hcCBtYWNoaW5lIGluc3RydWN0aW9ucyBiYWNrIHRvIHNvdXJjZSBjb2RlLgotICovCi1leHRlcm4gYm9vbAotZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlKGJmZCAqIGliZmQsIAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0ICYgZGlyX2luLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0ICYgZ2xvYmFsX2luLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nICYgZmlsZW5hbWUpOwotCi0vLy8gb3BlbiB0aGUgZ2l2ZW4gQkZECi1iZmQgKiBvcGVuX2JmZChzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGUpOwotCi0vLy8gb3BlbiB0aGUgZ2l2ZW4gQkZEIGZyb20gdGhlIGZkCi1iZmQgKiBmZG9wZW5fYmZkKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZSwgaW50IGZkKTsKLQotLy8vIFJldHVybiB0cnVlIGlmIHRoZSBzeW1ib2wgaXMgd29ydGggbG9va2luZyBhdAotYm9vbCBpbnRlcmVzdGluZ19zeW1ib2woYXN5bWJvbCAqIHN5bSk7Ci0KLS8qKgotICogcmV0dXJuIHRydWUgaWYgdGhlIGZpcnN0IHN5bWJvbCBpcyBsZXNzIGludGVyZXN0aW5nIHRoYW4gdGhlIHNlY29uZCBzeW1ib2wKLSAqIGJvcmluZyBzeW1ib2wgYXJlIGVsaW1pbmF0ZWQgd2hlbiBtdWx0aXBsZSBzeW1ib2wgZXhpc3QgYXQgdGhlIHNhbWUgdm1hCi0gKi8KLWJvb2wgYm9yaW5nX3N5bWJvbChvcF9iZmRfc3ltYm9sIGNvbnN0ICYgZmlyc3QsIG9wX2JmZF9zeW1ib2wgY29uc3QgJiBzZWNvbmQpOwotCi0vLy8gZGVidWcgaW5mbyBmb3IgYSBnaXZlbiBwYwotc3RydWN0IGxpbmVucl9pbmZvIHsKLQkvLy8gZGlkIHdlIGZpbmQgc29tZXRoaW5nPwotCWJvb2wgZm91bmQ7Ci0JLy8vIGZpbGVuYW1lCi0Jc3RkOjpzdHJpbmcgZmlsZW5hbWU7Ci0JLy8vIGxpbmUgbnVtYmVyCi0JdW5zaWduZWQgaW50IGxpbmU7Ci19OwotCi0vKioKLSAqIEF0dGVtcHQgdG8gbG9jYXRlIGEgZmlsZW5hbWUgKyBsaW5lIG51bWJlciBmb3IgdGhlIGdpdmVuIHN5bWJvbCBhbmQKLSAqIG9mZnNldC4KLSAqLwotbGluZW5yX2luZm8gY29uc3QKLWZpbmRfbmVhcmVzdF9saW5lKGJmZF9pbmZvIGNvbnN0ICYgaWJmZCwgb3BfYmZkX3N5bWJvbCBjb25zdCAmIHN5bSwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQpOwotCi0jZW5kaWYgLyogIUJGRF9TVVBQT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9jYWNoZWRfdmFsdWUuaCBiL2xpYnV0aWwrKy9jYWNoZWRfdmFsdWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYyZTE2YS4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvY2FjaGVkX3ZhbHVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioKLSAqIEBmaWxlIGNhY2hlZF92YWx1ZS5oCi0gKiBIb2xkIGEgY2FjaGVkIHZhbHVlLgotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDUgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIENBQ0hFRF9WQUxVRV9ICi0jZGVmaW5lIENBQ0hFRF9WQUxVRV9ICi0KLSNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKLQotLyoqCi0gKiBIb2xkIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5pbmcgYSBjYWNoZWQgdmFsdWUgaWYgdGhlcmUgaXMgb25lLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIGNhY2hlZF92YWx1ZQotewotcHVibGljOgotCWNhY2hlZF92YWx1ZSgpIDogc2V0KGZhbHNlKSB7fQotCi0JdHlwZWRlZiBUIHZhbHVlX3R5cGU7Ci0KLQkvLy8gcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUKLQl2YWx1ZV90eXBlIGNvbnN0IGdldCgpIGNvbnN0IHsKLQkJaWYgKCFzZXQpCi0JCQl0aHJvdyBvcF9mYXRhbF9lcnJvcigiY2FjaGVkIHZhbHVlIG5vdCBzZXQiKTsKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8vLyByZXR1cm4gdHJ1ZSBpZiBhIHZhbHVlIGlzIGNhY2hlZAotCWJvb2wgY2FjaGVkKCkgY29uc3QgeyByZXR1cm4gc2V0OyB9Ci0KLQkvLy8gc2V0IHRoZSBjb250YWluZWQgdmFsdWUKLQl2YWx1ZV90eXBlIGNvbnN0IHJlc2V0KHZhbHVlX3R5cGUgY29uc3QgJiB2YWwpIHsKLQkJdmFsdWUgPSB2YWw7Ci0JCXNldCA9IHRydWU7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLXByaXZhdGU6Ci0JLy8vIHRoZSBjYWNoZWQgdmFsdWUKLQl2YWx1ZV90eXBlIHZhbHVlOwotCS8vLyBpcyB0aGUgdmFsdWUgdmFsaWQ/Ci0JYm9vbCBzZXQ7Ci19OwotCi0KLSNlbmRpZiAvKiAhQ0FDSEVEX1ZBTFVFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9jaGlsZF9yZWFkZXIuY3BwIGIvbGlidXRpbCsrL2NoaWxkX3JlYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMWVhNzAuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL2NoaWxkX3JlYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjaGlsZF9yZWFkZXIuY3BwCi0gKiBGYWNpbGl0eSBmb3IgcmVhZGluZyBmcm9tIGNoaWxkIHByb2Nlc3NlcwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotCi0jaW5jbHVkZSA8Y2Vycm5vPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLSNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKLSNpbmNsdWRlICJjaGlsZF9yZWFkZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotY2hpbGRfcmVhZGVyOjpjaGlsZF9yZWFkZXIoc3RyaW5nIGNvbnN0ICYgY21kLCB2ZWN0b3I8c3RyaW5nPiBjb25zdCAmIGFyZ3MpCi0JOgotCWZkMSgtMSksIGZkMigtMSksCi0JcG9zMSgwKSwgZW5kMSgwKSwKLQlwb3MyKDApLCBlbmQyKDApLAotCXBpZCgwKSwKLQlmaXJzdF9lcnJvcigwKSwKLQlidWYyKDApLCBzel9idWYyKDApLAotCWJ1ZjEobmV3IGNoYXJbUElQRV9CVUZdKSwKLQlwcm9jZXNzX25hbWUoY21kKSwKLQlpc190ZXJtaW5hdGVkKHRydWUpLAotCXRlcm1pbmF0ZV9vbl9leGNlcHRpb24oZmFsc2UpLAotCWZvcmtlZChmYWxzZSkKLXsKLQlleGVjX2NvbW1hbmQoY21kLCBhcmdzKTsKLX0KLQotCi1jaGlsZF9yZWFkZXI6On5jaGlsZF9yZWFkZXIoKQotewotCXRlcm1pbmF0ZV9wcm9jZXNzKCk7Ci0JZGVsZXRlIFtdIGJ1ZjE7Ci0JaWYgKGJ1ZjIpIHsKLQkJLy8gYWxsb2NhdGVkIHRocm91Z2ggQyBhbGxvYwotCQlmcmVlKGJ1ZjIpOwotCX0KLX0KLQotCi12b2lkIGNoaWxkX3JlYWRlcjo6ZXhlY19jb21tYW5kKHN0cmluZyBjb25zdCAmIGNtZCwgdmVjdG9yPHN0cmluZz4gY29uc3QgJiBhcmdzKQotewotCWludCBwc3Rkb3V0WzJdOwotCWludCBwc3RkZXJyWzJdOwotCi0JaWYgKHBpcGUocHN0ZG91dCkgPT0gLTEgfHwgcGlwZShwc3RkZXJyKSA9PSAtMSkgewotCQlmaXJzdF9lcnJvciA9IGVycm5vOwotCQlyZXR1cm47Ci0JfQotCi0JcGlkID0gZm9yaygpOwotCXN3aXRjaCAocGlkKSB7Ci0JCWNhc2UgLTE6Ci0JCQlmaXJzdF9lcnJvciA9IGVycm5vOwotCQkJcmV0dXJuOwotCi0JCWNhc2UgMDogewotCQkJY2hhciBjb25zdCAqKiBhcmd2ID0gbmV3IGNoYXIgY29uc3QgKlthcmdzLnNpemUoKSArIDJdOwotCQkJc2l6ZV90IGk7Ci0JCQlhcmd2WzBdID0gY21kLmNfc3RyKCk7Ci0KLQkJCWZvciAoaSA9IDEgOyBpIDw9IGFyZ3Muc2l6ZSgpIDsgKytpKQotCQkJCWFyZ3ZbaV0gPSBhcmdzW2kgLSAxXS5jX3N0cigpOwotCi0JCQlhcmd2W2ldID0gMDsKLQotCQkJLy8gY2hpbGQ6IHdlIGNhbiBjbGVhbnVwIGEgZmV3IGZkCi0JCQljbG9zZShwc3Rkb3V0WzBdKTsKLQkJCWR1cDIocHN0ZG91dFsxXSwgU1RET1VUX0ZJTEVOTyk7Ci0JCQljbG9zZShwc3Rkb3V0WzFdKTsKLQkJCWNsb3NlKHBzdGRlcnJbMF0pOwotCQkJZHVwMihwc3RkZXJyWzFdLCBTVERFUlJfRklMRU5PKTsKLQkJCWNsb3NlKHBzdGRlcnJbMV0pOwotCi0JCQlleGVjdnAoY21kLmNfc3RyKCksIChjaGFyICogY29uc3QgKilhcmd2KTsKLQotCQkJaW50IHJldF9jb2RlID0gZXJybm87Ci0KLQkJCS8vIHdlIGNhbiBjb21tdW5pY2F0ZSB3aXRoIHBhcmVudCBieSB3cml0aW5nIHRvIHN0ZGVycgotCQkJLy8gYW5kIGJ5IHJldHVybmluZyBhIG5vbiB6ZXJvIGVycm9yIGNvZGUuIFNldHRpbmcKLQkJCS8vIGZpcnN0X2Vycm9yIGluIHRoZSBjaGlsZCBpcyBhIG5vbi1zZW5zZQotCi0JCQkvLyB3ZSBhcmUgaW4gdGhlIGNoaWxkIHByb2Nlc3M6IHNvIHRoaXMgZXJyb3IgbWVzc2FnZQotCQkJLy8gaXMgcmVkaXJlY3QgdG8gdGhlIHBhcmVudCBwcm9jZXNzCi0JCQljZXJyIDw8ICJDb3VsZG4ndCBleGVjIFwiIiA8PCBjbWQgPDwgIlwiIDogIgotCQkJICAgICA8PCBzdHJlcnJvcihlcnJubykgPDwgZW5kbDsKLQkJCWV4aXQocmV0X2NvZGUpOwotCQl9Ci0KLQkJZGVmYXVsdDo7Ci0JCQkvLyBwYXJlbnQ6IHdlIGRvIG5vdCB3cml0ZSBvbiB0aGVzZSBmZC4KLQkJCWNsb3NlKHBzdGRvdXRbMV0pOwotCQkJY2xvc2UocHN0ZGVyclsxXSk7Ci0JCQlmb3JrZWQgPSB0cnVlOwotCQkJYnJlYWs7Ci0JfQotCi0JZmQxID0gcHN0ZG91dFswXTsKLQlmZDIgPSBwc3RkZXJyWzBdOwotCi0JaXNfdGVybWluYXRlZCA9IGZhbHNlOwotCi0JcmV0dXJuOwotfQotCi0KLWJvb2wgY2hpbGRfcmVhZGVyOjpibG9ja19yZWFkKCkKLXsKLQlmZF9zZXQgcmVhZF9mczsKLQotCUZEX1pFUk8oJnJlYWRfZnMpOwotCUZEX1NFVChmZDEsICZyZWFkX2ZzKTsKLQlGRF9TRVQoZmQyLCAmcmVhZF9mcyk7Ci0KLQlpZiAoc2VsZWN0KG1heChmZDEsIGZkMikgKyAxLCAmcmVhZF9mcywgMCwgMCwgMCkgPj0gMCkgewotCQlpZiAoRkRfSVNTRVQoZmQxLCAmcmVhZF9mcykpIHsKLQkJCXNzaXplX3QgdGVtcCA9IHJlYWQoZmQxLCBidWYxLCBQSVBFX0JVRik7Ci0JCQlpZiAodGVtcCA+PSAwKQotCQkJCWVuZDEgPSB0ZW1wOwotCQkJZWxzZQotCQkJCWVuZDEgPSAwOwotCQl9Ci0KLQkJaWYgKEZEX0lTU0VUKGZkMiwgJnJlYWRfZnMpKSB7Ci0JCQlpZiAoZW5kMiA+PSBzel9idWYyKSB7Ci0JCQkJc3pfYnVmMiA9IHN6X2J1ZjIgPyBzel9idWYyICogMiA6IFBJUEVfQlVGOwotCQkJCWJ1ZjIgPSAoY2hhciAqKXhyZWFsbG9jKGJ1ZjIsIHN6X2J1ZjIpOwotCQkJfQotCi0JCQlzc2l6ZV90IHRlbXAgPSByZWFkKGZkMiwgYnVmMiArIGVuZDIsIHN6X2J1ZjIgLSBlbmQyKTsKLQkJCWlmICh0ZW1wID4gMCkKLQkJCQllbmQyICs9IHRlbXA7Ci0JCX0KLQl9Ci0KLQlib29sIHJldCA9ICEoZW5kMSA9PSAwICYmIGVuZDIgPT0gMCk7Ci0KLQlpZiAoZW5kMSA9PSAtMSkKLQkJZW5kMSA9IDA7Ci0JaWYgKGVuZDIgPT0gLTEpCi0JCWVuZDIgPSAwOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi1ib29sIGNoaWxkX3JlYWRlcjo6Z2V0bGluZShzdHJpbmcgJiByZXN1bHQpCi17Ci0JLy8gc29tZSBzdGwgbGFja3Mgc3RyaW5nOjpjbGVhcigpCi0JcmVzdWx0LmVyYXNlKHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwotCi0JYm9vbCBvayA9IHRydWU7Ci0JYm9vbCByZXQgPSB0cnVlOwotCWJvb2wgY2FuX3N0b3AgPSBmYWxzZTsKLQlkbyB7Ci0JCWludCB0ZW1wID0gZW5kMjsKLQkJaWYgKHBvczEgPj0gZW5kMSkgewotCQkJcG9zMSA9IDA7Ci0JCQlyZXQgPSBibG9ja19yZWFkKCk7Ci0JCX0KLQotCQkvLyBmb3IgZWZmaWNpZW5jeSB0cnkgdG8gY29weSBhcyBtdWNoIGFzIHdlIGNhbiBvZiBkYXRhCi0JCXNzaXplX3QgdGVtcF9wb3MgPSBwb3MxOwotCQl3aGlsZSAodGVtcF9wb3MgPCBlbmQxICYmIG9rKSB7Ci0JCQljaGFyIGNoID0gYnVmMVt0ZW1wX3BvcysrXTsKLQkJCWlmIChjaCA9PSAnXG4nKQotCQkJCW9rID0gZmFsc2U7Ci0JCX0KLQotCQkvLyAhb2sgPT0+IGVuZGwgaGFzIGJlZW4gcmVhZCBzbyBkbyBub3QgY29weSBpdC4KLQkJcmVzdWx0LmFwcGVuZCgmYnVmMVtwb3MxXSwgKHRlbXBfcG9zIC0gcG9zMSkgLSAhb2spOwotCi0JCWlmICghb2sgfHwgIWVuZDEpCi0JCQljYW5fc3RvcCA9IHRydWU7Ci0KLQkJLy8gcmVhZGluZyB6ZXJvIGJ5dGUgZnJvbSBzdGRvdXQgZG9uJ3QgbWVhbiB0aGFuIHdlIGV4aGF1c3RlZAotCQkvLyBhbGwgc3Rkb3V0IG91dHB1dCwgd2UgbXVzdCBjb250aW51ZSB0byB0cnkgdW50aWwgcmVhZGluZwotCQkvLyBzdGRvdXQgYW5kIHN0ZGVyciByZXR1cm4gemVybyBieXRlLgotCQlpZiAob2sgJiYgdGVtcCAhPSBlbmQyKQotCQkJY2FuX3N0b3AgPSBmYWxzZTsKLQotCQlwb3MxID0gdGVtcF9wb3M7Ci0JfSB3aGlsZSAoIWNhbl9zdG9wKTsKLQotCS8vIElzIHRoaXMgY29ycmVjdCA/Ci0JcmV0dXJuIGVuZDEgIT0gMCB8fCByZXN1bHQubGVuZ3RoKCkgIT0gMDsKLX0KLQotCi1ib29sIGNoaWxkX3JlYWRlcjo6Z2V0X2RhdGEob3N0cmVhbSAmIG91dCwgb3N0cmVhbSAmIGVycikKLXsKLQlib29sIHJldCA9IHRydWU7Ci0Jd2hpbGUgKHJldCkgewotCQlyZXQgPSBibG9ja19yZWFkKCk7Ci0KLQkJb3V0LndyaXRlKGJ1ZjEsIGVuZDEpOwotCQllcnIud3JpdGUoYnVmMiwgZW5kMik7Ci0KLQkJZW5kMSA9IGVuZDIgPSAwOwotCX0KLQotCXJldHVybiBmaXJzdF9lcnJvciA9PSAwOwotfQotCi0KLWludCBjaGlsZF9yZWFkZXI6OnRlcm1pbmF0ZV9wcm9jZXNzKCkKLXsKLQkvLyBjYW4gYmUgY2FsbGVkIGV4cGxpY2l0ZWx5IG9yIGJ5IGR0b3IsCi0JLy8gd2UgbXVzdCBwcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgY2FsbAotCWlmICghaXNfdGVybWluYXRlZCkgewotCQlpbnQgcmV0OwotCQl3YWl0cGlkKHBpZCwgJnJldCwgMCk7Ci0KLQkJaXNfdGVybWluYXRlZCA9IHRydWU7Ci0KLQkJaWYgKFdJRkVYSVRFRChyZXQpKSB7Ci0JCQlmaXJzdF9lcnJvciA9IFdFWElUU1RBVFVTKHJldCkgfCBXSUZTSUdOQUxFRChyZXQpOwotCQl9IGVsc2UgaWYgKFdJRlNJR05BTEVEKHJldCkpIHsKLQkJCXRlcm1pbmF0ZV9vbl9leGNlcHRpb24gPSB0cnVlOwotCQkJZmlyc3RfZXJyb3IgPSBXVEVSTVNJRyhyZXQpOwotCQl9IGVsc2UgewotCQkJLy8gRklYTUU6IHRoaXMgc2VlbXMgaW1wb3NzaWJsZSwgd2FpdHBpZCAqbXVzdCogd2FpdAotCQkJLy8gYW5kIGVpdGhlciB0aGUgcHJvY2VzcyB0ZXJtaW5hdGUgbm9ybWFsbHkgb3IgdGhyb3VnaAotCQkJLy8gYSBzaWduYWwuCi0JCQlmaXJzdF9lcnJvciA9IC0xOwotCQl9Ci0JfQotCi0JaWYgKGZkMSAhPSAtMSkgewotCQljbG9zZShmZDEpOwotCQlmZDEgPSAtMTsKLQl9Ci0JaWYgKGZkMiAhPSAtMSkgewotCQljbG9zZShmZDIpOwotCQlmZDIgPSAtMTsKLQl9Ci0KLQlyZXR1cm4gZmlyc3RfZXJyb3I7Ci19Ci0KLQotc3RyaW5nIGNoaWxkX3JlYWRlcjo6ZXJyb3Jfc3RyKCkgY29uc3QKLXsKLQlvc3RyaW5nc3RyZWFtIGVycjsKLQlpZiAoIWZvcmtlZCkgewotCQllcnIgPDwgc3RyaW5nKCJ1bmFibGUgdG8gZm9yaywgZXJyb3I6ICIpCi0JCSAgICA8PCBzdHJlcnJvcihmaXJzdF9lcnJvcik7Ci0JfSBlbHNlIGlmIChpc190ZXJtaW5hdGVkKSB7Ci0JCWlmIChmaXJzdF9lcnJvcikgewotCQkJaWYgKHRlcm1pbmF0ZV9vbl9leGNlcHRpb24pIHsKLQkJCQllcnIgPDwgcHJvY2Vzc19uYW1lIDw8ICIgdGVybWluYXRlZCBieSBzaWduYWwgIgotCQkJCSAgICA8PCBmaXJzdF9lcnJvcjsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJyIDw8IHByb2Nlc3NfbmFtZSA8PCAiIHJldHVybiAiCi0JCQkJICAgIDw8IGZpcnN0X2Vycm9yOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIGVyci5zdHIoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9jaGlsZF9yZWFkZXIuaCBiL2xpYnV0aWwrKy9jaGlsZF9yZWFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNiZjcxYS4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvY2hpbGRfcmVhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjaGlsZF9yZWFkZXIuaAotICogRmFjaWxpdHkgZm9yIHJlYWRpbmcgZnJvbSBjaGlsZCBwcm9jZXNzZXMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIENISUxEX1JFQURFUl9ICi0jZGVmaW5lIENISUxEX1JFQURFUl9ICi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLS8qKgotICogYSBjbGFzcyB0byByZWFkIHN0ZG91dCAvIHN0ZGVyciBmcm9tIGEgY2hpbGQgcHJvY2Vzcy4KLSAqCi0gKiB0d28gaW50ZXJmYWNlcyBhcmUgcHJvdmlkZWQuIHJlYWQgbGluZSBieSBsaW5lOiBnZXRsaW5lKCkgb3IgcmVhZCBhbGwgZGF0YQotICogaW4gb25lIDogZ2V0X2RhdGEoKS4gSW4gYWxsIGNhc2UgZ2V0X2RhdGEoKSBtdXN0IGJlIGNhbGxlZCBvbmNlIHRvIGZsdXNoIHRoZQotICogc3RkZXJyIGNoaWxkIG91dHB1dAotICovCi0vKgotICogRklYTUU6IGNvZGUgcmV2aWV3IGlzIG5lZWRlZDoKLSAqICAtIGNoZWNrIHRoZSBnZXRsaW5lKCkvZ2V0X2RhdGEoKS9ibG9ja19yZWFkKCkgaW50ZXJmYWNlLgotICogIHRoZSBleHBlY3RlZCBiZWhhdmlvciBpczoKLSAqICBjYWxsZXIgY2FuIGNhbGwgZ2V0bGluZSB1bnRpbCBub3RoaW5nIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBzdGRvdXQgb2YgdGhlCi0gKiBjaGlsZC4gaW4gdGhpcyBjYXNlIGNoaWxkIHN0ZGVyciBpcyBhY3VtdWxhdGVkIGluIGJ1ZjIgYW5kIGNhbiBiZSByZWFkCi0gKiB0aHJvdWdoIGdldF9kYXRhKCkuIGdldF9kYXRhKCkgaXMgYmxvY2tpbmcgdW50aWwgdGhlIGNoaWxkIGNsb3NlIHN0ZGVyciAvCi0gKiBzdGRvdXQgKGV2ZW4gaWYgdGhlIGNoaWxkIGRpZSBieSBhIHNpZ25hbCA/KS4gVGhlIGZvbGxvd2luZyBjb3JuZXIgY2FzZSBtdXN0Ci0gKiB3b3JrIGJ1dCBJJ20gdW5zdXJlIGlmIHRoZSBjb2RlIHJlZmxlY3QgdGhpcyBiZWhhdmlvcjogdGhlIGxhc3QgbGluZSBvZiB0aGUKLSAqIGNoaWxkIHN0ZG91dCBoYXZlIG5vdCBuZWNlc3NhcmlsbHkgYSBMRiB0ZXJtaW5hdG9yLiB0aGUgY2hpbGQgY2FuIG91dHB1dCBhbnkKLSAqIHNpemUgb2YgZGF0YSBpbiBzdGRlcnIuCi0gKi8KLWNsYXNzIGNoaWxkX3JlYWRlciB7Ci1wdWJsaWM6Ci0JLyoqIGZvcmsgYSBwcm9jZXNzLiB1c2UgZXJyb3IoKSB0byBnZXQgZXJyb3IgY29kZS4gRG8gbm90IHRyeSB0bwotCSAqIHVzZSBvdGhlciBwdWJsaWMgbWVtYmVyIGludGVyZmFjZSBpZiBlcnJvcigpIHJldHVybiBub24temVybyAqLwotCWNoaWxkX3JlYWRlcihzdGQ6OnN0cmluZyBjb25zdCAmIGNtZCwKLQkJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgYXJncyk7Ci0KLQkvKiogd2FpdCBmb3IgdGhlIHRlcm1pbmF0aW9uIG9mIHRoZSBjaGlsZCBwcm9jZXNzIGlmIHRoaXMgaGF2ZSBub3QKLQkgKiBhbHJlYWR5IG9jY3VyLiBJbiB0aGlzIGNhc2UgcmV0dXJuIGNvZGUgb2YgdGhlIGNoaWxkIHByb2Nlc3MgaXMgbm90Ci0JICogYXZhaWxhYmxlLiAqLwotCX5jaGlsZF9yZWFkZXIoKTsKLQotCS8qKiBmaWxsIHJlc3VsdCBmcm9tIG9uIGxpbmUgb2Ygc3Rkb3V0IG9mIHRoZSBjaGlsZCBwcm9jZXNzLgotCSAqIG11c3QgYmUgdXNlZCBhczoKLQkgKiBjaGlsZF9yZWFkZXIgcmVhZGVyKC4uLik7Ci0JICogd2hpbGUgKHJlYWRlci5nZXRsaW5lKGxpbmUpKSAuLi4uICovCi0JYm9vbCBnZXRsaW5lKHN0ZDo6c3RyaW5nICYgcmVzdWx0KTsKLQotCS8qKiBmaWxsIG91dCAvIGVyciB3aXRoIHRoZSBzdGRvdXQgLyBzdGRlcnIgb2YgdGhlIGNoaWxkIHByb2Nlc3MuCi0JICogWW91IGNhbiBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBvbmUgb3IgbW9yZSB0aW1lIGdldGxpbmUoLi4uKS4gVGhpcwotCSAqIGNhbGwgaXMgYmxvY2tpbmcgdW50aWwgdGhlIGNoaWxkIGRpZSBhbmQgc28gb24gYWxsIHN1YnNlcXVlbnQKLQkgKiBjYWxsIHdpbGwgZmFpbCAqLwotCWJvb2wgZ2V0X2RhdGEoc3RkOjpvc3RyZWFtICYgb3V0LCBzdGQ6Om9zdHJlYW0gJiBlcnIpOwotCi0JLyoqIHJhdGhlciB0byByZWx5IG9uIGR0b3IgdG8gd2FpdCBmb3IgdGhlIHRlcm1pbmF0aW9uIG9mIHRoZSBjaGlsZCB5b3UKLQkgKiBjYW4gdXNlIHRlcm1pbmF0ZV9wcm9jZXNzKCkgdG8gZ2V0IHRoZSByZXR1cm4gY29kZSBvZiB0aGUgY2hpbGQKLQkgKiBwcm9jZXNzICovCi0JaW50IHRlcm1pbmF0ZV9wcm9jZXNzKCk7Ci0KLQkvKiogcmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIGZpcnN0IGVycm9yIGVuY291dGVyZWQKLQkgKiAhPSAwIDogc29tZXRoaW5nIGZlZWwgd3JvbmcsIHVzZSBlcnJvcl9zdHIoKSB0byBnZXQgYW4gZXJyb3IKLQkgKiBtZXNzYWdlICovCi0JaW50IGVycm9yKCkgY29uc3QgeyByZXR1cm4gZmlyc3RfZXJyb3I7IH0KLQotCS8qKgotCSAqIHJldHVybiBhbiBlcnJvciBtZXNzYWdlIGlmIGFwcHJvcHJpYXRlLCBpZiB0aGUgcHJvY2VzcyBoYXMKLQkgKiBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjJ2VkIGFuZCBpcyBub3QgdGVybWluYXRlIHRoZSBlcnJvciBtZXNzYWdlCi0JICogaXMgYWx3YXlzIGVtcHR5LiBFcnJvciBtZXNzYWdlIGlzIGFsc28gZW1wdHkgaWYgdGhlIGNoaWxkIHByb2Nlc3MKLQkgKiB0ZXJtaW5hdGUgc3VjY2Vzc2Z1bGx5LiBFbHNlIHRocmVlIHR5cGUgb2YgZXJyb3IgbWVzc2FnZSBleGlzdDoKLQkgKiAgLSAidW5hYmxlIHRvIGZvcmsiIGZvbGxvd2VkIGJ5IHN0ZXJyb3IoZXJybm8pCi0JICogIC0gInByb2Nlc3NfbmFtZSByZXR1cm4geHh4IiAgeHh4IGlzIHJldHVybiBjb2RlCi0JICogIC0gInByb2Nlc3NfbmFtZSB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCB4eHgiIHh4eCBpcyBzaWduYWwgbnVtYmVyCi0JICovCi0Jc3RkOjpzdHJpbmcgZXJyb3Jfc3RyKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0JLy8gY3RvciBoZWxwZXI6IGNyZWF0ZSB0aGUgY2hpbGQgcHJvY2Vzcy4KLQl2b2lkIGV4ZWNfY29tbWFuZChzdGQ6OnN0cmluZyBjb25zdCAmIGNtZCwKLQkJCSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgYXJncyk7Ci0JLy8gcmV0dXJuIGZhbHNlIHdoZW4gZW9mIGNvbmRpdGlvbiBpcyByZWFjaGVkIG9uIGZkMS4gZmQyIGNhbiBoYXZlCi0JLy8gYWxyZWFkeSBpbnB1dCBpbiB0aGUgcGlwZSBidWZmZXIgb3IgaW4gYnVmMi4KLQlib29sIGJsb2NrX3JlYWQoKTsKLQotCWludCBmZDE7Ci0JaW50IGZkMjsKLQlzc2l6ZV90IHBvczE7Ci0Jc3NpemVfdCBlbmQxOwotCXNzaXplX3QgcG9zMjsKLQlzc2l6ZV90IGVuZDI7Ci0JcGlkX3QgcGlkOwotCWludCBmaXJzdF9lcnJvcjsKLQkvLyBjaGlsZCBzdGRlcnIgaXMgaGFuZGxlZCBlc3BlY2lhbGx5LCB3ZSBuZWVkIHRvIHJldGFpbiBkYXRhIGV2ZW4KLQkvLyBpZiBjYWxsZXIgcmVhZCBvbmx5IHN0ZG91dCBvZiB0aGUgY2hpbGQuCi0JY2hhciAqIGJ1ZjI7Ci0Jc3NpemVfdCBzel9idWYyOwotCWNoYXIgKiBidWYxOwotCXN0ZDo6c3RyaW5nIHByb2Nlc3NfbmFtZTsKLQlib29sIGlzX3Rlcm1pbmF0ZWQ7Ci0JYm9vbCB0ZXJtaW5hdGVfb25fZXhjZXB0aW9uOwotCWJvb2wgZm9ya2VkOwotfTsKLQotI2VuZGlmIC8vIENISUxEX1JFQURFUl9ICmRpZmYgLS1naXQgYS9saWJ1dGlsKysvY29tbWFfbGlzdC5oIGIvbGlidXRpbCsrL2NvbW1hX2xpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg2OGVlMC4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvY29tbWFfbGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKgotICogQGZpbGUgY29tbWFfbGlzdC5oCi0gKiBDb250YWluZXIgaG9sZGluZyBpdGVtcyBmcm9tIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgaXRlbXMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBDT01NQV9MSVNUX0gKLSNkZWZpbmUgQ09NTUFfTElTVF9ICi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0KLS8qKgotICogaG9sZCBhIGxpc3Qgb2YgaXRlbSBvZiB0eXBlIFQsIHRyYWNraW5nIGFsc28gaWYgaXRlbSBoYXMgYmVlbiBzZXQuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgY29tbWFfbGlzdAotewotcHVibGljOgotCWNvbW1hX2xpc3QoKTsKLQotCS8qKgotCSAqIEBwYXJhbSBzdHIgIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIGl0ZW0KLQkgKgotCSAqIHNldHVwIGl0ZW1zIGFycmF5IGFjY29yZGluZyB0byBzdHIgcGFyYW1ldGVycy4gSW1wbGVtZW50IFBQOjMuMTcKLQkgKiB3L28gcmVzdHJpY3Rpb24gb24gY2hhcnNldCBhbmQgd2l0aCB0aGUgc3BlY2lhbCBzdHJpbmcgYWxsIHdoaWNoCi0JICogbWF0Y2ggYW55dGhpbmcuCi0JICovCi0Jdm9pZCBzZXQoc3RkOjpzdHJpbmcgY29uc3QgJiBzdHIpOwotCi0JLy8vIHJldHVybiB0cnVlIGlmIGEgc3BlY2lmaWMgdmFsdWUgaXMgaGVsZCBieSB0aGlzIGNvbnRhaW5lcgotCWJvb2wgaXNfc2V0KCkgY29uc3QgewotCQlyZXR1cm4gIWlzX2FsbDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdmFsdWUgIHRoZSB2YWx1ZSB0byB0ZXN0Ci0JICoKLQkgKiByZXR1cm4gdHJ1ZSBpZiB2YWx1ZSBtYXRjaCBvbmUgdGhlIHN0b3JlZCB2YWx1ZSBpbiBpdGVtcwotCSAqLwotCWJvb2wgbWF0Y2goVCBjb25zdCAmIHZhbHVlKSBjb25zdDsKLQotcHJpdmF0ZToKLQl0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLQl0eXBlZGVmIHN0ZDo6dmVjdG9yPHZhbHVlX3R5cGU+IGNvbnRhaW5lcl90eXBlOwotCXR5cGVkZWYgdHlwZW5hbWUgY29udGFpbmVyX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotCWJvb2wgaXNfYWxsOwotCWNvbnRhaW5lcl90eXBlIGl0ZW1zOwotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNvbW1hX2xpc3Q8VD46OmNvbW1hX2xpc3QoKQotCTogaXNfYWxsKHRydWUpCi17Ci19Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIGNvbW1hX2xpc3Q8VD46OnNldChzdGQ6OnN0cmluZyBjb25zdCAmIHN0cikKLXsKLQlpdGVtcy5jbGVhcigpOwotCi0JaXNfYWxsID0gZmFsc2U7Ci0KLQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVzdWx0ID0gc2VwYXJhdGVfdG9rZW4oc3RyLCAnLCcpOwotCWZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IHJlc3VsdC5zaXplKCkgOyArK2kpIHsKLQkJaWYgKHJlc3VsdFtpXSA9PSAiYWxsIikgewotCQkJaXNfYWxsID0gdHJ1ZTsKLQkJCWl0ZW1zLmNsZWFyKCk7Ci0JCQlicmVhazsKLQkJfQotCQlpdGVtcy5wdXNoX2JhY2sob3BfbGV4aWNhbF9jYXN0PFQ+KHJlc3VsdFtpXSkpOwotCX0KLX0KLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWJvb2wgY29tbWFfbGlzdDxUPjo6bWF0Y2goVCBjb25zdCAmIHZhbHVlKSBjb25zdAotewotCWlmIChpc19hbGwpCi0JCXJldHVybiB0cnVlOwotCi0JY29uc3RfaXRlcmF0b3IgY2l0ID0gaXRlbXMuYmVnaW4oKTsKLQljb25zdF9pdGVyYXRvciBjb25zdCBlbmQgPSBpdGVtcy5lbmQoKTsKLQotCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgewotCQlpZiAodmFsdWUgPT0gKmNpdCkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotCi0jZW5kaWYgLyogIUNPTU1BX0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL2N2ZXJiLmNwcCBiL2xpYnV0aWwrKy9jdmVyYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0Nzc5NGMuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL2N2ZXJiLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioKLSAqIEBmaWxlIGN2ZXJiLmNwcAotICogdmVyYm9zZSBvdXRwdXQgc3RyZWFtCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwNCAgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDxmc3RyZWFtPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJjdmVyYi5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1jdmVyYl9vYmplY3QgY3ZlcmI7Ci12ZXJib3NlIHZsZXZlbDEoImxldmVsMSIpOwotdmVyYm9zZSB2ZGVidWcoImRlYnVnIik7Ci12ZXJib3NlIHZzdGF0cygic3RhdHMiKTsKLXZlcmJvc2UgdnNmaWxlKCJzZmlsZSIpOwotCi1uYW1lc3BhY2UgewotCi0vLyBUaGUgcmlnaHQgd2F5IGlzIHRvIHVzZTogb2ZzdHJlYW0gZm91dDsgYnV0IGN2ZXJiKGZvdXQucmRidWYoKSkgcmVjZWl2ZQotLy8gYSBudWxsIHBvaW50ZXIgYW5kIHN0bCBzaGlwcGVkIHdpdGggMi45MSBzZWdmYXVsdC4KLW9mc3RyZWFtIGZvdXQoIi9kZXYvbnVsbCIpOwotb3N0cmVhbSBudWxsX3N0cmVhbShmb3V0LnJkYnVmKCkpOwotCi0vLyBVc2VkIHRvIHNldHVwIHRoZSBiYWQgYml0IGluIG91ciBudWxsIHN0cmVhbSBzbyBvdXRwdXQgd2lsbCBmYWlsIGVhcmxpZXIKLS8vIGFuZCBvdmVyaGVhZCB3aWxsIGJlIHNtYWxsZXIuCi1zdHJ1Y3Qgc2V0dXBfc3RyZWFtIHsKLQlzZXR1cF9zdHJlYW0oKTsKLX07Ci0KLXNldHVwX3N0cmVhbTo6c2V0dXBfc3RyZWFtKCkKLXsKLQludWxsX3N0cmVhbS5jbGVhcihpb3M6OmJhZGJpdCk7Ci19Ci0KLXNldHVwX3N0cmVhbSBzZXR1cDsKLQotLy8gV2UgdXNlIGEgbXVsdGltYXAgYmVjYXVzZSB1c2VyIGNhbiBjcmVhdGUgbXVsdGlwbGUgdmVyYm9zZSBvYmplY3Qgd2l0aAotLy8gdGhlIHNhbWUgbmFtZSwgdGhlc2UgYXJlIHN5bm9ueW1vdXMsIHNldHRpbmcgdXAgb25lIHRvIHRydWUgd2lsbCBzZXR1cAotLy8gYWxsIHdpdGggdGhlIHNhbWUgbmFtZSB0byB0cnVlLgotdHlwZWRlZiBtdWx0aW1hcDxzdHJpbmcsIHZlcmJvc2UgKj4gcmVjb3JkZXJfdDsKLS8vIFRoZSByZWNvcmRlciBpcyBsYXppbGx5IGNyZWF0ZWQgYnkgdmVyYm9zZSBvYmplY3QgY3Rvcgotc3RhdGljIHJlY29yZGVyX3QgKiBvYmplY3RfbWFwOwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotCi12ZXJib3NlOjp2ZXJib3NlKGNoYXIgY29uc3QgKiBuYW1lKQotCToKLQlzZXQoZmFsc2UpCi17Ci0JLy8gYWxsIHBhcmFtcyBpcyB0cmVhdGVkIGEgcGFydCwgdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYQotCS8vIHZlcmJvc2UgYWxsKCJhbGwiKTsgaXQncyBtZWFuaW5nbGVzcy4gImFsbCIgdmVyYm9zZSBuYW1lZCBvYmplY3QgaXMKLQkvLyByZXNlcnZlZC4KLQlpZiAoc3RyY21wKG5hbWUsICJhbGwiKSA9PSAwKQotCQlyZXR1cm47Ci0JaWYgKCFvYmplY3RfbWFwKQotCQlvYmplY3RfbWFwID0gbmV3IHJlY29yZGVyX3Q7Ci0Jb2JqZWN0X21hcC0+aW5zZXJ0KHJlY29yZGVyX3Q6OnZhbHVlX3R5cGUobmFtZSwgdGhpcykpOwotfQotCi0KLXZlcmJvc2UgdmVyYm9zZTo6b3BlcmF0b3J8KHZlcmJvc2UgY29uc3QgJiByaHMpCi17Ci0JdmVyYm9zZSByZXN1bHQoKnRoaXMpOwotCXJlc3VsdC5zZXQgPSByZXN1bHQuc2V0IHx8IHJocy5zZXQ7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotCi12ZXJib3NlIHZlcmJvc2U6Om9wZXJhdG9yJih2ZXJib3NlIGNvbnN0ICYgcmhzKQotewotCXZlcmJvc2UgcmVzdWx0KCp0aGlzKTsKLQlyZXN1bHQuc2V0ID0gcmVzdWx0LnNldCAmJiByaHMuc2V0OwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLQotYm9vbCB2ZXJib3NlOjpzZXR1cChzdHJpbmcgY29uc3QgJiBuYW1lKQotewotCWlmIChuYW1lID09ICJhbGwiKSB7Ci0JCW51bGxfc3RyZWFtLnJkYnVmKGNvdXQucmRidWYoKSk7Ci0JCW51bGxfc3RyZWFtLmNsZWFyKCk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlpZiAoIW9iamVjdF9tYXApCi0JCW9iamVjdF9tYXAgPSBuZXcgcmVjb3JkZXJfdDsKLQlwYWlyPHJlY29yZGVyX3Q6Oml0ZXJhdG9yLCByZWNvcmRlcl90OjppdGVyYXRvcj4gcF9pdCA9Ci0JCW9iamVjdF9tYXAtPmVxdWFsX3JhbmdlKG5hbWUpOwotCWlmIChwX2l0LmZpcnN0ID09IHBfaXQuc2Vjb25kKQotCQlyZXR1cm4gZmFsc2U7Ci0JZm9yICg7IHBfaXQuZmlyc3QgIT0gcF9pdC5zZWNvbmQ7ICsrcF9pdC5maXJzdCkKLQkJcF9pdC5maXJzdC0+c2Vjb25kLT5zZXQgPSB0cnVlOwotCXJldHVybiB0cnVlOwotfQotCi0KLWJvb2wgdmVyYm9zZTo6c2V0dXAodmVjdG9yPHN0cmluZz4gY29uc3QgJiBuYW1lcykKLXsKLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbWVzLnNpemUoKTsgKytpKQotCQlpZiAoIXNldHVwKG5hbWVzW2ldKSkKLQkJCXJldHVybiBmYWxzZTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotCi1vc3RyZWFtJiBvcGVyYXRvcjw8KGN2ZXJiX29iamVjdCAmLCB2ZXJib3NlIGNvbnN0ICYgdikKLXsKLQlyZXR1cm4gdi5zZXQgPyBjb3V0IDogbnVsbF9zdHJlYW07Ci19CmRpZmYgLS1naXQgYS9saWJ1dGlsKysvY3ZlcmIuaCBiL2xpYnV0aWwrKy9jdmVyYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTcxZGMzLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy9jdmVyYi5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjdmVyYi5oCi0gKiB2ZXJib3NlIG91dHB1dCBzdHJlYW0KLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLCAyMDA0IE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIENWRVJCX0gKLSNkZWZpbmUgQ1ZFUkJfSAotCi0jaW5jbHVkZSA8aW9zZndkPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLXN0cnVjdCBjdmVyYl9vYmplY3QgeyB9OwotCi0vKioKLSAqIHZlcmJvc2Ugb2JqZWN0LCBhbGwgb3V0cHV0IHRocm91Z2ggdGhpcyBzdHJlYW0gYXJlIG1hZGUgb25seQotICogaWYgYSB2ZXJib3NlIG9iamVjdCB3aXRoIGEgdHJ1ZSBzdGF0ZSBpcyBpbmplY3RlZCBpbiB0aGUgc3RyZWFtLgotICovCi1leHRlcm4gY3ZlcmJfb2JqZWN0IGN2ZXJiOwotCi0vKioKLSAqIHR5cGljYWwgdXNlOgotICogZGVjbGFyZSBzb21lIHZlcmJvc2UgZ2xvYmFsIG9iamVjdDoKLSAqIHZlcmJvc2UgZGVidWcoImRlYnVnIik7Ci0gKiB2ZXJib3NlIHN0YXRzKCJzdGF0cyIpOwotICogdmVyYm9zZSBsZXZlbDIoImxldmVsMiIpOwotICoKLSAqIHNldHVwIGZyb20gY29tbWFuZCBsaW5lIHRoZSBzdGF0ZSBvZiB0aGVzZSBvYmplY3RzCi0gKgotICogdmVyYm9zZTo6c2V0dXAoY29tbWFuZF9saW5lX2FyZ3NfdG8nLS12ZXJib3NlPScpOwotICoKLSAqIGN2ZXJiIDw8IHN0YXRzIDw8ICJzdGF0c1xuIjsKLSAqIGN2ZXJiIDw8IChzdGF0cyZsZXZlbDIpIDw8ICJ2ZXJ5IHZlcmJvc2Ugc3RhdHNcbiIKLSAqIGN2ZXJiIDw8IChzdGF0c3xkZWJ1ZykgPDwgImJhclxuIjsKLSAqIHRoZXNlIHdpbGwgZ2l2ZSBhIGNvbXBpbGUgdGltZSBlcnJvcgotICogY3ZlcmIgPDwgc3RhdHMgPDwgImZvbyIgPDwgZGVidWcgPDwgImJhciI7IAotICogY291dCA8PCBzdGF0cyA8PCAiZm9vIjsKLSAqCi0gKiBJbiBjcml0aWNhbCBjb2RlIHBhdGggY3ZlcmIgY2FuIGJlIHVzZWQgaW4gdGhlIG1vcmUgZWZmaWNpZW50IHdheToKLSAqIGlmIChjdmVyYiA8PCB2ZGVidWcpCi0gKiAgICBjdmVyYiA8PCB2ZGVidWcgPDwgImZvbyIgPDwgImJhciI7Ci0gKiB0aGUgY29uZGl0aW9uIHRlc3QgdGhlIGZhaWxzIGJpdCBmb3IgdGhlIHJldHVybmVkIHN0cmVhbSB3aGlsZSB0aGUgbGF0ZXIKLSAqIGJ1aWxkIGEgc2VudHJ5IG9iamVjdCBmb3IgZWFjaCA8PCAobW9yZSBlZmZpY2llbnQgZXZlbiB3aXRoIG9uZSBsZXZlbCBvZiA8PCkKLSAqLwotY2xhc3MgdmVyYm9zZSB7Ci0JLy8vIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZWl0aGVyIGEgbnVsbCBzdHJlYW0gb3IgY291dC4KLQlmcmllbmQgc3RkOjpvc3RyZWFtICYgb3BlcmF0b3I8PChjdmVyYl9vYmplY3QgJiwgdmVyYm9zZSBjb25zdCAmKTsKLXB1YmxpYzoKLQkvKioKLQkgKiBjcmVhdGUgYSB2ZXJib3NlIG9iamVjdCBuYW1lZCBuYW1lLCB0aGUgY3RvciBhdXRvLXJlZ2lzdGVyIG5hbWUKLQkgKiBhcyBhIHZlcmJvc2Ugb2JqZWN0LCB0aGUgc2V0IHN0YXRlIGNhbiBiZSBpbnRpYWxpemVkIHRocm91Z2gKLQkgKiB2ZXJib3NlOjpzZXR1cChuYW1lKQotCSAqLwotCXZlcmJvc2UoY2hhciBjb25zdCAqIG5hbWUpOwotCi0JdmVyYm9zZSBvcGVyYXRvcnwodmVyYm9zZSBjb25zdCAmKTsKLQl2ZXJib3NlIG9wZXJhdG9yJih2ZXJib3NlIGNvbnN0ICYpOwotCi0JLy8vIFJldHVybiBmYWxzZSBpZiB0aGlzIG5hbWVkIHZlcmJvc2Ugb2JqZWN0IGhhcyBub3QgYmUgcmVnaXN0cmVkLgotCXN0YXRpYyBib29sIHNldHVwKHN0ZDo6c3RyaW5nIGNvbnN0ICYpOwotCS8vLyBjb252ZW5pZW50IGludGVyZmFjZSBjYWxsaW5nIHRoZSBhYm92ZSBmb3Igc3RyaW5nIGluIGFyZ3MKLQlzdGF0aWMgYm9vbCBzZXR1cChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBhcmdzKTsKLXByaXZhdGU6Ci0JYm9vbCBzZXQ7Ci19OwotCi0vKioKLSAqIHByZWRlZmluZWQgZ2VuZXJhbCBwdXJwb3NlIHZlcmJvc2Ugb2JqZWN0LCBjb21tZW50IGdpdmUgdGhlaXIgbmFtZXMKLSAqLwotZXh0ZXJuIHZlcmJvc2UgdmxldmVsMTsgLyoqPCBuYW1lZCAibGV2ZWwxIiAqLwotZXh0ZXJuIHZlcmJvc2UgdmRlYnVnOyAgLyoqPCBuYW1lZCAiZGVidWciICAqLwotZXh0ZXJuIHZlcmJvc2UgdnN0YXRzOyAgLyoqPCBuYW1lZCAic3RhdHMiICAqLwotLy8gYWxsIHNhbXBsZSBmaWxlbmFtZSBtYW5pcHVsYXRpb24uCi1leHRlcm4gdmVyYm9zZSB2c2ZpbGU7ICAvKio8IG5hbWVkICJzZmlsZSIgKi8KLQotI2VuZGlmIC8qICFDVkVSQl9IICovCmRpZmYgLS1naXQgYS9saWJ1dGlsKysvZmlsZV9tYW5pcC5jcHAgYi9saWJ1dGlsKysvZmlsZV9tYW5pcC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMzVhY2QuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qKgotICogQGZpbGUgZmlsZV9tYW5pcC5jcHAKLSAqIFVzZWZ1bCBmaWxlIG1hbmFnZW1lbnQgaGVscGVycwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGRpcmVudC5oPgotI2luY2x1ZGUgPGZubWF0Y2guaD4KLQotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxjZXJybm8+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAib3BfZmlsZS5oIgotCi0jaW5jbHVkZSAiZmlsZV9tYW5pcC5oIgotI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0KLWJvb2wgY29weV9maWxlKHN0cmluZyBjb25zdCAmIHNvdXJjZSwgc3RyaW5nIGNvbnN0ICYgZGVzdGluYXRpb24pCi17Ci0Jc3RydWN0IHN0YXQgYnVmOwotCWludCBzdGF0dXMgPSBzdGF0KHNvdXJjZS5jX3N0cigpLCAmYnVmKTsKLQotCWlmIChzdGF0dXMgPT0gMCkgewotCQkvKiBGSVhNRTogVGhpcyBjb2RlIHNob3VsZCBhdm9pZCB1c2luZyBzeXN0ZW0oKSBpZiBwb3NzaWJsZS4gKi8KLQkJc3RyaW5nIGNvcHlfY29tbWFuZCgiY3AgLWEgLWYgIiArIHNvdXJjZSArICIgIiArIGRlc3RpbmF0aW9uKTsKLQkJc3RhdHVzID0gc3lzdGVtKGNvcHlfY29tbWFuZC5jX3N0cigpKTsKLQl9Ci0JcmV0dXJuICFzdGF0dXM7Ci19Ci0KLQotYm9vbCBpc19kaXJlY3Rvcnkoc3RyaW5nIGNvbnN0ICYgZGlybmFtZSkKLXsKLQlzdHJ1Y3Qgc3RhdCBzdDsKLQlyZXR1cm4gIXN0YXQoZGlybmFtZS5jX3N0cigpLCAmc3QpICYmIFNfSVNESVIoc3Quc3RfbW9kZSk7Ci19Ci0KLQotYm9vbCBpc19maWxlc19pZGVudGljYWwoc3RyaW5nIGNvbnN0ICYgZmlsZTEsIHN0cmluZyBjb25zdCAmIGZpbGUyKQotewotCXN0cnVjdCBzdGF0IHN0MTsKLQlzdHJ1Y3Qgc3RhdCBzdDI7Ci0KLQlpZiAoc3RhdChmaWxlMS5jX3N0cigpLCAmc3QxKSA9PSAwICYmIHN0YXQoZmlsZTIuY19zdHIoKSwgJnN0MikgPT0gMCkgewotCQlpZiAoc3QxLnN0X2RldiA9PSBzdDIuc3RfZGV2ICYmIHN0MS5zdF9pbm8gPT0gc3QyLnN0X2lubykKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotCi1zdHJpbmcgY29uc3Qgb3BfcmVhbHBhdGgoc3RyaW5nIGNvbnN0ICYgbmFtZSkKLXsKLQlzdGF0aWMgY2hhciB0bXBbUEFUSF9NQVhdOwotCWlmICghcmVhbHBhdGgobmFtZS5jX3N0cigpLCB0bXApKQotCQlyZXR1cm4gbmFtZTsKLQlyZXR1cm4gc3RyaW5nKHRtcCk7Ci19Ci0KLQotYm9vbCBvcF9maWxlX3JlYWRhYmxlKHN0cmluZyBjb25zdCAmIGZpbGUpCi17Ci0JcmV0dXJuIG9wX2ZpbGVfcmVhZGFibGUoZmlsZS5jX3N0cigpKTsKLX0KLQotaW5saW5lIHN0YXRpYyBib29sIGlzX2RpcmVjdG9yeV9uYW1lKGNoYXIgY29uc3QgKiBuYW1lKQotewotCXJldHVybiBuYW1lWzBdID09ICcuJyAmJgotCQkobmFtZVsxXSA9PSAnXDAnIHx8Ci0JCSAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSk7Ci19Ci0KLQotYm9vbCBjcmVhdGVfZmlsZV9saXN0KGxpc3Q8c3RyaW5nPiAmIGZpbGVfbGlzdCwgc3RyaW5nIGNvbnN0ICYgYmFzZV9kaXIsCi0JCSAgICAgIHN0cmluZyBjb25zdCAmIGZpbHRlciwgYm9vbCByZWN1cnNpdmUpCi17Ci0JRElSICogZGlyOwotCXN0cnVjdCBkaXJlbnQgKiBlbnQ7Ci0KLQlpZiAoIShkaXIgPSBvcGVuZGlyKGJhc2VfZGlyLmNfc3RyKCkpKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0Jd2hpbGUgKChlbnQgPSByZWFkZGlyKGRpcikpICE9IDApIHsKLQkJaWYgKCFpc19kaXJlY3RvcnlfbmFtZShlbnQtPmRfbmFtZSkgJiYKLQkJICAgIGZubWF0Y2goZmlsdGVyLmNfc3RyKCksIGVudC0+ZF9uYW1lLCAwKSAhPSBGTk1fTk9NQVRDSCkgewotCQkJaWYgKHJlY3Vyc2l2ZSkgewotCQkJCXN0cnVjdCBzdGF0IHN0YXRfYnVmZmVyOwotCQkJCXN0cmluZyBuYW1lID0gYmFzZV9kaXIgKyAnLycgKyBlbnQtPmRfbmFtZTsKLQkJCQlpZiAoc3RhdChuYW1lLmNfc3RyKCksICZzdGF0X2J1ZmZlcikgPT0gMCkgewotCQkJCQlpZiAoU19JU0RJUihzdGF0X2J1ZmZlci5zdF9tb2RlKSAmJgotCQkJCQkgICAgIVNfSVNMTksoc3RhdF9idWZmZXIuc3RfbW9kZSkpIHsKLQkJCQkJCS8vIHJlY3Vyc2l2ZSByZXRyaWV2ZQotCQkJCQkJY3JlYXRlX2ZpbGVfbGlzdChmaWxlX2xpc3QsCi0JCQkJCQkJCSBuYW1lLCBmaWx0ZXIsCi0JCQkJCQkJCSByZWN1cnNpdmUpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZmlsZV9saXN0LnB1c2hfYmFjayhuYW1lKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJZmlsZV9saXN0LnB1c2hfYmFjayhlbnQtPmRfbmFtZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljbG9zZWRpcihkaXIpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLQotLyoqCi0gKiBAcGFyYW0gcGF0aF9uYW1lIHRoZSBwYXRoIHdoZXJlIHdlIHJlbW92ZSB0cmFpbGluZyAnLycKLSAqCi0gKiBlcmFzZSBhbGwgdHJhaWxpbmcgJy8nIGluIHBhdGhfbmFtZSBleGNlcHQgaWYgdGhlIGxhc3QgJy8nIGlzIGF0IHBvcyAwCi0gKi8KLXN0YXRpYyBzdHJpbmcgZXJhc2VfdHJhaWxpbmdfcGF0aF9zZXBhcmF0b3Ioc3RyaW5nIGNvbnN0ICYgcGF0aF9uYW1lKQotewotCXN0cmluZyByZXN1bHQocGF0aF9uYW1lKTsKLQotCXdoaWxlIChyZXN1bHQubGVuZ3RoKCkgPiAxKSB7Ci0JCWlmIChyZXN1bHRbcmVzdWx0Lmxlbmd0aCgpIC0gMV0gIT0gJy8nKQotCQkJYnJlYWs7Ci0JCXJlc3VsdC5lcmFzZShyZXN1bHQubGVuZ3RoKCkgLSAxLCAxKTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0KLXN0cmluZyBvcF9kaXJuYW1lKHN0cmluZyBjb25zdCAmIGZpbGVfbmFtZSkKLXsKLQlzdHJpbmcgcmVzdWx0ID0gZXJhc2VfdHJhaWxpbmdfcGF0aF9zZXBhcmF0b3IoZmlsZV9uYW1lKTsKLQlpZiAocmVzdWx0LmZpbmRfZmlyc3Rfb2YoJy8nKSA9PSBzdHJpbmc6Om5wb3MpCi0JCXJldHVybiAiLiI7IAkgCi0gIAkgCi0JLy8gY2F0Y2ggcmVzdWx0ID09ICIvIiAJIAotCWlmIChyZXN1bHQubGVuZ3RoKCkgPT0gMSkgCSAKLQkJcmV0dXJuIHJlc3VsdDsKLQotCXNpemVfdCBwb3MgPSByZXN1bHQuZmluZF9sYXN0X29mKCcvJyk7IAkgCi0KLQkvLyAiL3VzciIgbXVzdCByZXR1cm4gIi8iIAkgCi0JaWYgKHBvcyA9PSAwKSAJIAotCQlwb3MgPSAxOyAJIAotCi0JcmVzdWx0LmVyYXNlKHBvcywgcmVzdWx0Lmxlbmd0aCgpIC0gcG9zKTsgCSAKLQotCS8vICIvLy8vdXNyIiBtdXN0IHJldHVybiAiLyIKLQlyZXR1cm4gZXJhc2VfdHJhaWxpbmdfcGF0aF9zZXBhcmF0b3IocmVzdWx0KTsKLX0KLQotCi1zdHJpbmcgb3BfYmFzZW5hbWUoc3RyaW5nIGNvbnN0ICYgcGF0aF9uYW1lKQotewotCXN0cmluZyByZXN1bHQgPSBlcmFzZV90cmFpbGluZ19wYXRoX3NlcGFyYXRvcihwYXRoX25hbWUpOwotCi0JLy8gY2F0Y2ggcmVzdWx0ID09ICIvIgotCWlmIChyZXN1bHQubGVuZ3RoKCkgPT0gMSkKLQkJcmV0dXJuIHJlc3VsdDsKLQotCXJldHVybiBlcmFzZV90b19sYXN0X29mKHJlc3VsdCwgJy8nKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9maWxlX21hbmlwLmggYi9saWJ1dGlsKysvZmlsZV9tYW5pcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTQxNTRmLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy9maWxlX21hbmlwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioKLSAqIEBmaWxlIGZpbGVfbWFuaXAuaAotICogVXNlZnVsIGZpbGUgbWFuYWdlbWVudCBoZWxwZXJzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBGSUxFX01BTklQX0gKLSNkZWZpbmUgRklMRV9NQU5JUF9ICi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8bGlzdD4KLQotCi0vKioKLSAqIGNvcHlfZmlsZSAtIGNvcHkgYSBmaWxlIG9yIHN1YnRyZWUKLSAqIEBwYXJhbSBzb3VyY2UgICAgICAgIGZpbGVuYW1lIHRvIGNvcHkgZnJvbQotICogQHBhcmFtIGRlc3RpbmF0aW9uICAgZmlsZW5hbWUgdG8gY29weSBpbnRvCi0gKgotICogcmV0dXJuIHRydWUgaWYgY29weWluZyBzdWNjZXNzZnVsCi0gKi8KLWJvb2wgY29weV9maWxlKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc291cmNlLCBzdGQ6OnN0cmluZyBjb25zdCAmIGRlc3RpbmF0aW9uKTsKLQotLy8vIHJldHVybiB0cnVlIGlmIGRpciBpcyBhbiBleGlzdGluZyBkaXJlY3RvcnkKLWJvb2wgaXNfZGlyZWN0b3J5KHN0ZDo6c3RyaW5nIGNvbnN0ICYgZGlybmFtZSk7Ci0KLS8qKgotICogaXNfZmlsZV9pZGVudGljYWwgLSBjaGVjayBmb3IgaWRlbnRpY2FsIGZpbGVzCi0gKiBAcGFyYW0gZmlsZTEgIGZpcnN0IGZpbGVuYW1lCi0gKiBAcGFyYW0gZmlsZTIgIHNlY29uZCBmaWxlbmFtZQotICoKLSAqIHJldHVybiB0cnVlIGlmIHRoZSB0d28gZmlsZW5hbWVzIGJlbG9uZyB0byB0aGUgc2FtZSBmaWxlCi0gKi8KLWJvb2wgaXNfZmlsZXNfaWRlbnRpY2FsKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZTEsIHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZTIpOwotCi0vKioKLSAqIG9wX3JlYWxwYXRoIC0gcmVzb2x2ZSBzeW1saW5rcyBldGMuCi0gKiBSZXNvbHZlIGEgcGF0aCBhcyBtdWNoIGFzIHBvc3NpYmxlLiBBY2NvdW50cyBmb3IgcmVsYXRpdmUKLSAqIHBhdGhzIChmcm9tIGN3ZCksICIuLiIgYW5kICIuIi4gRm9yIHN1Y2Nlc3MsIHRoZSB0YXJnZXQKLSAqIGZpbGUgbXVzdCBleGlzdCAhCi0gKgotICogUmVzb2x2ZSBhIHN5bWJvbGljIGxpbmsgYXMgZmFyIGFzIHBvc3NpYmxlLgotICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nIG9uIGZhaWx1cmUuCi0gKi8KLXN0ZDo6c3RyaW5nIGNvbnN0IG9wX3JlYWxwYXRoKHN0ZDo6c3RyaW5nIGNvbnN0ICYgbmFtZSk7Ci0KLS8vLyByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyByZWFkYWJsZQotYm9vbCBvcF9maWxlX3JlYWRhYmxlKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZSk7Ci0KLS8qKgotICogQHBhcmFtIGZpbGVfbGlzdCB3aGVyZSB0byBzdG9yZSByZXN1bHQKLSAqIEBwYXJhbSBiYXNlX2RpciBkaXJlY3RvcnkgZnJvbSB3aGVyZSBsb29rdXAgc3RhcnQKLSAqIEBwYXJhbSBmaWx0ZXIgYSBmaWxlbmFtZSBmaWx0ZXIKLSAqIEBwYXJhbSByZWN1cnNpdmUgaWYgdHJ1ZSBsb29rdXAgaW4gc3ViLWRpcmVjdG9yeQotICoKLSAqIGNyZWF0ZSBhIGZpbGVsaXN0IHVuZGVyIGJhc2VfZGlyLCBmaWx0ZXJlZCBieSBmaWx0ZXIgYW5kIG9wdGlvbmFsbHkKLSAqIGxvb2tpbmcgaW4gc3ViLWRpcmVjdG9yeS4gSWYgd2UgbG9vayBpbiBzdWItZGlyZWN0b3J5IG9ubHkgc3ViLWRpcmVjdG9yeQotICogd2hpY2ggbWF0Y2ggZmlsdGVyIGFyZSB0cmF2ZXJzZWQuCi0gKi8KLWJvb2wgY3JlYXRlX2ZpbGVfbGlzdChzdGQ6Omxpc3Q8c3RkOjpzdHJpbmc+ICYgZmlsZV9saXN0LAotCQkgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGJhc2VfZGlyLAotCQkgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGZpbHRlciA9ICIqIiwKLQkJICAgICAgYm9vbCByZWN1cnNpdmUgPSBmYWxzZSk7Ci0KLS8qKgotICogb3BfZGlybmFtZSAtIGdldCB0aGUgcGF0aCBjb21wb25lbnQgb2YgYSBmaWxlbmFtZQotICogQHBhcmFtIGZpbGVfbmFtZSAgZmlsZW5hbWUKLSAqCi0gKiBSZXR1cm5zIHRoZSBwYXRoIG5hbWUgb2YgYSBmaWxlbmFtZSB3aXRoIHRyYWlsaW5nICcvJyByZW1vdmVkLgotICovCi1zdGQ6OnN0cmluZyBvcF9kaXJuYW1lKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZV9uYW1lKTsKLQotLyoqCi0gKiBvcF9iYXNlbmFtZSAtIGdldCB0aGUgYmFzZW5hbWUgb2YgYSBwYXRoCi0gKiBAcGFyYW0gcGF0aF9uYW1lICBwYXRoCi0gKgotICogUmV0dXJucyB0aGUgYmFzZW5hbWUgb2YgYSBwYXRoIHdpdGggdHJhaWxpbmcgJy8nIHJlbW92ZWQuCi0gKgotICogQWx3YXlzIHVzZSB0aGlzIGluc3RlYWQgb2YgdGhlIEMgYmFzZW5hbWUoKSAtIGhlYWRlciBvcmRlcgotICogY2FuIGFmZmVjdCBiZWhhdmlvdXIgIGZvciBiYXNlbmFtZSgiLyIpCi0gKi8KLXN0ZDo6c3RyaW5nIG9wX2Jhc2VuYW1lKHN0ZDo6c3RyaW5nIGNvbnN0ICYgcGF0aF9uYW1lKTsKLQotI2VuZGlmIC8qICFGSUxFX01BTklQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9nZW5lcmljX3NwZWMuaCBiL2xpYnV0aWwrKy9nZW5lcmljX3NwZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThiZmY1MS4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvZ2VuZXJpY19zcGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioKLSAqIEBmaWxlIGdlbmVyaWNfc3BlYy5oCi0gKiBDb250YWluZXIgaG9sZGluZyBhbiBpdGVtIG9yIGEgc3BlY2lhbCAibWF0Y2ggYWxsIiBpdGVtCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBHRU5FUklDX1NQRUNfSAotI2RlZmluZSBHRU5FUklDX1NQRUNfSAotCi0jaW5jbHVkZSA8c3RkZXhjZXB0PgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0KLQotLyoqCi0gKiB1c2VkIHRvIGhvbGQgc29tZXRoaW5nIGxpa2UgeyBpbnQgY3B1X25yLCBib29sIGlzX2FsbCB9OwotICogdG8gc3RvcmUgYSBzdWIgcGFydCBvZiBhIHNhbXBsZXMgZmlsZW5hbWUgc2VlIFBQOjMuMjEuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgZ2VuZXJpY19zcGVjCi17Ci1wdWJsaWM6Ci0JLyoqCi0JICogYnVpbGQgYSBkZWZhdWx0IHNwZWMgd2hpY2ggbWF0Y2ggYW55dGhpbmcKLQkgKi8KLQlnZW5lcmljX3NwZWMoKTsKLQotCS8vLyBidWlsZCBhIHNwZWMgZnJvbSBhIHN0cmluZywgdmFsaWQgYXJndW1lbnQgYXJlICJhbGwiCi0JLy8vIG9yIGEgc3RyaW5nIGNvbnZlcnRpYmxlIHRvIFQgdGhyb3VnaCBpc3RyaW5ndHJlYW0oc3RyKSA+PiBkYXRhCi0JLy8vIGNvbnZlcnNpb24gaXMgc3RyaWN0LCBubyBzcGFjZSBhcmUgYWxsb3dlZCBhdCBiZWdpbiBvciBlbmQgb2Ygc3RyCi0Jdm9pZCBzZXQoc3RkOjpzdHJpbmcgY29uc3QgJik7Ci0KLQkvLy8gcmV0dXJuIHRydWUgaWYgYSBzcGVjaWZpYyB2YWx1ZSBpcyBoZWxkIGJ5IHRoaXMgY29udGFpbmVyCi0JYm9vbCBpc19zZXQoKSBjb25zdCB7Ci0JCXJldHVybiAhaXNfYWxsOwotCX0KLQotCS8vLyByZXR1cm4gdGhlIHNwZWNpZmljIHZhbHVlIChvbmx5IGlmIGlzX3NldCgpID09IHRydWUpCi0JVCBjb25zdCB2YWx1ZSgpIGNvbnN0IHsKLQkJaWYgKCFpc19hbGwpCi0JCQlyZXR1cm4gZGF0YTsKLQkJdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UoImdlbmVyaWNfc3BlYyBob2xkcyBubyB2YWx1ZSIpOwotCX0KLQotCS8vLyByZXR1cm4gdHJ1ZSBpZiByaHMgbWF0Y2ggdGhpcyBzcGVjLiBTdWIgcGFydCBvZiBQUDozLjI0Ci0JYm9vbCBtYXRjaChUIGNvbnN0ICYgcmhzKSBjb25zdCB7Ci0JCXJldHVybiByaHMgPT0gZGF0YTsKLQl9Ci0KLQkvLy8gcmV0dXJuIHRydWUgaWYgcmhzIG1hdGNoIHRoaXMgc3BlYy4gU3ViIHBhcnQgb2YgUFA6My4yNAotCWJvb2wgbWF0Y2goZ2VuZXJpY19zcGVjPFQ+IGNvbnN0ICYgcmhzKSBjb25zdCB7Ci0JCXJldHVybiBpc19hbGwgfHwgcmhzLmlzX2FsbCB8fCByaHMuZGF0YSA9PSBkYXRhOwotCX0KLQotcHJpdmF0ZToKLQlUIGRhdGE7Ci0JYm9vbCBpc19hbGw7Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotZ2VuZXJpY19zcGVjPFQ+OjpnZW5lcmljX3NwZWMoKQotCToKLQlkYXRhKFQoKSksCi0JaXNfYWxsKHRydWUpCi17Ci19Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIGdlbmVyaWNfc3BlYzxUPjo6c2V0KHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKQotewotCWlmIChzdHIgPT0gImFsbCIpIHsKLQkJaXNfYWxsID0gdHJ1ZTsKLQkJcmV0dXJuOwotCX0KLQotCWlzX2FsbCA9IGZhbHNlOwotCWRhdGEgPSBvcF9sZXhpY2FsX2Nhc3Q8VD4oc3RyKTsKLX0KLQotCi0vLy8gV2UgZG9uJ3QgdXNlIGdlbmVyaWNfc3BlYzxzdHJpbmc+LCBzaW5jZSBpdCdzIHByb2JhYmx5IGFuIGVycm9yIHRvIHRyeQotLy8vIHRvIHVzZSBnZW5lcmljX3NwZWM8c3RyaW5nPiB3ZSBzcGVjaWFsaXplIGJ1dCBkb24ndCBkZWZpbmUgaXQgdG8gZ2V0IGEKLS8vLyBsaW5rIGVycm9yICh1c2luZyBnZW5lcmljX3NwZWM8c3RyaW5nPiBpcyBwcm9ibGVtYXRpYyBiZWNhdXNlIGcuc2V0KCJhbGwiKQotLy8vIGlzIGFtYmlndW91cykKLXRlbXBsYXRlIDw+Ci12b2lkIGdlbmVyaWNfc3BlYzxzdGQ6OnN0cmluZz46OnNldChzdGQ6OnN0cmluZyBjb25zdCAmIHN0cik7Ci0KLSNlbmRpZiAvKiAhR0VORVJJQ19TUEVDX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9nbG9iX2ZpbHRlci5jcHAgYi9saWJ1dGlsKysvZ2xvYl9maWx0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDQ1NDlmLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy9nbG9iX2ZpbHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioKLSAqIEBmaWxlIGdsb2JfZmlsdGVyLmNwcAotICogRmlsdGVyIHN0cmluZ3MgYmFzZWQgb24gZ2xvYmJlZCBleGNsdWRlL2luY2x1ZGUgbGlzdAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDxmbm1hdGNoLmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJnbG9iX2ZpbHRlci5oIgotI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1ib29sIGdsb2JfZmlsdGVyOjpmbm1hdGNoZXI6Om9wZXJhdG9yKCkoc3RyaW5nIGNvbnN0ICYgcykKLXsKLQlyZXR1cm4gZm5tYXRjaChzLmNfc3RyKCksIHN0cl8uY19zdHIoKSwgMCkgIT0gRk5NX05PTUFUQ0g7Ci19Ci0KLQotYm9vbCBnbG9iX2ZpbHRlcjo6bWF0Y2goc3RyaW5nIGNvbnN0ICYgc3RyKSBjb25zdAotewotCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQ7Ci0JY2l0ID0gZmluZF9pZihleGNsdWRlLmJlZ2luKCksIGV4Y2x1ZGUuZW5kKCksIGZubWF0Y2hlcihzdHIpKTsKLQlpZiAoY2l0ICE9IGV4Y2x1ZGUuZW5kKCkpCi0JCXJldHVybiBmYWxzZTsKLQotCWNpdCA9IGZpbmRfaWYoaW5jbHVkZS5iZWdpbigpLCBpbmNsdWRlLmVuZCgpLCBmbm1hdGNoZXIoc3RyKSk7Ci0JaWYgKGluY2x1ZGUuZW1wdHkoKSB8fCBjaXQgIT0gaW5jbHVkZS5lbmQoKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19CmRpZmYgLS1naXQgYS9saWJ1dGlsKysvZ2xvYl9maWx0ZXIuaCBiL2xpYnV0aWwrKy9nbG9iX2ZpbHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODg3Y2JmLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy9nbG9iX2ZpbHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBnbG9iX2ZpbHRlci5oCi0gKiBGaWx0ZXIgc3RyaW5ncyBiYXNlZCBvbiBnbG9iYmVkIGV4Y2x1ZGUvaW5jbHVkZSBsaXN0Ci0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBHTE9CX0ZJTFRFUl9ICi0jZGVmaW5lIEdMT0JfRklMVEVSX0gKLQotI2luY2x1ZGUgInN0cmluZ19maWx0ZXIuaCIKLQotLyoqCi0gKiBnbG9iX2ZpbHRlciAtIGZpbHRlcmluZyBvZiBhIHN0cmluZyBiYXNlZCBvbiBnbG9iYmVkIGluY2x1ZGUvZXhjbHVkZSBsaXN0Ci0gKgotICogVGhpcyBjbGFzcyBpcyBhbiBvcmFjbGUgb24gd2hldGhlciBhIHBhcnRpY3VsYXIgc3RyaW5nIG1hdGNoZXMKLSAqIHRoZSBnaXZlbiBsaXN0IG9mIGluY2x1ZGVkIGFuZCBleGNsdWRlZCBzdHJpbmdzLgotICoKLSAqIFRoaXMgY2xhc3MgZ2l2ZXMgZ2xvYi1iYXNlZCBtYXRjaGVzIG9uIGVhY2ggcGF0dGVybiwgYXMgd2l0aCBmbm1hdGNoKDMpCi0gKi8KLWNsYXNzIGdsb2JfZmlsdGVyIDogcHVibGljIHN0cmluZ19maWx0ZXIgewotcHVibGljOgotCS8qKgotCSAqIEluaXRpYWxpc2UgdGhlIGZpbHRlciB3aXRoIHRoZSBpbmNsdWRlIGFuZCBleGNsdWRlIGxpc3QsIAotCSAqIGNvbW1hLXNlcGFyYXRlZC4KLQkgKi8KLQlnbG9iX2ZpbHRlcihzdGQ6OnN0cmluZyBjb25zdCAmIGluY2x1ZGVfcGF0dGVybnMsCi0JICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QgJiBleGNsdWRlX3BhdHRlcm5zKQotCQk6IHN0cmluZ19maWx0ZXIoaW5jbHVkZV9wYXR0ZXJucywgZXhjbHVkZV9wYXR0ZXJucykge30KLQotCS8qKgotCSAqIEluaXRpYWxpc2UgdGhlIGZpbHRlciB3aXRoIHRoZSBpbmNsdWRlIGFuZCBleGNsdWRlIGxpc3QuCi0JICovCi0JZ2xvYl9maWx0ZXIoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgaW5jbHVkZV9wYXR0ZXJucywKLQkgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBleGNsdWRlX3BhdHRlcm5zKQotCQk6IHN0cmluZ19maWx0ZXIoaW5jbHVkZV9wYXR0ZXJucywgZXhjbHVkZV9wYXR0ZXJucykge30KLQotCS8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBtYXRjaGVzCi0JdmlydHVhbCBib29sIG1hdGNoKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKSBjb25zdDsKLQotcHJvdGVjdGVkOgotCi0JLy8vIGZ1bmN0aW9uIG9iamVjdCBmb3IgZm5tYXRjaGluZwotCXN0cnVjdCBmbm1hdGNoZXIgewotCQlmbm1hdGNoZXIoc3RkOjpzdHJpbmcgY29uc3QgJiBzdHIpIDogc3RyXyhzdHIpIHt9Ci0KLQkJYm9vbCBvcGVyYXRvcigpKHN0ZDo6c3RyaW5nIGNvbnN0ICYgcyk7Ci0KLQkJc3RkOjpzdHJpbmcgY29uc3QgJiBzdHJfOwotCX07Ci19OwotCi0jZW5kaWYgLyogR0xPQl9GSUxURVJfSCAqLwpkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL2dyb3dhYmxlX3ZlY3Rvci5oIGIvbGlidXRpbCsrL2dyb3dhYmxlX3ZlY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmM3M2YyLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy9ncm93YWJsZV92ZWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioKLSAqIEBmaWxlIGdyb3dhYmxlX3ZlY3Rvci5oCi0gKiBBdXRvLWV4cGFuZGluZyB2ZWN0b3IgdHlwZQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpZm5kZWYgR1JPV0FCTEVfVkVDVE9SX0gKLSNkZWZpbmUgR1JPV0FCTEVfVkVDVE9SX0gKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLQotLyoqCi0gKiBBIHNpbXBsZSBncm93YWJsZSB2ZWN0b3IgdGVtcGxhdGUuCi0gKi8KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBncm93YWJsZV92ZWN0b3IgewotcHVibGljOgotCXR5cGVkZWYgc3RkOjp2ZWN0b3I8VD4gY29udGFpbmVyX3R5cGU7Ci0JdHlwZWRlZiB0eXBlbmFtZSBjb250YWluZXJfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLQotCi0JLyoqCi0JICogSW5kZXggaW50byB0aGUgdmVjdG9yIGZvciBhIHZhbHVlLiBBbiBvdXQgb2YKLQkgKiBib3VuZHMgaW5kZXggd2lsbCByZXR1cm4gYSBkZWZhdWx0LWNvbnN0cnVjdGVkIHZhbHVlLgotCSAqLwotCVQgb3BlcmF0b3JbXShzaXplX3R5cGUgaW5kZXgpIGNvbnN0IHsKLQkJaWYgKGluZGV4ID49IGNvbnRhaW5lci5zaXplKCkpCi0JCQlyZXR1cm4gMDsKLQkJcmV0dXJuIGNvbnRhaW5lcltpbmRleF07Ci0JfQotCi0KLQkvKioKLQkgKiBJbmRleCBpbnRvIHRoZSB2ZWN0b3IgZm9yIGEgdmFsdWUuIElmIHRoZSBpbmRleCBpcyBsYXJnZXIgdGhhbgotCSAqIHRoZSBjdXJyZW50IG1heCBpbmRleCwgdGhlIGFycmF5IGlzIGV4cGFuZGVkLCBkZWZhdWx0LWZpbGxpbmcKLQkgKiBhbnkgaW50ZXJtZWRpYXJ5IGdhcHMuCi0JICovCi0JVCAmIG9wZXJhdG9yW10oc2l6ZV90eXBlIGluZGV4KSB7Ci0JCWlmIChpbmRleCA+PSBjb250YWluZXIuc2l6ZSgpKQotCQkJY29udGFpbmVyLnJlc2l6ZShpbmRleCArIDEpOwotCQlyZXR1cm4gY29udGFpbmVyW2luZGV4XTsKLQl9Ci0KLQotCS8qKgotCSAqIHZlY3Rvcml6ZWQgKz0gb3BlcmF0b3IKLQkgKi8KLQlncm93YWJsZV92ZWN0b3I8VD4gJiBvcGVyYXRvcis9KGdyb3dhYmxlX3ZlY3RvcjxUPiBjb25zdCAmIHJocykgewotCQlpZiAocmhzLmNvbnRhaW5lci5zaXplKCkgPiBjb250YWluZXIuc2l6ZSgpKQotCQkJY29udGFpbmVyLnJlc2l6ZShyaHMuY29udGFpbmVyLnNpemUoKSk7Ci0KLQkJc2l6ZV90eXBlIG1pbl9zaXplID0gbWluKGNvbnRhaW5lci5zaXplKCksIHJocy5jb250YWluZXIuc2l6ZSgpKTsKLQkJZm9yIChzaXplX3R5cGUgaSA9IDAgOyBpIDwgbWluX3NpemU7ICsraSkKLQkJCWNvbnRhaW5lcltpXSArPSByaHMuY29udGFpbmVyW2ldOwotCi0JCXJldHVybiAqdGhpczsKLQl9Ci0KLQotCS8qKgotCSAqIHZlY3Rvcml6ZWQgLT0gb3BlcmF0b3IsIG92ZXJmbG93IHNob3VsZG4ndCBvY2N1ciBkdXJpbmcgc3Vic3RyYWN0aW9uCi0JICogKGlvdzogZm9yIGVhY2ggY29tcG9uZW50cyBsaHNbaV0gPj0gcmhzW2ldCi0JICovCi0JZ3Jvd2FibGVfdmVjdG9yPFQ+ICYgb3BlcmF0b3ItPShncm93YWJsZV92ZWN0b3I8VD4gY29uc3QgJiByaHMpIHsKLQkJaWYgKHJocy5jb250YWluZXIuc2l6ZSgpID4gY29udGFpbmVyLnNpemUoKSkKLQkJCWNvbnRhaW5lci5yZXNpemUocmhzLmNvbnRhaW5lci5zaXplKCkpOwotCi0JCXNpemVfdHlwZSBtaW5fc2l6ZSA9IG1pbihjb250YWluZXIuc2l6ZSgpLCByaHMuY29udGFpbmVyLnNpemUoKSk7Ci0JCWZvciAoc2l6ZV90eXBlIGkgPSAwIDsgaSA8IG1pbl9zaXplOyArK2kpCi0JCQljb250YWluZXJbaV0gLT0gcmhzLmNvbnRhaW5lcltpXTsKLQotCQlyZXR1cm4gKnRoaXM7Ci0JfQotCi0KLQkvLy8gcmV0dXJuIGN1cnJlbnQgc2l6ZSBvZiB2ZWN0b3IKLQlzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsKLQkJcmV0dXJuIGNvbnRhaW5lci5zaXplKCk7Ci0JfQotCi0KLQkvLy8gZmlsbCBjb250YWluZXIgd2l0aCBnaXZlbiB2YWx1ZQotCXZvaWQgZmlsbChzaXplX3R5cGUgc2l6ZSwgVCBjb25zdCAmIHZhbHVlKSB7Ci0JCWNvbnRhaW5lci5yZXNpemUoc2l6ZSwgdmFsdWUpOwotCX0KLQotCi0JLy8vIHJldHVybiB0cnVlIGlmIGFsbCBlbGVtZW50cyBoYXZlIHRoZSBkZWZhdWx0IGNvbnN0cnVjdGVkIHZhbHVlCi0JYm9vbCB6ZXJvKCkgY29uc3QgewotCQlyZXR1cm4gc3RkOjpmaW5kX2lmKGNvbnRhaW5lci5iZWdpbigpLCBjb250YWluZXIuZW5kKCksCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YmluZDJuZChzdGQ6Om5vdF9lcXVhbF90bzxUPigpLCBUKCkpKQotCQkJCQk9PSBjb250YWluZXIuZW5kKCk7Ci0JfQotCi1wcml2YXRlOgotCWNvbnRhaW5lcl90eXBlIGNvbnRhaW5lcjsKLX07Ci0KLSNlbmRpZiAvLyBHUk9XQUJMRV9WRUNUT1JfSApkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL29wX2JmZC5jcHAgYi9saWJ1dGlsKysvb3BfYmZkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFiZWY3OC4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvb3BfYmZkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQyOSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wX2JmZC5jcHAKLSAqIEVuY2Fwc3VsYXRpb24gb2YgYmZkIG9iamVjdHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaW5jbHVkZSAib3BfZmlsZS5oIgotI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi0jaW5jbHVkZSA8Y3N0ZGxpYj4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxpb21hbmlwPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJvcF9iZmQuaCIKLSNpbmNsdWRlICJzdHJpbmdfZmlsdGVyLmgiCi0jaW5jbHVkZSAic3RyZWFtX3V0aWwuaCIKLSNpbmNsdWRlICJjdmVyYi5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0KLXZlcmJvc2UgdmJmZCgiYmZkIik7Ci0KLQotbmFtZXNwYWNlIHsKLQotLy8vIGZ1bmN0aW9uIG9iamVjdCBmb3IgZmlsdGVyaW5nIHN5bWJvbHMgdG8gcmVtb3ZlCi1zdHJ1Y3QgcmVtb3ZlX2ZpbHRlciB7Ci0JcmVtb3ZlX2ZpbHRlcihzdHJpbmdfZmlsdGVyIGNvbnN0ICYgZmlsdGVyKQotCQk6IGZpbHRlcl8oZmlsdGVyKSB7fQotCi0JYm9vbCBvcGVyYXRvcigpKG9wX2JmZF9zeW1ib2wgY29uc3QgJiBzeW1ib2wpIHsKLQkJcmV0dXJuICFmaWx0ZXJfLm1hdGNoKHN5bWJvbC5uYW1lKCkpOwotCX0KLQotCXN0cmluZ19maWx0ZXIgZmlsdGVyXzsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgYW5vbgotCi0KLW9wX2JmZF9zeW1ib2w6Om9wX2JmZF9zeW1ib2woYXN5bWJvbCBjb25zdCAqIGEpCi0JOiBiZmRfc3ltYm9sKGEpLCBzeW1iX3ZhbHVlKGEtPnZhbHVlKSwKLQkgIHNlY3Rpb25fZmlsZXBvcyhhLT5zZWN0aW9uLT5maWxlcG9zKSwKLQkgIHNlY3Rpb25fdm1hKGEtPnNlY3Rpb24tPnZtYSksCi0JICBzeW1iX3NpemUoMCksIHN5bWJfaGlkZGVuKGZhbHNlKSwgc3ltYl93ZWFrKGZhbHNlKQotewotCS8vIFNvbWUgc2VjdGlvbnMgaGF2ZSB1bm5hbWVkIHN5bWJvbHMgaW4gdGhlbS4gSWYKLQkvLyB3ZSBqdXN0IGlnbm9yZSB0aGVtIHRoZW4gd2UgZW5kIHVwIHN0aWNraW5nCi0JLy8gdGhpbmdzIGxpa2UgLnBsdCBoaXRzIGluc2lkZSBvZiBfaW5pdC4gU28gaW5zdGVhZAotCS8vIHdlIG5hbWUgdGhlIHN5bWJvbCBhZnRlciB0aGUgc2VjdGlvbi4KLQlpZiAoYS0+bmFtZSAmJiBhLT5uYW1lWzBdICE9ICdcMCcpIHsKLQkJc3ltYl9uYW1lID0gYS0+bmFtZTsKLQkJc3ltYl93ZWFrID0gYS0+ZmxhZ3MgJiBCU0ZfV0VBSzsKLQkJc3ltYl9oaWRkZW4gPSAoYS0+ZmxhZ3MgJiBCU0ZfTE9DQUwpCi0gCQkJJiYgIShhLT5mbGFncyAmIEJTRl9HTE9CQUwpOwotCX0gZWxzZSB7Ci0JCXN5bWJfbmFtZSA9IHN0cmluZygiPz8iKSArIGEtPnNlY3Rpb24tPm5hbWU7Ci0JfQotfQotCi0KLW9wX2JmZF9zeW1ib2w6Om9wX2JmZF9zeW1ib2woYmZkX3ZtYSB2bWEsIHNpemVfdCBzaXplLCBzdHJpbmcgY29uc3QgJiBuYW1lKQotCTogYmZkX3N5bWJvbCgwKSwgc3ltYl92YWx1ZSh2bWEpLAotCSAgc2VjdGlvbl9maWxlcG9zKDApLCBzZWN0aW9uX3ZtYSgwKSwKLQkgIHN5bWJfc2l6ZShzaXplKSwgc3ltYl9uYW1lKG5hbWUpCi17Ci19Ci0KLQotYm9vbCBvcF9iZmRfc3ltYm9sOjpvcGVyYXRvcjwob3BfYmZkX3N5bWJvbCBjb25zdCAmIHJocykgY29uc3QKLXsKLQlyZXR1cm4gZmlsZXBvcygpIDwgcmhzLmZpbGVwb3MoKTsKLX0KLQotCi1vcF9iZmQ6Om9wX2JmZChzdHJpbmcgY29uc3QgJiBhcmNoaXZlLCBzdHJpbmcgY29uc3QgJiBmbmFtZSwKLQkgICAgICAgc3RyaW5nX2ZpbHRlciBjb25zdCAmIHN5bWJvbF9maWx0ZXIsIGJvb2wgJiBvaykKLQk6Ci0JZmlsZW5hbWUoZm5hbWUpLAotCWFyY2hpdmVfcGF0aChhcmNoaXZlKSwKLQlmaWxlX3NpemUoLTEpCi17Ci0JaW50IGZkOwotCXN0cnVjdCBzdGF0IHN0OwotCS8vIGFmdGVyIGNyZWF0aW5nIGFsbCBzeW1ib2wgaXQncyBjb252ZW5pZW50IGZvciB1c2VyIGNvZGUgdG8gYWNjZXNzCi0JLy8gc3ltYm9scyB0aHJvdWdoIGEgdmVjdG9yLiBXZSB1c2UgYW4gaW50ZXJtZWRpYXRlIGxpc3QgdG8gYXZvaWQgYQotCS8vIE8oTrIpIGJlaGF2aW9yIHdoZW4gd2Ugd2lsbCBmaWx0ZXIgdmVjdG9yIGVsZW1lbnQgYmVsb3cKLQlzeW1ib2xzX2ZvdW5kX3Qgc3ltYm9sczsKLQlhc2VjdGlvbiBjb25zdCAqIHNlY3Q7Ci0KLQlzdHJpbmcgY29uc3QgaW1hZ2VfcGF0aCA9IGFyY2hpdmVfcGF0aCArIGZpbGVuYW1lOwotCi0JY3ZlcmIgPDwgdmJmZCA8PCAib3BfYmZkIGN0b3IgZm9yICIgPDwgaW1hZ2VfcGF0aCA8PCBlbmRsOwotCi0JLy8gaWYgdGhlcmUncyBhIHByb2JsZW0gYWxyZWFkeSwgZG9uJ3QgdHJ5IHRvIG9wZW4gaXQKLQlpZiAoIW9rKQotCQlnb3RvIG91dF9mYWlsOwotCi0JZmQgPSBvcGVuKGltYWdlX3BhdGguY19zdHIoKSwgT19SRE9OTFkpOwotCWlmIChmZCA9PSAtMSkgewotCQljdmVyYiA8PCB2YmZkIDw8ICJvcGVuIGZhaWxlZCBmb3IgIiA8PCBpbWFnZV9wYXRoIDw8IGVuZGw7Ci0JCW9rID0gZmFsc2U7Ci0JCWdvdG8gb3V0X2ZhaWw7Ci0JfQotCi0JaWYgKGZzdGF0KGZkLCAmc3QpKSB7Ci0JCWN2ZXJiIDw8IHZiZmQgPDwgInN0YXQgZmFpbGVkIGZvciAiIDw8IGltYWdlX3BhdGggPDwgZW5kbDsKLQkJb2sgPSBmYWxzZTsKLQkJZ290byBvdXRfZmFpbDsKLQl9Ci0KLQlmaWxlX3NpemUgPSBzdC5zdF9zaXplOwotCi0JaWJmZC5hYmZkID0gZmRvcGVuX2JmZChpbWFnZV9wYXRoLCBmZCk7Ci0KLQlpZiAoIWliZmQudmFsaWQoKSkgewotCQljdmVyYiA8PCB2YmZkIDw8ICJmZG9wZW5fYmZkIGZhaWxlZCBmb3IgIiA8PCBpbWFnZV9wYXRoIDw8IGVuZGw7Ci0JCW9rID0gZmFsc2U7Ci0JCWdvdG8gb3V0X2ZhaWw7Ci0JfQotCi0JLy8gZmluZCAudGV4dCBhbmQgdXNlIGl0Ci0JZm9yIChzZWN0ID0gaWJmZC5hYmZkLT5zZWN0aW9uczsgc2VjdDsgc2VjdCA9IHNlY3QtPm5leHQpIHsKLQkJaWYgKHNlY3QtPmZsYWdzICYgU0VDX0NPREUpIHsKLQkJCWlmIChmaWxlcG9zX21hcFtzZWN0LT5uYW1lXSAhPSAwKSB7Ci0JCQkJY2VyciA8PCAiRm91bmQgc2VjdGlvbiBcIiIgPDwgc2VjdC0+bmFtZQotCQkJCSAgICAgPDwgIlwiIHR3aWNlIGZvciAiIDw8IGdldF9maWxlbmFtZSgpCi0JCQkJICAgICA8PCBlbmRsOwotCQkJCWFib3J0KCk7Ci0JCQl9Ci0KLQkJCWZpbGVwb3NfbWFwW3NlY3QtPm5hbWVdID0gc2VjdC0+ZmlsZXBvczsKLQkJfQotCX0KLQotCWdldF9zeW1ib2xzKHN5bWJvbHMpOwotCi1vdXQ6Ci0JYWRkX3N5bWJvbHMoc3ltYm9scywgc3ltYm9sX2ZpbHRlcik7Ci0JcmV0dXJuOwotb3V0X2ZhaWw6Ci0JaWJmZC5jbG9zZSgpOwotCWRiZmQuY2xvc2UoKTsKLQkvLyBtYWtlIHRoZSBmYWtlIHN5bWJvbCBmaXQgd2l0aGluIHRoZSBmYWtlIGZpbGUKLQlmaWxlX3NpemUgPSAtMTsKLQlnb3RvIG91dDsKLX0KLQotCi1vcF9iZmQ6On5vcF9iZmQoKQotewotfQotCi0KLXVuc2lnbmVkIGxvbmcgY29uc3Qgb3BfYmZkOjpnZXRfc3RhcnRfb2Zmc2V0KGJmZF92bWEgdm1hKSBjb25zdAotewotCWlmICghdm1hIHx8ICFpYmZkLnZhbGlkKCkpIHsKLQkJZmlsZXBvc19tYXBfdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWxlcG9zX21hcC5maW5kKCIudGV4dCIpOwotCQlpZiAoaXQgIT0gZmlsZXBvc19tYXAuZW5kKCkpCi0JCQlyZXR1cm4gaXQtPnNlY29uZDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yIChhc2VjdGlvbiAqIHNlY3QgPSBpYmZkLmFiZmQtPnNlY3Rpb25zOyBzZWN0OyBzZWN0ID0gc2VjdC0+bmV4dCkgewotCQlpZiAoc2VjdC0+dm1hID09IHZtYSkKLQkJCXJldHVybiBzZWN0LT5maWxlcG9zOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgb3BfYmZkOjpnZXRfc3ltYm9scyhvcF9iZmQ6OnN5bWJvbHNfZm91bmRfdCAmIHN5bWJvbHMpCi17Ci0JaWJmZC5nZXRfc3ltYm9scygpOwotCi0JLy8gT24gc2VwYXJhdGUgZGVidWcgZmlsZSBzeXN0ZW1zLCB0aGUgbWFpbiBiZmQgaGFzIG5vIHN5bWJvbHMsCi0JLy8gc28gZXZlbiBmb3Igbm9uIC1nIHJlcG9ydHMsIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGUgZGJmZC4KLQkvLyBUaGlzIGh1cnRzIHVzIHByZXR0eSBiYWRseSAodGhlIENSQyksIGJ1dCB3ZSByZWFsbHkgZG9uJ3QKLQkvLyBoYXZlIG11Y2ggY2hvaWNlIGF0IHRoZSBtb21lbnQuCi0JaGFzX2RlYnVnX2luZm8oKTsKLQotCWRiZmQuZ2V0X3N5bWJvbHMoKTsKLQotCXNpemVfdCBpOwotCWZvciAoaSA9IDA7IGkgPCBpYmZkLm5yX3N5bXM7ICsraSkgewotCQlpZiAoaW50ZXJlc3Rpbmdfc3ltYm9sKGliZmQuc3ltc1tpXSkpCi0JCQlzeW1ib2xzLnB1c2hfYmFjayhvcF9iZmRfc3ltYm9sKGliZmQuc3ltc1tpXSkpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkYmZkLm5yX3N5bXM7ICsraSkgewotCQlpZiAoIWludGVyZXN0aW5nX3N5bWJvbChkYmZkLnN5bXNbaV0pKQotCQkJY29udGludWU7Ci0KLQkJLy8gbmVlZCB0byB1c2UgZmlsZXBvcyBvZiBvcmlnaW5hbCBmaWxlJ3Mgc2VjdGlvbiBmb3IKLQkJLy8gZGVidWcgZmlsZSBzeW1ib2xzLiBXZSBwcm9iYWJseSBuZWVkIHRvIGJlIG1vcmUKLQkJLy8gY2FyZWZ1bCBmb3Igc3BlY2lhbCBzeW1ib2xzIHdoaWNoIGhhdmUgLT5zZWN0aW9uIGZyb20KLQkJLy8gLnJvZGF0YSBsaWtlICpBQlMqCi0JCXUzMiBmaWxlcG9zID0gZmlsZXBvc19tYXBbZGJmZC5zeW1zW2ldLT5zZWN0aW9uLT5uYW1lXTsKLQkJaWYgKGZpbGVwb3MgIT0gMCkKLQkJCWRiZmQuc3ltc1tpXS0+c2VjdGlvbi0+ZmlsZXBvcyA9IGZpbGVwb3M7Ci0JCXN5bWJvbHMucHVzaF9iYWNrKG9wX2JmZF9zeW1ib2woZGJmZC5zeW1zW2ldKSk7Ci0JfQotCi0Jc3ltYm9scy5zb3J0KCk7Ci0KLQlzeW1ib2xzX2ZvdW5kX3Q6Oml0ZXJhdG9yIGl0ID0gc3ltYm9scy5iZWdpbigpOwotCi0JLy8gd2UgbmVlZCB0byBlbnN1cmUgdGhhbiBmb3IgYSBnaXZlbiB2bWEgb25seSBvbmUgc3ltYm9sIGV4aXN0IGVsc2UKLQkvLyB3ZSByZWFkIG1vcmUgdGhhbiBvbmUgdGltZSBzb21lIHNhbXBsZXMuIEZpeCAjNTI2MDk4Ci0JZm9yICg7IGl0ICE9IHN5bWJvbHMuZW5kKCk7KSB7Ci0JCXN5bWJvbHNfZm91bmRfdDo6aXRlcmF0b3IgdGVtcCA9IGl0OwotCQkrK3RlbXA7Ci0JCWlmICh0ZW1wICE9IHN5bWJvbHMuZW5kKCkgJiYgKGl0LT52bWEoKSA9PSB0ZW1wLT52bWEoKSkpIHsKLQkJCWlmIChib3Jpbmdfc3ltYm9sKCppdCwgKnRlbXApKSB7Ci0JCQkJaXQgPSBzeW1ib2xzLmVyYXNlKGl0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3ltYm9scy5lcmFzZSh0ZW1wKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCSsraXQ7Ci0JCX0KLQl9Ci0KLQkvLyBub3cgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgc3ltYm9sIHNpemUsIHdlIGNhbid0IGZpcnN0IGluY2x1ZGUvZXhjbHVkZQotCS8vIHN5bWJvbHMgYmVjYXVzZSB0aGUgc2l6ZSBvZiBzeW1ib2wgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBkaWZmZXJlbmNlCi0JLy8gYmV0d2VlbiB0aGUgdm1hIG9mIGEgc3ltYm9sIGFuZCB0aGUgbmV4dCBvbmUuCi0JZm9yIChpdCA9IHN5bWJvbHMuYmVnaW4oKSA7IGl0ICE9IHN5bWJvbHMuZW5kKCk7ICsraXQpIHsKLQkJb3BfYmZkX3N5bWJvbCBjb25zdCAqIG5leHQgPSAwOwotCQlzeW1ib2xzX2ZvdW5kX3Q6Oml0ZXJhdG9yIHRlbXAgPSBpdDsKLQkJKyt0ZW1wOwotCQlpZiAodGVtcCAhPSBzeW1ib2xzLmVuZCgpKQotCQkJbmV4dCA9ICYqdGVtcDsKLQkJaXQtPnNpemUoc3ltYm9sX3NpemUoKml0LCBuZXh0KSk7Ci0JfQotfQotCi0KLXZvaWQgb3BfYmZkOjphZGRfc3ltYm9scyhvcF9iZmQ6OnN5bWJvbHNfZm91bmRfdCAmIHN5bWJvbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX2ZpbHRlciBjb25zdCAmIHN5bWJvbF9maWx0ZXIpCi17Ci0JLy8gaW1hZ2VzIHdpdGggbm8gc3ltYm9scyBkZWJ1ZyBpbmZvIGF2YWlsYWJsZSBnZXQgYSBwbGFjZWhvbGRlciBzeW1ib2wKLQlpZiAoc3ltYm9scy5lbXB0eSgpKQotCQlzeW1ib2xzLnB1c2hfYmFjayhjcmVhdGVfYXJ0aWZpY2lhbF9zeW1ib2woKSk7Ci0KLQljdmVyYiA8PCB2YmZkIDw8ICJudW1iZXIgb2Ygc3ltYm9scyBiZWZvcmUgZmlsdGVyaW5nICIKLQkgICAgICA8PCBkZWMgPDwgc3ltYm9scy5zaXplKCkgPDwgaGV4IDw8IGVuZGw7Ci0KLQlzeW1ib2xzX2ZvdW5kX3Q6Oml0ZXJhdG9yIGl0OwotCWl0ID0gcmVtb3ZlX2lmKHN5bWJvbHMuYmVnaW4oKSwgc3ltYm9scy5lbmQoKSwKLQkgICAgICAgICAgICAgICByZW1vdmVfZmlsdGVyKHN5bWJvbF9maWx0ZXIpKTsKLQotCWNvcHkoc3ltYm9scy5iZWdpbigpLCBpdCwgYmFja19pbnNlcnRlcihzeW1zKSk7Ci0KLQljdmVyYiA8PCB2YmZkIDw8ICJudW1iZXIgb2Ygc3ltYm9scyBub3cgIgotCSAgICAgIDw8IGRlYyA8PCBzeW1zLnNpemUoKSA8PCBoZXggPDwgZW5kbDsKLX0KLQotCi11bnNpZ25lZCBsb25nIG9wX2JmZDo6c3ltX29mZnNldChzeW1ib2xfaW5kZXhfdCBzeW1faW5kZXgsIHUzMiBudW0pIGNvbnN0Ci17Ci0JLyogdGFrZSBvZmYgc2VjdGlvbiBvZmZzZXQgYW5kIHN5bWIgdmFsdWUgKi8KLQlyZXR1cm4gbnVtIC0gc3ltc1tzeW1faW5kZXhdLmZpbGVwb3MoKTsKLX0KLQotCi1iZmRfdm1hIG9wX2JmZDo6b2Zmc2V0X3RvX3BjKGJmZF92bWEgb2Zmc2V0KSBjb25zdAotewotCWFzZWN0aW9uIGNvbnN0ICogc2VjdCA9IGliZmQuYWJmZC0+c2VjdGlvbnM7Ci0KLQlmb3IgKDsgc2VjdDsgc2VjdCA9IHNlY3QtPm5leHQpIHsKLQkJaWYgKG9mZnNldCA+PSBiZmRfdm1hKHNlY3QtPmZpbGVwb3MpICYmCi0JCSAgICAoIXNlY3QtPm5leHQgfHwgb2Zmc2V0IDwgYmZkX3ZtYShzZWN0LT5uZXh0LT5maWxlcG9zKSkpIHsKLQkJCXJldHVybiBzZWN0LT52bWEgKyAob2Zmc2V0IC0gc2VjdC0+ZmlsZXBvcyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1ib29sIG9wX2JmZDo6aGFzX2RlYnVnX2luZm8oKSBjb25zdAotewotCWlmIChkZWJ1Z19pbmZvLmNhY2hlZCgpKQotCQlyZXR1cm4gZGVidWdfaW5mby5nZXQoKTsKLQotCWlmICghaWJmZC52YWxpZCgpKQotCQlyZXR1cm4gZGVidWdfaW5mby5yZXNldChmYWxzZSk7Ci0KLQlpZiAoaWJmZC5oYXNfZGVidWdfaW5mbygpKQotCQlyZXR1cm4gZGVidWdfaW5mby5yZXNldCh0cnVlKTsKLQotCS8vIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiAuZGVidWcgZmlsZQotCXN0cmluZyBjb25zdCBnbG9iYWwoYXJjaGl2ZV9wYXRoICsgREVCVUdESVIpOwotCXN0cmluZyBjb25zdCBpbWFnZV9wYXRoID0gYXJjaGl2ZV9wYXRoICsgZmlsZW5hbWU7Ci0Jc3RyaW5nIGNvbnN0IGRpcm5hbWUoaW1hZ2VfcGF0aC5zdWJzdHIoMCwgaW1hZ2VfcGF0aC5yZmluZCgnLycpKSk7Ci0KLQlpZiAoZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlKGliZmQuYWJmZCwgZGlybmFtZSwgZ2xvYmFsLCBkZWJ1Z19maWxlbmFtZSkpIHsKLQkJY3ZlcmIgPDwgdmJmZCA8PCAibm93IGxvYWRpbmc6ICIgPDwgZGVidWdfZmlsZW5hbWUgPDwgZW5kbDsKLQkJZGJmZC5hYmZkID0gb3Blbl9iZmQoZGVidWdfZmlsZW5hbWUpOwotCQlpZiAoZGJmZC5oYXNfZGVidWdfaW5mbygpKQotCQkJcmV0dXJuIGRlYnVnX2luZm8ucmVzZXQodHJ1ZSk7Ci0JfQotCi0JLy8gLmRlYnVnIGlzIG9wdGlvbmFsLCBzbyB3aWxsIG5vdCBmYWlsIGlmIHRoZXJlJ3MgYSBwcm9ibGVtCi0JY3ZlcmIgPDwgdmJmZCA8PCAiZmFpbGVkIHRvIHByb2Nlc3Mgc2VwYXJhdGUgZGVidWcgZmlsZSAiCi0JICAgICAgPDwgZGVidWdfZmlsZW5hbWUgPDwgZW5kbDsKLQotCXJldHVybiBkZWJ1Z19pbmZvLnJlc2V0KGZhbHNlKTsKLX0KLQotCi1ib29sIG9wX2JmZDo6Z2V0X2xpbmVucihzeW1ib2xfaW5kZXhfdCBzeW1faWR4LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAotCQkJc3RyaW5nICYgc291cmNlX2ZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgJiBsaW5lbnIpIGNvbnN0Ci17Ci0JaWYgKCFoYXNfZGVidWdfaW5mbygpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvLyBGSVhNRTogdG8gdGVzdCwgSSdtIHVuc3VyZSBpZiBmcm9tIHRoaXMgcG9pbnQgd2UgbXVzdCB1c2UgYWJmZAotCS8vIG9yIHRoZSBjaGVjayBpZiAocGMgPj0gYmZkX3NlY3Rpb25fc2l6ZShhYmZkLCBzZWN0aW9uKSkgbXVzdCBiZSBkb25lCi0JLy8gd2l0aCBpYmZkLgotCWJmZF9pbmZvIGNvbnN0ICYgYiA9IGRiZmQudmFsaWQoKSA/IGRiZmQgOiBpYmZkOwotCi0JbGluZW5yX2luZm8gY29uc3QgaW5mbyA9IGZpbmRfbmVhcmVzdF9saW5lKGIsIHN5bXNbc3ltX2lkeF0sIG9mZnNldCk7Ci0KLQlpZiAoIWluZm8uZm91bmQpCi0JCXJldHVybiBmYWxzZTsKLQotCXNvdXJjZV9maWxlbmFtZSA9IGluZm8uZmlsZW5hbWU7Ci0JbGluZW5yID0gaW5mby5saW5lOwotCXJldHVybiB0cnVlOwotfQotCi0KLXNpemVfdCBvcF9iZmQ6OnN5bWJvbF9zaXplKG9wX2JmZF9zeW1ib2wgY29uc3QgJiBzeW0sCi0JCQkgICBvcF9iZmRfc3ltYm9sIGNvbnN0ICogbmV4dCkgY29uc3QKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gc3ltLmZpbGVwb3MoKTsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IG5leHQgPyBuZXh0LT5maWxlcG9zKCkgOiBmaWxlX3NpemU7Ci0KLQlyZXR1cm4gZW5kIC0gc3RhcnQ7Ci19Ci0KLQotdm9pZCBvcF9iZmQ6OmdldF9zeW1ib2xfcmFuZ2Uoc3ltYm9sX2luZGV4X3Qgc3ltX2lkeCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgJiBzdGFydCwgdW5zaWduZWQgbG9uZyAmIGVuZCkgY29uc3QKLXsKLQlvcF9iZmRfc3ltYm9sIGNvbnN0ICYgc3ltID0gc3ltc1tzeW1faWR4XTsKLQotCWJvb2wgY29uc3QgdmVyYm9zZSA9IGN2ZXJiIDw8ICh2YmZkICYgdmxldmVsMSk7Ci0KLQlzdGFydCA9IHN5bS5maWxlcG9zKCk7Ci0JZW5kID0gc3RhcnQgKyBzeW0uc2l6ZSgpOwotCi0JaWYgKCF2ZXJib3NlKQotCQlyZXR1cm47Ci0KLQlpb19zdGF0ZSBzdGF0ZShjdmVyYiA8PCAodmJmZCAmIHZsZXZlbDEpKTsKLQotCWN2ZXJiIDw8ICh2YmZkICYgdmxldmVsMSkgPDwgInN5bWJvbCAiIDw8IHN5bS5uYW1lKCkKLQkgICAgICA8PCAiLCB2YWx1ZSAiIDw8IGhleCA8PCBzeW0udmFsdWUoKSA8PCBlbmRsOwotCWN2ZXJiIDw8ICh2YmZkICYgdmxldmVsMSkKLQkgICAgICA8PCAic3RhcnQgIiA8PCBoZXggPDwgc3RhcnQgPDwgIiwgZW5kICIgPDwgZW5kIDw8IGVuZGw7Ci0KLQlpZiAoc3ltLnN5bWJvbCgpKSB7Ci0JCWN2ZXJiIDw8ICh2YmZkICYgdmxldmVsMSkgPDwgImluIHNlY3Rpb24gIgotCQkgICAgICA8PCBzeW0uc3ltYm9sKCktPnNlY3Rpb24tPm5hbWUgPDwgIiwgZmlsZXBvcyAiCi0JCSAgICAgIDw8IGhleCA8PCBzeW0uc3ltYm9sKCktPnNlY3Rpb24tPmZpbGVwb3MgPDwgZW5kbDsKLQl9Ci19Ci0KLQotdm9pZCBvcF9iZmQ6OmdldF92bWFfcmFuZ2UoYmZkX3ZtYSAmIHN0YXJ0LCBiZmRfdm1hICYgZW5kKSBjb25zdAotewotCWlmICghc3ltcy5lbXB0eSgpKSB7Ci0JCS8vIHN5bXMgYXJlIHNvcnRlZCBieSB2bWEgc28gdm1hIG9mIHRoZSBmaXJzdCBzeW1ib2wgYW5kIHZtYSArCi0JCS8vIHNpemUgb2YgdGhlIGxhc3Qgc3ltYm9sIGdpdmUgdGhlIHZtYSByYW5nZSBmb3IgZ3Byb2Ygb3V0cHV0Ci0JCW9wX2JmZF9zeW1ib2wgY29uc3QgJiBsYXN0X3N5bWIgPSBzeW1zW3N5bXMuc2l6ZSgpIC0gMV07Ci0JCXN0YXJ0ID0gc3ltc1swXS52bWEoKTsKLQkJLy8gZW5kIGlzIGV4Y2x1ZGVkIGZyb20gcmFuZ2Ugc28gKyAxICppZiogbGFzdF9zeW1iLnNpemUoKSAhPSAwCi0JCWVuZCA9IGxhc3Rfc3ltYi52bWEoKSArIGxhc3Rfc3ltYi5zaXplKCkgKyAobGFzdF9zeW1iLnNpemUoKSAhPSAwKTsKLQl9IGVsc2UgewotCQlzdGFydCA9IDA7Ci0JCWVuZCA9IGZpbGVfc2l6ZTsKLQl9Ci19Ci0KLQotb3BfYmZkX3N5bWJvbCBjb25zdCBvcF9iZmQ6OmNyZWF0ZV9hcnRpZmljaWFsX3N5bWJvbCgpCi17Ci0JLy8gRklYTUU6IHByZWZlciBhIGJvb2wgYXJ0aWZpY2lhbDsgdG8gdGhpcyA/PwotCXN0cmluZyBzeW1uYW1lID0gIj8iOwotCi0Jc3ltbmFtZSArPSBnZXRfZmlsZW5hbWUoKTsKLQotCWJmZF92bWEgc3RhcnQsIGVuZDsKLQlnZXRfdm1hX3JhbmdlKHN0YXJ0LCBlbmQpOwotCXJldHVybiBvcF9iZmRfc3ltYm9sKHN0YXJ0LCBlbmQgLSBzdGFydCwgc3ltbmFtZSk7Ci19Ci0KLQotc3RyaW5nIG9wX2JmZDo6Z2V0X2ZpbGVuYW1lKCkgY29uc3QKLXsKLQlyZXR1cm4gZmlsZW5hbWU7Ci19Ci0KLQotc2l6ZV90IG9wX2JmZDo6YmZkX2FyY2hfYml0c19wZXJfYWRkcmVzcygpIGNvbnN0Ci17Ci0JaWYgKGliZmQudmFsaWQoKSkKLQkJcmV0dXJuIDo6YmZkX2FyY2hfYml0c19wZXJfYWRkcmVzcyhpYmZkLmFiZmQpOwotCS8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBpZiB0aGUgdW5kZXJsaW5lZCBpYmZkCi0JLy8gaXMgb2ssIG11c3Qgd2UgdGhyb3cgPwotCXJldHVybiBzaXplb2YoYmZkX3ZtYSk7Ci19CmRpZmYgLS1naXQgYS9saWJ1dGlsKysvb3BfYmZkLmggYi9saWJ1dGlsKysvb3BfYmZkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMWExYWEuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL29wX2JmZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BfYmZkLmgKLSAqIEVuY2Fwc3VsYXRpb24gb2YgYmZkIG9iamVjdHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIE9QX0JGRF9ICi0jZGVmaW5lIE9QX0JGRF9ICi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlICJiZmRfc3VwcG9ydC5oIgotI2luY2x1ZGUgInV0aWxpdHkuaCIKLSNpbmNsdWRlICJjYWNoZWRfdmFsdWUuaCIKLSNpbmNsdWRlICJvcF90eXBlcy5oIgotCi1jbGFzcyBvcF9iZmQ7Ci1jbGFzcyBzdHJpbmdfZmlsdGVyOwotCi0vLy8gYWxsIHN5bWJvbCB2ZWN0b3IgaW5kZXhpbmcgdXNlcyB0aGlzIHR5cGUKLXR5cGVkZWYgc2l6ZV90IHN5bWJvbF9pbmRleF90OwotCi0vKioKLSAqIEEgc3ltYm9sIGRlc2NyaXB0aW9uIGZyb20gYSBiZmQgcG9pbnQgb2Ygdmlldy4gVGhpcyBkdXBsaWNhdGUKLSAqIGluZm9ybWF0aW9uIHBvaW50ZWQgYnkgYW4gYXN5bWJvbCwgd2UgbmVlZCB0aGlzIGR1cGxpY2F0aW9uIGluIGNhc2UKLSAqIHRoZSBzeW1ib2wgaXMgYW4gYXJ0aWZpY2lhbCBzeW1ib2wKLSAqLwotY2xhc3Mgb3BfYmZkX3N5bWJvbCB7Ci1wdWJsaWM6Ci0KLQkvLy8gY3RvciBmb3IgcmVhbCBzeW1ib2xzCi0Jb3BfYmZkX3N5bWJvbChhc3ltYm9sIGNvbnN0ICogYSk7Ci0KLQkvLy8gY3RvciBmb3IgYXJ0aWZpY2lhbCBzeW1ib2xzCi0Jb3BfYmZkX3N5bWJvbChiZmRfdm1hIHZtYSwgc2l6ZV90IHNpemUsIHN0ZDo6c3RyaW5nIGNvbnN0ICYgbmFtZSk7Ci0KLQliZmRfdm1hIHZtYSgpIGNvbnN0IHsgcmV0dXJuIHN5bWJfdmFsdWUgKyBzZWN0aW9uX3ZtYTsgfQotCXVuc2lnbmVkIGxvbmcgdmFsdWUoKSBjb25zdCB7IHJldHVybiBzeW1iX3ZhbHVlOyB9Ci0JdW5zaWduZWQgbG9uZyBmaWxlcG9zKCkgY29uc3QgeyByZXR1cm4gc3ltYl92YWx1ZSArIHNlY3Rpb25fZmlsZXBvczsgfQotCXN0ZDo6c3RyaW5nIGNvbnN0ICYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIHN5bWJfbmFtZTsgfQotCWFzeW1ib2wgY29uc3QgKiBzeW1ib2woKSBjb25zdCB7IHJldHVybiBiZmRfc3ltYm9sOyB9Ci0Jc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzeW1iX3NpemU7IH0KLQl2b2lkIHNpemUoc2l6ZV90IHMpIHsgc3ltYl9zaXplID0gczsgfQotCWJvb2wgaGlkZGVuKCkgY29uc3QgeyByZXR1cm4gc3ltYl9oaWRkZW47IH0KLQlib29sIHdlYWsoKSBjb25zdCB7IHJldHVybiBzeW1iX3dlYWs7IH0KLQotCS8vLyBjb21wYXJlIHR3byBzeW1ib2xzIGJ5IHRoZWlyIGZpbGVwb3MoKQotCWJvb2wgb3BlcmF0b3I8KG9wX2JmZF9zeW1ib2wgY29uc3QgJiBsaHMpIGNvbnN0OwotCi1wcml2YXRlOgotCS8vLyB0aGUgb3JpZ2luYWwgYmZkIHN5bWJvbCwgdGhpcyBjYW4gYmUgbnVsbCBpZiB0aGUgc3ltYm9sIGlzIGFuCi0JLy8vIGFydGlmaWNpYWwgc3ltYm9sCi0JYXN5bWJvbCBjb25zdCAqIGJmZF9zeW1ib2w7Ci0JLy8vIHRoZSBvZmZzZXQgb2YgdGhpcyBzeW1ib2wgcmVsYXRpdmUgdG8gdGhlIGJlZ2luIG9mIHRoZSBzZWN0aW9uJ3MKLQkvLy8gc3ltYm9sCi0JdW5zaWduZWQgbG9uZyBzeW1iX3ZhbHVlOwotCS8vLyB0aGUgc2VjdGlvbiBmaWxlcG9zIGZvciB0aGlzIHN5bWJvbAotCXVuc2lnbmVkIGxvbmcgc2VjdGlvbl9maWxlcG9zOwotCS8vLyB0aGUgc2VjdGlvbiB2bWEgZm9yIHRoaXMgc3ltYm9sCi0JYmZkX3ZtYSBzZWN0aW9uX3ZtYTsKLQkvLy8gdGhlIHNpemUgb2YgdGhpcyBzeW1ib2wKLQlzaXplX3Qgc3ltYl9zaXplOwotCS8vLyB0aGUgbmFtZSBvZiB0aGUgc3ltYm9sCi0Jc3RkOjpzdHJpbmcgc3ltYl9uYW1lOwotCS8vLyBub3JtYWxseSBub3QgZXh0ZXJuYWxseSB2aXNpYmxlIHN5bWJvbAotCWJvb2wgc3ltYl9oaWRkZW47Ci0JLy8vIHdoZXRoZXIgb3RoZXIgc3ltYm9scyBjYW4gb3ZlcnJpZGUgaXQKLQlib29sIHN5bWJfd2VhazsKLX07Ci0KLS8qKgotICogRW5jYXBzdWxhdGlvbiBvZiBhIGJmZCBvYmplY3QuIFNpbXBsaWZpZXMgb3Blbi9jbG9zZSBvZiBiZmQsIGVudW1lcmF0aW5nCi0gKiBzeW1ib2xzIGFuZCByZXRyaWV2aW5nIGluZm9ybWF0aW9ucyBmb3Igc3ltYm9scyBvciB2bWEuCi0gKgotICogVXNlIG9mIHRoaXMgY2xhc3MgcmVsaWVzIG9uIGEgc3RkOjpvc3RyZWFtIGN2ZXJiCi0gKi8KLWNsYXNzIG9wX2JmZCB7Ci1wdWJsaWM6Ci0JLyoqCi0JICogQHBhcmFtIGFyY2hpdmVfcGF0aCBvcGFyY2hpdmUgcHJlZml4IHBhdGgKLQkgKiBAcGFyYW0gZmlsZW5hbWUgIHRoZSBuYW1lIG9mIHRoZSBpbWFnZSBmaWxlCi0JICogQHBhcmFtIHN5bWJvbF9maWx0ZXIgIGZpbHRlciB0byBhcHBseSB0byBzeW1ib2xzCi0JICogQHBhcmFtIG9rIGluLW91dCBwYXJhbWV0ZXI6IG9uIGluLCBpZiBub3Qgc2V0LCBkb24ndAotCSAqIG9wZW4gdGhlIGJmZCAoYmVjYXVzZSBpdCdzIG5vdCB0aGVyZSBvciB3aGF0ZXZlcikuIE9uIG91dCwKLQkgKiBpdCdzIHNldCB0byBmYWxzZSBpZiB0aGUgYmZkIGNvdWxkbid0IGJlIGxvYWRlZC4KLQkgKi8KLQlvcF9iZmQoc3RkOjpzdHJpbmcgY29uc3QgJiBhcmNoaXZlX3BhdGgsCi0JICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUsCi0JICAgICAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1ib2xfZmlsdGVyLAotCSAgICAgICBib29sICYgb2spOwotCi0JLy8vIGNsb3NlIGFuIG9wZW5lZCBiZmQgaW1hZ2UgYW5kIGZyZWUgYWxsIHJlbGF0ZWQgcmVzb3VyY2VzCi0Jfm9wX2JmZCgpOwotCi0JLyoqCi0JICogQHBhcmFtIHN5bV9pZHggaW5kZXggb2YgdGhlIHN5bWJvbAotCSAqIEBwYXJhbSBvZmZzZXQgZmVudHJ5IG51bWJlcgotCSAqIEBwYXJhbSBmaWxlbmFtZSBvdXRwdXQgcGFyYW1ldGVyIHRvIHN0b3JlIGZpbGVuYW1lCi0JICogQHBhcmFtIGxpbmVuciBvdXRwdXQgcGFyYW1ldGVyIHRvIHN0b3JlIGxpbmVuci4KLQkgKgotCSAqIFJldHJpZXZlIHRoZSByZWxldmFudCBmaW5lbmFtZTpsaW5lbnIgaW5mb3JtYXRpb24gZm9yIHRoZSBzeW1faWR4Ci0JICogYXQgb2Zmc2V0LiBJZiB0aGUgbG9va3VwIGZhaWxzLCByZXR1cm4gZmFsc2UuIEluIHNvbWUgY2FzZXMgdGhpcwotCSAqIGZ1bmN0aW9uIGNhbiByZXRyaWV2ZSB0aGUgZmlsZW5hbWUgYW5kIHJldHVybiB0cnVlIGJ1dCBmYWlsIHRvCi0JICogcmV0cmlldmUgdGhlIGxpbmVuciBhbmQgc28gY2FuIHJldHVybiB6ZXJvIGluIGxpbmVucgotCSAqLwotCWJvb2wgZ2V0X2xpbmVucihzeW1ib2xfaW5kZXhfdCBzeW1faWR4LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAotCQkJc3RkOjpzdHJpbmcgJiBmaWxlbmFtZSwgdW5zaWduZWQgaW50ICYgbGluZW5yKSBjb25zdDsKLQotCS8qKgotCSAqIEBwYXJhbSBzeW1faWR4IHN5bWJvbCBpbmRleAotCSAqIEBwYXJhbSBzdGFydCByZWZlcmVuY2UgdG8gc3RhcnQgdmFyCi0JICogQHBhcmFtIGVuZCByZWZlcmVuY2UgdG8gZW5kIHZhcgotCSAqCi0JICogQ2FsY3VsYXRlcyB0aGUgcmFuZ2Ugb2Ygc2FtcGxlIGZpbGUgZW50cmllcyBjb3ZlcmVkIGJ5IHN5bS4gc3RhcnQKLQkgKiBhbmQgZW5kIHdpbGwgYmUgZmlsbGVkIGluIGFwcHJvcHJpYXRlbHkuIElmIGluZGV4IGlzIHRoZSBsYXN0IGVudHJ5Ci0JICogaW4gc3ltYm9sIHRhYmxlLCBhbGwgZW50cmllcyB1cCB0byB0aGUgZW5kIG9mIHRoZSBzYW1wbGUgZmlsZSB3aWxsCi0JICogYmUgdXNlZC4gIEFmdGVyIGNhbGN1bGF0aW5nIHN0YXJ0IGFuZCBlbmQgdGhleSBhcmUgc2FuaXRpemVkCi0JICoKLQkgKiBBbGwgZXJyb3JzIGFyZSBmYXRhbC4KLQkgKi8KLQl2b2lkIGdldF9zeW1ib2xfcmFuZ2Uoc3ltYm9sX2luZGV4X3Qgc3ltX2lkeCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgJiBzdGFydCwgdW5zaWduZWQgbG9uZyAmIGVuZCkgY29uc3Q7Ci0KLQkvKioKLQkgKiBzeW1fb2Zmc2V0IC0gcmV0dXJuIG9mZnNldCBmcm9tIGEgc3ltYm9sJ3Mgc3RhcnQKLQkgKiBAcGFyYW0gbnVtX3N5bWJvbHMgc3ltYm9sIG51bWJlcgotCSAqIEBwYXJhbSBudW0gbnVtYmVyIG9mIGZlbnRyeQotCSAqCi0JICogUmV0dXJucyB0aGUgb2Zmc2V0IG9mIGEgc2FtcGxlIGF0IHBvc2l0aW9uIG51bQotCSAqIGluIHRoZSBzYW1wbGVzIGZpbGUgZnJvbSB0aGUgc3RhcnQgb2Ygc3ltYm9sIHN5bV9pZHguCi0JICovCi0JdW5zaWduZWQgbG9uZyBzeW1fb2Zmc2V0KHN5bWJvbF9pbmRleF90IG51bV9zeW1ib2xzLCB1MzIgbnVtKSBjb25zdDsKLQotCS8qKgotCSAqIEBwYXJhbSBzdGFydCByZWZlcmVuY2UgdG8gdGhlIHN0YXJ0IHZtYQotCSAqIEBwYXJhbSBlbmQgcmVmZXJlbmNlIHRvIHRoZSBlbmQgdm1hCi0JICoKLQkgKiByZXR1cm4gaW4gc3RhcnQsIGVuZCB0aGUgdm1hIHJhbmdlIGZvciB0aGlzIGJpbmFyeSBvYmplY3QuCi0JICovCi0Jdm9pZCBnZXRfdm1hX3JhbmdlKGJmZF92bWEgJiBzdGFydCwgYmZkX3ZtYSAmIGVuZCkgY29uc3Q7Ci0KLQkvKiogcmV0dXJuIHRoZSByZWxvY2F0ZWQgUEMgdmFsdWUgZm9yIHRoZSBnaXZlbiBmaWxlIG9mZnNldCAqLwotCWJmZF92bWEgb2Zmc2V0X3RvX3BjKGJmZF92bWEgb2Zmc2V0KSBjb25zdDsKLQotCS8qKgotCSAqIElmIHBhc3NlZCAwLCByZXR1cm4gdGhlIGZpbGUgcG9zaXRpb24gb2YgdGhlIC50ZXh0IHNlY3Rpb24uCi0JICogT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGZpbGVwb3Mgb2YgYSBzZWN0aW9uIHdpdGggYSBtYXRjaGluZwotCSAqIHZtYS4KLQkgKi8KLQl1bnNpZ25lZCBsb25nIGNvbnN0IGdldF9zdGFydF9vZmZzZXQoYmZkX3ZtYSB2bWEgPSAwKSBjb25zdDsKLSAKLQkvKioKLQkgKiBSZXR1cm4gdGhlIGltYWdlIG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgYmluYXJ5IGltYWdlLiBGb3IgYW4KLQkgKiBhcmNoaXZlLCB0aGlzIHJldHVybnMgdGhlIHBhdGggKndpdGhpbiogdGhlIGFyY2hpdmUsIG5vdCB0aGUKLQkgKiBmdWxsIHBhdGggb2YgdGhlIGZpbGUuCi0JICovCi0Jc3RkOjpzdHJpbmcgZ2V0X2ZpbGVuYW1lKCkgY29uc3Q7Ci0KLQkvLy8gc29ydGVkIHZlY3RvciBieSB2bWEgb2YgaW50ZXJlc3Rpbmcgc3ltYm9sLgotCXN0ZDo6dmVjdG9yPG9wX2JmZF9zeW1ib2w+IHN5bXM7Ci0KLQkvLy8gcmV0dXJuIGluIGJpdHMgdGhlIGJmZF92bWEgc2l6ZSBmb3IgdGhpcyBiaW5hcnkuIFRoaXMgaXMgbmVlZGVkCi0JLy8vIGJlY2F1c2UgZ3Byb2Ygb3V0cHV0IGRlcGVuZCBvbiB0aGUgYmZkX3ZtYSBmb3IgKnRoaXMqIGJpbmFyeQotCS8vLyBhbmQgZG8gbm90IGRlcGVuZCBvbiBzaXplb2YoYmZkX3ZtYSkKLQlzaXplX3QgYmZkX2FyY2hfYml0c19wZXJfYWRkcmVzcygpIGNvbnN0OwotCi0JLy8vIHJldHVybiB0cnVlIGlmIGJpbmFyeSBjb250YWluIHNvbWUgZGVidWcgaW5mb3JtYXRpb24KLQlib29sIGhhc19kZWJ1Z19pbmZvKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0JLy8vIHRlbXBvcmFyeSBjb250YWluZXIgdHlwZSBmb3IgZ2V0dGluZyBzeW1ib2xzCi0JdHlwZWRlZiBzdGQ6Omxpc3Q8b3BfYmZkX3N5bWJvbD4gc3ltYm9sc19mb3VuZF90OwotCi0JLyoqCi0JICogUGFyc2UgYW5kIHNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyIGFsbCBzeW1ib2xzCi0JICogaW4gdGhlIGZpbGUgcG9pbnRlZCB0byBieSBhYmZkIHRoYXQgcmVzaWRlIGluCi0JICogYSAlU0VDX0NPREUgc2VjdGlvbi4KLQkgKgotCSAqIFRoZSBzeW1ib2xzIGFyZSBmaWx0ZXJlZCB0aHJvdWdoCi0JICogdGhlIGludGVyZXN0aW5nX3N5bWJvbCgpIHByZWRpY2F0ZSBhbmQgc29ydGVkCi0JICogd2l0aCBvcF9iZmRfc3ltYm9sOjpvcGVyYXRvcjwoKSBjb21wYXJhdG9yLgotCSAqLwotCXZvaWQgZ2V0X3N5bWJvbHMoc3ltYm9sc19mb3VuZF90ICYgc3ltYm9scyk7Ci0KLQkvKioKLQkgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGdldF9zeW1ib2xzLgotCSAqIFBvcHVsYXRlcyBiZmRfc3ltcyBhbmQgZXh0cmFjdHMgdGhlICJpbnRlcmVzdGluZ19zeW1ib2wicy4KLQkgKi8KLQl2b2lkIGdldF9zeW1ib2xzX2Zyb21fZmlsZShiZmRfaW5mbyAmIGJmZCwgc2l6ZV90IHN0YXJ0LAotCQkJCSAgIG9wX2JmZDo6c3ltYm9sc19mb3VuZF90ICYgc3ltYm9scywKLQkJCQkgICBib29sIGRlYnVnX2ZpbGUpOwotCi0JLyoqCi0JICogQWRkIHRoZSBzeW1ib2xzIGluIHRoZSBiaW5hcnksIGFwcGx5aW5nIGZpbHRlcmluZywKLQkgKiBhbmQgaGFuZGxpbmcgYXJ0aWZpY2lhbCBzeW1ib2xzLgotCSAqLwotCXZvaWQgYWRkX3N5bWJvbHMoc3ltYm9sc19mb3VuZF90ICYgc3ltYm9scywKLQkgICAgICAgICAgICAgICAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1ib2xfZmlsdGVyKTsKLQotCS8qKgotCSAqIHN5bWJvbF9zaXplIC0gcmV0dXJuIHRoZSBzaXplIG9mIGEgc3ltYm9sCi0JICogQHBhcmFtIHN5bSAgc3ltYm9sIHRvIGdldCBzaXplCi0JICogQHBhcmFtIG5leHQgIG5leHQgc3ltYm9sIGluIHZtYSBvcmRlciBpZiBhbnkKLQkgKi8KLQlzaXplX3Qgc3ltYm9sX3NpemUob3BfYmZkX3N5bWJvbCBjb25zdCAmIHN5bSwKLQkJCSAgIG9wX2JmZF9zeW1ib2wgY29uc3QgKiBuZXh0KSBjb25zdDsKLQotCS8vLyBjcmVhdGUgYW4gYXJ0aWZpY2lhbCBzeW1ib2wgZm9yIGEgc3ltYm9sbGVzcyBiaW5hcnkKLQlvcF9iZmRfc3ltYm9sIGNvbnN0IGNyZWF0ZV9hcnRpZmljaWFsX3N5bWJvbCgpOwotCi0gICAgICAgIC8qIEdlbmVyYXRlIHN5bWJvbHMgdXNpbmcgYmZkIGZ1bmN0aW9ucyBmb3IKLQkgKiB0aGUgaW1hZ2UgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGliZmQgYXJnLgotCSAqLwotCXVpbnQgcHJvY2Vzc19zeW10YWIoYmZkX2luZm8gKiBiZmQsIHVpbnQgc3RhcnQpOwotCi0JLy8vIGZpbGVuYW1lIHdlIG9wZW4gKG5vdCBpbmNsdWRpbmcgYXJjaGl2ZSBwYXRoKQotCXN0ZDo6c3RyaW5nIGZpbGVuYW1lOwotCi0JLy8vIHBhdGggdG8gYXJjaGl2ZQotCXN0ZDo6c3RyaW5nIGFyY2hpdmVfcGF0aDsKLQotCS8vLyBmaWxlIHNpemUgaW4gYnl0ZXMKLQlvZmZfdCBmaWxlX3NpemU7Ci0KLQkvLy8gY29ycmVzcG9uZGluZyBkZWJ1ZyBmaWxlIG5hbWUKLQltdXRhYmxlIHN0ZDo6c3RyaW5nIGRlYnVnX2ZpbGVuYW1lOwotCi0JLy8vIHRydWUgaWYgYXQgbGVhc3Qgb25lIHNlY3Rpb24gaGFzIChmbGFncyAmIFNFQ19ERUJVR0dJTkcpICE9IDAKLQltdXRhYmxlIGNhY2hlZF92YWx1ZTxib29sPiBkZWJ1Z19pbmZvOwotCi0JLy8vIG91ciBtYWluIGJmZCBvYmplY3Q6IC5iZmQgbWF5IGJlIE5VTEwKLQliZmRfaW5mbyBpYmZkOwotCi0JLy8gY29ycmVzcG9uZGluZyBkZWJ1ZyBiZmQgb2JqZWN0LCBpZiBvbmUgaXMgZm91bmQKLQltdXRhYmxlIGJmZF9pbmZvIGRiZmQ7Ci0KLQl0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCB1MzI+IGZpbGVwb3NfbWFwX3Q7Ci0JLy8gbWFwcGluZyBvZiBzZWN0aW9uIG5hbWVzIHRvIGZpbGVwb3MgaW4gdGhlIG9yaWdpbmFsIGJpbmFyeQotCWZpbGVwb3NfbWFwX3QgZmlsZXBvc19tYXA7Ci19OwotCi0KLSNlbmRpZiAvKiAhT1BfQkZEX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9vcF9leGNlcHRpb24uY3BwIGIvbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNWI5YmMuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wX2V4Y2VwdGlvbi5jcHAKLSAqIGV4Y2VwdGlvbiBiYXNlIGNsYXNzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2luY2x1ZGUgPGNzdHJpbmc+Ci0KLSNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotb3BfZXhjZXB0aW9uOjpvcF9leGNlcHRpb24oc3RyaW5nIGNvbnN0ICYgbXNnKQotCToKLQltZXNzYWdlKG1zZykKLXsKLX0KLQotb3BfZXhjZXB0aW9uOjp+b3BfZXhjZXB0aW9uKCkgdGhyb3coKQotewotfQotCi1jaGFyIGNvbnN0ICogb3BfZXhjZXB0aW9uOjp3aGF0KCkgY29uc3QgdGhyb3coKQotewotCXJldHVybiBtZXNzYWdlLmNfc3RyKCk7Ci19Ci0KLQotb3BfZmF0YWxfZXJyb3I6Om9wX2ZhdGFsX2Vycm9yKHN0cmluZyBjb25zdCAmIG1zZykKLQk6Ci0Jb3BfZXhjZXB0aW9uKG1zZykKLXsKLX0KLQotCi1vcF9ydW50aW1lX2Vycm9yOjpvcF9ydW50aW1lX2Vycm9yKHN0cmluZyBjb25zdCAmIG1zZykKLQk6Ci0JcnVudGltZV9lcnJvcihtc2cpCi17Ci19Ci0KLW9wX3J1bnRpbWVfZXJyb3I6Om9wX3J1bnRpbWVfZXJyb3Ioc3RyaW5nIGNvbnN0ICYgbXNnLCBpbnQgY2Vycm5vKQotCToKLQlydW50aW1lX2Vycm9yKG1zZyArICJcbmNhdXNlOiAiICsgc3RyZXJyb3IoY2Vycm5vKSkKLXsKLX0KLQotb3BfcnVudGltZV9lcnJvcjo6fm9wX3J1bnRpbWVfZXJyb3IoKSB0aHJvdygpCi17Ci19CmRpZmYgLS1naXQgYS9saWJ1dGlsKysvb3BfZXhjZXB0aW9uLmggYi9saWJ1dGlsKysvb3BfZXhjZXB0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMzQ0ZWQuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9leGNlcHRpb24uaAotICogZXhjZXB0aW9uIGJhc2UgY2xhc3MKLSAqCi0gKiBUaGlzIHByb3ZpZGUgc2ltcGxlIGJhc2UgY2xhc3MgZm9yIGV4Y2VwdGlvbiBvYmplY3QuIEFsbAotICogZXhjZXB0aW9uIGFyZSBkZXJpdmVkIGZyb20gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tCi0gKiBzdGQ6OmV4Y2VwdGlvbi4gVGhpcyBjbGFzcyBhcmUgbm90IGl0ZW5kZWQgdG8gYmUgY2F0Y2hlZAotICogaW4geW91ciBjb2RlIGV4Y2VwdCBhdCB0b3AgbGV2ZWwsIGRlcml2ZSB3aGF0IHlvdSB3YW50Ci0gKiBhbmQgY2F0Y2ggZGVyaXZlZCBjbGFzcyByYXRoZXIuCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBPUF9FWENFUFRJT05fSAotI2RlZmluZSBPUF9FWENFUFRJT05fSAotCi0jaW5jbHVkZSA8c3RkZXhjZXB0PgotI2luY2x1ZGUgPHN0cmluZz4KLQotCi0vKioKLSAqIGV4Y2VwdGlvbiBhYnN0cmFjdCBiYXNlIGNsYXNzCi0gKi8KLWNsYXNzIG9wX2V4Y2VwdGlvbiA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7Ci1wdWJsaWM6Ci0JZXhwbGljaXQgb3BfZXhjZXB0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpOwotCX5vcF9leGNlcHRpb24oKSB0aHJvdygpID0gMDsKLQotCWNoYXIgY29uc3QgKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKLXByaXZhdGU6Ci0Jc3RkOjpzdHJpbmcgbWVzc2FnZTsKLX07Ci0KLQotLyoqCi0gKiBmYXRhbCBleGNlcHRpb24sIG5ldmVyIGNhdGNoIGl0IGV4Y2VwdCBhdCB0b3AgbGV2ZWwgKGxpa2VseSBtYWluIG9yCi0gKiBndWkpLiBJbnRlbmRlZCB0byByZXBsYWNlIGNlcnIgPDwgImJsYWgiOyBleGl0KEVYSVRfRkFJTFVSRSk7IGJ5IGEKLSAqIHRocm93IG9wX2ZhdGFsX2Vycm9yKCJibGFoIikgd2hlbiByZXR1cm5pbmcgZXJyb3IgY29kZSBpcyBub3QgYW4gb3B0aW9uCi0gKi8KLXN0cnVjdCBvcF9mYXRhbF9lcnJvciA6IG9wX2V4Y2VwdGlvbgotewotCWV4cGxpY2l0IG9wX2ZhdGFsX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0ICYgbXNnKTsKLX07Ci0KLS8qKgotICogRW5jYXBzdWxhdGUgYSBydW50aW1lIGVycm9yIHdpdGggb3Igdy9vIGEgdmFsaWQgZXJybm8KLSAqLwotc3RydWN0IG9wX3J1bnRpbWVfZXJyb3IgOiBzdGQ6OnJ1bnRpbWVfZXJyb3IKLXsKLQlleHBsaWNpdCBvcF9ydW50aW1lX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZXJyKTsKLQlvcF9ydW50aW1lX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZXJyLCBpbnQgY2Vycm5vKTsKLQl+b3BfcnVudGltZV9lcnJvcigpIHRocm93KCk7Ci19OwotCi0KLSNlbmRpZiAvKiAhT1BfRVhDRVBUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9wYXRoX2ZpbHRlci5jcHAgYi9saWJ1dGlsKysvcGF0aF9maWx0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGRiOTRlLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy9wYXRoX2ZpbHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioKLSAqIEBmaWxlIHBhdGhfZmlsdGVyLmNwcAotICogRmlsdGVyIHBhdGhzIGJhc2VkIG9uIGdsb2JiZWQgZXhjbHVkZS9pbmNsdWRlIGxpc3QKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaW5jbHVkZSA8Zm5tYXRjaC5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAicGF0aF9maWx0ZXIuaCIKLSNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKLSNpbmNsdWRlICJmaWxlX21hbmlwLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWJvb2wgcGF0aF9maWx0ZXI6Om1hdGNoKHN0cmluZyBjb25zdCAmIHN0cikgY29uc3QKLXsKLQl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY2l0OwotCi0JLy8gZmlyc3QsIGlmIGFueSBjb21wb25lbnQgb2YgdGhlIGRpciBpcyBsaXN0ZWQgaW4gZXhjbHVkZSAtPiBubwotCXN0cmluZyBjb21wID0gb3BfZGlybmFtZShzdHIpOwotCXdoaWxlICghY29tcC5lbXB0eSgpICYmIGNvbXAgIT0gIi8iKSB7Ci0JCWNpdCA9IGZpbmRfaWYoZXhjbHVkZS5iZWdpbigpLCBleGNsdWRlLmVuZCgpLAotCQkJZm5tYXRjaGVyKG9wX2Jhc2VuYW1lKGNvbXApKSk7Ci0JCWlmIChjaXQgIT0gZXhjbHVkZS5lbmQoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQkvLyBkaXJuYW1lKCJmb28iKSA9PSAiZm9vIgotCQlpZiAoY29tcCA9PSBvcF9kaXJuYW1lKGNvbXApKQotCQkJYnJlYWs7Ci0JCWNvbXAgPSBvcF9kaXJuYW1lKGNvbXApOwotCX0KLQotCXN0cmluZyBjb25zdCBiYXNlID0gb3BfYmFzZW5hbWUoc3RyKTsKLQotCS8vIG5vdyBpZiB0aGUgZmlsZSBuYW1lIGlzIHNwZWNpZmljYWxseSBleGNsdWRlZCAtPiBubwotCWNpdCA9IGZpbmRfaWYoZXhjbHVkZS5iZWdpbigpLCBleGNsdWRlLmVuZCgpLCBmbm1hdGNoZXIoYmFzZSkpOwotCWlmIChjaXQgIT0gZXhjbHVkZS5lbmQoKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLy8gbm93IGlmIHRoZSBmaWxlIG5hbWUgaXMgc3BlY2lmaWNhbGx5IGluY2x1ZGVkIC0+IHllcwotCWNpdCA9IGZpbmRfaWYoaW5jbHVkZS5iZWdpbigpLCBpbmNsdWRlLmVuZCgpLCBmbm1hdGNoZXIoYmFzZSkpOwotCWlmIChjaXQgIT0gaW5jbHVkZS5lbmQoKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQkvLyBub3cgaWYgYW55IGNvbXBvbmVudCBvZiB0aGUgcGF0aCBpcyBpbmNsdWRlZCAtPiB5ZXMKLQkvLyBub3RlIHRoYXQgdGhlIGluY2x1ZGUgcGF0dGVybiBkZWZhdWx0cyB0byAnKicKLQlzdHJpbmcgY29tcGkgPSBvcF9kaXJuYW1lKHN0cik7Ci0Jd2hpbGUgKCFjb21waS5lbXB0eSgpICYmIGNvbXBpICE9ICIvIikgewotCQljaXQgPSBmaW5kX2lmKGluY2x1ZGUuYmVnaW4oKSwgaW5jbHVkZS5lbmQoKSwKLQkJCWZubWF0Y2hlcihvcF9iYXNlbmFtZShjb21waSkpKTsKLQkJaWYgKGNpdCAhPSBpbmNsdWRlLmVuZCgpKQotCQkJcmV0dXJuIHRydWU7Ci0KLQkJLy8gZGlybmFtZSgiZm9vIikgPT0gImZvbyIKLQkJaWYgKGNvbXBpID09IG9wX2Rpcm5hbWUoY29tcGkpKQotCQkJYnJlYWs7Ci0JCWNvbXBpID0gb3BfZGlybmFtZShjb21waSk7Ci0JfQotCi0JcmV0dXJuIGluY2x1ZGUuZW1wdHkoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9wYXRoX2ZpbHRlci5oIGIvbGlidXRpbCsrL3BhdGhfZmlsdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMjAzZmIuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL3BhdGhfZmlsdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioKLSAqIEBmaWxlIHBhdGhfZmlsdGVyLmgKLSAqIEZpbHRlciBwYXRocyBiYXNlZCBvbiBnbG9iYmVkIGV4Y2x1ZGUvaW5jbHVkZSBsaXN0Ci0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2lmbmRlZiBQQVRIX0ZJTFRFUl9ICi0jZGVmaW5lIFBBVEhfRklMVEVSX0gKLQotI2luY2x1ZGUgImdsb2JfZmlsdGVyLmgiCi0KLS8qKgotICogcGF0aF9maWx0ZXIgLSBmaWx0ZXJpbmcgb2YgYSBzdHJpbmcgYmFzZWQgb24gZ2xvYmJlZCBpbmNsdWRlL2V4Y2x1ZGUgbGlzdAotICoKLSAqIFRoaXMgY2xhc3MgaXMgYW4gb3JhY2xlIG9uIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHN0cmluZyBtYXRjaGVzCi0gKiB0aGUgZ2l2ZW4gbGlzdCBvZiBpbmNsdWRlZCBhbmQgZXhjbHVkZWQgc3RyaW5ncy4KLSAqCi0gKiBUaGlzIGNsYXNzIGdpdmVzIGdsb2ItYmFzZWQgbWF0Y2hlcyBvbiBlYWNoIHBhdHRlcm4sIGFzIHdpdGggZm5tYXRjaCgzKSwKLSAqIHdoZXJlIGVhY2ggY29tcG9uZW50IG9mIHRoZSBjYW5kaWRhdGUgcGF0aCBpcyBjb25zaWRlcmVkIHNlcGFyYXRlbHkuCi0gKi8KLWNsYXNzIHBhdGhfZmlsdGVyIDogcHVibGljIGdsb2JfZmlsdGVyIHsKLXB1YmxpYzoKLQkvKioKLQkgKiBJbml0aWFsaXNlIHRoZSBmaWx0ZXIgd2l0aCB0aGUgaW5jbHVkZSBhbmQgZXhjbHVkZSBsaXN0LAotCSAqIGNvbW1hLXNlcGFyYXRlZC4KLQkgKi8KLQlwYXRoX2ZpbHRlcihzdGQ6OnN0cmluZyBjb25zdCAmIGluY2x1ZGVfcGF0dGVybnMgPSBzdGQ6OnN0cmluZygpLAotCSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0ICYgZXhjbHVkZV9wYXR0ZXJucyA9IHN0ZDo6c3RyaW5nKCkpCi0JCTogZ2xvYl9maWx0ZXIoaW5jbHVkZV9wYXR0ZXJucywgZXhjbHVkZV9wYXR0ZXJucykge30KLQotCS8qKgotCSAqIEluaXRpYWxpc2UgdGhlIGZpbHRlciB3aXRoIHRoZSBpbmNsdWRlIGFuZCBleGNsdWRlIGxpc3QuCi0JICovCi0JcGF0aF9maWx0ZXIoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgaW5jbHVkZV9wYXR0ZXJucywKLQkgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBleGNsdWRlX3BhdHRlcm5zKQotCQk6IGdsb2JfZmlsdGVyKGluY2x1ZGVfcGF0dGVybnMsIGV4Y2x1ZGVfcGF0dGVybnMpIHt9Ci0KLQotCS8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBtYXRjaGVzCi0JdmlydHVhbCBib29sIG1hdGNoKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKSBjb25zdDsKLX07Ci0KLSNlbmRpZiAvKiBQQVRIX0ZJTFRFUl9IICovCmRpZmYgLS1naXQgYS9saWJ1dGlsKysvc3RyZWFtX3V0aWwuY3BwIGIvbGlidXRpbCsrL3N0cmVhbV91dGlsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwYjBkMy4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvc3RyZWFtX3V0aWwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBzdHJlYW1fdXRpbC5jcHAKLSAqIEMrKyBzdHJlYW0gdXRpbGl0eQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlICJzdHJlYW1fdXRpbC5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1pb19zdGF0ZTo6aW9fc3RhdGUoaW9zICYgc3RyZWFtXykKLQk6Ci0Jc3RyZWFtKHN0cmVhbV8pLAotCWZvcm1hdChzdHJlYW0uZmxhZ3MoKSksCi0JcHJlY2lzaW9uKHN0cmVhbS5wcmVjaXNpb24oKSksCi0JZmlsbChzdHJlYW0uZmlsbCgpKQotewotfQotCi0KLWlvX3N0YXRlOjp+aW9fc3RhdGUoKQotewotCXN0cmVhbS5mbGFncyhmb3JtYXQpOwotCXN0cmVhbS5wcmVjaXNpb24ocHJlY2lzaW9uKTsKLQlzdHJlYW0uZmlsbChmaWxsKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9zdHJlYW1fdXRpbC5oIGIvbGlidXRpbCsrL3N0cmVhbV91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjY2VlOWEuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL3N0cmVhbV91dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioKLSAqIEBmaWxlIHN0cmVhbV91dGlsLmgKLSAqIEMrKyBzdHJlYW0gdXRpbGl0eQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgU1RSRUFNX1VUSUxfSAotI2RlZmluZSBTVFJFQU1fVVRJTF9ICi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotLy8vIGNsYXNzIHdoaWNoIHNhdmUgYSBzdHJlYW0gc3RhdGUgYW5kIHJlc3RvcmUgaXQgYXQgZHRvciB0aW1lCi1jbGFzcyBpb19zdGF0ZSB7Ci1wdWJsaWM6Ci0JLyoqCi0JICogc2F2ZSB0aGUgc3RyZWFtIGZsYWdzLCBwcmVjaXNpb24gYW5kIGZpbGwgY2hhci4KLQkgKgotCSAqIHdpZHRoIGlzIHJlc3RvcmVkIGF0IGVuZCBvZiBleHByZXNzaW9uLCB0aGVyZSBpcyBubyBuZWVkIHRvIHNhdmUgaXQuCi0JICogdGllIGFuZCBsb2NhbGUgYXJlIG5vdCBzYXZlZCBjdXJyZW50bHkKLQkgKgotCSAqIGVycm9yIHN0YXRlIHNob3VsZG4ndCBiZSBzYXZlZC4KLQkgKi8KLQlpb19zdGF0ZShzdGQ6OmlvcyAmIHN0cmVhbSk7Ci0JLy8vIHJlc3RvcmUgdGhlIHN0cmVhbSBzdGF0ZQotCX5pb19zdGF0ZSgpOwotcHJpdmF0ZToKLQlzdGQ6OmlvcyAmIHN0cmVhbTsKLQotCXN0ZDo6aW9zOjpmbXRmbGFncyBmb3JtYXQ7Ci0Jc3RkOjpzdHJlYW1zaXplIHByZWNpc2lvbjsKLQljaGFyIGZpbGw7Ci19OwotCi0jZW5kaWYgLyogIVNUUkVBTV9VVElMX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmNwcCBiL2xpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmExMGNjNi4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvc3RyaW5nX2ZpbHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioKLSAqIEBmaWxlIHN0cmluZ19maWx0ZXIuY3BwCi0gKiBGaWx0ZXIgc3RyaW5ncyBiYXNlZCBvbiBleGNsdWRlL2luY2x1ZGUgbGlzdAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJzdHJpbmdfZmlsdGVyLmgiCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLQotc3RyaW5nX2ZpbHRlcjo6c3RyaW5nX2ZpbHRlcihzdHJpbmcgY29uc3QgJiBpbmNsdWRlX3BhdHRlcm5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgY29uc3QgJiBleGNsdWRlX3BhdHRlcm5zKQotCTogaW5jbHVkZShzZXBhcmF0ZV90b2tlbihpbmNsdWRlX3BhdHRlcm5zLCAnLCcpKSwKLQkgIGV4Y2x1ZGUoc2VwYXJhdGVfdG9rZW4oZXhjbHVkZV9wYXR0ZXJucywgJywnKSkKLXsKLX0KLQotCi1zdHJpbmdfZmlsdGVyOjpzdHJpbmdfZmlsdGVyKHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgaW5jbHVkZV9wYXR0ZXJucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4gY29uc3QgJiBleGNsdWRlX3BhdHRlcm5zKQotCTogaW5jbHVkZShpbmNsdWRlX3BhdHRlcm5zKSwKLQlleGNsdWRlKGV4Y2x1ZGVfcGF0dGVybnMpCi17Ci19Ci0KLQotLy8gRklYTUU6IFBQIHJlZmVyZW5jZQotYm9vbCBzdHJpbmdfZmlsdGVyOjptYXRjaChzdHJpbmcgY29uc3QgJiBzdHIpIGNvbnN0Ci17Ci0JdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNpdDsKLQljaXQgPSBmaW5kKGV4Y2x1ZGUuYmVnaW4oKSwgZXhjbHVkZS5lbmQoKSwgc3RyKTsKLQlpZiAoY2l0ICE9IGV4Y2x1ZGUuZW5kKCkpCi0JCXJldHVybiBmYWxzZTsKLQotCWNpdCA9IGZpbmQoaW5jbHVkZS5iZWdpbigpLCBpbmNsdWRlLmVuZCgpLCBzdHIpOwotCWlmIChpbmNsdWRlLmVtcHR5KCkgfHwgY2l0ICE9IGluY2x1ZGUuZW5kKCkpCi0JCXJldHVybiB0cnVlOwotCi0JcmV0dXJuIGZhbHNlOwotfQpkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuaCBiL2xpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMDhmZTMuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKgotICogQGZpbGUgc3RyaW5nX2ZpbHRlci5oCi0gKiBGaWx0ZXIgc3RyaW5ncyBiYXNlZCBvbiBleGNsdWRlL2luY2x1ZGUgbGlzdAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgU1RSSU5HX0ZJTFRFUl9ICi0jZGVmaW5lIFNUUklOR19GSUxURVJfSAotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotLyoqCi0gKiBzdHJpbmdfZmlsdGVyIC0gZmlsdGVyaW5nIG9mIGEgc3RyaW5nIGJhc2VkIG9uIGluY2x1ZGUvZXhjbHVkZSBsaXN0Ci0gKgotICogVGhpcyBjbGFzcyBpcyBhbiBvcmFjbGUgb24gd2hldGhlciBhIHBhcnRpY3VsYXIgc3RyaW5nIG1hdGNoZXMKLSAqIHRoZSBnaXZlbiBsaXN0IG9mIGluY2x1ZGVkIGFuZCBleGNsdWRlZCBzdHJpbmdzLgotICoKLSAqIFRoaXMgYmFzZSBjbGFzcyBnaXZlcyBhIGRlZmF1bHQgZXhhY3QtbWF0Y2ggc2VtYW50aWNzLgotICovCi1jbGFzcyBzdHJpbmdfZmlsdGVyIHsKLXB1YmxpYzoKLQlzdHJpbmdfZmlsdGVyKCkge30KLQotCS8qKgotCSAqIEluaXRpYWxpc2UgdGhlIGZpbHRlciB3aXRoIHRoZSBpbmNsdWRlIGFuZCBleGNsdWRlIGxpc3QsCi0JICogY29tbWEtc2VwYXJhdGVkLgotCSAqLwotCXN0cmluZ19maWx0ZXIoc3RkOjpzdHJpbmcgY29uc3QgJiBpbmNsdWRlX3BhdHRlcm5zLAotCSAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QgJiBleGNsdWRlX3BhdHRlcm5zKTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2UgdGhlIGZpbHRlciB3aXRoIHRoZSBpbmNsdWRlIGFuZCBleGNsdWRlIGxpc3QuCi0JICovCi0Jc3RyaW5nX2ZpbHRlcihzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBpbmNsdWRlX3BhdHRlcm5zLAotCSAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgZXhjbHVkZV9wYXR0ZXJucyk7Ci0KLQl2aXJ0dWFsIH5zdHJpbmdfZmlsdGVyKCkge30KLQotCS8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBtYXRjaGVzCi0JdmlydHVhbCBib29sIG1hdGNoKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKSBjb25zdDsKLQotcHJvdGVjdGVkOgotCS8vLyBpbmNsdWRlIHBhdHRlcm5zCi0Jc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGU7Ci0JLy8vIGV4Y2x1ZGUgcGF0dGVybnMKLQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZXhjbHVkZTsKLX07Ci0KLSNlbmRpZiAvKiBTVFJJTkdfRklMVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwIGIvbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZTgzYjguLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBzdHJpbmdfbWFuaXAuY3BwCi0gKiBzdGQ6OnN0cmluZyBoZWxwZXJzCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBKb2huIExldm9uCi0gKi8KLQotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8aW9tYW5pcD4KLQotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0KLSNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotCi1zdHJpbmcgZXJhc2VfdG9fbGFzdF9vZihzdHJpbmcgY29uc3QgJiBzdHIsIGNoYXIgY2gpCi17Ci0Jc3RyaW5nIHJlc3VsdCA9IHN0cjsKLQlzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSByZXN1bHQuZmluZF9sYXN0X29mKGNoKTsKLQlpZiAocG9zICE9IHN0cmluZzo6bnBvcykKLQkJcmVzdWx0LmVyYXNlKDAsIHBvcyArIDEpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1zdHJpbmcgc3BsaXQoc3RyaW5nICYgcywgY2hhciBjKQotewotCXN0cmluZzo6c2l6ZV90eXBlIGkgPSBzLmZpbmRfZmlyc3Rfb2YoYyk7Ci0JaWYgKGkgPT0gc3RyaW5nOjpucG9zKQotCQlyZXR1cm4gc3RyaW5nKCk7Ci0KLQlzdHJpbmcgY29uc3QgdGFpbCA9IHMuc3Vic3RyKGkgKyAxKTsKLQlzID0gcy5zdWJzdHIoMCwgaSk7Ci0JcmV0dXJuIHRhaWw7Ci19Ci0KLQotYm9vbCBpc19wcmVmaXgoc3RyaW5nIGNvbnN0ICYgcywgc3RyaW5nIGNvbnN0ICYgcHJlZml4KQotewotCS8vIGdjYyAyLjk1IGFuZCBiZWxvdyBkb24ndCBoYXZlIHRoaXMKLQkvLyByZXR1cm4gcy5jb21wYXJlKDAsIHByZWZpeC5sZW5ndGgoKSwgcHJlZml4KSA9PSAwOwotCXJldHVybiBzLmZpbmQocHJlZml4KSA9PSAwOwotfQotCi0KLXZlY3RvcjxzdHJpbmc+IHNlcGFyYXRlX3Rva2VuKHN0cmluZyBjb25zdCAmIHN0ciwgY2hhciBzZXApCi17Ci0JdmVjdG9yPHN0cmluZz4gcmVzdWx0OwotCXN0cmluZyBuZXh0OwotCi0JZm9yIChzaXplX3QgcG9zID0gMCA7IHBvcyAhPSBzdHIubGVuZ3RoKCkgOyArK3BvcykgewotCQljaGFyIGNoID0gc3RyW3Bvc107Ci0JCWlmIChjaCA9PSAnXFwnKSB7Ci0JCQlpZiAocG9zIDwgc3RyLmxlbmd0aCgpIC0gMSAmJiBzdHJbcG9zICsgMV0gPT0gc2VwKSB7Ci0JCQkJKytwb3M7Ci0JCQkJbmV4dCArPSBzZXA7Ci0JCQl9IGVsc2UgewotCQkJCW5leHQgKz0gJ1xcJzsKLQkJCX0KLQkJfSBlbHNlIGlmIChjaCA9PSBzZXApIHsKLQkJCXJlc3VsdC5wdXNoX2JhY2sobmV4dCk7Ci0JCQkvLyBzb21lIHN0bCBsYWNrcyBzdHJpbmc6OmNsZWFyKCkKLQkJCW5leHQuZXJhc2UobmV4dC5iZWdpbigpLCBuZXh0LmVuZCgpKTsKLQkJfSBlbHNlIHsKLQkJCW5leHQgKz0gY2g7Ci0JCX0KLQl9Ci0KLQlpZiAoIW5leHQuZW1wdHkoKSkKLQkJcmVzdWx0LnB1c2hfYmFjayhuZXh0KTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RyaW5nIGx0cmltKHN0cmluZyBjb25zdCAmIHN0ciwgc3RyaW5nIGNvbnN0ICYgdG90cmltKQotewotCXN0cmluZyByZXN1bHQoc3RyKTsKLQotCXJldHVybiByZXN1bHQuZXJhc2UoMCwgcmVzdWx0LmZpbmRfZmlyc3Rfbm90X29mKHRvdHJpbSkpOwotfQotCi0KLXN0cmluZyBydHJpbShzdHJpbmcgY29uc3QgJiBzdHIsIHN0cmluZyBjb25zdCAmIHRvdHJpbSkKLXsKLQlzdHJpbmcgcmVzdWx0KHN0cik7Ci0KLQlyZXR1cm4gcmVzdWx0LmVyYXNlKHJlc3VsdC5maW5kX2xhc3Rfbm90X29mKHRvdHJpbSkgKyAxKTsKLX0KLQotCi1zdHJpbmcgdHJpbShzdHJpbmcgY29uc3QgJiBzdHIsIHN0cmluZyBjb25zdCAmIHRvdHJpbSkKLXsKLQlyZXR1cm4gcnRyaW0obHRyaW0oc3RyLCB0b3RyaW0pLCB0b3RyaW0pOwotfQotCi0KLXN0cmluZyBjb25zdAotZm9ybWF0X3BlcmNlbnQoZG91YmxlIHZhbHVlLCBzaXplX3QgaW50X3dpZHRoLCBzaXplX3QgZnJhY3Rfd2lkdGgsIGJvb2wgc2hvd3BvcykKLXsKLQlvc3RyaW5nc3RyZWFtIG9zOwotCi0JaWYgKHZhbHVlID09IDAuMCkKLQkJcmV0dXJuIHN0cmluZyhpbnRfd2lkdGggKyBmcmFjdF93aWR0aCwgJyAnKSArICIwIjsKLQotCWlmIChzaG93cG9zKQotCQlvcy5zZXRmKGlvczo6c2hvd3Bvcyk7Ci0KLQlpZiAoZmFicyh2YWx1ZSkgPiAuMDAxKSB7Ci0JCS8vIG9zIDw8IGZpeGVkIDw8IHZhbHVlIHVuc3VwcG9ydGVkIGJ5IGdjYyAyLjk1Ci0JCW9zLnNldGYoaW9zOjpmaXhlZCwgaW9zOjpmbG9hdGZpZWxkKTsKLQkJb3MgPDwgc2V0dyhpbnRfd2lkdGggKyBmcmFjdF93aWR0aCArIDEpCi0JCSAgIDw8IHNldHByZWNpc2lvbihmcmFjdF93aWR0aCkgPDwgdmFsdWU7Ci0JfSBlbHNlIHsKLQkJLy8gb3MgPDwgc2NpZW50aWZpYyA8PCB2YWx1ZSB1bnN1cHBvcnRlZCBieSBnY2MgMi45NQotCQlvcy5zZXRmKGlvczo6c2NpZW50aWZpYywgaW9zOjpmbG9hdGZpZWxkKTsKLQkJb3MgPDwgc2V0dyhpbnRfd2lkdGggKyBmcmFjdF93aWR0aCArIDEpCi0JCSAgIC8vIC0gMyB0byBjb3VudCBleHBvbmVudCBwYXJ0Ci0JCSAgIDw8IHNldHByZWNpc2lvbihmcmFjdF93aWR0aCAtIDMpIDw8IHZhbHVlOwotCX0KLQotCXN0cmluZyBmb3JtYXR0ZWQgPSBvcy5zdHIoKTsKLQlpZiAoaXNfcHJlZml4KGZvcm1hdHRlZCwgIjEwMC4iKSkKLQkJZm9ybWF0dGVkLmVyYXNlKGZvcm1hdHRlZC5zaXplKCkgLSAxKTsKLQlyZXR1cm4gZm9ybWF0dGVkOwotfQotCi0KLXRlbXBsYXRlIDw+Ci11bnNpZ25lZCBpbnQgb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludCwgc3RyaW5nPihzdHJpbmcgY29uc3QgJiBzdHIpCi17Ci0JY2hhciogZW5kcHRyOwotCi0JLy8gMi45MS42NiBmaXgKLQl1bnNpZ25lZCBsb25nIHJldCA9IDA7Ci0JcmV0ID0gc3RydG91bChzdHIuY19zdHIoKSwgJmVuZHB0ciwgMCk7Ci0JaWYgKCplbmRwdHIpIHsKLQkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgib3BfbGV4aWNhbF9jYXN0KFwiIisgc3RyICsiXCIpIik7Ci0JfQotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9saWJ1dGlsKysvc3RyaW5nX21hbmlwLmggYi9saWJ1dGlsKysvc3RyaW5nX21hbmlwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZTc0Y2UuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKgotICogQGZpbGUgc3RyaW5nX21hbmlwLmgKLSAqIHN0ZDo6c3RyaW5nIGhlbHBlcnMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIFNUUklOR19NQU5JUF9ICi0jZGVmaW5lIFNUUklOR19NQU5JUF9ICi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3RkZXhjZXB0PgotCi0vKioKLSAqIEBwYXJhbSBzdHIgc3RyaW5nCi0gKiBAcGFyYW0gY2ggdGhlIGNoYXJhY3RlcnRvIHNlYXJjaAotICoKLSAqIGVyYXNlIGNoYXIgZnJvbSB0aGUgYmVnaW4gb2Ygc3RyIHRvIHRoZSBsYXN0Ci0gKiBvY2N1cmVuY2Ugb2YgY2ggZnJvbSBhbmQgcmV0dXJuIHRoZSBzdHJpbmcKLSAqLwotc3RkOjpzdHJpbmcgZXJhc2VfdG9fbGFzdF9vZihzdGQ6OnN0cmluZyBjb25zdCAmIHN0ciwgY2hhciBjaCk7Ci0KLS8vLyBzcGxpdCBzdHJpbmcgcyBieSBmaXJzdCBvY2N1cmVuY2Ugb2YgY2hhciBjLCByZXR1cm5pbmcgdGhlIHNlY29uZCBwYXJ0LgotLy8vIHMgaXMgc2V0IHRvIHRoZSBmaXJzdCBwYXJ0LiBOZWl0aGVyIGluY2x1ZGUgdGhlIHNwbGl0IGNoYXJhY3Rlcgotc3RkOjpzdHJpbmcgc3BsaXQoc3RkOjpzdHJpbmcgJiBzLCBjaGFyIGMpOwotCi0vLy8gcmV0dXJuIHRydWUgaWYgInByZWZpeCIgaXMgYSBwcmVmaXggb2YgInMiLCBiZWhhdmlvciBpcyB1bmRlZmluZWQKLS8vLyBpZiBwcmVmaXggaXMgYW4gZW1wdHkgc3RyaW5nCi1ib29sIGlzX3ByZWZpeChzdGQ6OnN0cmluZyBjb25zdCAmIHMsIHN0ZDo6c3RyaW5nIGNvbnN0ICYgcHJlZml4KTsKLQotLyoqCi0gKiBAcGFyYW0gc3RyIHRoZSBzdHJpbmcgdG8gdG9rZW5pemUKLSAqIEBwYXJhbSBzZXAgdGhlIHNlcGFyYXRvcl9jaGFyCi0gKgotICogc2VwYXJhdGUgZmllbGRzIGluIGEgc3RyaW5nIGluIGEgbGlzdCBvZiB0b2tlbjsgZmllbGQgYXJlCi0gKiBzZXBhcmF0ZWQgYnkgdGhlIHNlcCBjaGFyYWN0ZXIsIHNlcCBjaGFyIGNhbiBiZSBlc2NhcGVkCi0gKiBieSAnXFwnIHRvIHNwZWNpZnkgYSBzZXAgY2hhciBpbiBhIHRva2VuLCAnXFwnIG5vdCBmb2xsb3dlZAotICogYnkgYSBzZXAgaXMgdGFrZW4gYXMgaXQgZS5nLiAiXCxcYSIgLS0+ICIsXGEiCi0gKi8KLXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzZXBhcmF0ZV90b2tlbihzdGQ6OnN0cmluZyBjb25zdCAmIHN0ciwgY2hhciBzZXApOwotCi0vLy8gcmVtb3ZlIHRyaW0gY2hhcnMgZnJvbSBzdGFydCBvZiBpbnB1dCBzdHJpbmcgcmV0dXJuIHRoZSBuZXcgc3RyaW5nCi1zdGQ6OnN0cmluZyBsdHJpbShzdGQ6OnN0cmluZyBjb25zdCAmIHN0ciwgc3RkOjpzdHJpbmcgY29uc3QgJiB0b3RyaW0gPSAiXHQgIik7Ci0vLy8gcmVtb3ZlIHRyaW0gY2hhcnMgZnJvbSBlbmQgb2YgaW5wdXQgc3RyaW5nIHJldHVybiB0aGUgbmV3IHN0cmluZwotc3RkOjpzdHJpbmcgcnRyaW0oc3RkOjpzdHJpbmcgY29uc3QgJiBzdHIsIHN0ZDo6c3RyaW5nIGNvbnN0ICYgdG90cmltID0gIlx0ICIpOwotLy8vIGx0cmltKHJ0cmltKHN0cikpCi1zdGQ6OnN0cmluZyB0cmltKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyLCBzdGQ6OnN0cmluZyBjb25zdCAmIHRvdHJpbSA9ICJcdCAiKTsKLQotLyoqCi0gKiBmb3JtYXRfcGVyY2VudCAtIHNtYXJ0IGZvcm1hdCBvZiBkb3VibGUgcGVyY2VudGFnZSB2YWx1ZQotICogQHBhcmFtIHZhbHVlIC0gdGhlIHZhbHVlCi0gKiBAcGFyYW0gaW50X3dpZHRoIC0gdGhlIG1heGltdW0gaW50ZWdlciBpbnRlZ2VyIHdpZHRoIGRlZmF1bHQgdG8gMgotICogQHBhcmFtIGZyYWNfd2lkdGggLSB0aGUgZnJhY3Rpb25uYXJ5IHdpZHRoIGRlZmF1bHQgdG8gNAotICogQHBhcmFtIHNob3dwb3MgLSBzaG93ICsgc2lnbiBmb3IgcG9zaXRpdmUgdmFsdWVzCi0gKgotICogVGhpcyBmb3JtYXRzIGEgcGVyY2VudGFnZSBpbnRvIGV4YWN0bHkgdGhlIGdpdmVuIHdpZHRoIGFuZCByZXR1cm5zCi0gKiBpdC4gSWYgdGhlIGludGVnZXIgcGFydCBpcyBsYXJnZXIgdGhhbiB0aGUgZ2l2ZW4gaW50X3dpZHRoLCB0aGUKLSAqIHJldHVybmVkIHN0cmluZyB3aWxsIGJlIHdpZGVyLiBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIG5ldmVyCi0gKiBzaG9ydGVyIHRoYW4gKGZyYWN0X3dpdGggKyBpbnRfd2lkdGggKyAxKQotICoKLSAqLwotc3RkOjpzdHJpbmcgY29uc3QKLWZvcm1hdF9wZXJjZW50KGRvdWJsZSB2YWx1ZSwgc2l6ZV90IGludF93aWR0aCwKLSAgICAgICAgICAgICAgIHNpemVfdCBmcmFjX3dpZHRoLCBib29sIHNob3dwb3MgPSBmYWxzZSk7Ci0KLS8vLyBwcmVmZXJlZCB3aWR0aCB0byBmb3JtYXQgcGVyY2VudGFnZQotc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBwZXJjZW50X2ludF93aWR0aCA9IDI7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IHBlcmNlbnRfZnJhY3Rfd2lkdGggPSA0Owotc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBwZXJjZW50X3dpZHRoID0gcGVyY2VudF9pbnRfd2lkdGggKyBwZXJjZW50X2ZyYWN0X3dpZHRoICsgMTsKLQotCi0vKioKLSAqIEBwYXJhbSBzcmMgIGlucHV0IHBhcmFtZXRlcgotICogY29udmVydCBGcm9tIHNyYyB0byBhIFQgdGhyb3VnaCBhbiBpc3RyaW5nc3RyZWFtLgotICoKLSAqIFRocm93cyBpbnZhbGlkX2FyZ3VtZW50IGlmIGNvbnZlcnNpb24gZmFpbC4KLSAqCi0gKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYXMgZm9vbHByb29mIGFzIGJvb3N0J3MgbGV4aWNhbF9jYXN0Ci0gKi8KLXRlbXBsYXRlIDx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbT4KLVRvIG9wX2xleGljYWxfY2FzdChGcm9tIGNvbnN0ICYgc3JjKQotewotCXN0ZDo6b3N0cmluZ3N0cmVhbSBpbjsKLQlpZiAoIShpbiA8PCBzcmMpKSB7Ci0JCXRocm93IHN0ZDo6aW52YWxpZF9hcmd1bWVudCgib3BfbGV4aWNhbF9jYXN0PFQ+KCkiKTsKLQl9Ci0Jc3RkOjppc3RyaW5nc3RyZWFtIG91dChpbi5zdHIoKSk7Ci0JVG8gdmFsdWU7Ci0JaWYgKCEob3V0ID4+IHZhbHVlKSkgewotCQl0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQoIm9wX2xleGljYWxfY2FzdDxUPihcIiIgKwotCQkgICAgaW4uc3RyKCkgKyJcIikiKTsKLQl9Ci0JcmV0dXJuIHZhbHVlOwotfQotCi0vLyBzcGVjaWFsaXphdGlvbiBhY2NlcHRpbmcgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIG51bWJlciBpbiBpbnB1dC4gTm90ZSB0aGF0Ci0vLyBvcF9sZXhpY2FsX2Nhc3Q8dW5zaWduZWQgaW50PigiMHgyMyIpOyB3aWxsIGZhaWwgYmVjYXVzZSBpdCBjYWxsIHRoZQotLy8gbm9uIHNwZWNpYWxpemVkIHRlbXBsYXRlLgotdGVtcGxhdGUgPD4KLXVuc2lnbmVkIGludCBvcF9sZXhpY2FsX2Nhc3Q8dW5zaWduZWQgaW50PihzdGQ6OnN0cmluZyBjb25zdCAmIHN0cik7Ci0KLSNlbmRpZiAvKiAhU1RSSU5HX01BTklQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNjOWE3ZC4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0KLVJFQUxQQVRIPSByZWFkbGluayAtZgotCi1TUkNESVIgOj0gJChzaGVsbCAkKFJFQUxQQVRIKSAkKHRvcGRpcikvbGlidXRpbCsrL3Rlc3RzLyApCi0KLUFNX0NQUEZMQUdTID0gXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCsrIC1EIFNSQ0RJUj0iXCIkKFNSQ0RJUikvXCIiCi0KLUNPTU1PTl9MSUJTID0gLi4vbGlidXRpbCsrLmEgLi4vLi4vbGlidXRpbC9saWJ1dGlsLmEKLQotTElCUyA9IEBMSUJFUlRZX0xJQlNACi0KLUFNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotCi1jaGVja19QUk9HUkFNUyA9IFwKLQlzdHJpbmdfbWFuaXBfdGVzdHMgXAotCXN0cmluZ19maWx0ZXJfdGVzdHMgXAotCWNvbW1hX2xpc3RfdGVzdHMgXAotCWZpbGVfbWFuaXBfdGVzdHMgXAotCWdsb2JfZmlsdGVyX3Rlc3RzIFwKLQlwYXRoX2ZpbHRlcl90ZXN0cyBcCi0JY2FjaGVkX3ZhbHVlX3Rlc3RzIFwKLQl1dGlsaXR5X3Rlc3RzCi0KLXN0cmluZ19tYW5pcF90ZXN0c19TT1VSQ0VTID0gc3RyaW5nX21hbmlwX3Rlc3RzLmNwcAotc3RyaW5nX21hbmlwX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLQotc3RyaW5nX2ZpbHRlcl90ZXN0c19TT1VSQ0VTID0gc3RyaW5nX2ZpbHRlcl90ZXN0cy5jcHAKLXN0cmluZ19maWx0ZXJfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQotCi1nbG9iX2ZpbHRlcl90ZXN0c19TT1VSQ0VTID0gZ2xvYl9maWx0ZXJfdGVzdHMuY3BwCi1nbG9iX2ZpbHRlcl90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci0KLXBhdGhfZmlsdGVyX3Rlc3RzX1NPVVJDRVMgPSBwYXRoX2ZpbHRlcl90ZXN0cy5jcHAKLXBhdGhfZmlsdGVyX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLQotY29tbWFfbGlzdF90ZXN0c19TT1VSQ0VTID0gY29tbWFfbGlzdF90ZXN0cy5jcHAKLWNvbW1hX2xpc3RfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQotCi1maWxlX21hbmlwX3Rlc3RzX1NPVVJDRVMgPSBmaWxlX21hbmlwX3Rlc3RzLmNwcAotZmlsZV9tYW5pcF90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci0KLWNhY2hlZF92YWx1ZV90ZXN0c19TT1VSQ0VTID0gY2FjaGVkX3ZhbHVlX3Rlc3RzLmNwcAotY2FjaGVkX3ZhbHVlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KLQotdXRpbGl0eV90ZXN0c19TT1VSQ0VTID0gdXRpbGl0eV90ZXN0cy5jcHAKLXV0aWxpdHlfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQotCi1URVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CmRpZmYgLS1naXQgYS9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuaW4gYi9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OTgwZGYuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTg2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS41IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLVNPVVJDRVMgPSAkKGNhY2hlZF92YWx1ZV90ZXN0c19TT1VSQ0VTKSAkKGNvbW1hX2xpc3RfdGVzdHNfU09VUkNFUykgJChmaWxlX21hbmlwX3Rlc3RzX1NPVVJDRVMpICQoZ2xvYl9maWx0ZXJfdGVzdHNfU09VUkNFUykgJChwYXRoX2ZpbHRlcl90ZXN0c19TT1VSQ0VTKSAkKHN0cmluZ19maWx0ZXJfdGVzdHNfU09VUkNFUykgJChzdHJpbmdfbWFuaXBfdGVzdHNfU09VUkNFUykgJCh1dGlsaXR5X3Rlc3RzX1NPVVJDRVMpCi0KLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLi4vLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSBASU5TVEFMTEAKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWNoZWNrX1BST0dSQU1TID0gc3RyaW5nX21hbmlwX3Rlc3RzJChFWEVFWFQpIFwKLQlzdHJpbmdfZmlsdGVyX3Rlc3RzJChFWEVFWFQpIGNvbW1hX2xpc3RfdGVzdHMkKEVYRUVYVCkgXAotCWZpbGVfbWFuaXBfdGVzdHMkKEVYRUVYVCkgZ2xvYl9maWx0ZXJfdGVzdHMkKEVYRUVYVCkgXAotCXBhdGhfZmlsdGVyX3Rlc3RzJChFWEVFWFQpIGNhY2hlZF92YWx1ZV90ZXN0cyQoRVhFRVhUKSBcCi0JdXRpbGl0eV90ZXN0cyQoRVhFRVhUKQotc3ViZGlyID0gbGlidXRpbCsrL3Rlc3RzCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1hbV9jYWNoZWRfdmFsdWVfdGVzdHNfT0JKRUNUUyA9IGNhY2hlZF92YWx1ZV90ZXN0cy4kKE9CSkVYVCkKLWNhY2hlZF92YWx1ZV90ZXN0c19PQkpFQ1RTID0gJChhbV9jYWNoZWRfdmFsdWVfdGVzdHNfT0JKRUNUUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9IC4uL2xpYnV0aWwrKy5hIC4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCi1jYWNoZWRfdmFsdWVfdGVzdHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9jb21tYV9saXN0X3Rlc3RzX09CSkVDVFMgPSBjb21tYV9saXN0X3Rlc3RzLiQoT0JKRVhUKQotY29tbWFfbGlzdF90ZXN0c19PQkpFQ1RTID0gJChhbV9jb21tYV9saXN0X3Rlc3RzX09CSkVDVFMpCi1jb21tYV9saXN0X3Rlc3RzX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fZmlsZV9tYW5pcF90ZXN0c19PQkpFQ1RTID0gZmlsZV9tYW5pcF90ZXN0cy4kKE9CSkVYVCkKLWZpbGVfbWFuaXBfdGVzdHNfT0JKRUNUUyA9ICQoYW1fZmlsZV9tYW5pcF90ZXN0c19PQkpFQ1RTKQotZmlsZV9tYW5pcF90ZXN0c19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2dsb2JfZmlsdGVyX3Rlc3RzX09CSkVDVFMgPSBnbG9iX2ZpbHRlcl90ZXN0cy4kKE9CSkVYVCkKLWdsb2JfZmlsdGVyX3Rlc3RzX09CSkVDVFMgPSAkKGFtX2dsb2JfZmlsdGVyX3Rlc3RzX09CSkVDVFMpCi1nbG9iX2ZpbHRlcl90ZXN0c19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX3BhdGhfZmlsdGVyX3Rlc3RzX09CSkVDVFMgPSBwYXRoX2ZpbHRlcl90ZXN0cy4kKE9CSkVYVCkKLXBhdGhfZmlsdGVyX3Rlc3RzX09CSkVDVFMgPSAkKGFtX3BhdGhfZmlsdGVyX3Rlc3RzX09CSkVDVFMpCi1wYXRoX2ZpbHRlcl90ZXN0c19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX3N0cmluZ19maWx0ZXJfdGVzdHNfT0JKRUNUUyA9IHN0cmluZ19maWx0ZXJfdGVzdHMuJChPQkpFWFQpCi1zdHJpbmdfZmlsdGVyX3Rlc3RzX09CSkVDVFMgPSAkKGFtX3N0cmluZ19maWx0ZXJfdGVzdHNfT0JKRUNUUykKLXN0cmluZ19maWx0ZXJfdGVzdHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9zdHJpbmdfbWFuaXBfdGVzdHNfT0JKRUNUUyA9IHN0cmluZ19tYW5pcF90ZXN0cy4kKE9CSkVYVCkKLXN0cmluZ19tYW5pcF90ZXN0c19PQkpFQ1RTID0gJChhbV9zdHJpbmdfbWFuaXBfdGVzdHNfT0JKRUNUUykKLXN0cmluZ19tYW5pcF90ZXN0c19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX3V0aWxpdHlfdGVzdHNfT0JKRUNUUyA9IHV0aWxpdHlfdGVzdHMuJChPQkpFWFQpCi11dGlsaXR5X3Rlc3RzX09CSkVDVFMgPSAkKGFtX3V0aWxpdHlfdGVzdHNfT0JKRUNUUykKLXV0aWxpdHlfdGVzdHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAotCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCi1DWFhMRCA9ICQoQ1hYKQotQ1hYTElOSyA9ICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLVNPVVJDRVMgPSAkKGNhY2hlZF92YWx1ZV90ZXN0c19TT1VSQ0VTKSAkKGNvbW1hX2xpc3RfdGVzdHNfU09VUkNFUykgXAotCSQoZmlsZV9tYW5pcF90ZXN0c19TT1VSQ0VTKSAkKGdsb2JfZmlsdGVyX3Rlc3RzX1NPVVJDRVMpIFwKLQkkKHBhdGhfZmlsdGVyX3Rlc3RzX1NPVVJDRVMpICQoc3RyaW5nX2ZpbHRlcl90ZXN0c19TT1VSQ0VTKSBcCi0JJChzdHJpbmdfbWFuaXBfdGVzdHNfU09VUkNFUykgJCh1dGlsaXR5X3Rlc3RzX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGNhY2hlZF92YWx1ZV90ZXN0c19TT1VSQ0VTKSBcCi0JJChjb21tYV9saXN0X3Rlc3RzX1NPVVJDRVMpICQoZmlsZV9tYW5pcF90ZXN0c19TT1VSQ0VTKSBcCi0JJChnbG9iX2ZpbHRlcl90ZXN0c19TT1VSQ0VTKSAkKHBhdGhfZmlsdGVyX3Rlc3RzX1NPVVJDRVMpIFwKLQkkKHN0cmluZ19maWx0ZXJfdGVzdHNfU09VUkNFUykgJChzdHJpbmdfbWFuaXBfdGVzdHNfU09VUkNFUykgXAotCSQodXRpbGl0eV90ZXN0c19TT1VSQ0VTKQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCRVJUWV9MSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKLVhfTElCUyA9IEBYX0xJQlNACi1YX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWVuYWJsZV9hYmlfRkFMU0UgPSBAZW5hYmxlX2FiaV9GQUxTRUAKLWVuYWJsZV9hYmlfVFJVRSA9IEBlbmFibGVfYWJpX1RSVUVACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhhdmVfcXRfRkFMU0UgPSBAaGF2ZV9xdF9GQUxTRUAKLWhhdmVfcXRfVFJVRSA9IEBoYXZlX3F0X1RSVUVACi1oYXZlX3hzbHRwcm9jX0ZBTFNFID0gQGhhdmVfeHNsdHByb2NfRkFMU0VACi1oYXZlX3hzbHRwcm9jX1RSVUUgPSBAaGF2ZV94c2x0cHJvY19UUlVFQAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAota2VybmVsX3N1cHBvcnRfRkFMU0UgPSBAa2VybmVsX3N1cHBvcnRfRkFMU0VACi1rZXJuZWxfc3VwcG9ydF9UUlVFID0gQGtlcm5lbF9zdXBwb3J0X1RSVUVACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10b3BkaXIgPSBAdG9wZGlyQAotUkVBTFBBVEggPSByZWFkbGluayAtZgotU1JDRElSIDo9ICQoc2hlbGwgJChSRUFMUEFUSCkgJCh0b3BkaXIpL2xpYnV0aWwrKy90ZXN0cy8gKQotQU1fQ1BQRkxBR1MgPSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgLUQgU1JDRElSPSJcIiQoU1JDRElSKS9cIiIKLQotQ09NTU9OX0xJQlMgPSAuLi9saWJ1dGlsKysuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQotQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1zdHJpbmdfbWFuaXBfdGVzdHNfU09VUkNFUyA9IHN0cmluZ19tYW5pcF90ZXN0cy5jcHAKLXN0cmluZ19tYW5pcF90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci1zdHJpbmdfZmlsdGVyX3Rlc3RzX1NPVVJDRVMgPSBzdHJpbmdfZmlsdGVyX3Rlc3RzLmNwcAotc3RyaW5nX2ZpbHRlcl90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci1nbG9iX2ZpbHRlcl90ZXN0c19TT1VSQ0VTID0gZ2xvYl9maWx0ZXJfdGVzdHMuY3BwCi1nbG9iX2ZpbHRlcl90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci1wYXRoX2ZpbHRlcl90ZXN0c19TT1VSQ0VTID0gcGF0aF9maWx0ZXJfdGVzdHMuY3BwCi1wYXRoX2ZpbHRlcl90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci1jb21tYV9saXN0X3Rlc3RzX1NPVVJDRVMgPSBjb21tYV9saXN0X3Rlc3RzLmNwcAotY29tbWFfbGlzdF90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci1maWxlX21hbmlwX3Rlc3RzX1NPVVJDRVMgPSBmaWxlX21hbmlwX3Rlc3RzLmNwcAotZmlsZV9tYW5pcF90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci1jYWNoZWRfdmFsdWVfdGVzdHNfU09VUkNFUyA9IGNhY2hlZF92YWx1ZV90ZXN0cy5jcHAKLWNhY2hlZF92YWx1ZV90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci11dGlsaXR5X3Rlc3RzX1NPVVJDRVMgPSB1dGlsaXR5X3Rlc3RzLmNwcAotdXRpbGl0eV90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9Ci1URVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9Ci1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jcHAgLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUKLS5QUkVDSU9VUzogTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLWNsZWFuLWNoZWNrUFJPR1JBTVM6Ci0JLXRlc3QgLXogIiQoY2hlY2tfUFJPR1JBTVMpIiB8fCBybSAtZiAkKGNoZWNrX1BST0dSQU1TKQotY2FjaGVkX3ZhbHVlX3Rlc3RzJChFWEVFWFQpOiAkKGNhY2hlZF92YWx1ZV90ZXN0c19PQkpFQ1RTKSAkKGNhY2hlZF92YWx1ZV90ZXN0c19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBjYWNoZWRfdmFsdWVfdGVzdHMkKEVYRUVYVCkKLQkkKENYWExJTkspICQoY2FjaGVkX3ZhbHVlX3Rlc3RzX0xERkxBR1MpICQoY2FjaGVkX3ZhbHVlX3Rlc3RzX09CSkVDVFMpICQoY2FjaGVkX3ZhbHVlX3Rlc3RzX0xEQUREKSAkKExJQlMpCi1jb21tYV9saXN0X3Rlc3RzJChFWEVFWFQpOiAkKGNvbW1hX2xpc3RfdGVzdHNfT0JKRUNUUykgJChjb21tYV9saXN0X3Rlc3RzX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGNvbW1hX2xpc3RfdGVzdHMkKEVYRUVYVCkKLQkkKENYWExJTkspICQoY29tbWFfbGlzdF90ZXN0c19MREZMQUdTKSAkKGNvbW1hX2xpc3RfdGVzdHNfT0JKRUNUUykgJChjb21tYV9saXN0X3Rlc3RzX0xEQUREKSAkKExJQlMpCi1maWxlX21hbmlwX3Rlc3RzJChFWEVFWFQpOiAkKGZpbGVfbWFuaXBfdGVzdHNfT0JKRUNUUykgJChmaWxlX21hbmlwX3Rlc3RzX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGZpbGVfbWFuaXBfdGVzdHMkKEVYRUVYVCkKLQkkKENYWExJTkspICQoZmlsZV9tYW5pcF90ZXN0c19MREZMQUdTKSAkKGZpbGVfbWFuaXBfdGVzdHNfT0JKRUNUUykgJChmaWxlX21hbmlwX3Rlc3RzX0xEQUREKSAkKExJQlMpCi1nbG9iX2ZpbHRlcl90ZXN0cyQoRVhFRVhUKTogJChnbG9iX2ZpbHRlcl90ZXN0c19PQkpFQ1RTKSAkKGdsb2JfZmlsdGVyX3Rlc3RzX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGdsb2JfZmlsdGVyX3Rlc3RzJChFWEVFWFQpCi0JJChDWFhMSU5LKSAkKGdsb2JfZmlsdGVyX3Rlc3RzX0xERkxBR1MpICQoZ2xvYl9maWx0ZXJfdGVzdHNfT0JKRUNUUykgJChnbG9iX2ZpbHRlcl90ZXN0c19MREFERCkgJChMSUJTKQotcGF0aF9maWx0ZXJfdGVzdHMkKEVYRUVYVCk6ICQocGF0aF9maWx0ZXJfdGVzdHNfT0JKRUNUUykgJChwYXRoX2ZpbHRlcl90ZXN0c19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBwYXRoX2ZpbHRlcl90ZXN0cyQoRVhFRVhUKQotCSQoQ1hYTElOSykgJChwYXRoX2ZpbHRlcl90ZXN0c19MREZMQUdTKSAkKHBhdGhfZmlsdGVyX3Rlc3RzX09CSkVDVFMpICQocGF0aF9maWx0ZXJfdGVzdHNfTERBREQpICQoTElCUykKLXN0cmluZ19maWx0ZXJfdGVzdHMkKEVYRUVYVCk6ICQoc3RyaW5nX2ZpbHRlcl90ZXN0c19PQkpFQ1RTKSAkKHN0cmluZ19maWx0ZXJfdGVzdHNfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgc3RyaW5nX2ZpbHRlcl90ZXN0cyQoRVhFRVhUKQotCSQoQ1hYTElOSykgJChzdHJpbmdfZmlsdGVyX3Rlc3RzX0xERkxBR1MpICQoc3RyaW5nX2ZpbHRlcl90ZXN0c19PQkpFQ1RTKSAkKHN0cmluZ19maWx0ZXJfdGVzdHNfTERBREQpICQoTElCUykKLXN0cmluZ19tYW5pcF90ZXN0cyQoRVhFRVhUKTogJChzdHJpbmdfbWFuaXBfdGVzdHNfT0JKRUNUUykgJChzdHJpbmdfbWFuaXBfdGVzdHNfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgc3RyaW5nX21hbmlwX3Rlc3RzJChFWEVFWFQpCi0JJChDWFhMSU5LKSAkKHN0cmluZ19tYW5pcF90ZXN0c19MREZMQUdTKSAkKHN0cmluZ19tYW5pcF90ZXN0c19PQkpFQ1RTKSAkKHN0cmluZ19tYW5pcF90ZXN0c19MREFERCkgJChMSUJTKQotdXRpbGl0eV90ZXN0cyQoRVhFRVhUKTogJCh1dGlsaXR5X3Rlc3RzX09CSkVDVFMpICQodXRpbGl0eV90ZXN0c19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiB1dGlsaXR5X3Rlc3RzJChFWEVFWFQpCi0JJChDWFhMSU5LKSAkKHV0aWxpdHlfdGVzdHNfTERGTEFHUykgJCh1dGlsaXR5X3Rlc3RzX09CSkVDVFMpICQodXRpbGl0eV90ZXN0c19MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2FjaGVkX3ZhbHVlX3Rlc3RzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jb21tYV9saXN0X3Rlc3RzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9maWxlX21hbmlwX3Rlc3RzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nbG9iX2ZpbHRlcl90ZXN0cy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGF0aF9maWx0ZXJfdGVzdHMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cmluZ19maWx0ZXJfdGVzdHMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cmluZ19tYW5pcF90ZXN0cy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdXRpbGl0eV90ZXN0cy5Qb0BhbV9fcXVvdGVACi0KLS5jcHAubzoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAlpZiAkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uY3BwLm9iajoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAlpZiAkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLXVuaW5zdGFsbC1pbmZvLWFtOgotCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCi0KLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCi0JZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotY2hlY2stVEVTVFM6ICQoVEVTVFMpCi0JQGZhaWxlZD0wOyBhbGw9MDsgeGZhaWw9MDsgeHBhc3M9MDsgc2tpcD0wOyBcCi0Jc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsgXAotCWxpc3Q9JyQoVEVTVFMpJzsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZm9yIHRzdCBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAuLyQkdHN0OyB0aGVuIGRpcj0uLzsgXAotCSAgICBlbGlmIHRlc3QgLWYgJCR0c3Q7IHRoZW4gZGlyPTsgXAotCSAgICBlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICAgIGlmICQoVEVTVFNfRU5WSVJPTk1FTlQpICQke2Rpcn0kJHRzdDsgdGhlbiBcCi0JICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKLQkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCi0JICAgICAgKiIgJCR0c3QgIiopIFwKLQkJeHBhc3M9YGV4cHIgJCR4cGFzcyArIDFgOyBcCi0JCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCi0JCWVjaG8gIlhQQVNTOiAkJHRzdCI7IFwKLQkgICAgICA7OyBcCi0JICAgICAgKikgXAotCQllY2hvICJQQVNTOiAkJHRzdCI7IFwKLQkgICAgICA7OyBcCi0JICAgICAgZXNhYzsgXAotCSAgICBlbGlmIHRlc3QgJCQ/IC1uZSA3NzsgdGhlbiBcCi0JICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKLQkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCi0JICAgICAgKiIgJCR0c3QgIiopIFwKLQkJeGZhaWw9YGV4cHIgJCR4ZmFpbCArIDFgOyBcCi0JCWVjaG8gIlhGQUlMOiAkJHRzdCI7IFwKLQkgICAgICA7OyBcCi0JICAgICAgKikgXAotCQlmYWlsZWQ9YGV4cHIgJCRmYWlsZWQgKyAxYDsgXAotCQllY2hvICJGQUlMOiAkJHRzdCI7IFwKLQkgICAgICA7OyBcCi0JICAgICAgZXNhYzsgXAotCSAgICBlbHNlIFwKLQkgICAgICBza2lwPWBleHByICQkc2tpcCArIDFgOyBcCi0JICAgICAgZWNobyAiU0tJUDogJCR0c3QiOyBcCi0JICAgIGZpOyBcCi0JICBkb25lOyBcCi0JICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAotCSAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMDsgdGhlbiBcCi0JICAgICAgYmFubmVyPSJBbGwgJCRhbGwgdGVzdHMgcGFzc2VkIjsgXAotCSAgICBlbHNlIFwKLQkgICAgICBiYW5uZXI9IkFsbCAkJGFsbCB0ZXN0cyBiZWhhdmVkIGFzIGV4cGVjdGVkICgkJHhmYWlsIGV4cGVjdGVkIGZhaWx1cmVzKSI7IFwKLQkgICAgZmk7IFwKLQkgIGVsc2UgXAotCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMDsgdGhlbiBcCi0JICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCB0ZXN0cyBmYWlsZWQiOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIGJhbm5lcj0iJCRmYWlsZWQgb2YgJCRhbGwgdGVzdHMgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCQkeHBhc3MgdW5leHBlY3RlZCBwYXNzZXMpIjsgXAotCSAgICBmaTsgXAotCSAgZmk7IFwKLQkgIGRhc2hlcz0iJCRiYW5uZXIiOyBcCi0JICBza2lwcGVkPSIiOyBcCi0JICBpZiB0ZXN0ICIkJHNraXAiIC1uZSAwOyB0aGVuIFwKLQkgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0cyB3ZXJlIG5vdCBydW4pIjsgXAotCSAgICB0ZXN0IGBlY2hvICIkJHNraXBwZWQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKLQkgICAgICBkYXNoZXM9IiQkc2tpcHBlZCI7IFwKLQkgIGZpOyBcCi0JICByZXBvcnQ9IiI7IFwKLQkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtbmUgMCAmJiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4gXAotCSAgICByZXBvcnQ9IlBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkiOyBcCi0JICAgIHRlc3QgYGVjaG8gIiQkcmVwb3J0IiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCi0JICAgICAgZGFzaGVzPSIkJHJlcG9ydCI7IFwKLQkgIGZpOyBcCi0JICBkYXNoZXM9YGVjaG8gIiQkZGFzaGVzIiB8IHNlZCBzLy4vPS9nYDsgXAotCSAgZWNobyAiJCRkYXNoZXMiOyBcCi0JICBlY2hvICIkJGJhbm5lciI7IFwKLQkgIHRlc3QgLXogIiQkc2tpcHBlZCIgfHwgZWNobyAiJCRza2lwcGVkIjsgXAotCSAgdGVzdCAteiAiJCRyZXBvcnQiIHx8IGVjaG8gIiQkcmVwb3J0IjsgXAotCSAgZWNobyAiJCRkYXNoZXMiOyBcCi0JICB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IFwKLQllbHNlIDo7IGZpCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKGNoZWNrX1BST0dSQU1TKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1URVNUUyBjaGVjay1hbSBjbGVhbiBcCi0JY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGN0YWdzIGRpc3RjbGVhbiBcCi0JZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAotCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgXAotCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCBcCi0JdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy90ZXN0cy9jYWNoZWRfdmFsdWVfdGVzdHMuY3BwIGIvbGlidXRpbCsrL3Rlc3RzL2NhY2hlZF92YWx1ZV90ZXN0cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MGM1ZDQuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL3Rlc3RzL2NhY2hlZF92YWx1ZV90ZXN0cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioKLSAqIEBmaWxlIGNhY2hlZF92YWx1ZV90ZXN0cy5jcHAKLSAqIHRlc3RzIGNhY2hlZF92YWx1ZS5oCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNSBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImNhY2hlZF92YWx1ZS5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgewotCi0KLWJvb2wgY2hlY2tfdGhyb3coY2FjaGVkX3ZhbHVlPGJvb2w+IGNvbnN0ICYgYm9vbHZhbCkKLXsKLQl0cnkgewotCQlib29sIGZvbyA9IGJvb2x2YWwuZ2V0KCk7Ci0JCWZvbyA9IGZhbHNlOwotCX0gY2F0Y2ggKG9wX2ZhdGFsX2Vycm9yIGNvbnN0ICYgZSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCi0KLWludCBjaGVja19jYWNoZWQodm9pZCkKLXsKLQljYWNoZWRfdmFsdWU8Ym9vbD4gYm9vbHZhbDsKLQljYWNoZWRfdmFsdWU8c3RyaW5nPiBzdHJ2YWw7Ci0KLQlpZiAoIWNoZWNrX3Rocm93KGJvb2x2YWwpKSB7Ci0JCWNlcnIgPDwgImdldCgpIG9uIG5vIHZhbHVlIGRpZG4ndCB0aHJvd1xuIjsKLQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKLQl9Ci0KLQlpZiAoYm9vbHZhbC5yZXNldChmYWxzZSkgIT0gZmFsc2UgfHwgYm9vbHZhbC5nZXQoKSAhPSBmYWxzZSkgewotCQljZXJyIDw8ICJyZXNldCgpIG9mIGNhY2hlZCB2YWx1ZSBcImZhbHNlXCIgZGlkbid0IHdvcmtcbiI7Ci0JCXJldHVybiBFWElUX0ZBSUxVUkU7Ci0JfQotCi0JaWYgKGJvb2x2YWwucmVzZXQodHJ1ZSkgIT0gdHJ1ZSB8fCBib29sdmFsLmdldCgpICE9IHRydWUpIHsKLQkJY2VyciA8PCAicmVzZXQoKSBvZiBjYWNoZWQgdmFsdWUgXCJ0cnVlXCIgZGlkbid0IHdvcmtcbiI7Ci0JCXJldHVybiBFWElUX0ZBSUxVUkU7Ci0JfQotCi0JaWYgKHN0cnZhbC5yZXNldCgiZm9vIikgIT0gImZvbyIgfHwgc3RydmFsLmdldCgpICE9ICJmb28iKSB7Ci0JCWNlcnIgPDwgInJlc2V0KCkgb2YgY2FjaGVkIHZhbHVlIFwiZm9vXCIgZGlkbid0IHdvcmtcbiI7Ci0JCXJldHVybiBFWElUX0ZBSUxVUkU7Ci0JfQotCi0JaWYgKHN0cnZhbC5yZXNldCgiIikgIT0gIiIgfHwgc3RydmFsLmdldCgpICE9ICIiKSB7Ci0JCWNlcnIgPDwgInJlc2V0KCkgb2YgY2FjaGVkIHZhbHVlIFwiXCIgZGlkbid0IHdvcmtcbiI7Ci0JCXJldHVybiBFWElUX0ZBSUxVUkU7Ci0JfQotCi0JcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLX0KLQotfTsKLQotaW50IG1haW4oKQotewotCXRyeSB7Ci0JCWNoZWNrX2NhY2hlZCgpOwotCX0KLQljYXRjaCAoLi4uKSB7Ci0JCWNlcnIgPDwgInVua25vd24gZXhjZXB0aW9uXG4iOwotCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwotCX0KLQotCXJldHVybiBFWElUX1NVQ0NFU1M7Ci19CmRpZmYgLS1naXQgYS9saWJ1dGlsKysvdGVzdHMvY29tbWFfbGlzdF90ZXN0cy5jcHAgYi9saWJ1dGlsKysvdGVzdHMvY29tbWFfbGlzdF90ZXN0cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMGZlZWYuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL3Rlc3RzL2NvbW1hX2xpc3RfdGVzdHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjb21tYV9saXN0X3Rlc3RzLmNwcAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi0jaW5jbHVkZSAiY29tbWFfbGlzdC5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0jZGVmaW5lIGNoZWNrKGNsaXN0LCB2YWwsIHJlc3VsdCkgXAotCWlmIChjbGlzdC5tYXRjaCh2YWwpICE9IHJlc3VsdCkgeyBcCi0JCWNlcnIgPDwgIlwiIiA8PCAjdmFsIDw8ICJcIiBtYXRjaGVkIHdpdGggIiAjY2xpc3QgXAotCQkgICAgIDw8ICIgZGlkIG5vdCByZXR1cm4gIiAjcmVzdWx0IDw8IGVuZGw7IFwKLQkJZXhpdChFWElUX0ZBSUxVUkUpOyBcCi0JfQotCi1pbnQgbWFpbigpCi17Ci0JY29tbWFfbGlzdDxpbnQ+IGMxOwotCi0JY2hlY2soYzEsIDEsIHRydWUpOwotCi0JYzEuc2V0KCIyIik7Ci0KLQljaGVjayhjMSwgMiwgdHJ1ZSk7Ci0JY2hlY2soYzEsIDMsIGZhbHNlKTsKLQotCWMxLnNldCgiMyIpOwotCi0JY2hlY2soYzEsIDIsIGZhbHNlKTsKLQljaGVjayhjMSwgMywgdHJ1ZSk7Ci0KLQljMS5zZXQoIjIsMyIpOwotCi0JY2hlY2soYzEsIDIsIHRydWUpOwotCWNoZWNrKGMxLCAzLCB0cnVlKTsKLQljaGVjayhjMSwgNCwgZmFsc2UpOwotCi0JYzEuc2V0KCJhbGwiKTsKLQotCWNoZWNrKGMxLCAyLCB0cnVlKTsKLQljaGVjayhjMSwgNCwgdHJ1ZSk7Ci0JY2hlY2soYzEsIDUsIHRydWUpOwotCi0JY29tbWFfbGlzdDxpbnQ+IGMyOwotCi0JYzIuc2V0KCI2LGFsbCIpOwotCi0JY2hlY2soYzIsIDQsIHRydWUpOwotCWNoZWNrKGMyLCAwLCB0cnVlKTsKLQotCWMyLnNldCgiYWxsLDYiKTsKLQotCWNoZWNrKGMyLCA0LCB0cnVlKTsKLQljaGVjayhjMiwgMCwgdHJ1ZSk7Ci0KLQljMi5zZXQoIjEwIik7Ci0JY2hlY2soYzIsIDEwLCB0cnVlKTsKLQljaGVjayhjMiwgMTEsIGZhbHNlKTsKLQlyZXR1cm4gRVhJVF9TVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMuY3BwIGIvbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmUxNjFiLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKioKLSAqIEBmaWxlIGZpbGVfbWFuaXBfdGVzdHMuY3BwCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGxpc3Q+Ci0KLSNpbmNsdWRlICJmaWxlX21hbmlwLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWUgT3V0cHV0Pgotc3RydWN0IGlucHV0X291dHB1dCB7Ci0JSW5wdXQgaW5wdXQ7Ci0JT3V0cHV0IG91dHB1dDsKLX07Ci0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIElucHV0LCB0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIFJlc3VsdD4KLXN0YXRpYyB2b2lkIGNoZWNrX3Jlc3VsdChjaGFyIGNvbnN0ICogZmN0X25hbWUsIElucHV0IGNvbnN0ICYgaW5wdXQsCi0JCSAgT3V0cHV0IGNvbnN0ICYgb3V0cHV0LCBSZXN1bHQgY29uc3QgJiByZXN1bHQpCi17Ci0JaWYgKHJlc3VsdCAhPSBvdXRwdXQpIHsKLQkJY2VyciA8PCBmY3RfbmFtZSA8PCAiICIKLQkJICAgICA8PCAiZm9yOlxuXCIiIDw8IGlucHV0IDw8ICJcIlxuIgotCQkgICAgIDw8ICJleHBlY3Q6XG5cIiIgPDwgb3V0cHV0IDw8ICJcIlxuIgotCQkgICAgIDw8ICJmb3VuZDpcblwiIiA8PCByZXN1bHQgPDwgIlwiXG4iOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5wdXQsIHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgUmVzdWx0Pgotc3RhdGljIHZvaWQgY2hlY2tfcmVzdWx0KGNoYXIgY29uc3QgKiBmY3RfbmFtZSwgSW5wdXQgY29uc3QgJiBpbnB1dDEsCi0JSW5wdXQgaW5wdXQyLCBPdXRwdXQgY29uc3QgJiBvdXRwdXQsIFJlc3VsdCBjb25zdCAmIHJlc3VsdCkKLXsKLQlpZiAocmVzdWx0ICE9IG91dHB1dCkgewotCQljZXJyIDw8IGZjdF9uYW1lIDw8ICI6IFxuIgotCQkgICAgIDw8ICJmb3I6XG5cIiIgPDwgaW5wdXQxIDw8ICJcIlxuIgotCQkgICAgIDw8ICJcIiIgPDwgaW5wdXQyIDw8ICJcIlxuIgotCQkgICAgIDw8ICJleHBlY3Q6XG5cIiIgPDwgb3V0cHV0IDw8ICJcIlxuIgotCQkgICAgIDw8ICJmb3VuZDpcblwiIiA8PCByZXN1bHQgPDwgIlwiXG4iOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICo+IGV4cGVjdF9kaXJuYW1lW10gPQotewotCXsgIi8iLCAiLyIgfSwKLQl7ICIvLy8vLy8iLCAiLyIgfSwKLQl7ICIvdXNyIiwgIi8iIH0sCi0JeyAiLy8vdXNyIiwgIi8iIH0sCi0JLy8gc3VwcmlzaW5nIGJ1dCBjb25mb3JtIHRvIGRpcm5hbWUoMSkKLQl7ICIvLy91c3IvZGlyIiwgIi8vL3VzciIgfSwKLQl7ICJ1c3IvZGlyIiwgInVzciIgfSwKLQl7ICJ1c3IiLCAiLiIgfSwKLQl7ICJuIiwgIi4iIH0sCi0JeyAiLi4vLi4iLCAiLi4iIH0sCi0JeyAiLy4uLy4uIiwgIi8uLiIgfSwKLQl7ICIuLy4uIiwgIi4iIH0sCi0JeyAiLi8uIiwgIi4iIH0sCi0JeyAiLi4iLCAiLiIgfSwKLQl7ICIuIiwgIi4iIH0sCi0JeyAiIiwgIi4iIH0sCi0JeyAwLCAwIH0KLX07Ci0KLXN0YXRpYyB2b2lkIGRpcm5hbWVfdGVzdHMoKQotewotCWlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKj4gY29uc3QgKiBjdXI7Ci0JZm9yIChjdXIgPSBleHBlY3RfZGlybmFtZTsgY3VyLT5pbnB1dDsgKytjdXIpIHsKLQkJc3RyaW5nIHJlc3VsdCA9IG9wX2Rpcm5hbWUoY3VyLT5pbnB1dCk7Ci0JCWNoZWNrX3Jlc3VsdCgiZGlybmFtZSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LCByZXN1bHQpOwotCX0KLX0KLQotCi1zdGF0aWMgaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCo+IGV4cGVjdF9iYXNlbmFtZVtdID0KLXsKLQl7ICIvIiwgIi8iIH0sCi0JeyAiLy8vLy8vIiwgIi8iIH0sCi0JeyAiL3VzciIsICJ1c3IiIH0sCi0JeyAiLy8vdXNyIiwgInVzciIgfSwKLQl7ICIvLy91c3IvZGlyIiwgImRpciIgfSwKLQl7ICIvLy91c3IvL2RpciIsICJkaXIiIH0sCi0JeyAidXNyL2RpciIsICJkaXIiIH0sCi0JeyAidXNyIiwgInVzciIgfSwKLQl7ICIuLi8uLiIsICIuLiIgfSwKLQl7ICIvLi4vLi4iLCAiLi4iIH0sCi0JeyAiLi8uLiIsICIuLiIgfSwKLQl7ICIuLy4iLCAiLiIgfSwKLQl7ICIuIiwgIi4iIH0sCi0JeyAwLCAwIH0KLX07Ci0KLXN0YXRpYyB2b2lkIGJhc2VuYW1lX3Rlc3RzKCkKLXsKLQlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICo+IGNvbnN0ICogY3VyOwotCWZvciAoY3VyID0gZXhwZWN0X2Jhc2VuYW1lOyBjdXItPmlucHV0OyArK2N1cikgewotCQlzdHJpbmcgcmVzdWx0ID0gb3BfYmFzZW5hbWUoY3VyLT5pbnB1dCk7Ci0JCWNoZWNrX3Jlc3VsdCgiYmFzZW5hbWUiLCBjdXItPmlucHV0LCBjdXItPm91dHB1dCwgcmVzdWx0KTsKLQl9Ci19Ci0KLQotc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGJvb2w+IGV4cGVjdF9pc19kaXJlY3RvcnlbXSA9Ci17Ci0JeyAiLiIsIHRydWUgfSwKLQl7ICIvLiIsIHRydWUgfSwKLQl7ICIuLyIsIHRydWUgfSwKLQl7ICIvIiwgdHJ1ZSB9LAotCXsgIi4uLyIsIHRydWUgfSwKLQl7ICIuLi8uIiwgdHJ1ZSB9LAotCXsgIm5vbl9leGlzdGluZ19kaXIiLCBmYWxzZSB9LAotCXsgMCwgMCB9Ci19OwotCi1zdGF0aWMgdm9pZCBpc19kaXJlY3RvcnlfdGVzdHMoKQotewotCWlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGJvb2w+IGNvbnN0ICogY3VyOwotCWZvciAoY3VyID0gZXhwZWN0X2lzX2RpcmVjdG9yeTsgY3VyLT5pbnB1dDsgKytjdXIpIHsKLQkJYm9vbCByZXN1bHQgPSBpc19kaXJlY3RvcnkoY3VyLT5pbnB1dCk7Ci0JCWNoZWNrX3Jlc3VsdCgiaXNfZGlyZWN0b3J5IiwgY3VyLT5pbnB1dCwgY3VyLT5vdXRwdXQsIHJlc3VsdCk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnB1dF9vdXRwdXQ8cGFpcjxzdHJpbmcsIHN0cmluZz4sIGJvb2w+Ci1leHBlY3RfaXNfZmlsZXNfaWRlbnRpY2FsW10gPSB7Ci0jZGVmaW5lIE1BS0VfUEFJUihhLCBiKSBtYWtlX3BhaXIoc3RyaW5nKGEpLCBzdHJpbmcoYikpCi0JeyBNQUtFX1BBSVIoX19GSUxFX18sIF9fRklMRV9fKSwgdHJ1ZSB9LAotCXsgTUFLRV9QQUlSKF9fRklMRV9fLCAibm90X2V4aXN0aW5nIiksIGZhbHNlIH0sCi0JeyBNQUtFX1BBSVIoIm5vdF9leGlzaXRpbmciLCBfX0ZJTEVfXyksIGZhbHNlIH0sCi0JeyBNQUtFX1BBSVIoIm5vdF9leGlzaXRpbmciLCAibm90X2V4aXN0aW5nIiksIGZhbHNlIH0sCi0JeyBNQUtFX1BBSVIoIiIsICIiKSwgZmFsc2UgfQotI3VuZGVmIE1BS0VfUEFJUgotfTsKLQotdm9pZCBpc19maWxlc19pZGVudGljYWxfdGVzdHMoY2hhciBjb25zdCAqIHByb2dfbmFtZSkKLXsKLQljaGVja19yZXN1bHQoImlzX2ZpbGVzX2lkZW50aWNhbCIsIHByb2dfbmFtZSwgcHJvZ19uYW1lLAotCSAgICAgICAgICAgICBpc19maWxlc19pZGVudGljYWwocHJvZ19uYW1lLCBwcm9nX25hbWUpLCB0cnVlKTsKLQotCWlucHV0X291dHB1dDxwYWlyPHN0cmluZywgc3RyaW5nPiwgYm9vbD4gY29uc3QgKiBjdXI7Ci0JZm9yIChjdXIgPSBleHBlY3RfaXNfZmlsZXNfaWRlbnRpY2FsOyAhY3VyLT5pbnB1dC5maXJzdC5lbXB0eSgpOyArK2N1cikgewotCQlib29sIHJlc3VsdCA9IGlzX2ZpbGVzX2lkZW50aWNhbChjdXItPmlucHV0LmZpcnN0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPmlucHV0LnNlY29uZCk7Ci0JCWNoZWNrX3Jlc3VsdCgiaXNfZmlsZXNfaWRlbnRpY2FsIiwgY3VyLT5pbnB1dC5maXJzdCwKLQkJICAgICAgICAgICAgIGN1ci0+aW5wdXQuc2Vjb25kLCBjdXItPm91dHB1dCwgcmVzdWx0KTsKLQl9Ci19Ci0KLQotc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGJvb2w+IGV4cGVjdF9vcF9maWxlX3JlYWRhYmxlW10gPQotewotCXsgX19GSUxFX18sIHRydWUgfSwKLQl7ICIuLyIgX19GSUxFX18sIHRydWUgfSwKLQl7ICIuIiwgZmFsc2UgfSwKLQl7ICIvLiIsIGZhbHNlIH0sCi0JeyAiLi8iLCBmYWxzZSB9LAotCXsgIi8iLCBmYWxzZSB9LAotCXsgIi4uLyIsIGZhbHNlIH0sCi0JeyAiLi4vLiIsIGZhbHNlIH0sCi0JeyAibm9uX2V4aXN0aW5nX2ZpbGUiLCBmYWxzZSB9LAotCXsgMCwgMCB9Ci19OwotCi1zdGF0aWMgdm9pZCBvcF9maWxlX3JlYWRhYmxlX3Rlc3RzKCkKLXsKLQlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBib29sPiBjb25zdCAqIGN1cjsKLQlmb3IgKGN1ciA9IGV4cGVjdF9vcF9maWxlX3JlYWRhYmxlOyBjdXItPmlucHV0OyArK2N1cikgewotCQlib29sIHJlc3VsdCA9IG9wX2ZpbGVfcmVhZGFibGUoY3VyLT5pbnB1dCk7Ci0JCWNoZWNrX3Jlc3VsdCgib3BfZmlsZV9yZWFkYWJsZSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LCByZXN1bHQpOwotCX0KLX0KLQotCi1zdGF0aWMgaW5wdXRfb3V0cHV0PHN0cmluZywgc3RyaW5nPiBleHBlY3RfcmVhbHBhdGhbXSA9Ci17Ci0JLy8gcmVhbHBhdGgoKSBmaWxlIGFyZ3VtZW50IG11c3QgZXhpc3RzLgotCXsgImZpbGVfbWFuaXBfdGVzdHMubyIsICJmaWxlX21hbmlwX3Rlc3RzLm8iIH0sCi0JeyAiLi4vdGVzdHMvIiAiZmlsZV9tYW5pcF90ZXN0cy5vIiwgImZpbGVfbWFuaXBfdGVzdHMubyIgfSwKLQl7ICIuLy8uLy8iICJmaWxlX21hbmlwX3Rlc3RzLm8iLCAiZmlsZV9tYW5pcF90ZXN0cy5vIiB9LAotCS8vIFBPU0lYIG5hbWVzcGFjZXMgaWdub3JlZCBieSByZWFscGF0aCgzKQotCXsgIi8vIiwgIi8iIH0sCi0JeyAiLy91c3IiLCAiL3VzciIgfSwKLQl7ICIvLy8iLCAiLyIgfSwKLQl7ICIiLCAiIiB9Ci19OwotCi0KLS8vIEZJWE1FOiB1c2VmdWwgdG8gdGVzdCBzeW1saW5rcyB0b28KLXN0YXRpYyB2b2lkIHJlYWxwYXRoX3Rlc3RzKCkKLXsKLQlpbnB1dF9vdXRwdXQ8c3RyaW5nLCBzdHJpbmc+IGNvbnN0ICogY3VyOwotCWZvciAoY3VyID0gZXhwZWN0X3JlYWxwYXRoOyAhY3VyLT5pbnB1dC5lbXB0eSgpOyArK2N1cikgewotCQlzdHJpbmcgcmVzdWx0ID0gb3BfcmVhbHBhdGgoY3VyLT5pbnB1dCk7Ci0JCXN0cmluZyBleHBlY3QgPSBjdXItPm91dHB1dDsKLQkJaWYgKGN1ci0+aW5wdXRbMF0gIT0gJy8nKQotCQkJZXhwZWN0ID0gU1JDRElSICsgZXhwZWN0OwotCQljaGVja19yZXN1bHQoIm9wX3JlYWxwYXRoIiwgY3VyLT5pbnB1dCwKLQkJICAgICAgICAgICAgZXhwZWN0LCByZXN1bHQpOwotCX0KLX0KLQotCi12b2lkIGNyZWF0ZV9maWxlX2xpc3RfdGVzdHMoKQotewotCWxpc3Q8c3RyaW5nPiByZXN1bHQ7Ci0JaWYgKCFjcmVhdGVfZmlsZV9saXN0KHJlc3VsdCwgIi4iKSkgewotCQljZXJyIDw8ICJjcmVhdGVfZmlsZV9saXN0KCkgZmFpbFxuIjsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAocmVzdWx0LmVtcHR5KCkpIHsKLQkJY2VyciA8PCAiY3JlYXRlX2ZpbGVfbGlzdCgpOyBlbXB0eSByZXN1bHRcbiI7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci19Ci0KLQotaW50IG1haW4oaW50LCBjaGFyICogYXJndltdKQotewotCWRpcm5hbWVfdGVzdHMoKTsKLQliYXNlbmFtZV90ZXN0cygpOwotCWlzX2RpcmVjdG9yeV90ZXN0cygpOwotCWlzX2ZpbGVzX2lkZW50aWNhbF90ZXN0cyhhcmd2WzBdKTsKLQlvcF9maWxlX3JlYWRhYmxlX3Rlc3RzKCk7Ci0JcmVhbHBhdGhfdGVzdHMoKTsKLQljcmVhdGVfZmlsZV9saXN0X3Rlc3RzKCk7Ci0JcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy90ZXN0cy9nbG9iX2ZpbHRlcl90ZXN0cy5jcHAgYi9saWJ1dGlsKysvdGVzdHMvZ2xvYl9maWx0ZXJfdGVzdHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODhhM2VkLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy90ZXN0cy9nbG9iX2ZpbHRlcl90ZXN0cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioKLSAqIEBmaWxlIGdsb2JfZmlsdGVyX3Rlc3RzLmNwcAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi0jaW5jbHVkZSAiZ2xvYl9maWx0ZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotI2RlZmluZSBjaGVjayhmaWx0ZXIsIHN0ciwgcmVzdWx0KSBcCi0JaWYgKGZpbHRlci5tYXRjaChzdHIpICE9IHJlc3VsdCkgeyBcCi0JCWNlcnIgPDwgIlwiIiA8PCBzdHIgPDwgIlwiIG1hdGNoZWQgd2l0aCAiICNmaWx0ZXIgXAotCQkgICAgIDw8ICIgZGlkIG5vdCByZXR1cm4gIiAjcmVzdWx0IDw8IGVuZGw7IFwKLQkJZXhpdChFWElUX0ZBSUxVUkUpOyBcCi0JfQotCi1pbnQgbWFpbigpCi17Ci0JZ2xvYl9maWx0ZXIgZjEoImZvbywqYmFyIiwgImZvb2JhciIpOwotCWNoZWNrKGYxLCAiZm9vL2JhcmZvb2JhciIsIHRydWUpOwotCWNoZWNrKGYxLCAiZm9vL2JhciIsIHRydWUpOwotCWNoZWNrKGYxLCAiL2Zvby9mb29iYXIvZm9vIiwgZmFsc2UpOwotCWNoZWNrKGYxLCAiZm9vb2JhcjEiLCBmYWxzZSk7Ci0JY2hlY2soZjEsICJmb28xIiwgZmFsc2UpOwotCWNoZWNrKGYxLCAiZm9vYmFyIiwgZmFsc2UpOwotCWNoZWNrKGYxLCAiYmFyMSIsIGZhbHNlKTsKLQotCWdsb2JfZmlsdGVyIGYyKCJmb28iLCAiIik7Ci0JY2hlY2soZjIsICJmb28iLCB0cnVlKTsKLQljaGVjayhmMiwgImZvbzEiLCBmYWxzZSk7Ci0JY2hlY2soZjIsICJmb28vZm9vIiwgZmFsc2UpOwotCi0JZ2xvYl9maWx0ZXIgZjMoIiIsICJmb28iKTsKLQljaGVjayhmMywgImZvbyIsIGZhbHNlKTsKLQljaGVjayhmMywgImZvbzEiLCB0cnVlKTsKLQljaGVjayhmMywgImZvby9mb28iLCB0cnVlKTsKLQotCWdsb2JfZmlsdGVyIGY0KCJmb28iLCAiZm9vIik7Ci0JY2hlY2soZjQsICJmb28iLCBmYWxzZSk7Ci0JY2hlY2soZjQsICJmb28xIiwgZmFsc2UpOwotCWNoZWNrKGY0LCAiZm9vL2ZvbyIsIGZhbHNlKTsKLQotCXJldHVybiBFWElUX1NVQ0NFU1M7Ci19CmRpZmYgLS1naXQgYS9saWJ1dGlsKysvdGVzdHMvcGF0aF9maWx0ZXJfdGVzdHMuY3BwIGIvbGlidXRpbCsrL3Rlc3RzL3BhdGhfZmlsdGVyX3Rlc3RzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2NGQwZi4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvdGVzdHMvcGF0aF9maWx0ZXJfdGVzdHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBwYXRoX2ZpbHRlcl90ZXN0cy5jcHAKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotI2luY2x1ZGUgInBhdGhfZmlsdGVyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLSNkZWZpbmUgY2hlY2soZmlsdGVyLCBzdHIsIHJlc3VsdCkgXAotCWlmIChmaWx0ZXIubWF0Y2goc3RyKSAhPSByZXN1bHQpIHsgXAotCQljZXJyIDw8ICJcIiIgPDwgc3RyIDw8ICJcIiBtYXRjaGVkIHdpdGggIiAjZmlsdGVyIFwKLQkJICAgICA8PCAiIGRpZCBub3QgcmV0dXJuICIgI3Jlc3VsdCA8PCBlbmRsOyBcCi0JCWV4aXQoRVhJVF9GQUlMVVJFKTsgXAotCX0KLQotaW50IG1haW4oKQotewotCXBhdGhfZmlsdGVyIGYxKCJmb28sKmJhciIsICJmb29iYXIiKTsKLQljaGVjayhmMSwgImZvby9iYXJmb29iYXIiLCB0cnVlKTsKLQljaGVjayhmMSwgImZvby9iYXIiLCB0cnVlKTsKLQljaGVjayhmMSwgIi9mb28vZm9vYmFyL2ZvbyIsIGZhbHNlKTsKLQljaGVjayhmMSwgImZvb29iYXIxIiwgZmFsc2UpOwotCWNoZWNrKGYxLCAiZm9vMSIsIGZhbHNlKTsKLQljaGVjayhmMSwgImZvb2JhciIsIGZhbHNlKTsKLQljaGVjayhmMSwgImJhcjEiLCBmYWxzZSk7Ci0KLQlwYXRoX2ZpbHRlciBmMigiZm9vIiwgIiIpOwotCWNoZWNrKGYyLCAiZm9vIiwgdHJ1ZSk7Ci0JY2hlY2soZjIsICJmb28xIiwgZmFsc2UpOwotCWNoZWNrKGYyLCAiZm9vL2ZvbyIsIHRydWUpOwotCi0JcGF0aF9maWx0ZXIgZjMoIiIsICJmb28iKTsKLQljaGVjayhmMywgImZvbyIsIGZhbHNlKTsKLQljaGVjayhmMywgImZvbzEiLCB0cnVlKTsKLQljaGVjayhmMywgImZvby9mb28iLCBmYWxzZSk7Ci0KLQlwYXRoX2ZpbHRlciBmNCgiZm9vIiwgImZvbyIpOwotCWNoZWNrKGY0LCAiZm9vIiwgZmFsc2UpOwotCWNoZWNrKGY0LCAiZm9vMSIsIGZhbHNlKTsKLQljaGVjayhmNCwgImZvby9mb28iLCBmYWxzZSk7Ci0KLQlwYXRoX2ZpbHRlciBmNSgiKmZvbyoiLCAiKmJhcioiKTsKLQljaGVjayhmNSwgImZvbyIsIHRydWUpOwotCWNoZWNrKGY1LCAiYmFyIiwgZmFsc2UpOwotCWNoZWNrKGY1LCAiZm9vYmFyIiwgZmFsc2UpOwotCWNoZWNrKGY1LCAiYmFyZm9vIiwgZmFsc2UpOwotCWNoZWNrKGY1LCAiZm9vL2JhciIsIGZhbHNlKTsKLQotCXBhdGhfZmlsdGVyIGY2KCIgZm9vLGJhciIsICJiYXIgIik7Ci0JY2hlY2soZjYsICJmb28iLCBmYWxzZSk7Ci0JY2hlY2soZjYsICJmb28gIiwgZmFsc2UpOwotCWNoZWNrKGY2LCAiIGZvbyIsIHRydWUpOwotCWNoZWNrKGY2LCAiYmFyIiwgdHJ1ZSk7Ci0JY2hlY2soZjYsICJiYXIgIiwgZmFsc2UpOwotCWNoZWNrKGY2LCAiIGJhciIsIGZhbHNlKTsKLQljaGVjayhmNiwgImZvbyAiLCBmYWxzZSk7Ci0JY2hlY2soZjYsICJmb28vIGJhciIsIGZhbHNlKTsKLQotCXBhdGhfZmlsdGVyIGY3KCIuIiwgIiIpOwotCWNoZWNrKGY3LCAiLiIsIHRydWUpOwotCS8vIGEgYml0IHN1cnByaXNpbmcgYnV0IHJpZ2h0IElNSE8sIG91ciBpbXBsZW1lbnRhdGlvbiB1c2Ugc3VjY2Vzc2l2ZQotCS8vIGRpcm5hbWUoaW5wdXQpIHRvIGNoZWNrIHZzIHRoZSBpbmNsdWRlZCBwYXRoIGFuZAotCS8vIGRpcm5hbWUoImZvbyIpID09ICIuIiBzbyBhbGwgcmVsYXRpdmUgcGF0aCBpbnB1dCBtYXRjaCBhICIuIgotCS8vIGluY2x1ZGVkIGZpbHRlcgotCWNoZWNrKGY3LCAiZm9vIiwgdHJ1ZSk7Ci0KLQlyZXR1cm4gRVhJVF9TVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19maWx0ZXJfdGVzdHMuY3BwIGIvbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19maWx0ZXJfdGVzdHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDA2MDM5Li4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy90ZXN0cy9zdHJpbmdfZmlsdGVyX3Rlc3RzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKgotICogQGZpbGUgc3RyaW5nX2ZpbHRlcl90ZXN0cy5jcHAKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotI2luY2x1ZGUgInN0cmluZ19maWx0ZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotI2RlZmluZSBjaGVjayhmaWx0ZXIsIHN0ciwgcmVzdWx0KSBcCi0JaWYgKGZpbHRlci5tYXRjaChzdHIpICE9IHJlc3VsdCkgeyBcCi0JCWNlcnIgPDwgIlwiIiA8PCBzdHIgPDwgIlwiIG1hdGNoZWQgd2l0aCAiICNmaWx0ZXIgXAotCQkgICAgIDw8ICIgZGlkIG5vdCByZXR1cm4gIiAjcmVzdWx0IDw8IGVuZGw7IFwKLQkJZXhpdChFWElUX0ZBSUxVUkUpOyBcCi0JfQotCi1pbnQgbWFpbigpCi17Ci0Jc3RyaW5nX2ZpbHRlciBmMTsKLQljaGVjayhmMSwgIiIsIHRydWUpOwotCWNoZWNrKGYxLCAib2siLCB0cnVlKTsKLQotCXN0cmluZ19maWx0ZXIgZjIoIm9rIiwgIiIpOwotCWNoZWNrKGYyLCAib2siLCB0cnVlKTsKLQljaGVjayhmMiwgIm5vIiwgZmFsc2UpOwotCi0Jc3RyaW5nX2ZpbHRlciBmMygiIiwgIm5vIik7Ci0JY2hlY2soZjMsICJvayIsIHRydWUpOwotCWNoZWNrKGYzLCAibm8iLCBmYWxzZSk7Ci0KLQlzdHJpbmdfZmlsdGVyIGY0KCJvayxvazIsIiwgIiIpOwotCWNoZWNrKGY0LCAib2siLCB0cnVlKTsKLQljaGVjayhmNCwgIm9rMiIsIHRydWUpOwotCWNoZWNrKGY0LCAibm8iLCBmYWxzZSk7Ci0KLQlzdHJpbmdfZmlsdGVyIGY1KCJvayxvazIiLCAibm8sbm8yIik7Ci0JY2hlY2soZjUsICJvayIsIHRydWUpOwotCWNoZWNrKGY1LCAib2syIiwgdHJ1ZSk7Ci0JY2hlY2soZjUsICJubyIsIGZhbHNlKTsKLQljaGVjayhmNSwgIm5vMiIsIGZhbHNlKTsKLQotCXZlY3RvcjxzdHJpbmc+IHYxOwotCXZlY3RvcjxzdHJpbmc+IHYyOwotCi0Jc3RyaW5nX2ZpbHRlciBmNih2MSwgdjIpOwotCWNoZWNrKGY2LCAiIiwgdHJ1ZSk7Ci0JY2hlY2soZjYsICJvayIsIHRydWUpOwotCi0JdjEucHVzaF9iYWNrKCJvayIpOwotCXYxLnB1c2hfYmFjaygib2syIik7Ci0KLQlzdHJpbmdfZmlsdGVyIGY3KHYxLCB2Mik7Ci0JY2hlY2soZjcsICJvayIsIHRydWUpOwotCWNoZWNrKGY3LCAib2syIiwgdHJ1ZSk7Ci0JY2hlY2soZjcsICJubyIsIGZhbHNlKTsKLQotCXYxLmNsZWFyKCk7Ci0KLQl2Mi5wdXNoX2JhY2soIm5vIik7Ci0JdjIucHVzaF9iYWNrKCJubzIiKTsKLQotCXN0cmluZ19maWx0ZXIgZjgodjEsIHYyKTsKLQljaGVjayhmOCwgIm9rIiwgdHJ1ZSk7Ci0JY2hlY2soZjgsICJubyIsIGZhbHNlKTsKLQljaGVjayhmOCwgIm5vIiwgZmFsc2UpOwotCi0JdjEucHVzaF9iYWNrKCJvayIpOwotCXYxLnB1c2hfYmFjaygib2syIik7Ci0KLQlzdHJpbmdfZmlsdGVyIGY5KHYxLCB2Mik7Ci0JY2hlY2soZjksICJvayIsIHRydWUpOwotCWNoZWNrKGY5LCAibm8yIiwgZmFsc2UpOwotCi0Jc3RyaW5nX2ZpbHRlciBmMTAoIiBmb28gIiwgIiIpOwotCWNoZWNrKGYxMCwgIiBmb28gIiwgdHJ1ZSk7Ci0JY2hlY2soZjEwLCAiIGZvbyIsIGZhbHNlKTsKLQljaGVjayhmMTAsICJmb28gIiwgZmFsc2UpOwotCWNoZWNrKGYxMCwgImZvbyIsIGZhbHNlKTsKLQotCXJldHVybiBFWElUX1NVQ0NFU1M7Ci19CmRpZmYgLS1naXQgYS9saWJ1dGlsKysvdGVzdHMvc3RyaW5nX21hbmlwX3Rlc3RzLmNwcCBiL2xpYnV0aWwrKy90ZXN0cy9zdHJpbmdfbWFuaXBfdGVzdHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2IwN2RmLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwrKy90ZXN0cy9zdHJpbmdfbWFuaXBfdGVzdHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI1ICswLDAgQEAKLS8qKgotICogQGZpbGUgc3RyaW5nX21hbmlwX3Rlc3RzLmNwcAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWUgT3V0cHV0Pgotc3RydWN0IGlucHV0X291dHB1dCB7Ci0JSW5wdXQgaW5wdXQ7Ci0JT3V0cHV0IG91dHB1dDsKLX07Ci0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIElucHV0LCB0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIFJlc3VsdD4KLXN0YXRpYyB2b2lkIGNoZWNrX3Jlc3VsdChjaGFyIGNvbnN0ICogZmN0X25hbWUsIElucHV0IGNvbnN0ICYgaW5wdXQsCi0JCSAgT3V0cHV0IGNvbnN0ICYgb3V0cHV0LCBSZXN1bHQgY29uc3QgJiByZXN1bHQpCi17Ci0JaWYgKHJlc3VsdCAhPSBvdXRwdXQpIHsKLQkJY2VyciA8PCBmY3RfbmFtZSA8PCAiOiBcbiIKLQkJICAgICA8PCAiZm9yOlxuXCIiIDw8IGlucHV0IDw8ICJcIlxuIgotCQkgICAgIDw8ICJleHBlY3Q6XG5cIiIgPDwgb3V0cHV0IDw8ICJcIlxuIgotCQkgICAgIDw8ICJmb3VuZDpcblwiIiA8PCByZXN1bHQgPDwgIlwiXG4iOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCosIGNoYXIgY29uc3QqPiBleHBlY3RfZXJhc2VbXSA9Ci17Ci0JeyAiIiwgIiIgfSwKLQl7ICI7OzsiLCAiIiB9LAotCXsgImFiOzs7Y2QiLCAiY2QiIH0sCi0JeyAiOzs7Y2QiLCAiY2QiIH0sCi0JeyAiYWI7OzsiLCAiIiB9LAotCXsgMCwgMCB9Ci19OwotCi1zdGF0aWMgdm9pZCBlcmFzZV90b19sYXN0X29mX3Rlc3RzKCkKLXsKLQlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBjaGFyIGNvbnN0Kj4gY29uc3QgKiBjdXI7Ci0JZm9yIChjdXIgPSBleHBlY3RfZXJhc2U7IGN1ci0+aW5wdXQ7ICsrY3VyKSB7Ci0JCXN0cmluZyByZXN1bHQgPSBlcmFzZV90b19sYXN0X29mKGN1ci0+aW5wdXQsICc7Jyk7Ci0JCWNoZWNrX3Jlc3VsdCgiZXJhc2VfdG9fbGFzdF9vZigpIiwgY3VyLT5pbnB1dCwgY3VyLT5vdXRwdXQsCi0JCQkgICAgIHJlc3VsdCk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBwYWlyPHN0cmluZywgc3RyaW5nPiA+IGV4cGVjdF9zcGxpdFtdID0KLXsKLSNkZWZpbmUgTUFLRV9QQUlSKGEsIGIpICBtYWtlX3BhaXIoc3RyaW5nKGEpLCBzdHJpbmcoYikpCi0JeyAiYWI7Y2QiLCBNQUtFX1BBSVIoImFiIiwgImNkIikgfSwKLQl7ICI7Y2QiLCAgIE1BS0VfUEFJUigiIiwgICAiY2QiKSB9LAotCXsgImFiOyIsICAgTUFLRV9QQUlSKCJhYiIsICIiKSAgIH0sCi0JeyAiYjtkIiwgICBNQUtFX1BBSVIoImIiLCAgImQiKSAgfSwKLQl7ICI7ZCIsICAgIE1BS0VfUEFJUigiIiwgICAiZCIpICB9LAotCXsgImE7IiwgICAgTUFLRV9QQUlSKCJhIiwgICIiKSAgIH0sCi0JeyAiOyIsICAgICBNQUtFX1BBSVIoIiIsICAgIiIpICAgfSwKLQl7ICIiLCAgICAgIE1BS0VfUEFJUigiIiwgICAiIikgICB9LAotCXsgMCwgICAgICAgTUFLRV9QQUlSKCIiLCAgICIiKSAgIH0KLSN1bmRlZiBNQUtFX1BBSVIKLX07Ci0KLXN0YXRpYyB2b2lkIHNwbGl0X3Rlc3RzKCkKLXsKLQlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBwYWlyPHN0cmluZywgc3RyaW5nPiA+IGNvbnN0ICogY3VyOwotCWZvciAoY3VyID0gZXhwZWN0X3NwbGl0OyBjdXItPmlucHV0OyArK2N1cikgewotCQlzdHJpbmcgdGVtcCA9IGN1ci0+aW5wdXQ7Ci0JCXN0cmluZyByZXN1bHQgPSBzcGxpdCh0ZW1wLCAnOycpOwotCQljaGVja19yZXN1bHQoInNwbGl0KCkiLCBjdXItPmlucHV0LCBjdXItPm91dHB1dC5maXJzdCwgdGVtcCk7Ci0JCWNoZWNrX3Jlc3VsdCgic3BsaXQoKSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LnNlY29uZCwgcmVzdWx0KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBwYWlyPHN0cmluZywgYm9vbD4gPiBleHBlY3RfaXNfcHJlZml4W10gPQotewotI2RlZmluZSBNQUtFX1BBSVIoYSwgYikgIG1ha2VfcGFpcihzdHJpbmcoYSksIGIpCi0JeyAiYWJjZCIsIE1BS0VfUEFJUigiYWJjIiwgdHJ1ZSkgfSwKLQl7ICJhYmNkIiwgTUFLRV9QQUlSKCJhYyIsIGZhbHNlKSB9LAotCXsgImJhYmNkIiwgTUFLRV9QQUlSKCJhYmMiLCBmYWxzZSkgfSwKLQkvLyB0aGVzZSBpbnZva2UgdW5kZWZpbmVkIGJlaGF2aW9yIGZyb20gaXNfcHJlZml4LCB3ZSBrZWVwIHRoZW0KLQkvLyBmb3IgdGhlIHJlY29yZC4KLS8vCXsgImJhYmNkIiwgTUFLRV9QQUlSKCIiLCBmYWxzZSkgfSwKLS8vCXsgIiIsIE1BS0VfUEFJUigiIiwgZmFsc2UpIH0sCi0JeyAwLCBNQUtFX1BBSVIoIiIsIHRydWUpIH0KLSN1bmRlZiBNQUtFX1BBSVIKLX07Ci0KLXN0YXRpYyB2b2lkIGlzX3ByZWZpeF90ZXN0cygpCi17Ci0JaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgcGFpcjxzdHJpbmcsIGJvb2w+ID4gY29uc3QgKiBjdXI7Ci0JZm9yIChjdXIgPSBleHBlY3RfaXNfcHJlZml4OyBjdXItPmlucHV0OyArK2N1cikgewotCQlib29sIHJlc3VsdCA9IGlzX3ByZWZpeChjdXItPmlucHV0LCBjdXItPm91dHB1dC5maXJzdCk7Ci0JCWlmIChyZXN1bHQgIT0gY3VyLT5vdXRwdXQuc2Vjb25kKSB7Ci0JCQljZXJyIDw8ICJpc19wcmVmaXgoIiA8PCBjdXItPmlucHV0IDw8ICIsICIKLQkJCSAgICAgPDwgY3VyLT5vdXRwdXQuZmlyc3QgPDwgIikgIgotCQkJICAgICA8PCAicmV0dXJuICIgPDwgcmVzdWx0IDw8IGVuZGw7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIGNvbnN0IHNpemVfdCBtYXhfdG9rZW4gPSA4Owotc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKlttYXhfdG9rZW5dPiBleHBlY3Rfc2VwYXJhdGVfdG9rZW5bXSA9Ci17Ci0JeyAiYWEiLCB7ICJhYSIgfSB9LAotCXsgImFcXGMiLCB7ICJhXFxjIiB9IH0sCi0JeyAiYVxcXFxjIiwgeyAiYVxcXFxjIiB9IH0sCi0JeyAiYVxcXFxjXFwiLCB7ICJhXFxcXGNcXCIgfSB9LAotCXsgImFiO2NkO2VmO2doIiwgeyAiYWIiLCAiY2QiLCAiZWYiLCAiZ2giIH0gfSwKLQl7ICJhYlxcO2NkIiwgeyAiYWI7Y2QiIH0gfSwKLQl7ICJhO2EiLCB7ICJhIiwgImEiIH0gfSwKLQl7ICI7YSIsIHsgIiIsICJhIiB9IH0sCi0JeyAiOyIsIHsgIiIsICIiIH0gfSwKLQl7ICI7OyIsIHsgIiIsICIiLCAiIiB9IH0sCi0JeyAwLCB7IDAsIH0gfQotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXBhcmF0ZV90b2tlbl90ZXN0cygpCi17Ci0JaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqW21heF90b2tlbl0+IGNvbnN0ICogY3VyOwotCWZvciAoY3VyID0gZXhwZWN0X3NlcGFyYXRlX3Rva2VuOyBjdXItPmlucHV0OyArK2N1cikgewotCQl2ZWN0b3I8c3RyaW5nPiByZXN1bHQgPSBzZXBhcmF0ZV90b2tlbihjdXItPmlucHV0LCAnOycpOwotCQlpZiAocmVzdWx0LnNpemUoKSA+IG1heF90b2tlbikgewotCQkJY2VyciA8PCAic2VwYXJhdGVfdG9rZW4oKTogdG9vIG1hbnkgdG9rZW5cbiIgCi0JCQkgICAgIDw8ICJpbnB1dDpcbiIKLQkJCSAgICAgPDwgJyInIDw8IGN1ci0+aW5wdXQgPDwgIlwiXG4iCi0JCQkgICAgIDw8ICJvdXRwdXRcbiI7Ci0JCQljb3B5KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksCi0JCQkgICAgIG9zdHJlYW1faXRlcmF0b3I8c3RyaW5nPihjZXJyLCAiXG4iKSk7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpIHsKLQkJCWlmIChyZXN1bHRbaV0gIT0gY3VyLT5vdXRwdXRbaV0pIHsKLQkJCQljZXJyIDw8ICJzZXBhcmF0ZV90b2tlbigpOlxuIiAKLQkJCQkgICAgIDw8ICJpbnB1dDpcbiIKLQkJCQkgICAgIDw8IGN1ci0+aW5wdXQgPDwgZW5kbDsKLQkJCQljZXJyIDw8ICJleHBlY3Q6XG4iOwotCQkJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4X3Rva2VuOyArK2kpIHsKLQkJCQkJaWYgKCFjdXItPm91dHB1dFtpXSkKLQkJCQkJCWJyZWFrOwotCQkJCQljZXJyIDw8IGN1ci0+b3V0cHV0W2ldIDw8IGVuZGw7Ci0JCQkJfQotCQkJCWNlcnIgPDwgIm91dHB1dDpcbiI7Ci0JCQkJY29weShyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLAotCQkJCSAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGNlcnIsICJcbiIpKTsKLQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKj4gZXhwZWN0X3J0cmltW10gPQotewotCXsgImFiYyIsICJhYmMiIH0sCi0JeyAiYWJjICAiLCAiYWJjIiB9LAotCXsgIiBhYmMgICIsICIgYWJjIiB9LAotCXsgIiBhYmMgXHQgXHQiLCAiIGFiYyIgfSwKLQl7ICIgIiwgIiIgfSwKLQl7ICJcdCBcdCIsICIiIH0sCi0JeyAiIiwgIiIgfSwKLQl7IDAsIDAgfQotfTsKLQotc3RhdGljIHZvaWQgcnRyaW1fdGVzdHMoKQotewotCWlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QqPiBjb25zdCAqIGN1cjsKLQlmb3IgKGN1ciA9IGV4cGVjdF9ydHJpbTsgY3VyLT5pbnB1dDsgKytjdXIpIHsKLQkJc3RyaW5nIHJlc3VsdCA9IHJ0cmltKGN1ci0+aW5wdXQpOwotCQljaGVja19yZXN1bHQoInJ0cmltKCkiLCBjdXItPmlucHV0LCBjdXItPm91dHB1dCwgcmVzdWx0KTsKLQl9Ci19Ci0KLQotc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKj4gZXhwZWN0X2x0cmltW10gPQotewotCXsgImFiYyIsICJhYmMiIH0sCi0JeyAiYWJjICIsICJhYmMgIiB9LAotCXsgIiBhYmMgIiwgImFiYyAiIH0sCi0JeyAiXHQgIFx0YWJjICIsICJhYmMgIiB9LAotCXsgIiAiLCAiIiB9LAotCXsgIlx0IFx0IiwgIiIgfSwKLQl7ICIiLCAiIiB9LAotCXsgMCwgMCB9Ci19OwotCi1zdGF0aWMgdm9pZCBsdHJpbV90ZXN0cygpCi17Ci0JaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCo+IGNvbnN0ICogY3VyOwotCWZvciAoY3VyID0gZXhwZWN0X2x0cmltOyBjdXItPmlucHV0OyArK2N1cikgewotCQlzdHJpbmcgcmVzdWx0ID0gbHRyaW0oY3VyLT5pbnB1dCk7Ci0JCWNoZWNrX3Jlc3VsdCgibHRyaW0oKSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LCByZXN1bHQpOwotCX0KLX0KLQotCi1zdGF0aWMgaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqPiBleHBlY3RfdHJpbVtdID0KLXsKLQl7ICJhYmMiLCAiYWJjIiB9LAotCXsgImFiYyAiLCAiYWJjIiB9LAotCXsgIiBhYmMgIiwgImFiYyIgfSwKLQl7ICJcdCAgXHRhYmMgXHQiLCAiYWJjIiB9LAotCXsgIiAiLCAiIiB9LAotCXsgIlx0IFx0IiwgIiIgfSwKLQl7ICIiLCAiIiB9LAotCXsgMCwgMCB9Ci19OwotCi1zdGF0aWMgdm9pZCB0cmltX3Rlc3RzKCkKLXsKLQlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBjaGFyIGNvbnN0Kj4gY29uc3QgKiBjdXI7Ci0JZm9yIChjdXIgPSBleHBlY3RfdHJpbTsgY3VyLT5pbnB1dDsgKytjdXIpIHsKLQkJc3RyaW5nIHJlc3VsdCA9IHRyaW0oY3VyLT5pbnB1dCk7Ci0JCWNoZWNrX3Jlc3VsdCgidHJpbSgpIiwgY3VyLT5pbnB1dCwgY3VyLT5vdXRwdXQsIHJlc3VsdCk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnB1dF9vdXRwdXQ8ZG91YmxlLCBjaGFyIGNvbnN0ICo+IGV4cGVjdF9mb3JtYXRfcGVyY2VudFtdID0KLXsKLQl7IDIuMiwgICAgICAgICIgMi4yMDAwIiB9LAotCXsgMCwgICAgICAgICAgIiAgICAgIDAiIH0sCi0JeyAxMDAuMDAsICAgICAiMTAwLjAwMCIgfSwKLQl7IDk5Ljk5OTk5LCAgICIxMDAuMDAwIiB9LAotCXsgMC4wMDAwMDM0NCwgIjMuNGUtMDYiIH0sCi0JLy8gRklYTUUsIG11c3QgYmUgMy5lLTEyNCBidXQgb3V0cHV0IGlzIDMuNGUtMTI0Ci0vLwl7IDAuMzRlLTEyMywgICIzLmUtMTI0IiB9LAotCXsgLTEuMCwgMCB9Ci19OwotCi1zdGF0aWMgdm9pZCBmb3JtYXRfcGVyY2VudF90ZXN0cygpCi17Ci0JaW5wdXRfb3V0cHV0PGRvdWJsZSwgY2hhciBjb25zdCo+IGNvbnN0ICogY3VyOwotCWZvciAoY3VyID0gZXhwZWN0X2Zvcm1hdF9wZXJjZW50OyBjdXItPmlucHV0ICE9IC0xLjA7ICsrY3VyKSB7Ci0JCXN0cmluZyByZXN1bHQgPSBmb3JtYXRfcGVyY2VudChjdXItPmlucHV0LCBwZXJjZW50X2ludF93aWR0aCwKLQkJICAgICAgcGVyY2VudF9mcmFjdF93aWR0aCk7Ci0JCWNoZWNrX3Jlc3VsdCgiZm9ybWF0X3BlcmNlbnQoKSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LAotCQkJICAgICByZXN1bHQpOwotCX0KLX0KLQotCi1zdGF0aWMgaW5wdXRfb3V0cHV0PHVuc2lnbmVkIGludCwgY2hhciBjb25zdCAqPiBleHBlY3RfZnJvbV9zdHJfdG9fdWludFtdID0KLXsKLQl7IDEyMywgIjEyMyIgfSwKLQl7IDMzLCAiMzMiIH0sCi0JeyAwLCAiMCIgfSwKLQl7IDAsIDAgfQotfTsKLQotc3RhdGljIHZvaWQgdG9zdHJfdGVzdHMoKQotewotCWlucHV0X291dHB1dDx1bnNpZ25lZCBpbnQsIGNoYXIgY29uc3QgKj4gY29uc3QgKiBjdXI7Ci0JZm9yIChjdXIgPSBleHBlY3RfZnJvbV9zdHJfdG9fdWludDsgY3VyLT5vdXRwdXQ7ICsrY3VyKSB7Ci0JCXN0cmluZyByZXN1bHQgPSBvcF9sZXhpY2FsX2Nhc3Q8c3RyaW5nPihjdXItPmlucHV0KTsKLQkJY2hlY2tfcmVzdWx0KCJvcF9sZXhpY2FsX2Nhc3QoKSIsIGN1ci0+aW5wdXQsCi0JCSAgICAgY3VyLT5vdXRwdXQsIHJlc3VsdCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB0b3VpbnRfdGVzdHMoKQotewotCS8vIHJldmVyc2VkIGlucHV0L291dHB1dCBvZiB0aGUgcHJldmlvdXMgdGVzdHMKLQlpbnB1dF9vdXRwdXQ8dW5zaWduZWQgaW50LCBjaGFyIGNvbnN0ICo+IGNvbnN0ICogY3VyOwotCWZvciAoY3VyID0gZXhwZWN0X2Zyb21fc3RyX3RvX3VpbnQ7IGN1ci0+b3V0cHV0OyArK2N1cikgewotCQl1bnNpZ25lZCBpbnQgcmVzdWx0ID0KLQkJCW9wX2xleGljYWxfY2FzdDx1bnNpZ25lZCBpbnQ+KGN1ci0+b3V0cHV0KTsKLQkJY2hlY2tfcmVzdWx0KCJvcF9sZXhpY2FsX2Nhc3QoKSIsIGN1ci0+b3V0cHV0LCBjdXItPmlucHV0LAotCQkgICAgIHJlc3VsdCk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCosIGJvb2w+IGV4cGVjdF9mcm9tX3N0cl90b19ib29sW10gPQotewotCXsgIjAiLCBmYWxzZSB9LAotCXsgIjEiLCB0cnVlIH0sCi0JeyAwLCAwIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRvYm9vbF90ZXN0cygpCi17Ci0JaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgYm9vbD4gY29uc3QgKiBjdXI7Ci0JZm9yIChjdXIgPSBleHBlY3RfZnJvbV9zdHJfdG9fYm9vbDsgY3VyLT5pbnB1dDsgKytjdXIpIHsKLQkJYm9vbCByZXN1bHQgPSBvcF9sZXhpY2FsX2Nhc3Q8Ym9vbD4oY3VyLT5pbnB1dCk7Ci0JCWNoZWNrX3Jlc3VsdCgib3BfbGV4aWNhbF9jYXN0KCkiLCBjdXItPmlucHV0LCBjdXItPm91dHB1dCwKLQkJICAgICByZXN1bHQpOwotCX0KLX0KLQotLy8gRklYTUU6IG1vcmUgb3BfbGV4aWNhbF9jYXN0PD4gdGVzdHMKLQotaW50IG1haW4oKQotewotCWVyYXNlX3RvX2xhc3Rfb2ZfdGVzdHMoKTsKLQl0b3N0cl90ZXN0cygpOwotCXRvdWludF90ZXN0cygpOwotCXRvYm9vbF90ZXN0cygpOwotCXNwbGl0X3Rlc3RzKCk7Ci0JaXNfcHJlZml4X3Rlc3RzKCk7Ci0Jc2VwYXJhdGVfdG9rZW5fdGVzdHMoKTsKLQlydHJpbV90ZXN0cygpOwotCWx0cmltX3Rlc3RzKCk7Ci0JdHJpbV90ZXN0cygpOwotCWZvcm1hdF9wZXJjZW50X3Rlc3RzKCk7Ci0JcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy90ZXN0cy91dGlsaXR5X3Rlc3RzLmNwcCBiL2xpYnV0aWwrKy90ZXN0cy91dGlsaXR5X3Rlc3RzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRlMDAwZi4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvdGVzdHMvdXRpbGl0eV90ZXN0cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqCi0gKiBAZmlsZSB1dGlsaXR5X3Rlc3RzLmNwcAotICogdGVzdHMgdXRpbGl0eS5oIGFuZCBvcF9leGNlcHRpb24uaAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxuZXc+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLSNpbmNsdWRlICJ1dGlsaXR5LmgiCi0jaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXN0YXRpYyBpbnQgbmJfbmV3Owotc3RhdGljIGludCBuYl9uZXdfYXJyYXk7Ci0KLXZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkgdGhyb3coYmFkX2FsbG9jKQotewotCW5iX25ldysrOwotCXJldHVybiBtYWxsb2Moc2l6ZSk7Ci19Ci0KLXZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXplKSB0aHJvdyhiYWRfYWxsb2MpCi17Ci0JbmJfbmV3X2FycmF5Kys7Ci0JcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqIHApIHRocm93KCkKLXsKLQluYl9uZXctLTsKLQlpZiAocCkKLQkJZnJlZShwKTsKLX0KLQotdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICogcCkgdGhyb3coKQotewotCW5iX25ld19hcnJheS0tOwotCWlmIChwKQotCQlmcmVlKHApOwotfQotCi0KLXZvaWQgY2hlY2tfYWxsb2MoKQotewotCWlmIChuYl9uZXcpIHsKLQkJY2VyciA8PCAibmV3KHNpemVfdCkgbGVha1xuIjsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWlmIChuYl9uZXdfYXJyYXkpIHsKLQkJY2VyciA8PCAibmV3W10oc2l6ZV90KSBsZWFrXG4iOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotfQotCi0KLXN0cnVjdCBBIHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVGhyb3csIHR5cGVuYW1lIENhdGNoPgotdm9pZCB0aHJvd190ZXN0cygpCi17Ci0Jc2NvcGVkX3B0cjxBPiBhKG5ldyBBKTsKLQl0cnkgewotCQlzY29wZWRfcHRyPEE+IGEobmV3IEEpOwotCQl0aHJvdyBUaHJvdygiIik7Ci0JfQotCWNhdGNoIChDYXRjaCBjb25zdCAmKSB7Ci0JfQotfQotCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUaHJvdywgdHlwZW5hbWUgQ2F0Y2g+Ci12b2lkIHRocm93X3Rlc3RzKGJvb2wpCi17Ci0Jc2NvcGVkX2FycmF5PEE+IGIobmV3IEFbMTBdKTsKLQl0cnkgewotCQlzY29wZWRfYXJyYXk8QT4gYShuZXcgQVsxMF0pOwotCQl0aHJvdyBUaHJvdygiIik7Ci0JfQotCWNhdGNoIChDYXRjaCBjb25zdCAmKSB7Ci0JfQotfQotCi0KLXZvaWQgdGVzdHNfbmV3KCkKLXsKLQl0aHJvd190ZXN0czxvcF9mYXRhbF9lcnJvciwgb3BfZmF0YWxfZXJyb3I+KCk7Ci0JdGhyb3dfdGVzdHM8b3BfZmF0YWxfZXJyb3IsIG9wX2V4Y2VwdGlvbj4oKTsKLQl0aHJvd190ZXN0czxvcF9ydW50aW1lX2Vycm9yLCBvcF9ydW50aW1lX2Vycm9yPigpOwotCXRocm93X3Rlc3RzPG9wX3J1bnRpbWVfZXJyb3IsIHJ1bnRpbWVfZXJyb3I+KCk7Ci0JdGhyb3dfdGVzdHM8b3BfZmF0YWxfZXJyb3IsIG9wX2ZhdGFsX2Vycm9yPih0cnVlKTsKLQl0aHJvd190ZXN0czxvcF9mYXRhbF9lcnJvciwgb3BfZXhjZXB0aW9uPih0cnVlKTsKLQl0aHJvd190ZXN0czxvcF9ydW50aW1lX2Vycm9yLCBvcF9ydW50aW1lX2Vycm9yPih0cnVlKTsKLQl0aHJvd190ZXN0czxvcF9ydW50aW1lX2Vycm9yLCBydW50aW1lX2Vycm9yPih0cnVlKTsKLX0KLQotCi1pbnQgbWFpbigpCi17Ci0JdHJ5IHsKLQkJdGVzdHNfbmV3KCk7Ci0JCWNoZWNrX2FsbG9jKCk7Ci0JfQotCWNhdGNoICguLi4pIHsKLQkJY2VyciA8PCAidW5rbm93biBleGNlcHRpb25cbiI7Ci0JCXJldHVybiBFWElUX0ZBSUxVUkU7Ci0JfQotCi0JcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy91bmlxdWVfc3RvcmFnZS5oIGIvbGlidXRpbCsrL3VuaXF1ZV9zdG9yYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmN2ZkNzEuLjAwMDAwMDAKLS0tIGEvbGlidXRpbCsrL3VuaXF1ZV9zdG9yYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSB1bmlxdWVfc3RvcmFnZS5oCi0gKiBVbmlxdWUgc3RvcmFnZSBvZiB2YWx1ZXMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIFVOSVFVRV9TVE9SQUdFX0gKLSNkZWZpbmUgVU5JUVVFX1NUT1JBR0VfSAotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0KLS8qKgotICogU3RvcmUgdmFsdWVzIHN1Y2ggdGhhdCBvbmx5IG9uZSBjb3B5IG9mIHRoZSB2YWx1ZQotICogaXMgZXZlciBzdG9yZWQuCi0gKgotICogSSBpcyBhbiBhcmJpdHJhcnkgdHlwZW5hbWUgdGhhdCdzIG5ldmVyCi0gKiB1c2VkLgotICoKLSAqIEl0IGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuZm9yY2UKLSAqIHR5cGUtc2FmZXR5IGZvciBhIGNvbGxlY3Rpb24uCi0gKgotICogVGhlIHZhbHVlIHR5cGUgIlYiIG11c3QgYmUgZGVmYXVsdC1jb25zdHJ1Y3RpYmxlLAotICogYW5kIHRoaXMgaXMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGEgc3RvcmVkIGlkX3ZhbHVlCi0gKiB3aGVyZSAuc2V0KCkgaXMgZmFsc2UKLSAqLwotdGVtcGxhdGUgPHR5cGVuYW1lIEksIHR5cGVuYW1lIFY+IGNsYXNzIHVuaXF1ZV9zdG9yYWdlIHsKLQotcHVibGljOgotCXVuaXF1ZV9zdG9yYWdlKCkgewotCQkvLyBpZCAwCi0JCXZhbHVlcy5wdXNoX2JhY2soVigpKTsKLQl9Ci0KLQl2aXJ0dWFsIH51bmlxdWVfc3RvcmFnZSgpIHt9Ci0KLQl0eXBlZGVmIHN0ZDo6dmVjdG9yPFY+IHN0b3JlZF92YWx1ZXM7Ci0KLQkvLy8gdGhlIGFjdHVhbCBJRCB0eXBlCi0Jc3RydWN0IGlkX3ZhbHVlIHsKLQkJLy8vIGlkID09IDAgbWVhbnMgImVtcHR5IiAvICJ1bmRlZmluZWQiCi0JCWlkX3ZhbHVlKCkgOiBpZCgwKSB7fQotCi0JCS8vLyBkb2VzIHRoaXMgSUQgbWFwIHRvIGEgbm9uLWRlZmF1bHQgdmFsdWUgPwotCQlib29sIHNldCgpIGNvbnN0IHsKLQkJCXJldHVybiBpZDsKLQkJfQotCi0JCWJvb2wgb3BlcmF0b3I8KGlkX3ZhbHVlIGNvbnN0ICYgcmhzKSBjb25zdCB7Ci0JCQlyZXR1cm4gaWQgPCByaHMuaWQ7Ci0JCX0KLQotCQlib29sIG9wZXJhdG9yPT0oaWRfdmFsdWUgY29uc3QgJiByaHMpIGNvbnN0IHsKLQkJCXJldHVybiBpZCA9PSByaHMuaWQ7Ci0JCX0KLQotCQlib29sIG9wZXJhdG9yIT0oaWRfdmFsdWUgY29uc3QgJiByaHMpIGNvbnN0IHsKLQkJCXJldHVybiAhKGlkID09IHJocy5pZCk7Ci0JCX0KLQotCXByaXZhdGU6Ci0JCWZyaWVuZCBjbGFzcyB1bmlxdWVfc3RvcmFnZTxJLCBWPjsKLQotCQl0eXBlZGVmIHR5cGVuYW1lIHN0b3JlZF92YWx1ZXM6OnNpemVfdHlwZSBzaXplX3R5cGU7Ci0KLQkJZXhwbGljaXQgaWRfdmFsdWUoc2l6ZV90eXBlIHMpIDogaWQocykge30KLQotCQkvLy8gYWN0dWFsIElEIHZhbHVlCi0JCXNpemVfdHlwZSBpZDsKLQl9OwotCi0KLQkvLy8gZW5zdXJlIHRoaXMgdmFsdWUgaXMgYXZhaWxhYmxlCi0JaWRfdmFsdWUgY29uc3QgY3JlYXRlKFYgY29uc3QgJiB2YWx1ZSkgewotCQl0eXBlbmFtZSBpZF9tYXA6OnZhbHVlX3R5cGUgdmFsKHZhbHVlLCBpZF92YWx1ZSh2YWx1ZXMuc2l6ZSgpKSk7Ci0JCXN0ZDo6cGFpcjx0eXBlbmFtZSBpZF9tYXA6Oml0ZXJhdG9yLCBib29sPgotCQkJaW5zZXJ0ZWQgPSBpZHMuaW5zZXJ0KHZhbCk7Ci0JCWlmIChpbnNlcnRlZC5zZWNvbmQpIHsKLQkJCXZhbHVlcy5wdXNoX2JhY2sodmFsdWUpOwotCQl9Ci0KLQkJcmV0dXJuIGluc2VydGVkLmZpcnN0LT5zZWNvbmQ7Ci0JfQotCi0KLQkvLy8gcmV0dXJuIHRoZSBzdG9yZWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBJRAotCVYgY29uc3QgJiBnZXQoaWRfdmFsdWUgY29uc3QgJiBpZCkgY29uc3QgewotCQkvLyBzb21lIHN0bCBsYWNrIGF0KCksIHNvIHdlIGVtdWxhdGUgaXQKLQkJaWYgKGlkLmlkIDwgdmFsdWVzLnNpemUoKSkKLQkJCXJldHVybiB2YWx1ZXNbaWQuaWRdOwotCi0JCXRocm93IHN0ZDo6b3V0X29mX3JhbmdlKCJ1bmlxdWVfc3RvcmFnZTo6Z2V0KCk6IG91dCBvZiBib3VuZHMiKTsKLQl9Ci0KLXByaXZhdGU6Ci0JdHlwZWRlZiBzdGQ6Om1hcDxWLCBpZF92YWx1ZT4gaWRfbWFwOwotCi0JLy8vIHRoZSBjb250YWluZWQgdmFsdWVzCi0Jc3RvcmVkX3ZhbHVlcyB2YWx1ZXM7Ci0KLQkvLy8gbWFwIGZyb20gSUQgdG8gdmFsdWUKLQlpZF9tYXAgaWRzOwotfTsKLQotI2VuZGlmIC8qICFVTklRVUVfU1RPUkFHRV9IICovCmRpZmYgLS1naXQgYS9saWJ1dGlsKysvdXRpbGl0eS5oIGIvbGlidXRpbCsrL3V0aWxpdHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjMzZjYS4uMDAwMDAwMAotLS0gYS9saWJ1dGlsKysvdXRpbGl0eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKgotICogQGZpbGUgdXRpbGl0eS5oCi0gKiBHZW5lcmFsIHB1cnBvc2UgQysrIHV0aWxpdHkKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIFVUSUxJVFlfSAotI2RlZmluZSBVVElMSVRZX0gKLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLS8qKiBub25jb3B5YWJsZSA6IG9iamVjdCBvZiBjbGFzcyBkZXJpdmVkIGZyb20gdGhpcyBjbGFzcyBjYW4ndCBiZSBjb3BpZWQKLSAqIGFuZCBpc24ndCBjb3B5LWNvbnN0cnVjdGlibGUgKi8KLWNsYXNzIG5vbmNvcHlhYmxlIHsKLXByb3RlY3RlZDoKLQlub25jb3B5YWJsZSgpIHt9Ci0Jfm5vbmNvcHlhYmxlKCkge30KLXByaXZhdGU6Ci0Jbm9uY29weWFibGUobm9uY29weWFibGUgY29uc3QgJik7Ci0Jbm9uY29weWFibGUgY29uc3QgJiBvcGVyYXRvcj0obm9uY29weWFibGUgY29uc3QgJik7Ci19OwotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIHNjb3BlZF9wdHIgewotcHVibGljOgotCWV4cGxpY2l0IHNjb3BlZF9wdHIoVCAqIHAgPSAwKSA6IHBfKHApIHt9Ci0JfnNjb3BlZF9wdHIoKSB7IGRlbGV0ZSBwXzsgfQotCi0Jdm9pZCByZXNldChUICogcCA9IDApIHsKLQkJaWYgKHAgPT0gcF8pCi0JCQlyZXR1cm47Ci0JCWRlbGV0ZSBwXzsKLQkJcF8gPSBwOwotCX0KLSAKLQlUICYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKnBfOyB9Ci0JVCAqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBwXzsgfQotCVQgKiBnZXQoKSBjb25zdCB7IHJldHVybiBwXzsgfQotIAotCXZvaWQgc3dhcChzY29wZWRfcHRyICYgc3ApIHsKLQkJVCAqIHRtcCA9IHNwLnBfOwotCQlzcC5wXyA9IHBfOwotCQlwXyA9IHRtcDsKLQl9Ci0gCi1wcml2YXRlOgotCXNjb3BlZF9wdHIgJiBvcGVyYXRvcj0oc2NvcGVkX3B0ciBjb25zdCAmKTsKLQlzY29wZWRfcHRyKHNjb3BlZF9wdHIgY29uc3QgJik7Ci0JVCAqIHBfOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3Mgc2NvcGVkX2FycmF5IHsKLXB1YmxpYzoKLQlleHBsaWNpdCBzY29wZWRfYXJyYXkoVCAqIHAgPSAwKSA6IHBfKHApIHt9Ci0JfnNjb3BlZF9hcnJheSgpIHsgZGVsZXRlIFtdIHBfOyB9Ci0KLQl2b2lkIHJlc2V0KFQgKiBwID0gMCkgewotCQlpZiAocCA9PSBwXykKLQkJCXJldHVybjsKLQkJZGVsZXRlIFtdIHBfOwotCQlwXyA9IHA7Ci0JfQotIAotCVQgJiBvcGVyYXRvcltdKHN0ZDo6cHRyZGlmZl90IGkpIGNvbnN0IHsgcmV0dXJuIHBfW2ldOyB9Ci0JVCAqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHBfOyB9Ci0gCi0Jdm9pZCBzd2FwKHNjb3BlZF9hcnJheSAmIHNwKSB7Ci0JCVQgKiB0bXAgPSBzcC5wXzsKLQkJc3AucF8gPSBwXzsKLQkJcF8gPSB0bXA7Ci0JfQotIAotcHJpdmF0ZToKLQlzY29wZWRfYXJyYXkgJiBvcGVyYXRvcj0oc2NvcGVkX2FycmF5IGNvbnN0ICYpOwotCXNjb3BlZF9hcnJheShzY29wZWRfYXJyYXkgY29uc3QgJik7Ci0JVCAqIHBfOwotfTsKLQotLyoqCi0gKiBAcGFyYW0gY291bnQKLSAqIEBwYXJhbSB0b3RhbAotICoKLSAqIHJldHVybiB0b3RhbCA9PSAwID8gMS4wIDogKGNvdW50IC8gdG90YWwpOwotICovCi1pbmxpbmUgZG91YmxlIG9wX3JhdGlvKGRvdWJsZSBjb3VudCwgZG91YmxlIHRvdGFsKQotewotCXJldHVybiB0b3RhbCA9PSAwID8gMC4wIDogKGNvdW50IC8gdG90YWwpOwotfQotIAotLy8gUGFydCBjb3B5cmlnaHQ6Ci0vLyAgKEMpIENvcHlyaWdodCBib29zdC5vcmcgMTk5OS4gUGVybWlzc2lvbiB0byBjb3B5LCB1c2UsIG1vZGlmeSwgc2VsbAotLy8gIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgaXMgZ3JhbnRlZCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodAotLy8gIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMuIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0Ci0vLyAgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LCBhbmQgd2l0aCBubyBjbGFpbSBhcyB0byBpdHMgc3VpdGFiaWxpdHkgZm9yCi0vLyAgYW55IHB1cnBvc2UuCi0KLSNlbmRpZiAvKiAhVVRJTElUWV9IICovCmRpZmYgLS1naXQgYS9saWJ1dGlsL0FuZHJvaWQubWsgYi9saWJ1dGlsL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmM2JmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnV0aWwvQW5kcm9pZC5tawpAQCAtMCwwICsxLDIxIEBACitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVM6PSBcCisJb3BfY3B1ZnJlcS5jIFwKKwlvcF9kZXZpY2Vpby5jIFwKKwlvcF9maWxlLmMgXAorCW9wX2ZpbGVpby5jIFwKKwlvcF9nZXRfdGltZS5jIFwKKwlvcF9saWJpYmVydHkuYyBcCisJb3BfbG9ja2ZpbGUuYyBcCisJb3BfcG9wdC5jIFwKKwlvcF9zdHJpbmcuYyBcCisJb3BfdmVyc2lvbi5jCisKK0xPQ0FMX0NfSU5DTFVERVMgOj0gXAorCSQoTE9DQUxfUEFUSCkvLi4KKworTE9DQUxfTU9EVUxFIDo9IGxpYnV0aWwKKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvbGlidXRpbC9NYWtlZmlsZS5hbSBiL2xpYnV0aWwvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjMGIyMTguLjAwMDAwMDAKLS0tIGEvbGlidXRpbC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLVNVQkRJUlMgPSAuIHRlc3RzCi0KLUFNX0NGTEFHUyA9IEBPUF9DRkxBR1NACi0KLW5vaW5zdF9MSUJSQVJJRVMgPSBsaWJ1dGlsLmEKLWxpYnV0aWxfYV9TT1VSQ0VTID0gXAotCW9wX2RldmljZWlvLmMgXAotCW9wX2xvY2tmaWxlLmMgXAotCW9wX2ZpbGUuYyBcCi0Jb3BfZmlsZWlvLmMgXAotCW9wX2dldF90aW1lLmMgXAotCW9wX2xpYmliZXJ0eS5jIFwKLQlvcF9wb3B0LmMgXAotCW9wX3N0cmluZy5jIFwKLQlvcF9jcHVmcmVxLmMgXAotCW9wX2RldmljZWlvLmggXAotCW9wX2ZpbGVpby5oIFwKLQlvcF9saWJpYmVydHkuaCBcCi0Jb3BfbG9ja2ZpbGUuaCBcCi0Jb3BfdHlwZXMuaCBcCi0Jb3BfZmlsZS5oIFwKLQlvcF9nZXRfdGltZS5oIFwKLQlvcF9saXN0LmggXAotCW9wX3BvcHQuaCBcCi0Jb3Bfc3RyaW5nLmggXAotCW9wX2NwdWZyZXEuaCBcCi0Jb3BfdmVyc2lvbi5jIFwKLQlvcF92ZXJzaW9uLmgKZGlmZiAtLWdpdCBhL2xpYnV0aWwvTWFrZWZpbGUuaW4gYi9saWJ1dGlsL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGQzMGQzLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1ODAgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1TT1VSQ0VTID0gJChsaWJ1dGlsX2FfU09VUkNFUykKLQotc3JjZGlyID0gQHNyY2RpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLVZQQVRIID0gQHNyY2RpckAKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi10b3BfYnVpbGRkaXIgPSAuLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotc3ViZGlyID0gbGlidXRpbAotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotTElCUkFSSUVTID0gJChub2luc3RfTElCUkFSSUVTKQotQVIgPSBhcgotQVJGTEFHUyA9IGNydQotbGlidXRpbF9hX0FSID0gJChBUikgJChBUkZMQUdTKQotbGlidXRpbF9hX0xJQkFERCA9Ci1hbV9saWJ1dGlsX2FfT0JKRUNUUyA9IG9wX2RldmljZWlvLiQoT0JKRVhUKSBvcF9sb2NrZmlsZS4kKE9CSkVYVCkgXAotCW9wX2ZpbGUuJChPQkpFWFQpIG9wX2ZpbGVpby4kKE9CSkVYVCkgb3BfZ2V0X3RpbWUuJChPQkpFWFQpIFwKLQlvcF9saWJpYmVydHkuJChPQkpFWFQpIG9wX3BvcHQuJChPQkpFWFQpIG9wX3N0cmluZy4kKE9CSkVYVCkgXAotCW9wX2NwdWZyZXEuJChPQkpFWFQpIG9wX3ZlcnNpb24uJChPQkpFWFQpCi1saWJ1dGlsX2FfT0JKRUNUUyA9ICQoYW1fbGlidXRpbF9hX09CSkVDVFMpCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotU09VUkNFUyA9ICQobGlidXRpbF9hX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYnV0aWxfYV9TT1VSQ0VTKQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKLQlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKLQlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCXVuaW5zdGFsbC1yZWN1cnNpdmUKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKLUFNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKLUFNVEFSID0gQEFNVEFSQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CRkRfTElCUyA9IEBCRkRfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRFID0gQERBVEVACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVhFRVhUID0gQEVYRUVYVEAKLUVYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotS0lOQyA9IEBLSU5DQAotS1NSQyA9IEBLU1JDQAotS1ZFUlMgPSBAS1ZFUlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NT0MgPSBATU9DQAotTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAotT0JKRVhUID0gQE9CSkVYVEAKLU9QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACi1PUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKLU9QX0NGTEFHUyA9IEBPUF9DRkxBR1NACi1PUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLU9QX0RPQ0RJUiA9IEBPUF9ET0NESVJACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAotUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACi1RVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKLVFUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKLVFUX0xJQiA9IEBRVF9MSUJACi1RVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAotU1RSSVAgPSBAU1RSSVBACi1VSUMgPSBAVUlDQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAotWF9MSUJTID0gQFhfTElCU0AKLVhfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACi1hY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJUEAKLWFtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACi1hbV9fZmFzdGRlcENYWF9GQUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKLWFtX19mYXN0ZGVwQ1hYX1RSVUUgPSBAYW1fX2Zhc3RkZXBDWFhfVFJVRUAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZW5hYmxlX2FiaV9GQUxTRSA9IEBlbmFibGVfYWJpX0ZBTFNFQAotZW5hYmxlX2FiaV9UUlVFID0gQGVuYWJsZV9hYmlfVFJVRUAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaGF2ZV9xdF9GQUxTRSA9IEBoYXZlX3F0X0ZBTFNFQAotaGF2ZV9xdF9UUlVFID0gQGhhdmVfcXRfVFJVRUAKLWhhdmVfeHNsdHByb2NfRkFMU0UgPSBAaGF2ZV94c2x0cHJvY19GQUxTRUAKLWhhdmVfeHNsdHByb2NfVFJVRSA9IEBoYXZlX3hzbHRwcm9jX1RSVUVACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1rZXJuZWxfc3VwcG9ydF9GQUxTRSA9IEBrZXJuZWxfc3VwcG9ydF9GQUxTRUAKLWtlcm5lbF9zdXBwb3J0X1RSVUUgPSBAa2VybmVsX3N1cHBvcnRfVFJVRUAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRvcGRpciA9IEB0b3BkaXJACi1TVUJESVJTID0gLiB0ZXN0cwotQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLW5vaW5zdF9MSUJSQVJJRVMgPSBsaWJ1dGlsLmEKLWxpYnV0aWxfYV9TT1VSQ0VTID0gXAotCW9wX2RldmljZWlvLmMgXAotCW9wX2xvY2tmaWxlLmMgXAotCW9wX2ZpbGUuYyBcCi0Jb3BfZmlsZWlvLmMgXAotCW9wX2dldF90aW1lLmMgXAotCW9wX2xpYmliZXJ0eS5jIFwKLQlvcF9wb3B0LmMgXAotCW9wX3N0cmluZy5jIFwKLQlvcF9jcHVmcmVxLmMgXAotCW9wX2RldmljZWlvLmggXAotCW9wX2ZpbGVpby5oIFwKLQlvcF9saWJpYmVydHkuaCBcCi0Jb3BfbG9ja2ZpbGUuaCBcCi0Jb3BfdHlwZXMuaCBcCi0Jb3BfZmlsZS5oIFwKLQlvcF9nZXRfdGltZS5oIFwKLQlvcF9saXN0LmggXAotCW9wX3BvcHQuaCBcCi0Jb3Bfc3RyaW5nLmggXAotCW9wX2NwdWZyZXEuaCBcCi0Jb3BfdmVyc2lvbi5jIFwKLQlvcF92ZXJzaW9uLmgKLQotYWxsOiBhbGwtcmVjdXJzaXZlCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgbGlidXRpbC9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgbGlidXRpbC9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotY2xlYW4tbm9pbnN0TElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCi1saWJ1dGlsLmE6ICQobGlidXRpbF9hX09CSkVDVFMpICQobGlidXRpbF9hX0RFUEVOREVOQ0lFUykgCi0JLXJtIC1mIGxpYnV0aWwuYQotCSQobGlidXRpbF9hX0FSKSBsaWJ1dGlsLmEgJChsaWJ1dGlsX2FfT0JKRUNUUykgJChsaWJ1dGlsX2FfTElCQUREKQotCSQoUkFOTElCKSBsaWJ1dGlsLmEKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2NwdWZyZXEuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2RldmljZWlvLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9maWxlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9maWxlaW8uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2dldF90aW1lLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9saWJpYmVydHkuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2xvY2tmaWxlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9wb3B0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9zdHJpbmcuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX3ZlcnNpb24uUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKLXVuaW5zdGFsbC1pbmZvLWFtOgotCi0jIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAotIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCi0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCi0jICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKLSMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7Ci0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgotJChSRUNVUlNJVkVfVEFSR0VUUyk6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBkb3Rfc2Vlbj15ZXM7IFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKLW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgotCUBmYWlsY29tPSdleGl0IDEnOyBcCi0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAotCSAgY2FzZSAkJGYgaW4gXAotCSAgICAqPSogfCAtLVsha10qKTs7IFwKLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAotCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JcmV2PSIkJHJldiAuIjsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgotdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAotCWRvbmUKLWN0YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAotCWRvbmUKLQotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUwotCi1UQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD0uOyBcCi0JZWxzZSBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD07IFwKLQlmaTsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAotCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCi0JZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgIHx8ICQobWtkaXJfcCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIChjZCAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQotaW5zdGFsbGRpcnMtYW06Ci1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLW5vaW5zdExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1yZWN1cnNpdmUKLQotZHZpLWFtOgotCi1odG1sOiBodG1sLXJlY3Vyc2l2ZQotCi1pbmZvOiBpbmZvLXJlY3Vyc2l2ZQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQotCi11bmluc3RhbGwtaW5mbzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLS5QSE9OWTogJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBcCi0JY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1ub2luc3RMSUJSQVJJRVMgY2xlYW4tcmVjdXJzaXZlIFwKLQljdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKLQlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgXAotCWR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAotCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCi0JaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIFwKLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1yZWN1cnNpdmUgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnV0aWwvZnNjYW5mLmMgYi9saWJ1dGlsL2ZzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NjczMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ1dGlsL2ZzY2FuZi5jCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPiAKKworLy8gdWdseSBoYWNrIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBmc2NhbmYKKworaW50IGZzY2FuZihGSUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGZvcm1hdCwgaW50KiB2YWx1ZSkKK3sKKyAgICBpbnQgYzsKKyAgICBpbnQgciA9IDA7CisgICAgZG8geworICAgICAgICBjID0gZmdldGMoc3RyZWFtKTsKKyAgICAgICAgaWYgKGM+PScwJyAmJiBjPD0nOScpIHsKKyAgICAgICAgICAgIHIgPSByKjEwICsgKGMtJzAnKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0gd2hpbGUgKDEpOworCisgICAgKnZhbHVlID0gcjsKKworICAgIC8vIGdhaGhoaAorICAgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvbGlidXRpbC9vcF9saWJpYmVydHkuYyBiL2xpYnV0aWwvb3BfbGliaWJlcnR5LmMKaW5kZXggMGNmNDVkMy4uM2YyNzI1YSAxMDA2NDQKLS0tIGEvbGlidXRpbC9vcF9saWJpYmVydHkuYworKysgYi9saWJ1dGlsL29wX2xpYmliZXJ0eS5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogCiAjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCiAKQEAgLTM2LDMgKzM3LDI3IEBACiAJcmV0dXJuIG91dHB1dDsKIH0KICNlbmRpZgorCisjaWZuZGVmIEhBVkVfTElCSUJFUlRZX0gKKwordm9pZCB4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUoY2hhciBjb25zdCAqIGEpCit7Cit9CisKK3ZvaWQgKiB4bWFsbG9jKHNpemVfdCBzKQoreworICAgIHJldHVybiBtYWxsb2Mocyk7Cit9CisKK3ZvaWQgKiB4cmVhbGxvYyh2b2lkICpwLCBzaXplX3QgcykKK3sKKyAgICByZXR1cm4gcmVhbGxvYyhwLCBzKTsKK30KKworLyogQ29weSBhIHN0cmluZyBpbnRvIGEgbWVtb3J5IGJ1ZmZlciB3aXRob3V0IGZhaWwuICAqLworY2hhciAqIHhzdHJkdXAoY2hhciBjb25zdCAqIHN0cikKK3sKKyAgICByZXR1cm4gc3RyZHVwKHN0cik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYTM2MGUuLjAwMDAwMDAKLS0tIGEvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLUFNX0NQUEZMQUdTID0gXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbAotCi1BTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotCi1MSUJTID0gQExJQkVSVFlfTElCU0AKLQotY2hlY2tfUFJPR1JBTVMgPSBmaWxlX3Rlc3RzIHN0cmluZ190ZXN0cwotCi1maWxlX3Rlc3RzX1NPVVJDRVMgPSBmaWxlX3Rlc3RzLmMKLWZpbGVfdGVzdHNfTERBREQgPSAuLi9saWJ1dGlsLmEKLXN0cmluZ190ZXN0c19TT1VSQ0VTID0gc3RyaW5nX3Rlc3RzLmMKLXN0cmluZ190ZXN0c19MREFERCA9IC4uL2xpYnV0aWwuYQotCi1URVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CmRpZmYgLS1naXQgYS9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmluIGIvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE2YjA3My4uMDAwMDAwMAotLS0gYS9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTE2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS41IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLVNPVVJDRVMgPSAkKGZpbGVfdGVzdHNfU09VUkNFUykgJChzdHJpbmdfdGVzdHNfU09VUkNFUykKLQotc3JjZGlyID0gQHNyY2RpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLVZQQVRIID0gQHNyY2RpckAKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi10b3BfYnVpbGRkaXIgPSAuLi8uLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotY2hlY2tfUFJPR1JBTVMgPSBmaWxlX3Rlc3RzJChFWEVFWFQpIHN0cmluZ190ZXN0cyQoRVhFRVhUKQotc3ViZGlyID0gbGlidXRpbC90ZXN0cwotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotYW1fZmlsZV90ZXN0c19PQkpFQ1RTID0gZmlsZV90ZXN0cy4kKE9CSkVYVCkKLWZpbGVfdGVzdHNfT0JKRUNUUyA9ICQoYW1fZmlsZV90ZXN0c19PQkpFQ1RTKQotZmlsZV90ZXN0c19ERVBFTkRFTkNJRVMgPSAuLi9saWJ1dGlsLmEKLWFtX3N0cmluZ190ZXN0c19PQkpFQ1RTID0gc3RyaW5nX3Rlc3RzLiQoT0JKRVhUKQotc3RyaW5nX3Rlc3RzX09CSkVDVFMgPSAkKGFtX3N0cmluZ190ZXN0c19PQkpFQ1RTKQotc3RyaW5nX3Rlc3RzX0RFUEVOREVOQ0lFUyA9IC4uL2xpYnV0aWwuYQotREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLVNPVVJDRVMgPSAkKGZpbGVfdGVzdHNfU09VUkNFUykgJChzdHJpbmdfdGVzdHNfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoZmlsZV90ZXN0c19TT1VSQ0VTKSAkKHN0cmluZ190ZXN0c19TT1VSQ0VTKQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCRVJUWV9MSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKLVhfTElCUyA9IEBYX0xJQlNACi1YX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWVuYWJsZV9hYmlfRkFMU0UgPSBAZW5hYmxlX2FiaV9GQUxTRUAKLWVuYWJsZV9hYmlfVFJVRSA9IEBlbmFibGVfYWJpX1RSVUVACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhhdmVfcXRfRkFMU0UgPSBAaGF2ZV9xdF9GQUxTRUAKLWhhdmVfcXRfVFJVRSA9IEBoYXZlX3F0X1RSVUVACi1oYXZlX3hzbHRwcm9jX0ZBTFNFID0gQGhhdmVfeHNsdHByb2NfRkFMU0VACi1oYXZlX3hzbHRwcm9jX1RSVUUgPSBAaGF2ZV94c2x0cHJvY19UUlVFQAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAota2VybmVsX3N1cHBvcnRfRkFMU0UgPSBAa2VybmVsX3N1cHBvcnRfRkFMU0VACi1rZXJuZWxfc3VwcG9ydF9UUlVFID0gQGtlcm5lbF9zdXBwb3J0X1RSVUVACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10b3BkaXIgPSBAdG9wZGlyQAotQU1fQ1BQRkxBR1MgPSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCi0KLUFNX0NGTEFHUyA9IEBPUF9DRkxBR1NACi1maWxlX3Rlc3RzX1NPVVJDRVMgPSBmaWxlX3Rlc3RzLmMKLWZpbGVfdGVzdHNfTERBREQgPSAuLi9saWJ1dGlsLmEKLXN0cmluZ190ZXN0c19TT1VSQ0VTID0gc3RyaW5nX3Rlc3RzLmMKLXN0cmluZ190ZXN0c19MREFERCA9IC4uL2xpYnV0aWwuYQotVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi1jbGVhbi1jaGVja1BST0dSQU1TOgotCS10ZXN0IC16ICIkKGNoZWNrX1BST0dSQU1TKSIgfHwgcm0gLWYgJChjaGVja19QUk9HUkFNUykKLWZpbGVfdGVzdHMkKEVYRUVYVCk6ICQoZmlsZV90ZXN0c19PQkpFQ1RTKSAkKGZpbGVfdGVzdHNfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZmlsZV90ZXN0cyQoRVhFRVhUKQotCSQoTElOSykgJChmaWxlX3Rlc3RzX0xERkxBR1MpICQoZmlsZV90ZXN0c19PQkpFQ1RTKSAkKGZpbGVfdGVzdHNfTERBREQpICQoTElCUykKLXN0cmluZ190ZXN0cyQoRVhFRVhUKTogJChzdHJpbmdfdGVzdHNfT0JKRUNUUykgJChzdHJpbmdfdGVzdHNfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgc3RyaW5nX3Rlc3RzJChFWEVFWFQpCi0JJChMSU5LKSAkKHN0cmluZ190ZXN0c19MREZMQUdTKSAkKHN0cmluZ190ZXN0c19PQkpFQ1RTKSAkKHN0cmluZ190ZXN0c19MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmlsZV90ZXN0cy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyaW5nX3Rlc3RzLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCi11bmluc3RhbGwtaW5mby1hbToKLQotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUwotCi1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAotCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWNoZWNrLVRFU1RTOiAkKFRFU1RTKQotCUBmYWlsZWQ9MDsgYWxsPTA7IHhmYWlsPTA7IHhwYXNzPTA7IHNraXA9MDsgXAotCXNyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7IFwKLQlsaXN0PSckKFRFU1RTKSc7IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGZvciB0c3QgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgLi8kJHRzdDsgdGhlbiBkaXI9Li87IFwKLQkgICAgZWxpZiB0ZXN0IC1mICQkdHN0OyB0aGVuIGRpcj07IFwKLQkgICAgZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgICBpZiAkKFRFU1RTX0VOVklST05NRU5UKSAkJHtkaXJ9JCR0c3Q7IHRoZW4gXAotCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCi0JICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAotCSAgICAgICoiICQkdHN0ICIqKSBcCi0JCXhwYXNzPWBleHByICQkeHBhc3MgKyAxYDsgXAotCQlmYWlsZWQ9YGV4cHIgJCRmYWlsZWQgKyAxYDsgXAotCQllY2hvICJYUEFTUzogJCR0c3QiOyBcCi0JICAgICAgOzsgXAotCSAgICAgICopIFwKLQkJZWNobyAiUEFTUzogJCR0c3QiOyBcCi0JICAgICAgOzsgXAotCSAgICAgIGVzYWM7IFwKLQkgICAgZWxpZiB0ZXN0ICQkPyAtbmUgNzc7IHRoZW4gXAotCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCi0JICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAotCSAgICAgICoiICQkdHN0ICIqKSBcCi0JCXhmYWlsPWBleHByICQkeGZhaWwgKyAxYDsgXAotCQllY2hvICJYRkFJTDogJCR0c3QiOyBcCi0JICAgICAgOzsgXAotCSAgICAgICopIFwKLQkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKLQkJZWNobyAiRkFJTDogJCR0c3QiOyBcCi0JICAgICAgOzsgXAotCSAgICAgIGVzYWM7IFwKLQkgICAgZWxzZSBcCi0JICAgICAgc2tpcD1gZXhwciAkJHNraXAgKyAxYDsgXAotCSAgICAgIGVjaG8gIlNLSVA6ICQkdHN0IjsgXAotCSAgICBmaTsgXAotCSAgZG9uZTsgXAotCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAiJCR4ZmFpbCIgLWVxIDA7IHRoZW4gXAotCSAgICAgIGJhbm5lcj0iQWxsICQkYWxsIHRlc3RzIHBhc3NlZCI7IFwKLQkgICAgZWxzZSBcCi0JICAgICAgYmFubmVyPSJBbGwgJCRhbGwgdGVzdHMgYmVoYXZlZCBhcyBleHBlY3RlZCAoJCR4ZmFpbCBleHBlY3RlZCBmYWlsdXJlcykiOyBcCi0JICAgIGZpOyBcCi0JICBlbHNlIFwKLQkgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDA7IHRoZW4gXAotCSAgICAgIGJhbm5lcj0iJCRmYWlsZWQgb2YgJCRhbGwgdGVzdHMgZmFpbGVkIjsgXAotCSAgICBlbHNlIFwKLQkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsIHRlc3RzIGRpZCBub3QgYmVoYXZlIGFzIGV4cGVjdGVkICgkJHhwYXNzIHVuZXhwZWN0ZWQgcGFzc2VzKSI7IFwKLQkgICAgZmk7IFwKLQkgIGZpOyBcCi0JICBkYXNoZXM9IiQkYmFubmVyIjsgXAotCSAgc2tpcHBlZD0iIjsgXAotCSAgaWYgdGVzdCAiJCRza2lwIiAtbmUgMDsgdGhlbiBcCi0JICAgIHNraXBwZWQ9IigkJHNraXAgdGVzdHMgd2VyZSBub3QgcnVuKSI7IFwKLQkgICAgdGVzdCBgZWNobyAiJCRza2lwcGVkIiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCi0JICAgICAgZGFzaGVzPSIkJHNraXBwZWQiOyBcCi0JICBmaTsgXAotCSAgcmVwb3J0PSIiOyBcCi0JICBpZiB0ZXN0ICIkJGZhaWxlZCIgLW5lIDAgJiYgdGVzdCAtbiAiJChQQUNLQUdFX0JVR1JFUE9SVCkiOyB0aGVuIFwKLQkgICAgcmVwb3J0PSJQbGVhc2UgcmVwb3J0IHRvICQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgXAotCSAgICB0ZXN0IGBlY2hvICIkJHJlcG9ydCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAotCSAgICAgIGRhc2hlcz0iJCRyZXBvcnQiOyBcCi0JICBmaTsgXAotCSAgZGFzaGVzPWBlY2hvICIkJGRhc2hlcyIgfCBzZWQgcy8uLz0vZ2A7IFwKLQkgIGVjaG8gIiQkZGFzaGVzIjsgXAotCSAgZWNobyAiJCRiYW5uZXIiOyBcCi0JICB0ZXN0IC16ICIkJHNraXBwZWQiIHx8IGVjaG8gIiQkc2tpcHBlZCI7IFwKLQkgIHRlc3QgLXogIiQkcmVwb3J0IiB8fCBlY2hvICIkJHJlcG9ydCI7IFwKLQkgIGVjaG8gIiQkZGFzaGVzIjsgXAotCSAgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyBcCi0JZWxzZSA6OyBmaQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKLQkgICAgZGlyPSIvJCRkaXIiOyBcCi0JICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKLQkgIGVsc2UgXAotCSAgICBkaXI9Jyc7IFwKLQkgIGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChjaGVja19QUk9HUkFNUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1URVNUUwotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYwotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQotCi0uUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stVEVTVFMgY2hlY2stYW0gY2xlYW4gXAotCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjdGFncyBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIFwKLQlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAotCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCi0JaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIFwKLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgXAotCXVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWJ1dGlsL3Rlc3RzL2ZpbGVfdGVzdHMuYyBiL2xpYnV0aWwvdGVzdHMvZmlsZV90ZXN0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmZmNWRiLi4wMDAwMDAwCi0tLSBhL2xpYnV0aWwvdGVzdHMvZmlsZV90ZXN0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBmaWxlX3Rlc3RzLmMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSAib3BfZmlsZS5oIgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotc3RhdGljIGNoYXIgKiB0ZXN0c1tdWzJdID0gewotCXsgIi91c3IvYmluLy4uL2JpbiIsICIvdXNyL2JpbiIgfSwKLQl7ICIvLi4vdXNyL2Jpbi8iLCAiL3Vzci9iaW4iIH0sCi0JeyAiLy4uLy4uL3Vzci9iaW4vIiwgIi91c3IvYmluIiB9LAotCXsgIi8uLi8uLi91c3IvYmluLy4iLCAiL3Vzci9iaW4iIH0sCi0JeyAiLy4uLy4uL3Vzci9iaW4vLi8iLCAiL3Vzci9iaW4iIH0sCi0JeyAiL3Vzci8uL2JpbiIsICIvdXNyL2JpbiIgfSwKLQl7ICIvdXNyLy4vLi9iaW4iLCAiL3Vzci9iaW4iIH0sCi0JeyAiL3Vzci8vLyIsICIvdXNyIiB9LAotCXsgIi4uLyIsICIvIiB9LAotCXsgIi4vIiwgIi91c3IiIH0sCi0JeyAiLiIsICIvdXNyIiB9LAotCXsgIi4vLi4vIiwgIi8iIH0sCi0JeyAiYmluLy4uL2Jpbi8uLi8iLCAiL3VzciIgfSwKLQl7ICIuLi8uLi8uLi8uLi8uLi8iLCAiLyIgfSwKLQl7ICIvdXNyL2Jpbi8uLi8uLi8uLiIsICIvIiB9LAotCXsgIi91c3IvYmluLy4uLy4uLy4uLyIsICIvIiB9LAotCXsgIi4vLi8uIiwgIi91c3IiIH0sCi0JLyogUE9TSVggbmFtZXNwYWNlIGlnbm9yZWQgYnkgcmVhbHBhdGgoMykgKi8KLQl7ICIvLyIsICIvIiB9LAotCXsgIi8vdXNyIiwgIi91c3IiIH0sCi0JeyAiLy8vIiwgIi8iIH0sCi0JeyBOVUxMLCBOVUxMIH0sCi19OwotCi1pbnQgbWFpbih2b2lkKQotewotCWNoYXIgdG1wW1BBVEhfTUFYXTsKLQlzaXplX3QgaSA9IDA7Ci0KLQljaGRpcigiL3VzciIpOwotCi0Jd2hpbGUgKHRlc3RzW2ldWzBdKSB7Ci0JCWlmICghcmVhbHBhdGgodGVzdHNbaV1bMF0sIHRtcCkpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiTlVMTCByZXR1cm4gZm9yICVzXG4iLCB0ZXN0c1tpXVswXSk7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQotCQlpZiAoc3RyY21wKHRtcCwgdGVzdHNbaV1bMV0pKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzIGRvZXMgbm90IG1hdGNoICVzIGdpdmVuICVzXG4iLAotCQkJICAgICAgICB0bXAsIHRlc3RzW2ldWzFdLCB0ZXN0c1tpXVswXSk7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQkJKytpOwotCX0KLQotCXJldHVybiBFWElUX1NVQ0NFU1M7Ci19CmRpZmYgLS1naXQgYS9saWJ1dGlsL3Rlc3RzL3N0cmluZ190ZXN0cy5jIGIvbGlidXRpbC90ZXN0cy9zdHJpbmdfdGVzdHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxMzJjZi4uMDAwMDAwMAotLS0gYS9saWJ1dGlsL3Rlc3RzL3N0cmluZ190ZXN0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBzdHJpbmdfdGVzdHMuYwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlICJvcF9zdHJpbmcuaCIKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXZvaWQgZXJyb3IoY2hhciBjb25zdCAqIHN0cikKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzdHIpOwotCWV4aXQoRVhJVF9GQUlMVVJFKTsKLX0KLQotCi1pbnQgbWFpbigpCi17Ci0JaWYgKCFzdHJpc3ByZWZpeCgiIiwgIiIpKQotCQllcnJvcigiXCJcIiBpcyBub3QgYSBwcmVmaXggb2YgXCJcIiIpOwotCWlmICghc3RyaXNwcmVmaXgoImEiLCAiIikpCi0JCWVycm9yKCJcIlwiIGlzIG5vdCBhIHByZWZpeCBvZiBhIik7Ci0JaWYgKCFzdHJpc3ByZWZpeCgiYSIsICJhIikpCi0JCWVycm9yKCJhIGlzIG5vdCBhIHByZWZpeCBvZiBhIik7Ci0JaWYgKCFzdHJpc3ByZWZpeCgiYWEiLCAiYSIpKQotCQllcnJvcigiYSBpcyBub3QgYSBwcmVmaXggb2YgYWEiKTsKLQlpZiAoc3RyaXNwcmVmaXgoImEiLCAiYiIpKQotCQllcnJvcigiYiBpcyBhIHByZWZpeCBvZiBhIik7Ci0KLQlpZiAoc3RyY21wKHNraXBfd3MoIiIpLCAiIikpCi0JCWVycm9yKCJza2lwX3dzIG9mIFwiXCIgaXMgbm90IFwiXCIiKTsKLQlpZiAoc3RyY21wKHNraXBfd3MoIlxuYSIpLCAiYSIpKQotCQllcnJvcigic2tpcF93cyBvZiBcXG5hIGlzIG5vdCBhIik7Ci0JaWYgKHN0cmNtcChza2lwX3dzKCJcblxuYSIpLCAiYSIpKQotCQllcnJvcigic2tpcF93cyBvZiBcXG5cXG5hIGlzIG5vdCBhIik7Ci0JaWYgKHN0cmNtcChza2lwX3dzKCJcbiBhIiksICJhIikpCi0JCWVycm9yKCJza2lwX3dzIG9mIFxcbiBhIGlzIG5vdCBhIik7Ci0JaWYgKHN0cmNtcChza2lwX3dzKCJcbiBcdGEiKSwgImEiKSkKLQkJZXJyb3IoInNraXBfd3Mgb2YgXFxuIFxcdGEgaXMgbm90IGEiKTsKLQlpZiAoc3RyY21wKHNraXBfd3MoIlxuIFx0IiksICIiKSkKLQkJZXJyb3IoInNraXBfd3Mgb2YgXFxuIFxcdCBpcyBub3QgXCJcIiIpOwotCWlmIChzdHJjbXAoc2tpcF93cygiICIpLCAiIikpCi0JCWVycm9yKCJza2lwX3dzIG9mIFwiIFwiIGlzIG5vdCBcIlwiIik7Ci0KLQlpZiAoc3RyY21wKHNraXBfbm9ud3MoIiIpLCAiIikpCi0JCWVycm9yKCJza2lwX25vbndzIG9mIFwiXCIgaXMgbm90IFwiXCIiKTsKLQlpZiAoc3RyY21wKHNraXBfbm9ud3MoImEiKSwgIiIpKQotCQllcnJvcigic2tpcF9ub253cyBvZiBhIGlzIG5vdCBcIlwiIik7Ci0JaWYgKHN0cmNtcChza2lwX25vbndzKCJcbiIpLCAiXG4iKSkKLQkJZXJyb3IoInNraXBfbm9ud3Mgb2YgXFxuIGlzIG5vdCBcXG4iKTsKLQlpZiAoc3RyY21wKHNraXBfbm9ud3MoIiAiKSwgIiAiKSkKLQkJZXJyb3IoInNraXBfbm9ud3Mgb2YgXCIgXCIgaXMgbm90IFwiIFwiIik7Ci0JaWYgKHN0cmNtcChza2lwX25vbndzKCJcdCIpLCAiXHQiKSkKLQkJZXJyb3IoInNraXBfbm9ud3Mgb2YgXFx0IGlzIG5vdCBcXHQiKTsKLQlpZiAoc3RyY21wKHNraXBfbm9ud3MoImFcbiIpLCAiXG4iKSkKLQkJZXJyb3IoInNraXBfbm9ud3Mgb2YgYVxcbiBpcyBub3QgXFxuIik7Ci0JaWYgKHN0cmNtcChza2lwX25vbndzKCJhYiIpLCAiIikpCi0JCWVycm9yKCJza2lwX25vbndzIG9mIGFiIGlzIG5vdCBcIlwiIik7Ci0KLQlpZiAoIWVtcHR5X2xpbmUoIiIpKQotCQllcnJvcigiZW1wdHlfbGluZSBpcyBmYWxzZSBmb3IgXCJcIiIpOwotCWlmICghZW1wdHlfbGluZSgiXG5cdCAiKSkKLQkJZXJyb3IoImVtcHR5X2xpbmUgaXMgZmFsc2UgZm9yIFwiXFxuXFxuIFwiIik7Ci0JaWYgKCFlbXB0eV9saW5lKCIgIikpCi0JCWVycm9yKCJlbXB0eV9saW5lIGlzIGZhbHNlIGZvciBcIiBcIiIpOwotCWlmIChlbXB0eV9saW5lKCJcciIpKQotCQllcnJvcigiZW1wdHlfbGluZSBpcyB0cnVlIGZvciBcXHIiKTsKLQotCWlmIChjb21tZW50X2xpbmUoIiIpKQotCQllcnJvcigiY29tbWVudF9saW5lIGlzIHRydWUgZm9yIFwiXCIiKTsKLQlpZiAoY29tbWVudF9saW5lKCJcbiIpKQotCQllcnJvcigiY29tbWVudF9saW5lIGlzIHRydWUgZm9yIFxuIik7Ci0JaWYgKCFjb21tZW50X2xpbmUoIiMiKSkKLQkJZXJyb3IoImNvbW1lbnRfbGluZSBpcyBmYWxzZSBmb3IgIyIpOwotCWlmICghY29tbWVudF9saW5lKCIgIyIpKQotCQllcnJvcigiY29tbWVudF9saW5lIGlzIGZhbHNlIGZvciBcIiAjXCIiKTsKLQkvKiB0aGlzIGlzIHdoYXQgdGhlIHNwZWMgc2F5cyAqLwotCWlmICghY29tbWVudF9saW5lKCJcbiMiKSkKLQkJZXJyb3IoImNvbW1lbnRfbGluZSBpcyBmYWxzZSBmb3IgXFxuIyIpOwotCWlmICghY29tbWVudF9saW5lKCJcdCMiKSkKLQkJZXJyb3IoImNvbW1lbnRfbGluZSBpcyBmYWxzZSBmb3IgXFx0IyIpOwotCi0JcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL200L01ha2VmaWxlLmFtIGIvbTQvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYzU5YmYuLjAwMDAwMDAKLS0tIGEvbTQvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0KLSMgWW91IHdpbGwgbmVlZCB0byBydW4gYXV0b2dlbi5zaCBhZnRlciBhZGRpbmcgc29tZXRoaW5nIGhlcmUgbWFudWFsbHkKLQotRVhUUkFfRElTVCA9IFwKLQliaW51dGlscy5tNCBcCi0JYnVpbHRpbmV4cGVjdC5tNCBcCi0JY29tcGlsZXJvcHRpb24ubTQgXAotCWNvbmZpZ21vZHVsZS5tNCBcCi0JY29weWlmY2hhbmdlLm00IFwKLQlkb2Nib29rLm00IFwKLQlleHRyYWRpcnMubTQgXAotCWZpbmRrZXJuZWwubTQgXAotCWtlcm5lbG9wdGlvbi5tNCBcCi0Ja2VybmVsdmVyc2lvbi5tNCBcCi0JbWFsbG9jYXR0cmlidXRlLm00IFwKLQlwb3B0Y29uc3QubTQgXAotCXByZWNvbXBpbGVkaGVhZGVyLm00IFwKLQlxdC5tNCBcCi0JcmVzdWx0eW4ubTQgXAotCXNzdHJlYW0ubTQgXAotCXR5cGVkZWYubTQKZGlmZiAtLWdpdCBhL200L01ha2VmaWxlLmluIGIvbTQvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZWEzYTkuLjAwMDAwMDAKLS0tIGEvbTQvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNTUgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIFlvdSB3aWxsIG5lZWQgdG8gcnVuIGF1dG9nZW4uc2ggYWZ0ZXIgYWRkaW5nIHNvbWV0aGluZyBoZXJlIG1hbnVhbGx5Ci1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1zdWJkaXIgPSBtNAotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1PQyA9IEBNT0NACi1NT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACi1PQkpFWFQgPSBAT0JKRVhUQAotT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKLU9QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAotT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLU9QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBPUFRfTElCUyA9IEBQT1BUX0xJQlNACi1QVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKLVFUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAotUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAotUVRfTElCID0gQFFUX0xJQkAKLVFUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACi1TVFJJUCA9IEBTVFJJUEAKLVVJQyA9IEBVSUNACi1WRVJTSU9OID0gQFZFUlNJT05ACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACi1YX0xJQlMgPSBAWF9MSUJTQAotWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1kYXRhZGlyID0gQGRhdGFkaXJACi1lbmFibGVfYWJpX0ZBTFNFID0gQGVuYWJsZV9hYmlfRkFMU0VACi1lbmFibGVfYWJpX1RSVUUgPSBAZW5hYmxlX2FiaV9UUlVFQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1oYXZlX3F0X0ZBTFNFID0gQGhhdmVfcXRfRkFMU0VACi1oYXZlX3F0X1RSVUUgPSBAaGF2ZV9xdF9UUlVFQAotaGF2ZV94c2x0cHJvY19GQUxTRSA9IEBoYXZlX3hzbHRwcm9jX0ZBTFNFQAotaGF2ZV94c2x0cHJvY19UUlVFID0gQGhhdmVfeHNsdHByb2NfVFJVRUAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWtlcm5lbF9zdXBwb3J0X0ZBTFNFID0gQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAota2VybmVsX3N1cHBvcnRfVFJVRSA9IEBrZXJuZWxfc3VwcG9ydF9UUlVFQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdG9wZGlyID0gQHRvcGRpckAKLUVYVFJBX0RJU1QgPSBcCi0JYmludXRpbHMubTQgXAotCWJ1aWx0aW5leHBlY3QubTQgXAotCWNvbXBpbGVyb3B0aW9uLm00IFwKLQljb25maWdtb2R1bGUubTQgXAotCWNvcHlpZmNoYW5nZS5tNCBcCi0JZG9jYm9vay5tNCBcCi0JZXh0cmFkaXJzLm00IFwKLQlmaW5ka2VybmVsLm00IFwKLQlrZXJuZWxvcHRpb24ubTQgXAotCWtlcm5lbHZlcnNpb24ubTQgXAotCW1hbGxvY2F0dHJpYnV0ZS5tNCBcCi0JcG9wdGNvbnN0Lm00IFwKLQlwcmVjb21waWxlZGhlYWRlci5tNCBcCi0JcXQubTQgXAotCXJlc3VsdHluLm00IFwKLQlzc3RyZWFtLm00IFwKLQl0eXBlZGVmLm00Ci0KLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIG00L01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBtNC9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLXVuaW5zdGFsbC1pbmZvLWFtOgotdGFnczogVEFHUwotVEFHUzoKLQotY3RhZ3M6IENUQUdTCi1DVEFHUzoKLQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKLQkgICAgZGlyPSIvJCRkaXIiOyBcCi0JICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKLQkgIGVsc2UgXAotCSAgICBkaXI9Jyc7IFwKLQkgIGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KLQotLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1pbmZvLWFtCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL200L2JpbnV0aWxzLm00IGIvbTQvYmludXRpbHMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYTg2NjcuLjAwMDAwMDAKLS0tIGEvbTQvYmludXRpbHMubTQKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1kbmwgQVhfQklOVVRJTFMgLSBjaGVjayBmb3IgbmVlZGVkIGJpbnV0aWxzIHN0dWZmCi1BQ19ERUZVTihbQVhfQklOVVRJTFNdLAotWwotZG5sIHNvbWUgZGlzdHJvIGhhdmUgYSBsaWJpYmVydHkuYSBidXQgZG9lcyBub3QgaGF2ZSBhIGxpYmliZXJ0eS5oCi1BQ19DSEVDS19IRUFERVJTKGxpYmliZXJ0eS5oKQotQUNfQ0hFQ0tfTElCKGliZXJ0eSwgY3BsdXNfZGVtYW5nbGUsLCBBQ19NU0dfRVJST1IoW2xpYmVydHkgbGlicmFyeSBub3QgZm91bmRdKSkKLUFDX0NIRUNLX0ZVTkNTKHhjYWxsb2MpCi1BQ19DSEVDS19GVU5DUyh4bWVtZHVwKQotQUNfQ0hFQ0tfTElCKGRsLCBkbG9wZW4sIExJQlM9IiRMSUJTIC1sZGwiOyBETF9MSUI9Ii1sZGwiLCBETF9MSUI9IiIpCi1BQ19DSEVDS19MSUIoaW50bCwgbWFpbiwgTElCUz0iJExJQlMgLWxpbnRsIjsgSU5UTF9MSUI9Ii1saW50bCIsIElOVExfTElCPSIiKQotQUNfQ0hFQ0tfTElCKGJmZCwgYmZkX29wZW5yLCwgQUNfTVNHX0VSUk9SKFtiZmQgbGlicmFyeSBub3QgZm91bmRdKSkKLQotIyBEZXRlcm1pbmUgaWYgYmZkX2dldF9zeW50aGV0aWNfc3ltdGFiIG1hY3JvIGlzIGF2YWlsYWJsZQotT1M9ImB1bmFtZWAiCi1pZiB0ZXN0ICIkT1MiID0gIkxpbnV4IjsgdGhlbgotCUFDX01TR19DSEVDS0lORyhbd2hldGhlciBiZmRfZ2V0X3N5bnRoZXRpY19zeW10YWIoKSBleGlzdHMgaW4gQkZEIGxpYnJhcnldKQotCXJtIC1mIHRlc3QtZm9yLXN5bnRoCi0JQUNfTEFOR19DT05GVEVTVCgKLQkJW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxiZmQuaD5dXSwKLQkJCVtbYXN5bWJvbCAqIHN5bnRoc3ltczsJYmZkICogaWJmZCA9IDA7IAotCQkJbG9uZyBzeW50aF9jb3VudCA9IGJmZF9nZXRfc3ludGhldGljX3N5bXRhYihpYmZkLCAwLCAwLCAwLCAwLCAmc3ludGhzeW1zKTsKLQkJCWV4dGVybiBjb25zdCBiZmRfdGFyZ2V0IGJmZF9lbGY2NF9wb3dlcnBjX3ZlYzsKLQkJCWV4dGVybiBjb25zdCBiZmRfdGFyZ2V0IGJmZF9lbGY2NF9wb3dlcnBjbGVfdmVjOwotCQkJY2hhciAqIHBwY19uYW1lID0gYmZkX2VsZjY0X3Bvd2VycGNfdmVjLm5hbWU7Ci0JCQljaGFyICogcHBjbGVfbmFtZSA9IGJmZF9lbGY2NF9wb3dlcnBjbGVfdmVjLm5hbWU7XV0pCi0JCV0pCi0JJENDIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgLW8gIHRlc3QtZm9yLXN5bnRoID4gL2Rldi9udWxsIDI+JjEKLQlpZiB0ZXN0IC1mIHRlc3QtZm9yLXN5bnRoOyB0aGVuCi0JCWVjaG8gInllcyIKLQkJU1lOVEhFU0laRV9TWU1CT0xTPScxJwotCWVsc2UKLQkJZWNobyAibm8iCi0JCVNZTlRIRVNJWkVfU1lNQk9MUz0nMCcKLQlmaQotCUFDX0RFRklORV9VTlFVT1RFRChTWU5USEVTSVpFX1NZTUJPTFMsICRTWU5USEVTSVpFX1NZTUJPTFMsIFtTeW50aGVzaXplIHNwZWNpYWwgc3ltYm9scyB3aGVuIG5lZWRlZF0pCi0Jcm0gLWYgdGVzdC1mb3Itc3ludGgqCi0KLWZpCi1dCi0pCmRpZmYgLS1naXQgYS9tNC9idWlsdGluZXhwZWN0Lm00IGIvbTQvYnVpbHRpbmV4cGVjdC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE3NzY0MC4uMDAwMDAwMAotLS0gYS9tNC9idWlsdGluZXhwZWN0Lm00CisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotZG5sIGJ1aWx0aW5fZXhwZWN0IGlzIHVzZWQgaW4gbW9kdWxlIHdlIGNhbid0IGFkZCB0aGF0IGluIGNvbmZpZy5oCi1BQ19ERUZVTihbQVhfQlVJTFRJTl9FWFBFQ1RdLAotWwotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIF9fYnVpbHRpbl9leHBlY3QgaXMgdW5kZXJzdG9vZF0pCi1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKLUFDX1RSWV9MSU5LKCxbCi1pbnQgaTsKLWlmIChfX2J1aWx0aW5fZXhwZWN0KGksIDApKSB7IH0KLV0sCi1BQ19NU0dfUkVTVUxUKFt5ZXNdKTsgRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURFWFBFQ1RfT0siLAotQUNfTVNHX1JFU1VMVChbbm9dKTspCi1DRkxBR1M9JFNBVkVfQ0ZMQUdTIAotXQotKSAKZGlmZiAtLWdpdCBhL200L2NvbXBpbGVyb3B0aW9uLm00IGIvbTQvY29tcGlsZXJvcHRpb24ubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZWMwNjYuLjAwMDAwMDAKLS0tIGEvbTQvY29tcGlsZXJvcHRpb24ubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1kbmwgQVhfQ0ZMQUdTX09QVElPTlModmFyLW5hbWUsIG9wdGlvbikKLWRubCBhZGQgb3B0aW9uIHRvIHZhci1uYW1lIGlmICRDQyBzdXBwb3J0IGl0LgotQUNfREVGVU4oW0FYX0NGTEFHU19PUFRJT05dLCBbCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDQ30gJDIgaXMgdW5kZXJzdG9vZF0pCi1BQ19MQU5HX1NBVkUKLUFDX0xBTkdfQwotU0FWRV9DRkxBR1M9JENGTEFHUwotQ0ZMQUdTPSQyCi1BQ19UUllfQ09NUElMRSgsWztdLEFDX01TR19SRVNVTFQoW3llc10pOyAkMT0iJHskMX0gJDIiLEFDX01TR19SRVNVTFQoW25vXSkpCi1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi1BQ19MQU5HX1JFU1RPUkUKLV0pCi0KLQotZG5sIEFYX0NYWEZMQUdTX09QVElPTlModmFyLW5hbWUsIG9wdGlvbikKLWRubCBhZGQgb3B0aW9uIHRvIHZhci1uYW1lIGlmICRDWFggc3VwcG9ydCBpdC4KLUFDX0RFRlVOKFtBWF9DWFhGTEFHU19PUFRJT05dLCBbCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDWFh9ICQyIGlzIHVuZGVyc3Rvb2RdKQotQUNfTEFOR19TQVZFCi1BQ19MQU5HX0NQTFVTUExVUwotU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKLUNYWEZMQUdTPSQyCi1BQ19UUllfQ09NUElMRSgsWztdLEFDX01TR19SRVNVTFQoW3llc10pOyAkMT0iJHskMX0gJDIiLEFDX01TR19SRVNVTFQoW25vXSkpCi1DWFhGTEFHUz0kU0FWRV9DWFhGTEFHUwotQUNfTEFOR19SRVNUT1JFCi1dKQpkaWZmIC0tZ2l0IGEvbTQvY29uZmlnbW9kdWxlLm00IGIvbTQvY29uZmlnbW9kdWxlLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWZlMzRkLi4wMDAwMDAwCi0tLSBhL200L2NvbmZpZ21vZHVsZS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLWRubCBIYW5kbGUgdGhlIDIuNCBtb2R1bGUgaW5zaWRlIG1vZHVsZS8KLUFDX0RFRlVOKFtBWF9DT05GSUdfTU9EVUxFXSwKLVsKLWlmIHRlc3QgISAtZiAkS0lOQy9saW51eC9hdXRvY29uZi5oOyB0aGVuCi0JQUNfTVNHX0VSUk9SKFtubyBzdWl0YWJseSBjb25maWd1cmVkIGtlcm5lbCBpbmNsdWRlIHRyZWUgZm91bmRdKQotZmkKLQotZG5sICAtLS0gR2V0IExpbnV4IGtlcm5lbCB2ZXJzaW9uIGFuZCBjb21waWxlIHBhcmFtZXRlcnMgLS0tCi0KLUFDX1NVQlNUKEtWRVJTKQotQUNfTVNHX0NIRUNLSU5HKFtmb3Iga2VybmVsIHZlcnNpb25dKQotZG5sIGl0J3MgbGlrZSB0aGlzIHRvIGhhbmRsZSBtYW5kcmFrZSdzIGZ1YmFyIHZlcnNpb24uaCAtIGJ1ZyAjNDcxNDQ4Ci1ldmFsIEtWRVJTPWBnY2MgLUkkS0lOQyAtRSAtZE0gJEtJTkMvbGludXgvdmVyc2lvbi5oIHwgZ3JlcCAtdyBVVFNfUkVMRUFTRSB8IGF3ayAne3ByaW50ICRbXTN9J2AKLUFDX01TR19SRVNVTFQoWyRLVkVSU10pCi1jYXNlICIkS1ZFUlMiIGluCi0yLjIuKnwyLjQuKikgOzsKLSopIEFDX01TR19FUlJPUihbVW5zdXBwb3J0ZWQga2VybmVsIHZlcnNpb25dKQotZXNhYwotCi1kbmwgQ2hlY2sgZm9yIHRoZSBtaW5pbWFsIGtlcm5lbCB2ZXJzaW9uIHN1cHBvcnRlZAotQUNfTVNHX0NIRUNLSU5HKFtrZXJuZWwgdmVyc2lvbl0pCi1BWF9LRVJORUxfVkVSU0lPTigyLCAyLCAxMCwgPD0sIEFDX01TR19SRVNVTFQoW29rXSksIEFDX01TR19FUlJPUihbY2hlY2sgaHRtbCBkb2N1bWVudGF0aW9uIGluc3RhbGwgc2VjdGlvbl0pKQotCi1kbmwgbGludXgvc3BpbmxvY2suaCBhZGRlZCBhdCBzb21lIHBvaW50IGluIHBhc3QKLUFDX01TR19DSEVDS0lORyhbZm9yICRLSU5DL2xpbnV4L3NwaW5sb2NrLmhdKQotaWYgdGVzdCAtZiAkS0lOQy9saW51eC9zcGlubG9jay5oOyB0aGVuCi0JRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURIQVZFX0xJTlVYX1NQSU5MT0NLX0hFQURFUiIKLQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQotZWxzZQotCUFDX01TR19SRVNVTFQoW25vXSkKLWZpCi0KLUFDX01TR19DSEVDS0lORyhbZm9yIHJ0Y19sb2NrXSkKLWdjYyAtSSRLSU5DIC1FICRLSU5DL2xpbnV4L21jMTQ2ODE4cnRjLmggfCBncmVwIHJ0Y19sb2NrID4vZGV2L251bGwKLWlmIHRlc3QgIiQ/IiAtZXEgMDsgdGhlbgotCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1EUlRDX0xPQ0siCi0JQUNfTVNHX1JFU1VMVChbeWVzXSkKLWVsc2UKLQlBQ19NU0dfUkVTVUxUKFtub10pCi1maQotCSAKLWFyY2g9InVua25vd24iCi1BQ19NU0dfQ0hFQ0tJTkcoZm9yIHg4NiBhcmNoaXRlY3R1cmUpCi1BWF9LRVJORUxfT1BUSU9OKENPTkZJR19YODYsIHg4Nj0xLCB4ODY9MCkKLUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX1g4Nl9XUF9XT1JLU19PSywgeDg2PTEsIHg4Nj0keDg2KQotQVhfTVNHX1JFU1VMVF9ZTigkeDg2KQotdGVzdCAiJHg4NiIgPSAxICYmIGFyY2g9Ing4NiIKLQkKLWlmIHRlc3QgIiRhcmNoIiA9ICJ1bmtub3duIjsgdGhlbgotCUFDX01TR19DSEVDS0lORyhmb3IgaWE2NCBhcmNoaXRlY3R1cmUpCi0gCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX0lBNjQsIGlhNjQ9MSwgaWE2ND0wKQotIAlBWF9NU0dfUkVTVUxUX1lOKCRpYTY0KQotIAl0ZXN0ICIkaWE2NCIgPSAxICYmIGFyY2g9ImlhNjQiCi1maQotCi10ZXN0ICIkYXJjaCIgPSAidW5rbm93biIgJiYgQUNfTVNHX0VSUk9SKFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSkKLQotZG5sIGNoZWNrIHRvIHNlZSBpZiBrZXJuZWwgdmVyaW9uIGFwcHJvcHJpYXRlIGZvciBhcmNoCi1BQ19NU0dfQ0hFQ0tJTkcoYXJjaC9rZXJuZWwgdmVyc2lvbiBjb21iaW5hdGlvbikKLWNhc2UgIiRhcmNoIiBpbgotaWE2NCkKLQlBWF9LRVJORUxfVkVSU0lPTigyLCA0LCAxOCwgPCwgQUNfTVNHX1JFU1VMVChbb2tdKSwKLQkJQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCBhcmNoL2tlcm5lbF0pKSA7OwotKikgQUNfTVNHX1JFU1VMVChbb2tdKQotZXNhYwotCi1kbmwgZm9yIG5vdyB3ZSBkbyBub3Qgc3VwcG9ydCBQUkVFTVBUIHBhdGNoCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwcmVlbXB0IHBhdGNoXSkKLUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX1BSRUVNUFQscHJlZW1wdD0xLHByZWVtcHQ9MCkKLUFYX01TR19SRVNVTFRfWU4oWyRwcmVlbXB0XSkKLXRlc3QgIiRwcmVlbXB0IiA9IDAgfHwgQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiA6IENPTkZJR19QUkVFTVBUXSkKLQotQUNfU1VCU1QoS0lOQykKLQotTU9ESU5TVEFMTERJUj0vbGliL21vZHVsZXMvJEtWRVJTCi0gCi1PUFJPRklMRV9NT0RVTEVfQVJDSD0kYXJjaAotQUNfU1VCU1QoT1BST0ZJTEVfTU9EVUxFX0FSQ0gpCi1dCi0pCmRpZmYgLS1naXQgYS9tNC9jb3B5aWZjaGFuZ2UubTQgYi9tNC9jb3B5aWZjaGFuZ2UubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NjRkZTAuLjAwMDAwMDAKLS0tIGEvbTQvY29weWlmY2hhbmdlLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotZG5sIEFYX0NPUFlfSUZfQ0hBTkdFKHNvdXJjZSwgZGVzdCkKLWRubCBjb3B5IHNvdXJjZSB0byBkZXN0IGlmIHRoZXkgZG9uJ3QgY29tcGFyZSBlcXVhbGx5IG9yIGlmIGRlc3QgZG9lc24ndCBleGlzdAotQUNfREVGVU4oW0FYX0NPUFlfSUZfQ0hBTkdFXSwgWwotaWYgdGVzdCAtciAkMjsgdGhlbgotCWlmIGNtcCAkMSAkMiA+IC9kZXYvbnVsbDsgdGhlbgotCQllY2hvICQyIGlzIHVuY2hhbmdlZAotCWVsc2UKLQkJY3AgLWYgJDEgJDIKLQlmaQotZWxzZQotCWNwIC1mICQxICQyCi1maQotXSkKZGlmZiAtLWdpdCBhL200L2RvY2Jvb2subTQgYi9tNC9kb2Nib29rLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTNiMGJkLi4wMDAwMDAwCi0tLSBhL200L2RvY2Jvb2subTQKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1kbmwgQVhfQ0hFQ0tfRE9DQk9PSwotQUNfREVGVU4oW0FYX0NIRUNLX0RPQ0JPT0tdLCBbCi0jIEl0J3MganVzdCBydWRlIHRvIGdvIG92ZXIgdGhlIG5ldCB0byBidWlsZAotWFNMVFBST0NfRkxBR1M9LS1ub25ldAotRE9DQk9PS19ST09UPQotaWYgdGVzdCAhIC1mIC9ldGMveG1sL2NhdGFsb2c7IHRoZW4KLQlmb3IgaSBpbiAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay9zdHlsZXNoZWV0L3hzbC9ud2Fsc2ggL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLzsKLQlkbwotCQlpZiB0ZXN0IC1kICIkaSI7IHRoZW4KLQkJCURPQ0JPT0tfUk9PVD0kaQotCQlmaQotCWRvbmUKLQotCSMgTGFzdCByZXNvcnQgLSB0cnkgbmV0Ci0JaWYgdGVzdCAteiAiJERPQ0JPT0tfUk9PVCI7IHRoZW4KLQkJWFNMVFBST0NfRkxBR1M9Ci0JZmkKLWVsc2UKLQlYTUxfQ0FUQUxPRz0vZXRjL3htbC9jYXRhbG9nCi0JQ0FUX0VOVFJZX1NUQVJUPSc8IS0tJwotCUNBVF9FTlRSWV9FTkQ9Jy0tPicKLWZpCi0KLUFDX0NIRUNLX1BST0coWFNMVFBST0MseHNsdHByb2MseHNsdHByb2MsKQotWFNMVFBST0NfV09SS1M9bm8KLWlmIHRlc3QgLW4gIiRYU0xUUFJPQyI7IHRoZW4KLQlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgeHNsdHByb2Mgd29ya3NdKQotCi0JaWYgdGVzdCAtbiAiJFhNTF9DQVRBTE9HIjsgdGhlbgotCQlEQl9GSUxFPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC94aHRtbC9kb2Nib29rLnhzbCIKLQllbHNlCi0JCURCX0ZJTEU9IiRET0NCT09LX1JPT1QvZG9jYm9vay54c2wiCi0JZmkKLQotCSRYU0xUUFJPQyAkWFNMVFBST0NfRkxBR1MgJERCX0ZJTEUgPi9kZXYvbnVsbCAyPiYxIDw8IEVORAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0nSVNPLTg4NTktMSc/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCI+Ci08Ym9vayBpZD0idGVzdCI+Ci08L2Jvb2s+Ci1FTkQKLQlpZiB0ZXN0ICIkPyIgPSAwOyB0aGVuCi0JCVhTTFRQUk9DX1dPUktTPXllcwotCWZpCi0JQUNfTVNHX1JFU1VMVCgkWFNMVFBST0NfV09SS1MpCi1maQotQU1fQ09ORElUSU9OQUwoaGF2ZV94c2x0cHJvYywgdGVzdCAiJFhTTFRQUk9DX1dPUktTIiA9ICJ5ZXMiKQotCi1BQ19TVUJTVChYTUxfQ0FUQUxPRykKLUFDX1NVQlNUKFhTTFRQUk9DX0ZMQUdTKQotQUNfU1VCU1QoRE9DQk9PS19ST09UKQotQUNfU1VCU1QoQ0FUX0VOVFJZX1NUQVJUKQotQUNfU1VCU1QoQ0FUX0VOVFJZX0VORCkKLV0pCmRpZmYgLS1naXQgYS9tNC9leHRyYWRpcnMubTQgYi9tNC9leHRyYWRpcnMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMmIwM2QuLjAwMDAwMDAKLS0tIGEvbTQvZXh0cmFkaXJzLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotZG5sIEFYX0VYVFJBX0RJUlMgLSBMZXQgdXNlciBzcGVjaWZ5IGV4dHJhIGRpcnMgZm9yIGluY2x1ZGUvbGlicwotQUNfREVGVU4oW0FYX0VYVFJBX0RJUlNdLAotWwotQUNfQVJHX1dJVEgoZXh0cmEtaW5jbHVkZXMsCi1bICAtLXdpdGgtZXh0cmEtaW5jbHVkZXM9RElSICAgIGFkZCBleHRyYSBpbmNsdWRlIHBhdGhzXSwKLSAgdXNlX2V4dHJhX2luY2x1ZGVzPSIkd2l0aHZhbCIsCi0gIHVzZV9leHRyYV9pbmNsdWRlcz1OTwotKQotaWYgdGVzdCAtbiAiJHVzZV9leHRyYV9pbmNsdWRlcyIgJiYgXAotICAgICAgICB0ZXN0ICIkdXNlX2V4dHJhX2luY2x1ZGVzIiAhPSAiTk8iOyB0aGVuCi0gIGFjX3NhdmVfaWZzPSRJRlMKLSAgSUZTPSc6JwotICBmb3IgZGlyIGluICR1c2VfZXh0cmFfaW5jbHVkZXM7IGRvCi0gICAgZXh0cmFfaW5jbHVkZXM9IiRleHRyYV9pbmNsdWRlcyAtSSRkaXIiCi0gIGRvbmUKLSAgSUZTPSRhY19zYXZlX2lmcwotICBDUFBGTEFHUz0iJENQUEZMQUdTICRleHRyYV9pbmNsdWRlcyIKLWZpCi0KLUFDX0FSR19XSVRIKGV4dHJhLWxpYnMsCi1bICAtLXdpdGgtZXh0cmEtbGlicz1ESVIgICAgICAgIGFkZCBleHRyYSBsaWJyYXJ5IHBhdGhzXSwKLSAgdXNlX2V4dHJhX2xpYnM9JHdpdGh2YWwsCi0gIHVzZV9leHRyYV9saWJzPU5PCi0pCi1pZiB0ZXN0IC1uICIkdXNlX2V4dHJhX2xpYnMiICYmIFwKLSAgICAgICAgdGVzdCAiJHVzZV9leHRyYV9saWJzIiAhPSAiTk8iOyB0aGVuCi0gICBhY19zYXZlX2lmcz0kSUZTCi0gICBJRlM9JzonCi0gICBmb3IgZGlyIGluICR1c2VfZXh0cmFfbGliczsgZG8KLSAgICAgZXh0cmFfbGlicmFyaWVzPSIkZXh0cmFfbGlicmFyaWVzIC1MJGRpciIKLSAgIGRvbmUKLSAgIElGUz0kYWNfc2F2ZV9pZnMKLSAgIExERkxBR1M9IiRMREZMQUdTICRleHRyYV9saWJyYXJpZXMiCi1maQotXQotKQpkaWZmIC0tZ2l0IGEvbTQvZmluZGtlcm5lbC5tNCBiL200L2ZpbmRrZXJuZWwubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNjY0MzcuLjAwMDAwMDAKLS0tIGEvbTQvZmluZGtlcm5lbC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLWRubCBGaW5kIHRoZSBrZXJuZWwgYW5kIGhhbmRsZSAyLjYgc2V0dGluZ3MKLUFDX0RFRlVOKFtBWF9GSU5EX0tFUk5FTF0sCi1bCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBrZXJuZWwgT1Byb2ZpbGUgc3VwcG9ydF0pCi1BQ19BUkdfV0lUSChrZXJuZWwtc3VwcG9ydCwgWyAgLS13aXRoLWtlcm5lbC1zdXBwb3J0ICAgICAgICBVc2UgMi42IGtlcm5lbCAobm8ga2VybmVsIHNvdXJjZSB0cmVlIHJlcXVpcmVkKV0sCi1pZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgotCU9QUk9GSUxFXzI2PXllcwotZmkKLSkgCi0KLWlmIHRlc3QgIiRPUFJPRklMRV8yNiIgIT0gInllcyI7IHRoZW4KLQlkbmwgIC0tLSBGaW5kIHRoZSBMaW51eCBrZXJuZWwsIGF0IGxlYXN0IHRoZSBoZWFkZXJzIC0tLQotIAotCUFDX1NVQlNUKEtTUkMpCi0JS1NSQz0vbGliL21vZHVsZXMvYHVuYW1lIC1yYC9idWlsZAotCUFDX0FSR19XSVRIKGxpbnV4LCBbICAtLXdpdGgtbGludXg9ZGlyICAgICAgICAgICAgIFBhdGggdG8gTGludXggc291cmNlIHRyZWVdLCBLU1JDPSR3aXRodmFsKSAKLQlLSU5DPSRLU1JDL2luY2x1ZGUKLQlBQ19TVUJTVChLSU5DKQotCi0JQVhfS0VSTkVMX09QVElPTihDT05GSUdfT1BST0ZJTEUsIE9QUk9GSUxFXzI2PXllcywgT1BST0ZJTEVfMjY9bm8pCi0JQVhfS0VSTkVMX09QVElPTihDT05GSUdfT1BST0ZJTEVfTU9EVUxFLCBPUFJPRklMRV8yNj15ZXMsIE9QUk9GSUxFXzI2PSRPUFJPRklMRV8yNikKLWZpCi1BQ19NU0dfUkVTVUxUKCRPUFJPRklMRV8yNikKLQotQU1fQ09ORElUSU9OQUwoa2VybmVsX3N1cHBvcnQsIHRlc3QgIiRPUFJPRklMRV8yNiIgPSB5ZXMpCi1dCi0pCmRpZmYgLS1naXQgYS9tNC9rZXJuZWxvcHRpb24ubTQgYi9tNC9rZXJuZWxvcHRpb24ubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNWM4MDIuLjAwMDAwMDAKLS0tIGEvbTQva2VybmVsb3B0aW9uLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotZG5sIEFYX0tFUk5FTF9PUFRJT04ob3B0aW9uLCBhY3Rpb24taWYtZm91bmQsIGFjdGlvbi1pZi1ub3QtZm91bmQpCi1kbmwgc2VlIGlmIGF1dG9jb25mLmggZGVmaW5lcyB0aGUgb3B0aW9uCi1BQ19ERUZVTihbQVhfS0VSTkVMX09QVElPTl0sIFsKLVNBVkVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0iLUkkS0lOQyAtTzIgLURfX0tFUk5FTF9fIgotQUNfVFJZX0NPTVBJTEUoIFsjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+XSwKLVsKLSNpZm5kZWYgJDEKLWJyZWFrX21lX2hhcmQoXFxcKTsKLSNlbmRpZgotXSxbJDJdLFskM10sKQotQ0ZMQUdTPSRTQVZFX0NGTEFHUwotXSkKZGlmZiAtLWdpdCBhL200L2tlcm5lbHZlcnNpb24ubTQgYi9tNC9rZXJuZWx2ZXJzaW9uLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWJlNDBiLi4wMDAwMDAwCi0tLSBhL200L2tlcm5lbHZlcnNpb24ubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kbmwgQVhfS0VSTkVMX1ZFUlNJT04obWFqb3IsIG1pbm9yLCBsZXZlbCwgY29tcGFyaXNvbiwgYWN0aW9uLWlmLXRydWUsIGFjdGlvbi1pZi1mYWxzZSkKLUFDX0RFRlVOKFtBWF9LRVJORUxfVkVSU0lPTl0sIFsKLVNBVkVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0iLUkkS0lOQyAtRF9fS0VSTkVMX18gLVdlcnJvciIKLUFDX1RSWV9DT01QSUxFKCAKLSAgWwotICAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotICAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0gIF0sCi0gIFsKLSAgI2lmIExJTlVYX1ZFUlNJT05fQ09ERSAkNCBLRVJORUxfVkVSU0lPTigkMSwgJDIsICQzKQotICBicmVha19tZV9oYXJkKFxcXCk7Ci0gICNlbmRpZgotICBdLAotWyQ1XSxbJDZdLCkKLUNGTEFHUz0kU0FWRV9DRkxBR1MKLV0pCmRpZmYgLS1naXQgYS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgYi9tNC9tYWxsb2NhdHRyaWJ1dGUubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZmUzYTguLjAwMDAwMDAKLS0tIGEvbTQvbWFsbG9jYXR0cmlidXRlLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotZG5sIEFYX01BTExPQ19BVFRSSUJVVEUgLSBzZWUgaWYgZ2NjIHdpbGwgdGFrZSBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKQotQUNfREVGVU4oW0FYX01BTExPQ19BVFRSSUJVVEVdLAotWwotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pCi1TQVZFX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKLUFDX1RSWV9DT01QSUxFKCxbCi12b2lkIG1vbmtleSgpIF9fYXR0cmlidXRlX18oKG1hbGxvYykpOwotXSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgQUNfREVGSU5FKE1BTExPQ19BVFRSSUJVVEVfT0ssIDEsIFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pLCBBQ19NU0dfUkVTVUxUKFtub10pKQotQ0ZMQUdTPSRTQVZFX0NGTEFHUyAKLV0KLSkKZGlmZiAtLWdpdCBhL200L3BvcHRjb25zdC5tNCBiL200L3BvcHRjb25zdC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4OGU3OC4uMDAwMDAwMAotLS0gYS9tNC9wb3B0Y29uc3QubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1kbmwgQVhfUE9QVF9DT05TVCAtIGNoZWNrIHBvcHQgcHJvdG90eXBlCi1BQ19ERUZVTihbQVhfUE9QVF9DT05TVF0sCi1bCi1BQ19NU0dfQ0hFQ0tJTkcoW3BvcHQgcHJvdG90eXBlXSkKLVNBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCi1DWFhGTEFHUz0iLVdlcnJvciAkQ1hYRkxBR1MiCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHBvcHQuaD5dLAotWwotaW50IGM7IGNoYXIgKip2OwotcG9wdEdldENvbnRleHQoMCwgYywgdiwgMCwgMCk7Ci1dLAotQUNfTVNHX1JFU1VMVChbdGFrZXMgY2hhciAqKl0pOywKLUFDX01TR19SRVNVTFQoW3Rha2VzIGNvbnN0IGNoYXIgKipdKTsgQUNfREVGSU5FKENPTlNUX1BPUFQsIDEsIFt3aGV0aGVyIHBvcHQgcHJvdG90eXBlIHRha2VzIGEgY29uc3QgY2hhciAqKl0pKQotQ1hYRkxBR1M9IiRTQVZFX0NYWEZMQUdTIgotXQotKQpkaWZmIC0tZ2l0IGEvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgYi9tNC9wcmVjb21waWxlZGhlYWRlci5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE5YWFjZi4uMDAwMDAwMAotLS0gYS9tNC9wcmVjb21waWxlZGhlYWRlci5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWRubCBBWF9DWFhGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCi1kbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ1hYIHN1cHBvcnQgaXQuCi1BQ19ERUZVTihbQVhfQ0hFQ0tfUFJFQ09NUElMRURfSEVBREVSXSwgWwotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q1hYfSBzdXBwb3J0IHByZWNvbXBpbGVkIGhlYWRlcl0pCi1BQ19MQU5HX1NBVkUKLUFDX0xBTkdfQ1BMVVNQTFVTCi1TQVZFX0NYWEZMQUdTPSRDWFhGTEFHUwotZG5sIHdlIGNvbnNpZGVyIHRoYW4gaWYgLVdpbnZhbGlkLXBjaCBpcyBhY2NlcHRlZCBwY2ggd2lsbCB3b3JrcyAuLi4KLUNYWEZMQUdTPS1XaW52YWxpZC1wY2gKLWRubCBidXQgd2UgZG9uJ3Qgd2FudCAtV2ludmFsaWQtcGNoIGVsc2UgY29tcGlsYXRpb24gd2lsbCBmYWlsIGR1ZSAtV2Vycm9yIGFuZAotZG5sIHRoZSBmYWN0IHRoYW4gc29tZSBwY2ggd2lsbCBiZSBpbnZhbGlkIGZvciB0aGUgZ2l2ZW4gY29tcGlsYXRpb24gb3B0aW9uCi1BQ19UUllfQ09NUElMRSgsWztdLEFDX01TR19SRVNVTFQoW3llc10pOyAkMT0iJHskMX0gLWluY2x1ZGUgYml0cy9zdGRjKysuaCIsIEFDX01TR19SRVNVTFQoW25vXSkpCi1DWFhGTEFHUz0kU0FWRV9DWFhGTEFHUwotQUNfTEFOR19SRVNUT1JFCi1dKQpkaWZmIC0tZ2l0IGEvbTQvcXQubTQgYi9tNC9xdC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBlMzBlZi4uMDAwMDAwMAotLS0gYS9tNC9xdC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi1kbmwgZmluZCBhIGJpbmFyeSBpbiB0aGUgcGF0aAotQUNfREVGVU4oW1FUX0ZJTkRfUEFUSF0sCi1bCi0JQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQotCUFDX0NBQ0hFX1ZBTChxdF9jdl9wYXRoXyQxLAotCVsKLQkJcXRfY3ZfcGF0aF8kMT0iTk9ORSIKLQkJaWYgdGVzdCAtbiAiJCQyIjsgdGhlbgotCQkJcXRfY3ZfcGF0aF8kMT0iJCQyIjsKLQkJZWxzZQotCQkJZGlycz0iJDMiCi0JCQlxdF9zYXZlX0lGUz0kSUZTCi0JCQlJRlM9JzonCi0JCQlmb3IgZGlyIGluICRQQVRIOyBkbwotCQkJCWRpcnM9IiRkaXJzICRkaXIiCi0JCQlkb25lCi0JCQlJRlM9JHF0X3NhdmVfSUZTCi0gCi0JCQlmb3IgZGlyIGluICRkaXJzOyBkbwotCQkJCWlmIHRlc3QgLXggIiRkaXIvJDEiOyB0aGVuCi0JCQkJCWlmIHRlc3QgLW4gIiQ1IjsgdGhlbgotCQkJCQkJZXZhbHN0cj0iJGRpci8kMSAkNSAyPiYxICIKLQkJCQkJCWlmIGV2YWwgJGV2YWxzdHI7IHRoZW4KLQkJCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgotCQkJCQkJCWJyZWFrCi0JCQkJCQlmaQotCQkJCQllbHNlCi0JCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgotCQkJCQkJYnJlYWsKLQkJCQkJZmkKLQkJCQlmaQotCQkJZG9uZQotCQlmaQotCV0pCi0gCi0JaWYgdGVzdCAteiAiJHF0X2N2X3BhdGhfJDEiIHx8IHRlc3QgIiRxdF9jdl9wYXRoXyQxIiA9ICJOT05FIjsgdGhlbgotCQlBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKLQkJJDQKLQllbHNlCi0JCUFDX01TR19SRVNVTFQoJHF0X2N2X3BhdGhfJDEpCi0JCSQyPSRxdF9jdl9wYXRoXyQxCi0JZmkKLV0pCi0KLWRubCBGaW5kIHRoZSB1aWMgY29tcGlsZXIgb24gdGhlIHBhdGggb3IgaW4gcXRfY3ZfZGlyCi1BQ19ERUZVTihbUVRfRklORF9VSUNdLAotWwotCVFUX0ZJTkRfUEFUSCh1aWMsIGFjX3VpYywgJHF0X2N2X2Rpci9iaW4pCi0JaWYgdGVzdCAteiAiJGFjX3VpYyIgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCi0JCUFDX01TR19FUlJPUihbdWljIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQotCWZpCi1dKQotIAotZG5sIEZpbmQgdGhlIHJpZ2h0IG1vYyBpbiBwYXRoL3F0X2N2X2RpcgotQUNfREVGVU4oW1FUX0ZJTkRfTU9DXSwKLVsKLQlRVF9GSU5EX1BBVEgobW9jMiwgYWNfbW9jMiwgJHF0X2N2X2Rpci9iaW4pCi0JUVRfRklORF9QQVRIKG1vYywgYWNfbW9jMSwgJHF0X2N2X2Rpci9iaW4pCi0KLQlpZiB0ZXN0IC1uICIkYWNfbW9jMSIgLWEgLW4gIiRhY19tb2MyIjsgdGhlbgotCQlkbmwgZm91bmQgYm90aC4gUHJlZmVyIFF0MydzIGlmIGl0IGV4aXN0cyBlbHNlIG1vYzIKLQkJJGFjX21vYzEgLXYgMj4mMSB8IGdyZXAgIlF0IDMiID4vZGV2L251bGwKLQkJaWYgdGVzdCAiJD8iID0gMDsgdGhlbgotCQkJYWNfbW9jPSRhY19tb2MxOwotCQllbHNlCi0JCQlhY19tb2M9JGFjX21vYzI7Ci0JCWZpCi0JZWxzZQotCQlpZiB0ZXN0IC1uICIkYWNfbW9jMSI7IHRoZW4KLQkJCWFjX21vYz0kYWNfbW9jMTsKLQkJZWxzZQotCQkJYWNfbW9jPSRhY19tb2MyOwotCQlmaQotCWZpCi0KLQlpZiB0ZXN0IC16ICIkYWNfbW9jIiAgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCi0JCUFDX01TR19FUlJPUihbbW9jIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQotCWZpCi1dKQotCi1kbmwgY2hlY2sgYSBwYXJ0aWN1bGFyIGxpYm5hbWUKLUFDX0RFRlVOKFtRVF9UUllfTElOS10sCi1bCi0JU0FWRV9MSUJTPSIkTElCUyIKLQlMSUJTPSIkTElCUyAkMSIKLQlBQ19UUllfTElOSyhbCi0JI2luY2x1ZGUgPHFnbG9iYWwuaD4KLQkjaW5jbHVkZSA8cXN0cmluZy5oPgotCQldLAotCVsKLQlRU3RyaW5nIHMoIm1hbmdsZV9mYWlsdXJlIik7Ci0JI2lmIChRVF9WRVJTSU9OIDwgMjIxKQotCWJyZWFrX21lXyhcXFwpOwotCSNlbmRpZgotCV0sCi0JcXRfY3ZfbGlibmFtZT0kMSwKLQkpCi0JTElCUz0iJFNBVkVfTElCUyIKLV0pCi0gCi1kbmwgY2hlY2sgd2UgY2FuIGRvIGEgY29tcGlsZQotQUNfREVGVU4oW1FUX0NIRUNLX0NPTVBJTEVdLAotWwotCUFDX01TR19DSEVDS0lORyhbZm9yIFF0IGxpYnJhcnkgbmFtZV0pCi0gCi0JQUNfQ0FDSEVfVkFMKHF0X2N2X2xpYm5hbWUsCi0JWwotCQlBQ19MQU5HX0NQTFVTUExVUwotCQlTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUwotCQlDWFhGTEFHUz0iJENYWEZMQUdTICRRVF9JTkNMVURFUyAkUVRfTERGTEFHUyIgCi0KLQkJZm9yIGxpYm5hbWUgaW4gLWxxdC1tdCAtbHF0MyAtbHF0MiAtbHF0OwotCQlkbwotCQkJUVRfVFJZX0xJTksoJGxpYm5hbWUpCi0JCQlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KLQkJCQlicmVhazsKLQkJCWZpCi0JCWRvbmUKLQotCQlDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUwotCV0pCi0KLQlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KLQkJQUNfTVNHX1JFU1VMVChbZmFpbGVkXSkgCi0JCWlmIHRlc3QgIiRGQVRBTCIgPSAxIDsgdGhlbgotCQkJQUNfTVNHX0VSUk9SKFtDYW5ub3QgY29tcGlsZSBhIHNpbXBsZSBRdCBleGVjdXRhYmxlLiBDaGVjayB5b3UgaGF2ZSB0aGUgcmlnaHQgXCRRVERJUiAhXSkKLQkJZmkKLQllbHNlCi0JCUFDX01TR19SRVNVTFQoWyRxdF9jdl9saWJuYW1lXSkKLQlmaQotXSkKLQotZG5sIGdldCBRdCB2ZXJzaW9uIHdlJ3JlIHVzaW5nCi1BQ19ERUZVTihbUVRfR0VUX1ZFUlNJT05dLAotWwotCUFDX0NBQ0hFX0NIRUNLKFtRdCB2ZXJzaW9uXSxseXhfY3ZfcXR2ZXJzaW9uLAotCVsKLQkJQUNfTEFOR19DUExVU1BMVVMKLQkJU0FWRV9DUFBGTEFHUz0kQ1BQRkxBR1MKLQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUVRfSU5DTFVERVMiCi0KLQkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci0iJSUlIlFUX1ZFUlNJT05fU1RSIiUlJSIKLUVPRgotCQlseXhfY3ZfcXR2ZXJzaW9uPWAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8IFwKLQkJCWdyZXAgJ14iJSUlIicgIDI+L2Rldi9udWxsIHwgXAotCQkJc2VkIC1lICdzLyIlJSUiLy9nJyAtZSAncy8iLy9nJ2AKLQkJcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotCQlDUFBGTEFHUz0kU0FWRV9DUFBGTEFHUwotCV0pCi0gCi0JUVRfVkVSU0lPTj0kbHl4X2N2X3F0dmVyc2lvbgotCUFDX1NVQlNUKFFUX1ZFUlNJT04pCi1dKQotIAotZG5sIHN0YXJ0IGhlcmUgCi1BQ19ERUZVTihbUVRfRE9fSVRfQUxMXSwKLVsKLQlkbmwgUGxlYXNlIGxlYXZlIHRoaXMgYWxvbmUuIEkgdXNlIHRoaXMgZmlsZSBpbgotCWRubCBvcHJvZmlsZS4KLQlGQVRBTD0wCi0KLQlBQ19BUkdfV0lUSChxdC1kaXIsIFsgIC0td2l0aC1xdC1kaXIgICAgICAgICAgIHdoZXJlIHRoZSByb290IG9mIFF0IGlzIGluc3RhbGxlZCBdLAotCQlbIHF0X2N2X2Rpcj1gZXZhbCBlY2hvICIkd2l0aHZhbCIvYCBdKQotCSAKLQlBQ19BUkdfV0lUSChxdC1pbmNsdWRlcywgWyAgLS13aXRoLXF0LWluY2x1ZGVzICAgICAgd2hlcmUgdGhlIFF0IGluY2x1ZGVzIGFyZS4gXSwKLQkJWyBxdF9jdl9pbmNsdWRlcz1gZXZhbCBlY2hvICIkd2l0aHZhbCJgIF0pCi0gCi0JQUNfQVJHX1dJVEgocXQtbGlicmFyaWVzLCBbICAtLXdpdGgtcXQtbGlicmFyaWVzICAgICB3aGVyZSB0aGUgUXQgbGlicmFyeSBpcyBpbnN0YWxsZWQuXSwKLQkJWyAgcXRfY3ZfbGlicmFyaWVzPWBldmFsIGVjaG8gIiR3aXRodmFsImAgXSkKLQotCWRubCBwYXkgYXR0ZW50aW9uIHRvICRRVERJUiB1bmxlc3Mgb3ZlcnJpZGRlbgotCWlmIHRlc3QgLXogIiRxdF9jdl9kaXIiOyB0aGVuCi0JCXF0X2N2X2Rpcj0kUVRESVIKLQlmaQotIAotCWRubCBkZXJpdmUgaW5jL2xpYiBpZiBuZWVkZWQKLQlpZiB0ZXN0IC1uICIkcXRfY3ZfZGlyIjsgdGhlbgotCQlpZiB0ZXN0IC16ICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCi0JCQlxdF9jdl9pbmNsdWRlcz0kcXRfY3ZfZGlyL2luY2x1ZGUKLQkJZmkKLQkJaWYgdGVzdCAteiAiJHF0X2N2X2xpYnJhcmllcyI7IHRoZW4KLQkJCXF0X2N2X2xpYnJhcmllcz0kcXRfY3ZfZGlyL2xpYgotCQlmaQotCWZpCi0KLQlkbmwgZmxhZ3MgZm9yIGNvbXBpbGF0aW9uCi0JUVRfSU5DTFVERVM9Ci0JUVRfTERGTEFHUz0KLQlpZiB0ZXN0IC1uICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCi0JCVFUX0lOQ0xVREVTPSItaXN5c3RlbSAkcXRfY3ZfaW5jbHVkZXMiCi0JZmkKLQlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlicmFyaWVzIjsgdGhlbgotCQlRVF9MREZMQUdTPSItTCRxdF9jdl9saWJyYXJpZXMiCi0JZmkKLQlBQ19TVUJTVChRVF9JTkNMVURFUykKLQlBQ19TVUJTVChRVF9MREZMQUdTKQotIAotCVFUX0ZJTkRfTU9DCi0JTU9DPSRhY19tb2MKLQlBQ19TVUJTVChNT0MpCi0JUVRfRklORF9VSUMKLQlVSUM9JGFjX3VpYwotCUFDX1NVQlNUKFVJQykKLQotCVFUX0NIRUNLX0NPTVBJTEUKLSAKLQlRVF9MSUI9JHF0X2N2X2xpYm5hbWU7Ci0JQUNfU1VCU1QoUVRfTElCKQotCi0JaWYgdGVzdCAtbiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCi0JCVFUX0dFVF9WRVJTSU9OCi0JZmkKLV0pCmRpZmYgLS1naXQgYS9tNC9yZXN1bHR5bi5tNCBiL200L3Jlc3VsdHluLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWFjMWNjLi4wMDAwMDAwCi0tLSBhL200L3Jlc3VsdHluLm00CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLWRubCBBWF9NU0dfUkVTVUxUX1lOKGEpCi1kbmwgcmVzdWx0cyAieWVzIiBpZmYgYT09MSwgIm5vIiBlbHNlCi1BQ19ERUZVTihbQVhfTVNHX1JFU1VMVF9ZTl0sIFt4PW5vCi10ZXN0ICJ4JDEiID0gIngxIiAmJiB4PXllcwotQUNfTVNHX1JFU1VMVCgkeCldKQpkaWZmIC0tZ2l0IGEvbTQvc3N0cmVhbS5tNCBiL200L3NzdHJlYW0ubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMzdmYjUuLjAwMDAwMDAKLS0tIGEvbTQvc3N0cmVhbS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotZG5sIEFYX0NIRUNLX1NTVFJFQU0gLSBjaGVjayBpZiBsb2NhbCBzc3RyZWFtIGlzIG5lZWRlZCB0byBjb21waWxlIE9LCi1BQ19ERUZVTihbQVhfQ0hFQ0tfU1NUUkVBTV0sCi1bCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIGluY2x1ZGVkIHNzdHJlYW1dKQotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzc3RyZWFtPl0sIFtdLCAKLUFDX01TR19SRVNVTFQoW25vXSk7LAotQUNfTVNHX1JFU1VMVChbeWVzXSk7IE9QX0NYWEZMQUdTPSIkT1BfQ1hYRkxBR1MgLUlcJHt0b3Bfc3JjZGlyfS9pbmNsdWRlIikKLV0KLSkKZGlmZiAtLWdpdCBhL200L3R5cGVkZWYubTQgYi9tNC90eXBlZGVmLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjgwN2Q0Li4wMDAwMDAwCi0tLSBhL200L3R5cGVkZWYubTQKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1kbmwgQVhfQ0hFQ0tfVFlQRURFRih0eXBlZGVmX25hbWUsIHR5cGUsIGFjdGlvbi1pZi10cnVlLCBhY3Rpb24taWYtZmFsc2UpCi1kbmwgZXhlYyBhY3Rpb24taWYtdHJ1ZSBpZiB0eXBlZGVmX25hbWUgaXMgYSB0eXBlZGVmIHRvIHR5cGUgZWxzZSBleGVjIAotZG5sIGFjdGlvbi1pZi1mYWxzZQotZG5sIGN1cnJlbnRseSB3b3JrIG9ubHkgd2l0aCB0eXBlIHR5cGVkZWYnZWQgaW4gc3RkZGVmLmgKLUFDX0RFRlVOKFtBWF9DSEVDS19UWVBFREVGXSwgWwotZG5sIEFDX0xBTkdfUFVTSChDKSBub3QgaW4gYXV0b2NvbmYgMi4xMwotQUNfTEFOR19TQVZFCi1BQ19MQU5HX0MKLVNBVkVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0iLVdlcnJvciAkQ0ZMQUdTIgotCi1BQ19UUllfQ09NUElMRSgKLSAgWwotICAjaW5jbHVkZSA8c3RkZGVmLmg+Ci0gIF0sCi0gIFsKLSAgdHlwZWRlZiB2b2lkICgqZmN0MSkoJDEpOwotICB0eXBlZGVmIHZvaWQgKCpmY3QyKSgkMik7Ci0gIGZjdDEgZjEgPSAwOwotICBmY3QyIGYyID0gMDsKLSAgaWYgKGYxID09IGYyKSB7fQotICBdLAotWyQzXSxbJDRdKQotCi1DRkxBR1M9JFNBVkVfQ0ZMQUdTCi1BQ19MQU5HX1JFU1RPUkUKLV0pCi0KLQotZG5sIEFYX1RZUEVERUZFRF9OQU1FKHR5cGVkZWZfbmFtZSwgY2FuZGlkYXRlX2xpc3QsIHZhcl9uYW1lKQotZG5sIHNldCB2YXJfbmFtZSB0byB0aGUgdHlwZWRlZiBuYW1lIG9mICQxIHdoaWNoIG11c3QgYmUgaW4gY2FuZGl0YXRlX2xpc3QKLWRubCBlbHNlIHByb2R1Y2UgYSBmYXRhbCBlcnJvcgotQUNfREVGVU4oW0FYX1RZUEVERUZFRF9OQU1FXSwgWwotCUFDX01TR19DSEVDS0lORyhbdHlwZSBvZiAkMV0pCi0JZm9yIGYgaW4gJDI7IGRvCi0JCUFYX0NIRUNLX1RZUEVERUYoJDEsICRmLCAkMz0iJGYiLCAkMz0iIikKLQkJaWYgdGVzdCAtbiAiJHskM30iOyB0aGVuCi0JCQlicmVhawotCQlmaQotCWRvbmUKLQlpZiB0ZXN0IC1uICIkeyQzfSI7IHRoZW4KLQkJQUNfTVNHX1JFU1VMVChbJHskM31dKQotCWVsc2UKLQkJQUNfTVNHX0VSUk9SKFtub3QgZm91bmRdKQotCWZpCi1dKQpkaWZmIC0tZ2l0IGEvbWlzc2luZyBiL21pc3NpbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDA5ZWRkODguLjAwMDAwMDAKLS0tIGEvbWlzc2luZworKysgL2Rldi9udWxsCkBAIC0xLDM1NyArMCwwIEBACi0jISAvYmluL3NoCi0jIENvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZSBpbnN0YWxsaW5nLgotCi1zY3JpcHR2ZXJzaW9uPTIwMDUtMDItMDguMjIKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKLSMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgT3JpZ2luYWxseSBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQotIyAwMjExMS0xMzA3LCBVU0EuCi0KLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotCi1pZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCi0gIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKLSAgZXhpdCAxCi1maQotCi1ydW49OgotCi0jIEluIHRoZSBjYXNlcyB3aGVyZSB0aGlzIG1hdHRlcnMsIGBtaXNzaW5nJyBpcyBiZWluZyBydW4gaW4gdGhlCi0jIHNyY2RpciBhbHJlYWR5LgotaWYgdGVzdCAtZiBjb25maWd1cmUuYWM7IHRoZW4KLSAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5hYwotZWxzZQotICBjb25maWd1cmVfYWM9Y29uZmlndXJlLmluCi1maQotCi1tc2c9Im1pc3Npbmcgb24geW91ciBzeXN0ZW0iCi0KLWNhc2UgIiQxIiBpbgotLS1ydW4pCi0gICMgVHJ5IHRvIHJ1biByZXF1ZXN0ZWQgcHJvZ3JhbSwgYW5kIGp1c3QgZXhpdCBpZiBpdCBzdWNjZWVkcy4KLSAgcnVuPQotICBzaGlmdAotICAiJEAiICYmIGV4aXQgMAotICAjIEV4aXQgY29kZSA2MyBtZWFucyB2ZXJzaW9uIG1pc21hdGNoLiAgVGhpcyBvZnRlbiBoYXBwZW5zCi0gICMgd2hlbiB0aGUgdXNlciB0cnkgdG8gdXNlIGFuIGFuY2llbnQgdmVyc2lvbiBvZiBhIHRvb2wgb24KLSAgIyBhIGZpbGUgdGhhdCByZXF1aXJlcyBhIG1pbmltdW0gdmVyc2lvbi4gIEluIHRoaXMgY2FzZSB3ZQotICAjIHdlIHNob3VsZCBwcm9jZWVkIGhhcyBpZiB0aGUgcHJvZ3JhbSBoYWQgYmVlbiBhYnNlbnQsIG9yCi0gICMgaWYgLS1ydW4gaGFkbid0IGJlZW4gcGFzc2VkLgotICBpZiB0ZXN0ICQ/ID0gNjM7IHRoZW4KLSAgICBydW49OgotICAgIG1zZz0icHJvYmFibHkgdG9vIG9sZCIKLSAgZmkKLSAgOzsKLQotICAtaHwtLWh8LS1oZXwtLWhlbHwtLWhlbHApCi0gICAgZWNobyAiXAotJDAgW09QVElPTl0uLi4gUFJPR1JBTSBbQVJHVU1FTlRdLi4uCi0KLUhhbmRsZSBcYFBST0dSQU0gW0FSR1VNRU5UXS4uLicgZm9yIHdoZW4gUFJPR1JBTSBpcyBtaXNzaW5nLCBvciByZXR1cm4gYW4KLWVycm9yIHN0YXR1cyBpZiB0aGVyZSBpcyBubyBrbm93biBoYW5kbGluZyBmb3IgUFJPR1JBTS4KLQotT3B0aW9uczoKLSAgLWgsIC0taGVscCAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0Ci0gIC12LCAtLXZlcnNpb24gICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotICAtLXJ1biAgICAgICAgICAgdHJ5IHRvIHJ1biB0aGUgZ2l2ZW4gY29tbWFuZCwgYW5kIGVtdWxhdGUgaXQgaWYgaXQgZmFpbHMKLQotU3VwcG9ydGVkIFBST0dSQU0gdmFsdWVzOgotICBhY2xvY2FsICAgICAgdG91Y2ggZmlsZSBcYGFjbG9jYWwubTQnCi0gIGF1dG9jb25mICAgICB0b3VjaCBmaWxlIFxgY29uZmlndXJlJwotICBhdXRvaGVhZGVyICAgdG91Y2ggZmlsZSBcYGNvbmZpZy5oLmluJwotICBhdXRvbWFrZSAgICAgdG91Y2ggYWxsIFxgTWFrZWZpbGUuaW4nIGZpbGVzCi0gIGJpc29uICAgICAgICBjcmVhdGUgXGB5LnRhYi5bY2hdJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLltjaF0KLSAgZmxleCAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKLSAgaGVscDJtYW4gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQotICBsZXggICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYwotICBtYWtlaW5mbyAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCi0gIHRhciAgICAgICAgICB0cnkgdGFyLCBnbnV0YXIsIGd0YXIsIHRoZW4gdGFyIHdpdGhvdXQgbm9uLXBvcnRhYmxlIGZsYWdzCi0gIHlhY2MgICAgICAgICBjcmVhdGUgXGB5LnRhYi5bY2hdJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLltjaF0KLQotU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKLSAgICBleGl0ICQ/Ci0gICAgOzsKLQotICAtdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcnN8LS12ZXJzaXwtLXZlcnNpb3wtLXZlcnNpb24pCi0gICAgZWNobyAibWlzc2luZyAkc2NyaXB0dmVyc2lvbiAoR05VIEF1dG9tYWtlKSIKLSAgICBleGl0ICQ/Ci0gICAgOzsKLQotICAtKikKLSAgICBlY2hvIDE+JjIgIiQwOiBVbmtub3duIFxgJDEnIG9wdGlvbiIKLSAgICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCi0gICAgZXhpdCAxCi0gICAgOzsKLQotZXNhYwotCi0jIE5vdyBleGl0IGlmIHdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuICBBbHNvIGV4aXQgbm93IGlmIHdlCi0jIGRvbid0IGhhdmUgaXQgYW5kIC0tdmVyc2lvbiB3YXMgcGFzc2VkIChtb3N0IGxpa2VseSB0byBkZXRlY3QKLSMgdGhlIHByb2dyYW0pLgotY2FzZSAiJDEiIGluCi0gIGxleHx5YWNjKQotICAgICMgTm90IEdOVSBwcm9ncmFtcywgdGhleSBkb24ndCBoYXZlIC0tdmVyc2lvbi4KLSAgICA7OwotCi0gIHRhcikKLSAgICBpZiB0ZXN0IC1uICIkcnVuIjsgdGhlbgotICAgICAgIGVjaG8gMT4mMiAiRVJST1I6IFxgdGFyJyByZXF1aXJlcyAtLXJ1biIKLSAgICAgICBleGl0IDEKLSAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgotICAgICAgIGV4aXQgMQotICAgIGZpCi0gICAgOzsKLQotICAqKQotICAgIGlmIHRlc3QgLXogIiRydW4iICYmICgkMSAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAjIFdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuCi0gICAgICAgZXhpdCAxCi0gICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KLSAgICAgICAjIENvdWxkIG5vdCBydW4gLS12ZXJzaW9uIG9yIC0taGVscC4gIFRoaXMgaXMgcHJvYmFibHkgc29tZW9uZQotICAgICAgICMgcnVubmluZyBgJFRPT0wgLS12ZXJzaW9uJyBvciBgJFRPT0wgLS1oZWxwJyB0byBjaGVjayB3aGV0aGVyCi0gICAgICAgIyAkVE9PTCBleGlzdHMgYW5kIG5vdCBrbm93aW5nICRUT09MIHVzZXMgbWlzc2luZy4KLSAgICAgICBleGl0IDEKLSAgICBmaQotICAgIDs7Ci1lc2FjCi0KLSMgSWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGZhaWxzIHRvIHJ1biAocG9zc2libHkgYW4gb3V0ZGF0ZWQgdmVyc2lvbiksCi0jIHRyeSB0byBlbXVsYXRlIGl0LgotY2FzZSAiJDEiIGluCi0gIGFjbG9jYWwqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50Ci0gICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tCi0gICAgICAgICBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgdG91Y2ggYWNsb2NhbC5tNAotICAgIDs7Ci0KLSAgYXV0b2NvbmYpCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZQotICAgICAgICAgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUKLSAgICAgICAgIGFyY2hpdmUgc2l0ZS4iCi0gICAgdG91Y2ggY29uZmlndXJlCi0gICAgOzsKLQotICBhdXRvaGVhZGVyKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2NvbmZpZy5oJyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAotICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbQotICAgICAgICAgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgZmlsZXM9YHNlZCAtbiAncy9eWyBdKkFbQ01dX0NPTkZJR19IRUFERVIoXChbXildKlwpKS4qL1wxL3AnICR7Y29uZmlndXJlX2FjfWAKLSAgICB0ZXN0IC16ICIkZmlsZXMiICYmIGZpbGVzPSJjb25maWcuaCIKLSAgICB0b3VjaF9maWxlcz0KLSAgICBmb3IgZiBpbiAkZmlsZXM7IGRvCi0gICAgICBjYXNlICIkZiIgaW4KLSAgICAgICo6KikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAiYGVjaG8gIiRmIiB8Ci0JCQkJICAgICAgIHNlZCAtZSAncy9eW146XSo6Ly8nIC1lICdzLzouKi8vJ2A7OwotICAgICAgKikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAkZi5pbiI7OwotICAgICAgZXNhYwotICAgIGRvbmUKLSAgICB0b3VjaCAkdG91Y2hfZmlsZXMKLSAgICA7OwotCi0gIGF1dG9tYWtlKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIFxgTWFrZWZpbGUuYW0nLCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLgotICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuCi0gICAgICAgICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgZmluZCAuIC10eXBlIGYgLW5hbWUgTWFrZWZpbGUuYW0gLXByaW50IHwKLQkgICBzZWQgJ3MvXC5hbSQvLmluLycgfAotCSAgIHdoaWxlIHJlYWQgZjsgZG8gdG91Y2ggIiRmIjsgZG9uZQotICAgIDs7Ci0KLSAgYXV0b200dGUpCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGJ1dCBpcyAkbXNnLgotICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKLSAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLgotICAgICAgICAgWW91IGNhbiBnZXQgXGAkMScgYXMgcGFydCBvZiBcYEF1dG9jb25mJyBmcm9tIGFueSBHTlUKLSAgICAgICAgIGFyY2hpdmUgc2l0ZS4iCi0KLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gJ3MvLiotLW91dHB1dFsgPV0qXChbXiBdKlwpLiovXDEvcCdgCi0gICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAncy8uKi1vWyBdKlwoW14gXSpcKS4qL1wxL3AnYAotICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgotCXRvdWNoICRmaWxlCi0gICAgZWxzZQotCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQotCWVjaG8gIiMhIC9iaW4vc2giCi0JZWNobyAiIyBDcmVhdGVkIGJ5IEdOVSBBdXRvbWFrZSBtaXNzaW5nIGFzIGEgcmVwbGFjZW1lbnQgb2YiCi0JZWNobyAiIyAgJCAkQCIKLQllY2hvICJleGl0IDAiCi0JY2htb2QgK3ggJGZpbGUKLQlleGl0IDEKLSAgICBmaQotICAgIDs7Ci0KLSAgYmlzb258eWFjYykKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAueScgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBCaXNvbicgcGFja2FnZQotICAgICAgICAgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZSBlZmZlY3QuICBZb3UgY2FuIGdldAotICAgICAgICAgXGBCaXNvbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgcm0gLWYgeS50YWIuYyB5LnRhYi5oCi0gICAgaWYgWyAkIyAtbmUgMSBdOyB0aGVuCi0gICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgotCWNhc2UgIiRMQVNUQVJHIiBpbgotCSoueSkKLQkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2MvJ2AKLQkgICAgaWYgWyAtZiAiJFNSQ0ZJTEUiIF07IHRoZW4KLQkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmMKLQkgICAgZmkKLQkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2gvJ2AKLQkgICAgaWYgWyAtZiAiJFNSQ0ZJTEUiIF07IHRoZW4KLQkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmgKLQkgICAgZmkKLQkgIDs7Ci0JZXNhYwotICAgIGZpCi0gICAgaWYgWyAhIC1mIHkudGFiLmggXTsgdGhlbgotCWVjaG8gPnkudGFiLmgKLSAgICBmaQotICAgIGlmIFsgISAtZiB5LnRhYi5jIF07IHRoZW4KLQllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPnkudGFiLmMKLSAgICBmaQotICAgIDs7Ci0KLSAgbGV4fGZsZXgpCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLmwnIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgRmxleCcgcGFja2FnZQotICAgICAgICAgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZSBlZmZlY3QuICBZb3UgY2FuIGdldAotICAgICAgICAgXGBGbGV4JyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICBybSAtZiBsZXgueXkuYwotICAgIGlmIFsgJCMgLW5lIDEgXTsgdGhlbgotICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKLQljYXNlICIkTEFTVEFSRyIgaW4KLQkqLmwpCi0JICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy9sJC9jLydgCi0JICAgIGlmIFsgLWYgIiRTUkNGSUxFIiBdOyB0aGVuCi0JICAgICAgICAgY3AgIiRTUkNGSUxFIiBsZXgueXkuYwotCSAgICBmaQotCSAgOzsKLQllc2FjCi0gICAgZmkKLSAgICBpZiBbICEgLWYgbGV4Lnl5LmMgXTsgdGhlbgotCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+bGV4Lnl5LmMKLSAgICBmaQotICAgIDs7Ci0KLSAgaGVscDJtYW4pCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLQkgeW91IG1vZGlmaWVkIGEgZGVwZW5kZW5jeSBvZiBhIG1hbnVhbCBwYWdlLiAgWW91IG1heSBuZWVkIHRoZQotCSBcYEhlbHAybWFuJyBwYWNrYWdlIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UKLQkgZWZmZWN0LiAgWW91IGNhbiBnZXQgXGBIZWxwMm1hbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0KLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gJ3MvLiotbyBcKFteIF0qXCkuKi9cMS9wJ2AKLSAgICBpZiB0ZXN0IC16ICIkZmlsZSI7IHRoZW4KLQlmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gJ3MvLiotLW91dHB1dD1cKFteIF0qXCkuKi9cMS9wJ2AKLSAgICBmaQotICAgIGlmIFsgLWYgIiRmaWxlIiBdOyB0aGVuCi0JdG91Y2ggJGZpbGUKLSAgICBlbHNlCi0JdGVzdCAteiAiJGZpbGUiIHx8IGV4ZWMgPiRmaWxlCi0JZWNobyAiLmFiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZSIKLQlleGl0IDEKLSAgICBmaQotICAgIDs7Ci0KLSAgbWFrZWluZm8pCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnRleGknIG9yIFxgLnRleGluZm8nIGZpbGUsIG9yIGFueSBvdGhlciBmaWxlCi0gICAgICAgICBpbmRpcmVjdGx5IGFmZmVjdGluZyB0aGUgYXNwZWN0IG9mIHRoZSBtYW51YWwuICBUaGUgc3B1cmlvdXMKLSAgICAgICAgIGNhbGwgbWlnaHQgYWxzbyBiZSB0aGUgY29uc2VxdWVuY2Ugb2YgdXNpbmcgYSBidWdneSBcYG1ha2UnIChBSVgsCi0gICAgICAgICBEVSwgSVJJWCkuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYFRleGluZm8nIHBhY2thZ2Ugb3IKLSAgICAgICAgIHRoZSBcYEdOVSBtYWtlJyBwYWNrYWdlLiAgR3JhYiBlaXRoZXIgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgIyBUaGUgZmlsZSB0byB0b3VjaCBpcyB0aGF0IHNwZWNpZmllZCB3aXRoIC1vIC4uLgotICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAncy8uKi1vIFwoW14gXSpcKS4qL1wxL3AnYAotICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgotICAgICAgIyAuLi4gb3IgaXQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgd2l0aCBAc2V0ZmlsZW5hbWUgLi4uCi0gICAgICBpbmZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKLSAgICAgIGZpbGU9YHNlZCAtbiAnL15Ac2V0ZmlsZW5hbWUvIHsgcy8uKiBcKFteIF0qXCkgKiQvXDEvOyBwOyBxOyB9JyAkaW5maWxlYAotICAgICAgIyAuLi4gb3IgaXQgaXMgZGVyaXZlZCBmcm9tIHRoZSBzb3VyY2UgbmFtZSAoZGlyL2YudGV4aSBiZWNvbWVzIGYuaW5mbykKLSAgICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkaW5maWxlIiB8IHNlZCAncywuKi8sLDtzLC5bXi5dKiQsLCdgLmluZm8KLSAgICBmaQotICAgIHRvdWNoICRmaWxlCi0gICAgOzsKLQotICB0YXIpCi0gICAgc2hpZnQKLQotICAgICMgV2UgaGF2ZSBhbHJlYWR5IHRyaWVkIHRhciBpbiB0aGUgZ2VuZXJpYyBwYXJ0LgotICAgICMgTG9vayBmb3IgZ251dGFyL2d0YXIgYmVmb3JlIGludm9jYXRpb24gdG8gYXZvaWQgdWdseSBlcnJvcgotICAgICMgbWVzc2FnZXMuCi0gICAgaWYgKGdudXRhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KLSAgICAgICBnbnV0YXIgIiRAIiAmJiBleGl0IDAKLSAgICBmaQotICAgIGlmIChndGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgotICAgICAgIGd0YXIgIiRAIiAmJiBleGl0IDAKLSAgICBmaQotICAgIGZpcnN0YXJnPSIkMSIKLSAgICBpZiBzaGlmdDsgdGhlbgotCWNhc2UgIiRmaXJzdGFyZyIgaW4KLQkqbyopCi0JICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvby8vYAotCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKLQkgICAgOzsKLQllc2FjCi0JY2FzZSAiJGZpcnN0YXJnIiBpbgotCSpoKikKLQkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9oLy9gCi0JICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAotCSAgICA7OwotCWVzYWMKLSAgICBmaQotCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBJIGNhbid0IHNlZW0gdG8gYmUgYWJsZSB0byBydW4gXGB0YXInIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KLSAgICAgICAgIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIEdOVSB0YXIgb3IgRnJlZSBwYXh1dGlscywgb3IgY2hlY2sgdGhlCi0gICAgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIKLSAgICBleGl0IDEKLSAgICA7OwotCi0gICopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGFuZCBpcyAkbXNnLgotICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKLSAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlIFxgUkVBRE1FJyBmaWxlLAotICAgICAgICAgaXQgb2Z0ZW4gdGVsbHMgeW91IGFib3V0IHRoZSBuZWVkZWQgcHJlcmVxdWlzaXRlcyBmb3IgaW5zdGFsbGluZwotICAgICAgICAgdGhpcyBwYWNrYWdlLiAgWW91IG1heSBhbHNvIHBlZWsgYXQgYW55IEdOVSBhcmNoaXZlIHNpdGUsIGluIGNhc2UKLSAgICAgICAgIHNvbWUgb3RoZXIgcGFja2FnZSB3b3VsZCBjb250YWluIHRoaXMgbWlzc2luZyBcYCQxJyBwcm9ncmFtLiIKLSAgICBleGl0IDEKLSAgICA7OwotZXNhYwotCi1leGl0IDAKLQotIyBMb2NhbCB2YXJpYWJsZXM6Ci0jIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgotIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC1lbmQ6ICIkIgotIyBFbmQ6CmRpZmYgLS1naXQgYS9tb2R1bGUvTWFrZWZpbGUuaW4gYi9tb2R1bGUvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MzAyNTkuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotT1BST0ZJTEVfRElSPUBPUFJPRklMRV9ESVJACi1WRVJTSU9OPUBWRVJTSU9OQAotS1ZFUlM9QEtWRVJTQAotS1NSQz1AS1NSQ0AKLQotRVhUUkFfQ0ZMQUdTPUBFWFRSQV9DRkxBR1NfTU9EVUxFQCAtRF9fTk9fVkVSU0lPTl9fIFwKLQktSSQoT1BST0ZJTEVfRElSKS9tb2R1bGUvQE9QUk9GSUxFX01PRFVMRV9BUkNIQCAtSSQoT1BST0ZJTEVfRElSKSAtSSQoT1BST0ZJTEVfRElSKS9saWJ1dGlsIC1JJChPUFJPRklMRV9ESVIpL2xpYm9wCi0KLSMgTkI6IGRvIG5vdCBhZGQgYSBmaWxlIGhlcmUgd2l0aG91dCBhZGRpbmcgaXQgdG8gRVhUUkFfRElTVCBpbiAuLi9NYWtlZmlsZS5hbQotCi1PX1RBUkdFVCA6PSBvcHJvZmlsZS1tb2R1bGUubwotIAotb2JqLXkgOj0gY29tcGF0Lm8gb3BfaW5pdC5vIG9wX3V0aWwubyBvcF9kbmFtZS5vIG9wcm9maWxlLm8gQE9QUk9GSUxFX01PRFVMRV9BUkNIQC9hcmNoLm8gJChPUFJPRklMRV9ESVIpL2xpYm9wL2xpYm9wLmEKLW9iai1tIDo9ICQoT19UQVJHRVQpCi1PX09CSlMgOj0gJChvYmoteSkKLU1fT0JKUyA6PSAkKE9fVEFSR0VUKQotCi1UT1BESVIgOj0gJChLU1JDKQotQ09ORklHX1NIRUxMIDo9IFRPUERJUj0kKEtTUkMpIC9iaW4vYmFzaAotaW5jbHVkZSAkKEtTUkMpL1J1bGVzLm1ha2UKLQotIyBGSVhNRTogZGVwcwpkaWZmIC0tZ2l0IGEvbW9kdWxlL2NvbXBhdC5jIGIvbW9kdWxlL2NvbXBhdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGMxN2ZiLi4wMDAwMDAwCi0tLSBhL21vZHVsZS9jb21wYXQuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKgotICogQGZpbGUgY29tcGF0LmMKLSAqIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSB1cC10by1kYXRlIHdpdGggdGhlIGxhc3QgbGludXggdmVyc2lvbiBhbmQKLSAqIHByb3ZpZGUgd29yay1hcm91bmRzIGZvciBtaXNzaW5nIGZlYXR1cmVzIGluIHByZXZpb3VzIGtlcm5lbCB2ZXJzaW9uCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgIm9wX2RjYWNoZS5oIgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotCi0jaWZkZWYgTkVFRF8yXzJfREVOVFJJRVMKLQotLyogbm90ZSAtIGFzc3VtZXMgeW91IG9ubHkgdGVzdCBmb3IgTlVMTCwgYW5kIG5vdAotICogYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgcmV0dXJuIHZhbHVlICovCi12b2lkICogY29tcGF0X3JlcXVlc3RfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbiwgY2hhciBjb25zdCAqIG5hbWUpCi17Ci0JaWYgKGNoZWNrX3JlZ2lvbihzdGFydCwgbikgIT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0JcmVxdWVzdF9yZWdpb24oc3RhcnQsIG4sIG5hbWUpOwotICAgICAgICByZXR1cm4gKHZvaWQgKikxOwotfQotCi1pbnQgd2luZF9kZW50cmllc18yXzIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICogcm9vdCA9IGN1cnJlbnQtPmZzLT5yb290OwotCi0JaWYgKGRlbnRyeS0+ZF9wYXJlbnQgIT0gZGVudHJ5ICYmIGxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9oYXNoKSkKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKDs7KSB7Ci0JCXN0cnVjdCBkZW50cnkgKiBwYXJlbnQ7Ci0KLQkJaWYgKGRlbnRyeSA9PSByb290KQotCQkJYnJlYWs7Ci0KLQkJZGVudHJ5ID0gZGVudHJ5LT5kX2NvdmVyczsKLQkJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQotCQlpZiAoZGVudHJ5ID09IHBhcmVudCkKLQkJCWJyZWFrOwotCi0JCXB1c2hfZG5hbWUoJmRlbnRyeS0+ZF9uYW1lKTsKLQotCQlkZW50cnkgPSBwYXJlbnQ7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qIGNhbGxlZCB3aXRoIG5vdGVfbG9jayBoZWxkICovCi11aW50IGRvX3BhdGhfaGFzaF8yXzIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKLXsKLQkvKiBCS0wgaXMgYWxyZWFkeSB0YWtlbiAqLwotCi0JcmV0dXJuIGRvX2hhc2goZGVudHJ5LCAwLCAwLCAwKTsKLX0KLQotI2VuZGlmIC8qIE5FRURfMl8yX0RFTlRSSUVTICovCmRpZmYgLS1naXQgYS9tb2R1bGUvY29tcGF0LmggYi9tb2R1bGUvY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZTI3MjIuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL2NvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjb21wYXQuaAotICogVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIHVwLXRvLWRhdGUgd2l0aCB0aGUgbGFzdCBsaW51eCB2ZXJzaW9uIGFuZAotICogcHJvdmlkZSB3b3JrLWFyb3VuZHMgZm9yIG1pc3NpbmcgZmVhdHVyZXMgaW4gcHJldmlvdXMga2VybmVsIHZlcnNpb24KLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0KLSNpZm5kZWYgQ09NUEFUX0gKLSNkZWZpbmUgQ09NUEFUX0gKLQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpZmRlZiBIQVZFX0xJTlVYX1NQSU5MT0NLX0hFQURFUgotLyogRklYTUUgZG8gd2UgbmVlZCB0aGlzIHN0aWxsID8gKi8KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2VuZGlmCi0KLSNkZWZpbmUgVl9CRUZPUkUoYSxiLGMpIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTihhLGIsYykpCi0jZGVmaW5lIFZfQVRfTEVBU1QoYSxiLGMpIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oYSxiLGMpKQotCi0jaWYgVl9CRUZPUkUoMiw0LDApCi0JI2luY2x1ZGUgImNvbXBhdDIyLmgiCi0jZWxzZQotCSNpbmNsdWRlICJjb21wYXQyNC5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJvcF9jYWNoZS5oIgotCi0vKiBUaGluZ3MgdGhhdCBjYW5ub3QgcmVseSBvbiBhIHBhcnRpY3VsYXIgbGludXggdmVyc2lvbiBvciBhcmUgbmVlZGVkIGJldHdlZW4KLSAqIG1ham9yIHJlbGVhc2UgKi8KLQotI2lmbmRlZiBCVUdfT04KLSNkZWZpbmUgQlVHX09OKHApIGRvIHsgaWYgKHApIEJVRygpOyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZm5kZWYgTU9EVUxFX0xJQ0VOU0UKLSNkZWZpbmUgTU9EVUxFX0xJQ0VOU0UoeCkKLSNlbmRpZgotCi0vKiBDb21waWxlciB3b3JrLWFyb3VuZCAqLwotCi0vKiBicmFuY2ggcHJlZGljdGlvbiAqLwotI2lmbmRlZiBsaWtlbHkKLQkjaWZkZWYgRVhQRUNUX09LCi0JCSNkZWZpbmUgbGlrZWx5KGEpIF9fYnVpbHRpbl9leHBlY3QoKGEpLCAxKQotCSNlbHNlCi0JCSNkZWZpbmUgbGlrZWx5KGEpIChhKQotCSNlbmRpZgotI2VuZGlmCi0jaWZuZGVmIHVubGlrZWx5Ci0JI2lmZGVmIEVYUEVDVF9PSwotCQkjZGVmaW5lIHVubGlrZWx5KGEpIF9fYnVpbHRpbl9leHBlY3QoKGEpLCAwKQotCSNlbHNlCi0JCSNkZWZpbmUgdW5saWtlbHkoYSkgKGEpCi0JI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIFZNQUxMT0NfMzIoc3opIHZtYWxsb2NfMzIoc3opCi0jZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCi0jZGVmaW5lIFZNQUxMT0NfMzIoc3opIHZtYWxsb2Moc3opCi0jZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwotCi0jZW5kaWYgLyogQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL21vZHVsZS9jb21wYXQyMi5oIGIvbW9kdWxlL2NvbXBhdDIyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYzRmNWYuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL2NvbXBhdDIyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjb21wYXQyMi5oCi0gKiBDb21wYXRhYmlsaXR5IGZ1bmN0aW9ucyBmb3IgMi4yIGtlcm5lbHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaWZuZGVmIENPTVBBVDIyX0gKLSNkZWZpbmUgQ09NUEFUMjJfSAotCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLQotI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpCV9fY2xpKCkKLSNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpCV9fc3RpKCkKLSNkZWZpbmUgcHRlX3BhZ2VfYWRkcmVzcyhhKSBwdGVfcGFnZShhKQotCi0jZGVmaW5lIEdFVF9WTV9PRkZTRVQodikgKCh2KS0+dm1fb2Zmc2V0KQotI2RlZmluZSBNT0RVTEVfTElDRU5TRShsKQotI2RlZmluZSBORUVEXzJfMl9ERU5UUklFUwotI2RlZmluZSBJTkNfVVNFX0NPVU5UX01BWUJFIE1PRF9JTkNfVVNFX0NPVU5UCi0jZGVmaW5lIERFQ19VU0VfQ09VTlRfTUFZQkUgTU9EX0RFQ19VU0VfQ09VTlQKLSNkZWZpbmUgbG9ja19leGVjdmUgbG9ja19rZXJuZWwKLSNkZWZpbmUgdW5sb2NrX2V4ZWN2ZSB1bmxvY2tfa2VybmVsCi0KLS8qIEJLTC1wcm90ZWN0ZWQgb24gMi4yICovCi0jZGVmaW5lIGxvY2tfbW1hcChtbSkgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIHVubG9ja19tbWFwKG1tKSBkbyB7fSB3aGlsZSAoMCkKLQotLyogb24gMi4yIHdlIHVzZSBwaWQgYXMgdGdpZCwgdGhyZWFkIHNlcGVyYXRpb24gaXMgcG9zc2libGUgYnV0Ci0gKiBlYWNoIHRocmVhZCBpcyBpbiBpdHMgb3duIHRocmVhZCBncm91cCAqLwotc3RhdGljIGlubGluZSBwaWRfdCBvcF9nZXRfdGdpZCh2b2lkKQotewotCXJldHVybiBjdXJyZW50LT5waWQ7Ci19Ci0KLS8qIHRoZSB3YWtlX3VwIHBhdGggZG9lc24ndCBkaXNhYmxlIGludGVycnVwdHMgZm9yIHdhaXQgcXVldWUKLSAqIG1hbmlwdWxhdGlvbi4gU28gbGV0J3MgZm9yY2UgaXQgdG8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBvcHJvZl93YWtlX3VwKHN0cnVjdCB3YWl0X3F1ZXVlICoqcSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCWNsaSgpOwotCXdha2VfdXAocSk7Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7Ci19Ci0KLWV4dGVybiBpbnQgd2luZF9kZW50cmllc18yXzIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLWV4dGVybiB1aW50IGRvX3BhdGhfaGFzaF8yXzIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLSNkZWZpbmUgd2luZF9kZW50cmllcyhkLCB2LCByLCBtKSB3aW5kX2RlbnRyaWVzXzJfMihkKQotI2RlZmluZSBoYXNoX3BhdGgoZikgZG9fcGF0aF9oYXNoXzJfMigoZiktPmZfZGVudHJ5KQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9ja19vdXRfbW1hcCh2b2lkKQotewotCWxvY2tfa2VybmVsKCk7Ci0JZG93bigmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vdXRfbW1hcCh2b2lkKQotewotCXVubG9ja19rZXJuZWwoKTsKLQl1cCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLX0KLQotLyogZGlmZmVyZW50IHJlcXVlc3RfcmVnaW9uICovCi0jZGVmaW5lIHJlcXVlc3RfcmVnaW9uX2NoZWNrIGNvbXBhdF9yZXF1ZXN0X3JlZ2lvbgotdm9pZCAqY29tcGF0X3JlcXVlc3RfcmVnaW9uICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG4sIGNoYXIgY29uc3QgKiBuYW1lKTsKLQotI2RlZmluZSBfX2V4aXQKLQotI2RlZmluZSB2aXJ0X3RvX3BhZ2UodmEpIE1BUF9OUih2YSkKLQotLyogMi4yIGhhcyBubyBjcHVfbnVtYmVyX21hcCBvbiBVUCAqLwotI2lmZGVmIENPTkZJR19TTVAKLQkjZGVmaW5lIG9wX2NwdV9pZCgpIGNwdV9udW1iZXJfbWFwW3NtcF9wcm9jZXNzb3JfaWQoKV0KLSNlbHNlCi0JI2RlZmluZSBvcF9jcHVfaWQoKSBzbXBfcHJvY2Vzc29yX2lkKCkKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLS8qIHByb3ZpZGUgYSB3b3JraW5nIHNtcF9jYWxsX2Z1bmN0aW9uICovCi0jaWYgIWRlZmluZWQoQ09ORklHX1NNUCkKLQotCSN1bmRlZiBzbXBfY2FsbF9mdW5jdGlvbgotCXN0YXRpYyBpbnQgaW5saW5lIHNtcF9jYWxsX2Z1bmN0aW9uICh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAotCQkJCQkgICAgIGludCByZXRyeSwgaW50IHdhaXQpCi0JewotCQlyZXR1cm4gMDsKLQl9Ci0KLSNlbmRpZiAvKiAhQ09ORklHX1NNUCAqLwotCi0jaWYgVl9CRUZPUkUoMiwyLDE4KQotCi0JLyogMi4yLjE4IGludHJvZHVjZWQgbW9kdWxlX2luaXQgKi8KLQkvKiBOb3Qgc3VyZSB3aGF0IHZlcnNpb24gYWxpYXNlcyB3ZXJlIGludHJvZHVjZWQgaW4sIGJ1dCBjZXJ0YWlubHkgaW4gMi45MS42Ni4gICovCi0JI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5MSkKLQkJI2RlZmluZSBtb2R1bGVfaW5pdCh4KQlpbnQgaW5pdF9tb2R1bGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoI3gpKSk7Ci0JCSNkZWZpbmUgbW9kdWxlX2V4aXQoeCkJdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbGlhcygjeCkpKTsKLQkjZWxzZQotCQkjZGVmaW5lIG1vZHVsZV9pbml0KHgpCWludCBpbml0X21vZHVsZSh2b2lkKSB7IHJldHVybiB4KCk7IH0KLQkJI2RlZmluZSBtb2R1bGVfZXhpdCh4KQl2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpIHsgeCgpOyB9Ci0JI2VuZGlmCi0KLQkvKiAyLjIuMTggaW50cm9kdWNlZCB2bWFsbG9jXzMyICovCi0JI2RlZmluZSB2bWFsbG9jXzMyIHZtYWxsb2MKLQotCS8qIDIuMi4xOCBhZGQgZG91YmxlZCBsaW5rZWQgbGlzdCB3YWl0X3F1ZXVlIGFuZCBtdXRleCAqLwotCSNkZWZpbmUgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocSkgc3RydWN0IHdhaXRfcXVldWUgKnEgPSBOVUxMCi0JI2RlZmluZSBERUNMQVJFX01VVEVYKGZvbykJc3RydWN0IHNlbWFwaG9yZSBmb28gPSBNVVRFWAotCi0JLyogMi4yLjE4IGFkZCBUSElTX01PRFVMRSAqLwotCSNkZWZpbmUgVEhJU19NT0RVTEUgKCZfX3RoaXNfbW9kdWxlKQotCi0JLyogMi4yLjE4IGFkZCBCVUcoKSBGSVhNRTogdGhpcyBpcyBhcmNoIGRlcGVuZGFudCB3b3VsZCBtdXN0IHVzZQotCSAqICooY2hhciAqKTAgPSAwIGluc3RlYWQgPyAqLwotCSNkZWZpbmUgQlVHKCkgX19hc21fXyBfX3ZvbGF0aWxlX18oInVkMlxuIik7Ci0KLSNlbmRpZiAvKiBWX0JFRk9SRSgyLDIsMTgpICovCi0KLS8qIDIuMi4xOCBpbnRyb2R1Y2VkIHRoZSBydGMgbG9jayAqLwotI2lmZGVmIFJUQ19MT0NLCi0JI2RlZmluZSBsb2NrX3J0YyhmKSBzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGYpCi0JI2RlZmluZSB1bmxvY2tfcnRjKGYpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmKQotI2Vsc2UKLQkjZGVmaW5lIGxvY2tfcnRjKGYpIGRvIHsgc2F2ZV9mbGFncyhmKTsgY2xpKCk7IH0gd2hpbGUgKDApCi0JI2RlZmluZSB1bmxvY2tfcnRjKGYpIHJlc3RvcmVfZmxhZ3MoZikKLSNlbmRpZiAvKiBSVENfTE9DSyAqLwotCi0jaWYgVl9BVF9MRUFTVCgyLDIsMjApCi0JI2RlZmluZSBQVFJBQ0VfT0ZGKHQpICgodCktPnB0cmFjZSAmPSB+UFRfRFRSQUNFKQotI2Vsc2UKLQkjZGVmaW5lIFBUUkFDRV9PRkYodCkgKCh0KS0+ZmxhZ3MgJj0gflBGX0RUUkFDRSkKLSNlbmRpZgotCi0vKiAyLjIuMjEgaW50cm9kdWNlZCBjcHVpZF9lZHggKi8KLSNpZiBWX0JFRk9SRSgyLDIsMjEpCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKQotewotCXVuc2lnbmVkIGludCBlYXgsIGVkeDsKLQotCV9fYXNtX18oImNwdWlkIgotCQk6ICI9YSIgKGVheCksICI9ZCIgKGVkeCkKLQkJOiAiMCIgKG9wKQotCQk6ICJieCIsICJjeCIpOwotCXJldHVybiBlZHg7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIENPTVBBVDIyX0ggKi8KZGlmZiAtLWdpdCBhL21vZHVsZS9jb21wYXQyNC5oIGIvbW9kdWxlL2NvbXBhdDI0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMjg0ZjEuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL2NvbXBhdDI0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioKLSAqIEBmaWxlIGNvbXBhdDI0LmgKLSAqIENvbXBhdGFiaWxpdHkgZnVuY3Rpb25zIGZvciAyLjQga2VybmVscwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpZm5kZWYgQ09NUEFUMjRfSAotI2RlZmluZSBDT01QQVQyNF9ICi0KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0KLXN0YXRpYyBpbmxpbmUgcGlkX3Qgb3BfZ2V0X3RnaWQodm9pZCkKLXsKLQlyZXR1cm4gY3VycmVudC0+dGdpZDsKLX0KLQotI2RlZmluZSBwdGVfcGFnZV9hZGRyZXNzKGEpIHBhZ2VfYWRkcmVzcyhwdGVfcGFnZShhKSkKLSNkZWZpbmUgb3Byb2Zfd2FrZV91cCh3KSB3YWtlX3VwKHcpCi0jZGVmaW5lIGxvY2tfcnRjKGYpIHNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZikKLSNkZWZpbmUgdW5sb2NrX3J0YyhmKSBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZikKLSNkZWZpbmUgd2luZF9kZW50cmllcyhkLCB2LCByLCBtKSB3aW5kX2RlbnRyaWVzXzJfNChkLCB2LCByLCBtKQotZXh0ZXJuIHVpbnQgZG9fcGF0aF9oYXNoXzJfNChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKiB2ZnNtbnQpOwotI2RlZmluZSBoYXNoX3BhdGgoZikgZG9fcGF0aF9oYXNoXzJfNCgoZiktPmZfZGVudHJ5LCAoZiktPmZfdmZzbW50KQotI2RlZmluZSByZXF1ZXN0X3JlZ2lvbl9jaGVjayByZXF1ZXN0X3JlZ2lvbgotI2RlZmluZSBvcF9jcHVfaWQoKSBjcHVfbnVtYmVyX21hcChzbXBfcHJvY2Vzc29yX2lkKCkpCi0jZGVmaW5lIEdFVF9WTV9PRkZTRVQodikgKCh2KS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgUFRSQUNFX09GRih0KSAoKHQpLT5wdHJhY2UgJj0gflBUX0RUUkFDRSkKLSNkZWZpbmUgbG9ja19leGVjdmUoKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHVubG9ja19leGVjdmUoKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGxvY2tfb3V0X21tYXAoKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHVubG9ja19vdXRfbW1hcCgpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgSEFWRV9NTUFQMgotI2RlZmluZSBIQVZFX0ZJTEVfT1BFUkFUSU9OU19PV05FUgotCi0vKiAtPm93bmVyIGZpZWxkIGluIDIuNCAqLwotI2RlZmluZSBJTkNfVVNFX0NPVU5UX01BWUJFCi0jZGVmaW5lIERFQ19VU0VfQ09VTlRfTUFZQkUKLQotLyogbm8gZ2xvYmFsIHdhaXRxdWV1ZSBzcGlubG9jayBpbiAyLjQgKi8KLSNkZWZpbmUgd3FfaXNfbG9ja2FibGUoKSAoMSkKLQotLyogMi40LjMgaW50cm9kdWNlZCBydyBtbWFwIHNlbWFwaG9yZSAgKi8KLSNpZiBWX0FUX0xFQVNUKDIsNCwzKQotCSNkZWZpbmUgbG9ja19tbWFwKG1tKSBkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSkKLQkjZGVmaW5lIHVubG9ja19tbWFwKG1tKSB1cF9yZWFkKCZtbS0+bW1hcF9zZW0pCi0jZWxzZQotCSNkZWZpbmUgbG9ja19tbWFwKG1tKSBkb3duKCZtbS0+bW1hcF9zZW0pCi0JI2RlZmluZSB1bmxvY2tfbW1hcChtbSkgdXAoJm1tLT5tbWFwX3NlbSkKLSNlbmRpZgotCi0vKiAyLjQuMjYgZXhwb3J0ZWQgdGhlIG5lZWRlZCBzdHVmZiBmb3IgSFQgc3VwcG9ydCAqLwotI2lmIFZfQVRfTEVBU1QoMiw0LDI2KSAmJiBkZWZpbmVkKENPTkZJR19TTVApCi0jZGVmaW5lIEhUX1NVUFBPUlQKLSNlbmRpZgotCi0jZW5kaWYgLyogQ09NUEFUMjRfSCAqLwpkaWZmIC0tZ2l0IGEvbW9kdWxlL2lhNjQvSUE2NGVudHJ5LmggYi9tb2R1bGUvaWE2NC9JQTY0ZW50cnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JjYTkwYS4uMDAwMDAwMAotLS0gYS9tb2R1bGUvaWE2NC9JQTY0ZW50cnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKgotICogQGZpbGUgSUE2NGVudHJ5LmgKLSAqCi0gKiBAcmVtYXJrIENvcHkgb2Ygc291cmNlIGNvZGUgZnJvbSBsaW51eCBrZXJuZWwKLSAqIEByZW1hcmsgbGludXgvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5oCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotLyoKLSAqIFByZXNlcnZlZCByZWdpc3RlcnMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gY29kZSBpbiBpdnQuUyBhbmQgZW50cnkuUy4gIEJlCi0gKiBjYXJlZnVsIG5vdCB0byBzdGVwIG9uIHRoZXNlIQotICovCi0KLSNkZWZpbmUgcEtlcm4JCXAyIC8qKjwgd2lsbCBsZWF2ZV9rZXJuZWwgcmV0dXJuIHRvIGtlcm5lbC1tb2RlPyAqLwotI2RlZmluZSBwVXNlcgkJcDMgLyoqPCB3aWxsIGxlYXZlX2tlcm5lbCByZXR1cm4gdG8gdXNlci1tb2RlPyAqLwotI2RlZmluZSBwU3lzCQlwNCAvKio8IGFyZSB3ZSBwcm9jZXNzaW5nIGEgKHN5bmNocm9ub3VzKSBzeXN0ZW0gY2FsbD8gKi8KLSNkZWZpbmUgcE5vblN5cwkJcDUgLyoqPCBjb21wbGVtZW50IG9mIHBTeXMgKi8KLQotI2RlZmluZSBQVChmKQkJKElBNjRfUFRfUkVHU18jI2YjI19PRkZTRVQpCi0jZGVmaW5lIFNXKGYpCQkoSUE2NF9TV0lUQ0hfU1RBQ0tfIyNmIyNfT0ZGU0VUKQotCi0jZGVmaW5lIFBUX1JFR1NfU0FWRVMob2ZmKQkJCVwKLQkudW53YWJpIEBzdnI0LCAnaSc7CQkJXAotCS5mZnJhbWUgSUE2NF9QVF9SRUdTX1NJWkUrMTYrKG9mZik7CVwKLQkuc3BpbGxzcCBycCwgUFQoQ1JfSUlQKSsxNisob2ZmKTsJXAotCS5zcGlsbHNwIGFyLnBmcywgUFQoQ1JfSUZTKSsxNisob2ZmKTsJXAotCS5zcGlsbHNwIGFyLnVuYXQsIFBUKEFSX1VOQVQpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgYXIuZnBzciwgUFQoQVJfRlBTUikrMTYrKG9mZik7CVwKLQkuc3BpbGxzcCBwciwgUFQoUFIpKzE2KyhvZmYpOwotCi0jZGVmaW5lIFBUX1JFR1NfVU5XSU5EX0lORk8ob2ZmKQkJXAotCS5wcm9sb2d1ZTsJCQkJXAotCVBUX1JFR1NfU0FWRVMob2ZmKTsJCQlcCi0JLmJvZHkKLQotI2RlZmluZSBTV0lUQ0hfU1RBQ0tfU0FWRVMob2ZmKQkJCQkJCVwKLQkuc2F2ZXNwIGFyLnVuYXQsU1coQ0FMTEVSX1VOQVQpKzE2KyhvZmYpOwkJCVwKLQkuc2F2ZXNwIGFyLmZwc3IsU1coQVJfRlBTUikrMTYrKG9mZik7CQkJCVwKLQkuc3BpbGxzcCBmMixTVyhGMikrMTYrKG9mZik7IC5zcGlsbHNwIGYzLFNXKEYzKSsxNisob2ZmKTsJXAotCS5zcGlsbHNwIGY0LFNXKEY0KSsxNisob2ZmKTsgLnNwaWxsc3AgZjUsU1coRjUpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgZjE2LFNXKEYxNikrMTYrKG9mZik7IC5zcGlsbHNwIGYxNyxTVyhGMTcpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgZjE4LFNXKEYxOCkrMTYrKG9mZik7IC5zcGlsbHNwIGYxOSxTVyhGMTkpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgZjIwLFNXKEYyMCkrMTYrKG9mZik7IC5zcGlsbHNwIGYyMSxTVyhGMjEpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgZjIyLFNXKEYyMikrMTYrKG9mZik7IC5zcGlsbHNwIGYyMyxTVyhGMjMpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgZjI0LFNXKEYyNCkrMTYrKG9mZik7IC5zcGlsbHNwIGYyNSxTVyhGMjUpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgZjI2LFNXKEYyNikrMTYrKG9mZik7IC5zcGlsbHNwIGYyNyxTVyhGMjcpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgZjI4LFNXKEYyOCkrMTYrKG9mZik7IC5zcGlsbHNwIGYyOSxTVyhGMjkpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgZjMwLFNXKEYzMCkrMTYrKG9mZik7IC5zcGlsbHNwIGYzMSxTVyhGMzEpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgcjQsU1coUjQpKzE2KyhvZmYpOyAuc3BpbGxzcCByNSxTVyhSNSkrMTYrKG9mZik7CVwKLQkuc3BpbGxzcCByNixTVyhSNikrMTYrKG9mZik7IC5zcGlsbHNwIHI3LFNXKFI3KSsxNisob2ZmKTsJXAotCS5zcGlsbHNwIGIwLFNXKEIwKSsxNisob2ZmKTsgLnNwaWxsc3AgYjEsU1coQjEpKzE2KyhvZmYpOwlcCi0JLnNwaWxsc3AgYjIsU1coQjIpKzE2KyhvZmYpOyAuc3BpbGxzcCBiMyxTVyhCMykrMTYrKG9mZik7CVwKLQkuc3BpbGxzcCBiNCxTVyhCNCkrMTYrKG9mZik7IC5zcGlsbHNwIGI1LFNXKEI1KSsxNisob2ZmKTsJXAotCS5zcGlsbHNwIGFyLnBmcyxTVyhBUl9QRlMpKzE2KyhvZmYpOyAuc3BpbGxzcCBhci5sYyxTVyhBUl9MQykrMTYrKG9mZik7CVwKLQkuc3BpbGxzcCBAcHJpdW5hdCxTVyhBUl9VTkFUKSsxNisob2ZmKTsJCQkJXAotCS5zcGlsbHNwIGFyLnJuYXQsU1coQVJfUk5BVCkrMTYrKG9mZik7CQkJCVwKLQkuc3BpbGxzcCBhci5ic3BzdG9yZSxTVyhBUl9CU1BTVE9SRSkrMTYrKG9mZik7CQkJXAotCS5zcGlsbHNwIHByLFNXKFBSKSsxNisob2ZmKSkKLQotI2RlZmluZSBET19TQVZFX1NXSVRDSF9TVEFDSwkJCVwKLQltb3ZsIHIyOD0xZjsJCQkJXAotCTs7CQkJCQlcCi0JLmZmcmFtZSBJQTY0X1NXSVRDSF9TVEFDS19TSVpFOwkJXAotCWFkZHMgc3A9LUlBNjRfU1dJVENIX1NUQUNLX1NJWkUsc3A7CVwKLQltb3YucmV0LnNwdGsgYjc9cjI4LDFmOwkJCVwKLQlTV0lUQ0hfU1RBQ0tfU0FWRVMoMCk7CQkJXAotCWJyLmNvbmQuc3B0ay5tYW55IHNhdmVfc3dpdGNoX3N0YWNrOwlcCi0xOgotCi0jZGVmaW5lIERPX0xPQURfU1dJVENIX1NUQUNLCQkJXAotCW1vdmwgcjI4PTFmOwkJCQlcCi0JOzsJCQkJCVwKLQlpbnZhbGE7CQkJCQlcCi0JbW92LnJldC5zcHRrIGI3PXIyOCwxZjsJCQlcCi0JYnIuY29uZC5zcHRrLm1hbnkgbG9hZF9zd2l0Y2hfc3RhY2s7CVwKLTE6CS5yZXN0b3JlIHNwOwkJCQlcCi0JYWRkcyBzcD1JQTY0X1NXSVRDSF9TVEFDS19TSVpFLHNwCmRpZmYgLS1naXQgYS9tb2R1bGUvaWE2NC9JQTY0bWluc3RhdGUuaCBiL21vZHVsZS9pYTY0L0lBNjRtaW5zdGF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGI5ZmRkLi4wMDAwMDAwCi0tLSBhL21vZHVsZS9pYTY0L0lBNjRtaW5zdGF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjgwICswLDAgQEAKLS8qKgotICogQGZpbGUgSUE2NG1pbnN0YXRlLmgKLSAqCi0gKiBAcmVtYXJrIENvcHkgb2Ygc291cmNlIGNvZGUgZnJvbSBsaW51eCBrZXJuZWwKLSAqIEByZW1hcmsgbGludXgvYXJjaC9pYTY0L2tlcm5lbC9taW5zdGF0ZS5oCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2luY2x1ZGUgIklBNjRlbnRyeS5oIgotCi0vKgotICogQSBjb3VwbGUgb2YgY29udmVuaWVuY2UgbWFjcm9zIHRoYXQgbWFrZSB3cml0aW5nIGFuZCByZWFkaW5nCi0gKiBTQVZFX01JTiBhbmQgU0FWRV9SRVNUIGVhc2llci4KLSAqLwotI2RlZmluZSByQVJQUgkJcjMxCi0jZGVmaW5lIHJDUklGUwkJcjMwCi0jZGVmaW5lIHJDUklQU1IJCXIyOQotI2RlZmluZSByQ1JJSVAJCXIyOAotI2RlZmluZSByQVJSU0MJCXIyNwotI2RlZmluZSByQVJQRlMJCXIyNgotI2RlZmluZSByQVJVTkFUCQlyMjUKLSNkZWZpbmUgckFSUk5BVAkJcjI0Ci0jZGVmaW5lIHJBUkJTUFNUT1JFCXIyMwotI2RlZmluZSByS1JCUwkJcjIyCi0jZGVmaW5lIHJCNgkJcjIxCi0jZGVmaW5lIHJSMQkJcjIwCi0KLS8qCi0gKiBIZXJlIHN0YXJ0IHRoZSBzb3VyY2UgZGVwZW5kZW50IG1hY3Jvcy4KLSAqLwotCi0vKgotICogRm9yIGl2dC5zIHdlIHdhbnQgdG8gYWNjZXNzIHRoZSBzdGFjayB2aXJ0dWFsbHkgc28gd2UgZG9udCBoYXZlIAotICogdG8gZGlzYWJsZSB0cmFuc2xhdGlvbiBvbiBpbnRlcnJ1cHRzLgotICovCi0jZGVmaW5lIE1JTlNUQVRFX1NUQVJUX1NBVkVfTUlOX1ZJUlQJCQkJCVwKLQkvKiByMSA9IGN1cnJlbnQgKHZpcnR1YWwpICovCQkJCQlcCi0JZGVwIHIxPS0xLHIxLDYxLDM7CQkJCQkJXAotCS8qIHNldCBlbmZvcmNlZCBsYXp5IG1vZGUsIHBsIDAsIGxpdHRsZS1lbmRpYW4sIGxvYWRycz0wICovCVwKLShwVXNlcikJbW92IGFyLnJzYz0wOwkJCQkJCQlcCi0JOzsJCQkJCQkJCVwKLQkvKiBjb21wdXRlIGJhc2Ugb2YgUkJTICovCQkJCQlcCi0ocFVzZXIpCWFkZGwgcktSQlM9SUE2NF9SQlNfT0ZGU0VULHIxOwkJCQkJXAotKHBVc2VyKQltb3YgckFSUk5BVD1hci5ybmF0OwkJCQkJCVwKLQkvKiBnZXQgc3AgICovCQkJCQkJCVwKLShwS2VybikgbW92IHIxPXNwOwkJCQkJCQlcCi0JOzsJCQkJCQkJCVwKLQkvKiBjb21wdXRlIGJhc2Ugb2YgbWVtb3J5IHN0YWNrICovCQkJCVwKLShwVXNlcikJYWRkbCByMT1JQTY0X1NUS19PRkZTRVQtSUE2NF9QVF9SRUdTX1NJWkUscjE7CQkJXAotCS8qIHNhdmUgYXIuYnNwc3RvcmUgKi8JCQkJCQlcCi0ocFVzZXIpCW1vdiByQVJCU1BTVE9SRT1hci5ic3BzdG9yZTsJCQkJCVwKLQk7OwkJCQkJCQkJXAotCS8qIGlmIGluIGtlcm5lbCBtb2RlLCB1c2Ugc3AgKHIxMikgKi8JCQkJXAotKHBLZXJuKSBhZGRsIHIxPS1JQTY0X1BUX1JFR1NfU0laRSxyMTsJCQkJCVwKLQkvKiBzd2l0Y2ggdG8ga2VybmVsIFJCUyAqLwkJCQkJXAotKHBVc2VyKQltb3YgYXIuYnNwc3RvcmU9cktSQlM7CQkJCQkJXAotCTs7CQkJCQkJCQlcCi0ocFVzZXIpCW1vdiByMTg9YXIuYnNwOwkJCQkJCQlcCi0JLyogc2V0IGVhZ2VyIG1vZGUsIHBsIDAsIGxpdHRsZS1lbmRpYW4sIGxvYWRycz0wICovCQlcCi0ocFVzZXIpCW1vdiBhci5yc2M9MHgzOwotCi0jZGVmaW5lIE1JTlNUQVRFX0VORF9TQVZFX01JTl9WSVJUCQkJCQlcCi0JLyogbWFrZSBgY3VycmVudCcgYSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzICovCQkJXAotCW9yIHIxMz1yMTMscjE0OwkJCQkJCQlcCi0JLyogc3dpdGNoIGJhY2sgdG8gYmFuayAxIChtdXN0IGJlIGxhc3QgaW4gaW5zbiBncm91cCkgKi8JXAotCWJzdy4xOwkJCQkJCQkJXAotCTs7Ci0KLS8qCi0gKiBGb3IgbWNhX2FzbS5TIHdlIHdhbnQgdG8gYWNjZXNzIHRoZSBzdGFjayBwaHlzaWNhbGx5IHNpbmNlIHRoZSBzdGF0ZQotICogaXMgc2F2ZWQgYmVmb3JlIHdlIGdvIHZpcnR1YWwgYW5kIGRvbnQgd2FudCB0byBkZXN0cm95IHRoZSBpaXAgb3IgaXBzci4KLSAqLwotI2RlZmluZSBNSU5TVEFURV9TVEFSVF9TQVZFX01JTl9QSFlTCQkJCQlcCi0ocEtlcm4pIG1vdmwgc3A9aWE2NF9pbml0X3N0YWNrK0lBNjRfU1RLX09GRlNFVC1JQTY0X1BUX1JFR1NfU0laRTsJXAotCS8qIHNldCBlbmZvcmNlZCBsYXp5IG1vZGUsIHBsIDAsIGxpdHRsZS1lbmRpYW4sIGxvYWRycz0wICovCVwKLShwVXNlcikJbW92IGFyLnJzYz0wOwkJCQkJCQlcCi0JLyogY29tcHV0ZSBiYXNlIG9mIHJlZ2lzdGVyIGJhY2tpbmcgc3RvcmUgKi8JCQlcCi0ocFVzZXIpCWFkZGwgcktSQlM9SUE2NF9SQlNfT0ZGU0VULHIxOwkJCQkJXAotCTs7CQkJCQkJCQlcCi0ocFVzZXIpCW1vdiByQVJSTkFUPWFyLnJuYXQ7CQkJCQkJXAotCS8qIGNvbXB1dGUgcGh5c2ljYWwgYWRkciBvZiBzcAkqLwkJCQlcCi0ocEtlcm4pIGRlcCByMT0wLHNwLDYxLDM7CQkJCQkJXAotCS8qIGNvbXB1dGUgYmFzZSBvZiBtZW1vcnkgc3RhY2sgKi8JCQkJXAotKHBVc2VyKQlhZGRsIHIxPUlBNjRfU1RLX09GRlNFVC1JQTY0X1BUX1JFR1NfU0laRSxyMTsJCQlcCi0JLyogc2F2ZSBhci5ic3BzdG9yZSAqLwkJCQkJCVwKLShwVXNlcikJbW92IHJBUkJTUFNUT1JFPWFyLmJzcHN0b3JlOwkJCQkJXAotCS8qIGNvbXB1dGUga2VybmVsIHZpcnR1YWwgYWRkciBvZiBSQlMgKi8JCQlcCi0ocFVzZXIpCWRlcCByS1JCUz0tMSxyS1JCUyw2MSwzOwkJCQkJXAotCTs7CQkJCQkJCQlcCi0JLyogaWYgaW4ga2VybmVsIG1vZGUsIHVzZSBzcCAocjEyKSAqLwkJCQlcCi0ocEtlcm4pIGFkZGwgcjE9LUlBNjRfUFRfUkVHU19TSVpFLHIxOwkJCQkJXAotCS8qIHN3aXRjaCB0byBrZXJuZWwgUkJTICovCQkJCQlcCi0ocFVzZXIpCW1vdiBhci5ic3BzdG9yZT1yS1JCUzsJCQkJCQlcCi0JOzsJCQkJCQkJCVwKLShwVXNlcikJbW92IHIxOD1hci5ic3A7CQkJCQkJCVwKLQkvKiBzZXQgZWFnZXIgbW9kZSwgcGwgMCwgbGl0dGxlLWVuZGlhbiwgbG9hZHJzPTAgKi8JCVwKLShwVXNlcikJbW92IGFyLnJzYz0weDM7Ci0KLSNkZWZpbmUgTUlOU1RBVEVfRU5EX1NBVkVfTUlOX1BIWVMJCQkJCVwKLQkvKiBtYWtlIHNwIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcyAqLwkJCQlcCi0Jb3IgcjEyPXIxMixyMTQ7CQkJCQkJCVwKLQkvKiBtYWtlIGBjdXJyZW50JyBhIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKi8JCQlcCi0Jb3IgcjEzPXIxMyxyMTQ7CQkJCQkJCVwKLQk7OwotCi0jaWZkZWYgTUlOU1RBVEVfVklSVAotIyBkZWZpbmUgTUlOU1RBVEVfU1RBUlRfU0FWRV9NSU4JTUlOU1RBVEVfU1RBUlRfU0FWRV9NSU5fVklSVAotIyBkZWZpbmUgTUlOU1RBVEVfRU5EX1NBVkVfTUlOCQlNSU5TVEFURV9FTkRfU0FWRV9NSU5fVklSVAotI2VuZGlmCi0KLSNpZmRlZiBNSU5TVEFURV9QSFlTCi0jIGRlZmluZSBNSU5TVEFURV9TVEFSVF9TQVZFX01JTglNSU5TVEFURV9TVEFSVF9TQVZFX01JTl9QSFlTCi0jIGRlZmluZSBNSU5TVEFURV9FTkRfU0FWRV9NSU4JCU1JTlNUQVRFX0VORF9TQVZFX01JTl9QSFlTCi0jZW5kaWYKLQotLyoKLSAqIERPX1NBVkVfTUlOIHN3aXRjaGVzIHRvIHRoZSBrZXJuZWwgc3RhY2tzIChpZiBuZWNlc3NhcnkpIGFuZCBzYXZlcwotICogdGhlIG1pbmltdW0gc3RhdGUgbmVjZXNzYXJ5IHRoYXQgYWxsb3dzIHVzIHRvIHR1cm4gcHNyLmljIGJhY2sKLSAqIG9uLgotICoKLSAqIEFzc3VtZWQgc3RhdGUgdXBvbiBlbnRyeToKLSAqCXBzci5pYzogb2ZmCi0gKglwc3IuZHQ6IG9mZgotICoJcjMxOgljb250YWlucyBzYXZlZCBwcmVkaWNhdGVzIChwcikKLSAqCi0gKiBVcG9uIGV4aXQsIHRoZSBzdGF0ZSBpcyBhcyBmb2xsb3dzOgotICoJcHNyLmljOiBvZmYKLSAqCXIyID0gcG9pbnRzIHRvICZwdF9yZWdzLnIxNgotICoJcjEyID0ga2VybmVsIHNwIChrZXJuZWwgdmlydHVhbCBhZGRyZXNzKQotICoJcjEzID0gcG9pbnRzIHRvIGN1cnJlbnQgdGFza19zdHJ1Y3QgKGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MpCi0gKglwMTUgPSBUUlVFIGlmIHBzci5pIGlzIHNldCBpbiBjci5pcHNyCi0gKglwcmVkaWNhdGUgcmVnaXN0ZXJzIChvdGhlciB0aGFuIHAyLCBwMywgYW5kIHAxNSksIGI2LCByMywgcjgsIHI5LAotICoJCXIxMCwgcjExLCByMTQsIHIxNTogcHJlc2VydmVkCi0gKgotICogTm90ZSB0aGF0IHBzci5pYyBpcyBOT1QgdHVybmVkIG9uIGJ5IHRoaXMgbWFjcm8uICBUaGlzIGlzIHNvIHRoYXQKLSAqIHdlIGNhbiBwYXNzIGludGVycnVwdGlvbiBzdGF0ZSBhcyBhcmd1bWVudHMgdG8gYSBoYW5kbGVyLgotICovCi0jZGVmaW5lIERPX1NBVkVfTUlOKENPVkVSLFNBVkVfSUZTLEVYVFJBKQkJCQlcCi0JbW92IHJBUlJTQz1hci5yc2M7CQkJCQkJXAotCW1vdiByQVJQRlM9YXIucGZzOwkJCQkJCVwKLQltb3YgclIxPXIxOwkJCQkJCQlcCi0JbW92IHJBUlVOQVQ9YXIudW5hdDsJCQkJCQlcCi0JbW92IHJDUklQU1I9Y3IuaXBzcjsJCQkJCQlcCi0JLyogckI2ID0gYnJhbmNoIHJlZyA2ICovCQkJICAJCVwKLQltb3YgckI2PWI2OwkJCQkJCQlcCi0JbW92IHJDUklJUD1jci5paXA7CQkJCQkJXAotCS8qIHIxID0gY3VycmVudCAocGh5c2ljYWwpICovCQkJICAJCVwKLQltb3YgcjE9SUE2NF9LUihDVVJSRU5UKTsJCQkJCVwKLQlDT1ZFUjsJCQkJCQkJCVwKLQk7OwkJCQkJCQkJXAotCWludmFsYTsJCQkJCQkJCVwKLQkvKiBleHRyYWN0IHBzci5jcGwgKi8JCQkJICAJCVwKLQlleHRyLnUgcjE2PXJDUklQU1IsMzIsMjsJCQkJCVwKLQk7OwkJCQkJCQkJXAotCS8qIGFyZSB3ZSBpbiBrZXJuZWwgbW9kZSBhbHJlYWR5PyAocHNyLmNwbD09MCkgKi8gCQlcCi0JY21wLmVxIHBLZXJuLHBVc2VyPXIwLHIxNjsJCQkJCVwKLQkvKiBzd2l0Y2ggZnJvbSB1c2VyIHRvIGtlcm5lbCBSQlM6ICovCQkJCVwKLQk7OwkJCQkJCQkJXAotCVNBVkVfSUZTOwkJCQkJCQlcCi0JTUlOU1RBVEVfU1RBUlRfU0FWRV9NSU4JCQkJCQlcCi0JOzsJCQkJCQkJCVwKLQkvKiBpbml0aWFsaXplIGZpcnN0IGJhc2UgcG9pbnRlciAqLwkgIAkJCVwKLQltb3YgcjE2PXIxOwkJCQkJCQlcCi0JLyogaW5pdGlhbGl6ZSBzZWNvbmQgYmFzZSBwb2ludGVyICovCSAgCQkJXAotCWFkZHMgcjE3PTgscjE7CQkJCQkJCVwKLQk7OwkJCQkJCQkJXAotCXN0OCBbcjE2XT1yQ1JJUFNSLDE2OwkvKiBzYXZlIGNyLmlwc3IgKi8JCQlcCi0Jc3Q4IFtyMTddPXJDUklJUCwxNjsJLyogc2F2ZSBjci5paXAgKi8JCQlcCi0ocEtlcm4pCW1vdiByMTg9cjA7CQkvKiBtYWtlIHN1cmUgcjE4IGlzbid0IE5hVCAqLwkJXAotCTs7CQkJCQkJCQlcCi0Jc3Q4IFtyMTZdPXJDUklGUywxNjsJLyogc2F2ZSBjci5pZnMgKi8JCQlcCi0Jc3Q4IFtyMTddPXJBUlVOQVQsMTY7CS8qIHNhdmUgYXIudW5hdCAqLwkJCVwKLShwVXNlcikJc3ViIHIxOD1yMTgscktSQlM7CS8qIHIxOD1SU0UubmRpcnR5KjggKi8JCQlcCi0JOzsJCQkJCQkJCVwKLQlzdDggW3IxNl09ckFSUEZTLDE2OwkvKiBzYXZlIGFyLnBmcyAqLwkJCVwKLQlzdDggW3IxN109ckFSUlNDLDE2OwkvKiBzYXZlIGFyLnJzYyAqLwkJCVwKLQl0Yml0Lm56IHAxNSxwMD1yQ1JJUFNSLElBNjRfUFNSX0lfQklUCQkJCVwKLQk7OwkJCS8qIGF2b2lkIFJBVyBvbiByMTYgJiByMTcgKi8JCVwKLShwS2VybikJYWRkcyByMTY9MTYscjE2OwkvKiBza2lwIG92ZXIgYXJfcm5hdCBmaWVsZCAqLwkJXAotKHBLZXJuKQlhZGRzIHIxNz0xNixyMTc7CS8qIHNraXAgb3ZlciBhcl9ic3BzdG9yZSBmaWVsZCAqLwlcCi0ocFVzZXIpCXN0OCBbcjE2XT1yQVJSTkFULDE2OwkvKiBzYXZlIGFyLnJuYXQgKi8JCQlcCi0ocFVzZXIpCXN0OCBbcjE3XT1yQVJCU1BTVE9SRSwxNjsJLyogc2F2ZSBhci5ic3BzdG9yZSAqLwkJXAotCTs7CQkJCQkJCQlcCi0Jc3Q4IFtyMTZdPXJBUlBSLDE2OwkvKiBzYXZlIHByZWRpY2F0ZXMgKi8JCQlcCi0Jc3Q4IFtyMTddPXJCNiwxNjsJLyogc2F2ZSBiNiAqLwkJCQlcCi0JLyogY29tcHV0ZSBhci5yc2MgdG8gYmUgdXNlZCBmb3IgImxvYWRycyIgKi8JCQlcCi0Jc2hsIHIxOD1yMTgsMTY7CQkJCQkJCVwKLQk7OwkJCQkJCQkJXAotCXN0OCBbcjE2XT1yMTgsMTY7CS8qIHNhdmUgYXIucnNjIHZhbHVlIGZvciAibG9hZHJzIiAqLwlcCi0Jc3Q4LnNwaWxsIFtyMTddPXJSMSwxNjsJLyogc2F2ZSBvcmlnaW5hbCByMSAqLwkJCVwKLQk7OwkJCQkJCQkJXAotLm1lbS5vZmZzZXQgMCwwOwlzdDguc3BpbGwgW3IxNl09cjIsMTY7CQkJCVwKLS5tZW0ub2Zmc2V0IDgsMDsJc3Q4LnNwaWxsIFtyMTddPXIzLDE2OwkJCQlcCi0JYWRkcyByMj1JQTY0X1BUX1JFR1NfUjE2X09GRlNFVCxyMTsJCQkJXAotCTs7CQkJCQkJCQlcCi0ubWVtLm9mZnNldCAwLDA7CQlzdDguc3BpbGwgW3IxNl09cjEyLDE2OwkJCVwKLS5tZW0ub2Zmc2V0IDgsMDsJCXN0OC5zcGlsbCBbcjE3XT1yMTMsMTY7CQkJXAotCS8qIGluaXRpYWxpemUgcFN5cz0wLCBwTm9uU3lzPTEgKi8JCQkgIAlcCi0JY21wLmVxIHBOb25TeXMscFN5cz1yMCxyMAkJCQkJXAotCTs7CQkJCQkJCQlcCi0ubWVtLm9mZnNldCAwLDA7CQlzdDguc3BpbGwgW3IxNl09cjE0LDE2OwkJCVwKLS5tZW0ub2Zmc2V0IDgsMDsJCXN0OC5zcGlsbCBbcjE3XT1yMTUsMTY7CQkJXAotCWRlcCByMTQ9LTEscjAsNjEsMzsJCQkJCQlcCi0JOzsJCQkJCQkJCVwKLS5tZW0ub2Zmc2V0IDAsMDsJCXN0OC5zcGlsbCBbcjE2XT1yOCwxNjsJCQlcCi0ubWVtLm9mZnNldCA4LDA7CQlzdDguc3BpbGwgW3IxN109cjksMTY7CQkJXAotCS8qIHN3aXRjaCB0byBrZXJuZWwgbWVtb3J5IHN0YWNrICh3aXRoIDE2IGJ5dGVzIG9mIHNjcmF0Y2gpICovCVwKLQlhZGRzIHIxMj0tMTYscjE7CQkJCQkJXAotCTs7CQkJCQkJCQlcCi0ubWVtLm9mZnNldCAwLDA7CQlzdDguc3BpbGwgW3IxNl09cjEwLDE2OwkJCVwKLS5tZW0ub2Zmc2V0IDgsMDsJCXN0OC5zcGlsbCBbcjE3XT1yMTEsMTY7CQkJXAotCW1vdiByMTM9SUE2NF9LUihDVVJSRU5UKTsJLyogZXN0YWJsaXNoIGBjdXJyZW50JyAqLwlcCi0JOzsJCQkJCQkJCVwKLQlFWFRSQTsJCQkJCQkJCVwKLQltb3ZsIHIxPV9fZ3A7CQkvKiBlc3RhYmxpc2gga2VybmVsIGdsb2JhbCBwb2ludGVyICovCVwKLQk7OwkJCQkJCQkJXAotCU1JTlNUQVRFX0VORF9TQVZFX01JTgotCi0vKgotICogU0FWRV9SRVNUIHNhdmVzIHRoZSByZW1haW5kZXIgb2YgcHRfcmVncyAod2l0aCBwc3IuaWMgb24pLiAgVGhpcwotICogbWFjcm8gZ3VhcmFudGVlcyB0byBwcmVzZXJ2ZSBhbGwgcHJlZGljYXRlIHJlZ2lzdGVycywgcjgsIHI5LCByMTAsCi0gKiByMTEsIHIxNCwgYW5kIHIxNS4KLSAqCi0gKiBBc3N1bWVkIHN0YXRlIHVwb24gZW50cnk6Ci0gKglwc3IuaWM6IG9uCi0gKglwc3IuZHQ6IG9uCi0gKglyMjoJcG9pbnRzIHRvICZwdF9yZWdzLnIxNgotICoJcjM6CXBvaW50cyB0byAmcHRfcmVncy5yMTcKLSAqLwotI2RlZmluZSBTQVZFX1JFU1QJCQkJXAotLm1lbS5vZmZzZXQgMCwwOwlzdDguc3BpbGwgW3IyXT1yMTYsMTY7CVwKLS5tZW0ub2Zmc2V0IDgsMDsJc3Q4LnNwaWxsIFtyM109cjE3LDE2OwlcCi0JOzsJCQkJCVwKLS5tZW0ub2Zmc2V0IDAsMDsJc3Q4LnNwaWxsIFtyMl09cjE4LDE2OwlcCi0ubWVtLm9mZnNldCA4LDA7CXN0OC5zcGlsbCBbcjNdPXIxOSwxNjsJXAotCTs7CQkJCQlcCi0JbW92IHIxNj1hci5jY3Y7CQkvKiBNLXVuaXQgKi8JXAotCW1vdmwgcjE4PUZQU1JfREVGQVVMVAkvKiBMLXVuaXQgKi8JXAotCTs7CQkJCQlcCi0JbW92IHIxNz1hci5mcHNyOwkvKiBNLXVuaXQgKi8JXAotCW1vdiBhci5mcHNyPXIxODsJLyogTS11bml0ICovCVwKLQk7OwkJCQkJXAotLm1lbS5vZmZzZXQgMCwwOwlzdDguc3BpbGwgW3IyXT1yMjAsMTY7CVwKLS5tZW0ub2Zmc2V0IDgsMDsJc3Q4LnNwaWxsIFtyM109cjIxLDE2OwlcCi0JbW92IHIxOD1iMDsJCQkJXAotCTs7CQkJCQlcCi0ubWVtLm9mZnNldCAwLDA7CXN0OC5zcGlsbCBbcjJdPXIyMiwxNjsJXAotLm1lbS5vZmZzZXQgOCwwOwlzdDguc3BpbGwgW3IzXT1yMjMsMTY7CVwKLQltb3YgcjE5PWI3OwkJCQlcCi0JOzsJCQkJCVwKLS5tZW0ub2Zmc2V0IDAsMDsJc3Q4LnNwaWxsIFtyMl09cjI0LDE2OwlcCi0ubWVtLm9mZnNldCA4LDA7CXN0OC5zcGlsbCBbcjNdPXIyNSwxNjsJXAotCTs7CQkJCQlcCi0ubWVtLm9mZnNldCAwLDA7CXN0OC5zcGlsbCBbcjJdPXIyNiwxNjsJXAotLm1lbS5vZmZzZXQgOCwwOwlzdDguc3BpbGwgW3IzXT1yMjcsMTY7CVwKLQk7OwkJCQkJXAotLm1lbS5vZmZzZXQgMCwwOwlzdDguc3BpbGwgW3IyXT1yMjgsMTY7CVwKLS5tZW0ub2Zmc2V0IDgsMDsJc3Q4LnNwaWxsIFtyM109cjI5LDE2OwlcCi0JOzsJCQkJCVwKLS5tZW0ub2Zmc2V0IDAsMDsJc3Q4LnNwaWxsIFtyMl09cjMwLDE2OwlcCi0ubWVtLm9mZnNldCA4LDA7CXN0OC5zcGlsbCBbcjNdPXIzMSwxNjsJXAotCTs7CQkJCQlcCi0Jc3Q4IFtyMl09cjE2LDE2OwkvKiBhci5jY3YgKi8JXAotCXN0OCBbcjNdPXIxNywxNjsJLyogYXIuZnBzciAqLwlcCi0JOzsJCQkJCVwKLQlzdDggW3IyXT1yMTgsMTY7CS8qIGIwICovCVwKLQlzdDggW3IzXT1yMTksMTYrODsJLyogYjcgKi8JXAotCTs7CQkJCQlcCi0Jc3RmLnNwaWxsIFtyMl09ZjYsMzI7CQkJXAotCXN0Zi5zcGlsbCBbcjNdPWY3LDMyOwkJCVwKLQk7OwkJCQkJXAotCXN0Zi5zcGlsbCBbcjJdPWY4LDMyOwkJCVwKLQlzdGYuc3BpbGwgW3IzXT1mOSwzMgotCi0jZGVmaW5lIFNBVkVfTUlOX1dJVEhfQ09WRVIJRE9fU0FWRV9NSU4oY292ZXIsIG1vdiByQ1JJRlM9Y3IuaWZzLCkKLSNkZWZpbmUgU0FWRV9NSU5fV0lUSF9DT1ZFUl9SMTkJXAotCURPX1NBVkVfTUlOKGNvdmVyLCBtb3YgckNSSUZTPWNyLmlmcywgbW92IHIxNT1yMTkpCi0jZGVmaW5lIFNBVkVfTUlOCQlET19TQVZFX01JTiggICAgICwgbW92IHJDUklGUz1yMCwgKQpkaWZmIC0tZ2l0IGEvbW9kdWxlL2lhNjQvSUE2NHN5c2NhbGxzdHViLmggYi9tb2R1bGUvaWE2NC9JQTY0c3lzY2FsbHN0dWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBmMWRiZC4uMDAwMDAwMAotLS0gYS9tb2R1bGUvaWE2NC9JQTY0c3lzY2FsbHN0dWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0vKioKLSAqIEBmaWxlIElBNjRzeXNjYWxsc3R1Yi5oCi0gKiBBc3NlbWJseSBsYW5ndWFnZSBmaWxlIG1hY3JvcwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEJvYiBNb250Z29tZXJ5Ci0gKi8KLQotLyogJElkOiBJQTY0c3lzY2FsbHN0dWIuaCx2IDEuMiAyMDAyLzExLzA5IDAxOjExOjU1IHBoaWxfZSBFeHAgJCAqLwotCi0jZGVmaW5lIFNZU0NBTExTVFVCX1BPU1QobmFtZSkJCVwKLQkuc2JzczsJCQkJXAotCS5hbGlnbiA4OwkJCVwKLQkudHlwZSAucG9zdF9zYXZlcnBfIyNuYW1lLEBvYmplY3Q7CVwKLQkuc2l6ZSAucG9zdF9zYXZlcnBfIyNuYW1lLDg7CVwKLS5wb3N0X3NhdmVycF8jI25hbWU6CQkJXAotCS5za2lwIDg7CQkJXAotCS50ZXh0OwkJCQlcCi0JLmdsb2JhbCBwb3N0X3N0dWJfIyNuYW1lOwlcCi0JLmFsaWduIDMyOwkJCVwKLQkucHJvYyBwb3N0X3N0dWJfIyNuYW1lOwkJXAotcG9zdF9zdHViXyMjbmFtZToJCQlcCi0uTDFfIyNuYW1lOgkJCQlcCi0JbW92IHIzPWlwOwkJCVwKLQk7OwkJCQlcCi0JYWRkbCByMTY9LkwyXyMjbmFtZSAtIC5MMV8jI25hbWUsIHIzOwlcCi0JOzsJCQkJXAotCW1vdiBiNj1yMTY7CQkJXAotCTs7CQkJCVwKLQlici5yZXQuc3B0ay5tYW55IGI2OwkJXAotCTs7CQkJCVwKLS5MMl8jI25hbWU6CQkJCVwKLQltb3YgcjM9aXA7CQkJXAotCW1vdiByMTU9Z3A7CS8qIHNhdmUga2dwICovCVwKLQltb3YgcjE3PXJwOwkJCVwKLQk7OwkJCQlcCi0JYWRkbCByMTQ9LnBvc3RfZnB0cl8jI25hbWUgLSAuTDJfIyNuYW1lLCByMzsJXAotCTs7CQkJCVwKLQlsZDggcjE0PVtyMTRdOwkJCVwKLQk7OwkJCQlcCi0JYWRkcyByMTQ9OCxyMTQ7CQkJXAotCTs7CQkJCVwKLQlsZDggZ3A9W3IxNF07CQkJXAotCTs7CQkJCVwKLSAgICAgICAgYWRkbCByMTQ9QGx0b2ZmKG9sZF9zeXNfIyNuYW1lKSwgZ3A7ICAgIFwKLQlhZGRsIHIxNj1AZ3ByZWwoLnBvc3Rfc2F2ZXJwXyMjbmFtZSksIGdwOwlcCi0JOzsJCQkJXAotICAgICAgICBsZDggcjE0ID0gW3IxNF07CQlcCi0Jc3Q4IFtyMTZdPXIxNzsJLyogc2F2ZSBrcnAgKi8JXAotCTs7CQkJCVwKLSAgICAgICAgbGQ4IHIxNCA9IFtyMTRdOwkJXAotCW1vdiBncD1yMTU7CS8qIHJlc3RvcmUga2dwICovCVwKLQk7OwkJCQlcCi0gICAgICAgIGxkOCByMTQgPSBbcjE0XTsJCVwKLQk7OwkJCQlcCi0gICAgICAgIG1vdiBiNiA9IHIxNDsJCQlcCi0JOzsJCQkJXAotCWJyLmNhbGwuc3B0ay5tYW55IGIwPWI2OwlcCi0JOzsJCQkJXAotLkwzXyMjbmFtZToJCQkJXAotCW1vdiByMz1pcDsJCQlcCi0JbW92IHIxNT1ncDsJLyogc2F2ZSBrZ3AgKi8JXAotCTs7CQkJCVwKLQlhZGRsIHIxND0ucG9zdF9mcHRyXyMjbmFtZSAtIC5MM18jI25hbWUsIHIzOwlcCi0JOzsJCQkJXAotCWxkOCByMTQ9W3IxNF07CQkJXAotCTs7CQkJCVwKLQlhZGRzIHIxND04LHIxNDsJCQlcCi0JOzsJCQkJXAotCWxkOCBncD1bcjE0XTsJCQlcCi0JYnIuY2FsbC5zcHRrLm1hbnkgYjA9cG9zdF9jYWxsX3N0dWJfIyNuYW1lOwlcCi0JOzsJCQkJXAotCWFkZGwgcjE2PUBncHJlbCgucG9zdF9zYXZlcnBfIyNuYW1lKSwgZ3A7CVwKLSAgICAgICAgOzsJCQkJXAotCWxkOCByMTQ9W3IxNl07CQkJXAotICAgICAgICA7OwkJCQlcCi0gICAgICAgIG1vdiBiMCA9IHIxNDsJCQlcCi0JbW92IGdwID0gcjE1OyAvKiBwcmVzZXJ2ZWQgKi8JXAotCWJyLmNvbmQuc3B0ay5tYW55IGIwOwkJXAotCS5hbGlnbiAxNjsJCQlcCi0ucG9zdF9mcHRyXyMjbmFtZToJCQkJXAotCWRhdGE4IEBmcHRyKHBvc3Rfc3lzXyMjbmFtZSk7CVwKLQkuZW5kcCBwb3N0X3N0dWJfIyNuYW1lOwkJXAotCS5hbGlnbiAxNjsJCQlcCi0JLmdsb2JhbCBwb3N0X2NhbGxfc3R1Yl8jI25hbWU7CVwKLQkucHJvYyBwb3N0X2NhbGxfc3R1Yl8jI25hbWU7CVwKLXBvc3RfY2FsbF9zdHViXyMjbmFtZToJCQlcCi0JYWxsb2MgbG9jMT1hci5wZnMsOCw2LDgsMDsJXAotCW1vdiBsb2MwPXJwOwkJCVwKLQltb3YgbG9jMj1yMTU7IC8qIHByZXNlcnZlIGl0ICovCVwKLQltb3YgbG9jMz1yODsJCQlcCi0JbW92IGxvYzQ9cjEwOwkJCVwKLQltb3YgbG9jNT1ncDsJCQlcCi0JbW92IG91dDAgPSByODsJLyogb2xkIHJ2ICovCVwKLQltb3Ygb3V0MSA9IGluMDsJCQlcCi0JbW92IG91dDIgPSBpbjE7CQkJXAotCW1vdiBvdXQzID0gaW4yOwkJCVwKLQltb3Ygb3V0NCA9IGluMzsJCQlcCi0JbW92IG91dDUgPSBpbjQ7CQkJXAotCW1vdiBvdXQ2ID0gaW41OwkJCVwKLQltb3Ygb3V0NyA9IGluNjsJCQlcCi0JOzsJCQkJXAotCWJyLmNhbGwuc3B0ay5tYW55IHJwID0gcG9zdF9zeXNfIyNuYW1lOwlcCi0JOzsJCQkJXAotCW1vdiBhci5wZnMgPSBsb2MxOwkJXAotCW1vdiBycCA9IGxvYzA7CQkJXAotCW1vdiByMTU9bG9jMjsJCQlcCi0JbW92IHI4PWxvYzM7CQkJXAotCW1vdiByMTA9bG9jNDsJCQlcCi0JbW92IGdwPWxvYzU7CQkJXAotCWJyLnJldC5zcHRrLmZldwlycDsJCVwKLQkuZW5kcCBwb3N0X2NhbGxfc3R1Yl8jI25hbWU7Ci0KLSNkZWZpbmUgU1lTQ0FMTFNUVUJfUFJFKG5hbWUpCQlcCi0JLnRleHQ7CQkJCVwKLQkuZ2xvYmFsIHByZV9zdHViXyMjbmFtZTsJXAotCS5hbGlnbiAzMjsJCQlcCi0JLnByb2MgcHJlX3N0dWJfIyNuYW1lOwkJXAotcHJlX3N0dWJfIyNuYW1lOgkJCVwKLS5MNF8jI25hbWU6CQkJCVwKLQltb3YgcjM9aXA7CQkJXAotCTs7CQkJCVwKLQlhZGRsIHIxNz0uTDVfIyNuYW1lIC0gLkw0XyMjbmFtZSwgcjM7CVwKLQk7OwkJCQlcCi0JbW92IGI2PXIxNzsJCQlcCi0JOzsJCQkJXAotCWJyLnJldC5zcHRrLm1hbnkgYjY7CQlcCi0JOzsJCQkJXAotLkw1XyMjbmFtZToJCQkJXAotCW1vdiByMz1pcDsJCQlcCi0JbW92IHIxNT1ncDsJLyogc2F2ZSBrZ3AgKi8JXAotCW1vdiByMTY9cnA7CS8qIHNhdmUga3JwICovCVwKLQk7OwkJCQlcCi0JYWRkbCByMTQ9LnByZV9mcHRyXyMjbmFtZSAtIC5MNV8jI25hbWUsIHIzOwlcCi0JOzsJCQkJXAotCWxkOCByMTQ9W3IxNF07CQkJXAotCTs7CQkJCVwKLQlhZGRzIHIxND04LHIxNDsJCQlcCi0JOzsJCQkJXAotCWxkOCBncD1bcjE0XTsJCQlcCi0JOzsJCQkJXAotCWJyLmNhbGwuc3B0ay5tYW55IGIwPXByZV9jYWxsX3N0dWJfIyNuYW1lOwlcCi0JOzsJCQkJXAotCS8qIGtlcm5lbCBncCBzdGlsbCBpbiByMTUgKi8JXAotCS8qIGtlcm5lbCBycCBzdGlsbCBpbiByMTYgKi8JXAotCS8qIG1vZHVsZSBncCBpbiBncCAqLwkJXAotCTs7CQkJCVwKLSAgICAgICAgYWRkbCByMTQ9QGx0b2ZmKG9sZF9zeXNfIyNuYW1lKSwgZ3A7ICAgIFwKLQk7OwkJCQlcCi0gICAgICAgIGxkOCByMTQgPSBbcjE0XTsJCVwKLQk7OwkJCQlcCi0gICAgICAgIGxkOCByMTQgPSBbcjE0XTsJCVwKLQltb3YgZ3A9cjE1OyAvKiByZXN0b3JlIGtncCAqLwlcCi0JOzsJCQkJXAotICAgICAgICBsZDggcjE0ID0gW3IxNF07CQlcCi0JbW92IHJwPXIxNjsgLyogcmVzdG9yZSBrcnAgKi8JXAotCTs7CQkJCVwKLSAgICAgICAgbW92IGI2ID0gcjE0OwkJCVwKLQk7OwkJCQlcCi0JLyogdXNlIHRoZSBzYXZlZCBrcnAgKi8JCVwKLQlici5jYWxsLnNwdGsubWFueSBiNj1iNjsJXAotCTs7CQkJCVwKLQkuYWxpZ24gMTY7CQkJXAotLnByZV9mcHRyXyMjbmFtZToJCQkJXAotCWRhdGE4IEBmcHRyKHByZV9zeXNfIyNuYW1lKTsJXAotCS5lbmRwIHByZV9zdHViXyMjbmFtZTsJCVwKLQkuYWxpZ24gMTY7CQkJXAotCS5nbG9iYWwgcHJlX2NhbGxfc3R1Yl8jI25hbWU7CVwKLQkucHJvYyBwcmVfY2FsbF9zdHViXyMjbmFtZTsJXAotcHJlX2NhbGxfc3R1Yl8jI25hbWU6CQkJXAotCWFsbG9jIGxvYzE9YXIucGZzLDgsNSw4LDA7CVwKLQltb3YgbG9jMD1ycDsJCQlcCi0JbW92IGxvYzI9cjE1OyAvKiBwcmVzZXJ2ZSBpdCAqLwlcCi0JbW92IGxvYzM9cjE2OyAvKiBwcmVzZXJ2ZSBpdCAqLwlcCi0JbW92IGxvYzQ9Z3A7CQkJXAotCW1vdiBvdXQwID0gaW4wOwkJCVwKLQltb3Ygb3V0MSA9IGluMTsJCQlcCi0JbW92IG91dDIgPSBpbjI7CQkJXAotCW1vdiBvdXQzID0gaW4zOwkJCVwKLQltb3Ygb3V0NCA9IGluNDsJCQlcCi0JbW92IG91dDUgPSBpbjU7CQkJXAotCW1vdiBvdXQ2ID0gaW42OwkJCVwKLQltb3Ygb3V0NyA9IGluNzsJCQlcCi0JOzsJCQkJXAotCWJyLmNhbGwuc3B0ay5tYW55IHJwID0gcHJlX3N5c18jI25hbWU7CVwKLQk7OwkJCQlcCi0JbW92IGFyLnBmcyA9IGxvYzE7CQlcCi0JbW92IHJwID0gbG9jMDsJCQlcCi0JbW92IHIxNT1sb2MyOwkJCVwKLQltb3YgcjE2PWxvYzM7CQkJXAotCW1vdiBncD1sb2M0OwkJCVwKLQlici5yZXQuc3B0ay5mZXcJcnA7CQlcCi0JLmVuZHAgcHJlX2NhbGxfc3R1Yl8jI25hbWU7Ci0KLQpkaWZmIC0tZ2l0IGEvbW9kdWxlL2lhNjQvTWFrZWZpbGUuaW4gYi9tb2R1bGUvaWE2NC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFhOTMyYy4uMDAwMDAwMAotLS0gYS9tb2R1bGUvaWE2NC9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMKLSMgbW9kdWxlL2lhNjQvTWFrZWZpbGUuaW4KLSMgCi0jIFdpbGwgQ29oZW4KLSMgNy8yOS8yMDAyCi0KLU9QUk9GSUxFX0RJUj1AT1BST0ZJTEVfRElSQAotVkVSU0lPTj1AVkVSU0lPTkAKLUtWRVJTPUBLVkVSU0AKLUtTUkM9QEtTUkNACi0KLUVYVFJBX0NGTEFHUz1ARVhUUkFfQ0ZMQUdTX01PRFVMRUAgLURfX05PX1ZFUlNJT05fXyBcCi0JLUkkKE9QUk9GSUxFX0RJUikvIC1JJChPUFJPRklMRV9ESVIpL2xpYnV0aWwgLUkkKE9QUk9GSUxFX0RJUikvbGlib3AgLUkkKE9QUk9GSUxFX0RJUikvbW9kdWxlCi0gCi1VU0VfU1RBTkRBUkRfQVNfUlVMRT0xCi0gCi0jIE5COiBkbyBub3QgYWRkIGEgZmlsZSBoZXJlIHdpdGhvdXQgYWRkaW5nIGl0IHRvIEVYVFJBX0RJU1QgaW4gLi4vTWFrZWZpbGUuYW0KLQotT19UQVJHRVQgOj0gYXJjaC5vCi0gCi1vYmoteSA6PSBjcHVfdHlwZS5vIG9wX3BtdS5vIG9wX3N5c2NhbGxzLm8gb3Byb2ZpbGVfc3R1YnMubwotb2JqLW0gOj0gJChPX1RBUkdFVCkKLU9fT0JKUyA6PSAkKG9iai15KQotTV9PQkpTIDo9ICQoT19UQVJHRVQpCi0gCi1UT1BESVIgOj0gJChLU1JDKQotQ09ORklHX1NIRUxMIDo9IFRPUERJUj0kKEtTUkMpIC9iaW4vYmFzaAotaW5jbHVkZSAkKEtTUkMpL1J1bGVzLm1ha2UKLQotIyBGSVhNRTogZGVwZW5kZW5jaWVzIApkaWZmIC0tZ2l0IGEvbW9kdWxlL2lhNjQvY3B1X3R5cGUuYyBiL21vZHVsZS9pYTY0L2NwdV90eXBlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZTFlZDQuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL2lhNjQvY3B1X3R5cGUuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKgotICogQGZpbGUgY3B1X3R5cGUuYwotICogQ1BVIGRldGVybWluYXRpb24KLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgV2lsbCBDb2hlbgotICovCi0KLSNpbmNsdWRlICJvcHJvZmlsZS5oIgotCi1FWFBPUlRfTk9fU1lNQk9MUzsKLQotX19pbml0IG9wX2NwdSBnZXRfY3B1X3R5cGUodm9pZCkKLXsKLQlfX3U4IGZhbWlseSA9IGxvY2FsX2NwdV9kYXRhLT5mYW1pbHk7Ci0KLQkvKiBGSVhNRTogVGhlcmUgc2hvdWxkIGJlIGEgYml0IG1vcmUgY2hlY2tpbmcgaGVyZS4gKi8KLQlzd2l0Y2ggKGZhbWlseSkgewotCS8qIEl0YW5pdW0gKi8KLQljYXNlIDB4MDc6Ci0JCXJldHVybiBDUFVfSUE2NF8xOwotCQlicmVhazsKLQkvKiBJdGFuaXVtIDIgKi8KLQljYXNlIDB4MWY6Ci0JCXJldHVybiBDUFVfSUE2NF8yOwotCQlicmVhazsKLQl9Ci0JLyogR28gZm9yIHRoZSBiYXNpYyBnZW5lcmljIElBNjQgKi8KLQlyZXR1cm4gQ1BVX0lBNjQ7Ci19CmRpZmYgLS1naXQgYS9tb2R1bGUvaWE2NC9vcF9pYTY0X21vZGVsLmggYi9tb2R1bGUvaWE2NC9vcF9pYTY0X21vZGVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZjZjMDYuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL2lhNjQvb3BfaWE2NF9tb2RlbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9pYTY0X21vZGVsLmgKLSAqIGludGVyZmFjZSB0byBpYTY0IG1vZGVsLXNwZWNpZmljIE1TUiBvcGVyYXRpb25zCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQotICogQGF1dGhvciBXaWxsIENvaGVuCi0gKi8KLQotI2lmbmRlZiBPUF9JQTY0X01PREVMX0gKLSNkZWZpbmUgT1BfSUE2NF9NT0RFTF9ICi0KLSNpbmNsdWRlICJvcHJvZmlsZS5oIgotCi1zdHJ1Y3Qgb3Bfc2F2ZWRfbXNyIHsKLQl1aW50IGhpZ2g7Ci0JdWludCBsb3c7Ci19OwotCi1zdHJ1Y3Qgb3BfbXNyX2dyb3VwIHsKLQl1aW50ICogYWRkcnM7Ci0Jc3RydWN0IG9wX3NhdmVkX21zciAqIHNhdmVkOwotfTsKLQotc3RydWN0IG9wX21zcnMgewotCXN0cnVjdCBvcF9tc3JfZ3JvdXAgY291bnRlcnM7Ci0Jc3RydWN0IG9wX21zcl9ncm91cCBjb250cm9sczsKLX07Ci0KLSNlbmRpZiAvKiBPUF9JQTY0X01PREVMX0ggKi8KZGlmZiAtLWdpdCBhL21vZHVsZS9pYTY0L29wX3BtdS5jIGIvbW9kdWxlL2lhNjQvb3BfcG11LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNmZkMGMuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL2lhNjQvb3BfcG11LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9wbXUuYwotICogU2V0dXAgYW5kIGhhbmRsaW5nIG9mIElBNjQgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0IChQTVUpCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgQm9iIE1vbnRnb21lcnkKLSAqIEBhdXRob3IgV2lsbCBDb2hlbgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0KLSNpbmNsdWRlICJvcHJvZmlsZS5oIgotI2luY2x1ZGUgIm9wX3V0aWwuaCIKLSNpbmNsdWRlIDxhc20vcGVyZm1vbi5oPgotI2luY2x1ZGUgIm9wX2lhNjRfbW9kZWwuaCIKLQotLyogbnVtYmVyIG9mIGNvdW50ZXJzIHBoeXNpY2FsbHkgcHJlc2VudCAqLwotc3RhdGljIHVpbnQgb3BfbnJfY291bnRlcnMgPSA0OwotCi0vKiBwZXJmb3JtYW5jZSBjb3VudGVycyBhcmUgaW4gcGFpcnM6IHBtY04gYW5kIHBtZE4uICBUaGUgcG1jIHJlZ2lzdGVyIGFjdHMKLSAqIGFzIHRoZSBldmVudCBzZWxlY3Rpb247IHRoZSBwbWQgcmVnaXN0ZXIgaXMgdGhlIGNvdW50ZXIuICovCi0jZGVmaW5lIHBlcmZfcmVnKGMpCSgoYykrNCkKLQotI2RlZmluZSBJQTY0XzFfUE1EX01BU0tfVkFMCSgoMVVMIDw8IDMyKSAtIDEpCi0jZGVmaW5lIElBNjRfMl9QTURfTUFTS19WQUwJKCgxVUwgPDwgNDcpIC0gMSkKLQotLyogVGhlIGFwcHJvcHJpYXRlIHZhbHVlIGlzIHNlbGVjdGVkIGluIHBtdV9pbml0KCkgKi8KLXVuc2lnbmVkIGxvbmcgcG1kX21hc2sgPSBJQTY0XzJfUE1EX01BU0tfVkFMOwotCi0jZGVmaW5lIHBtZF9vdmVyZmxvd2VkKHIsYykgKChyKSAmICgxIDw8IHBlcmZfcmVnKGMpKSkKLSNkZWZpbmUgc2V0X3BtZF9uZWcodixjKSBkbyB7IFwKLQlpYTY0X3NldF9wbWQocGVyZl9yZWcoYyksIC0odWxvbmcpKHYpICYgcG1kX21hc2spOyBcCi0JaWE2NF9zcmx6X2QoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2V0X3BtZCh2LGMpIGRvIHsgXAotCWlhNjRfc2V0X3BtZChwZXJmX3JlZyhjKSwgKHYpICYgcG1kX21hc2spOyBcCi0JaWE2NF9zcmx6X2QoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2V0X3BtYyh2LGMpIGRvIHsgaWE2NF9zZXRfcG1jKHBlcmZfcmVnKGMpLCAodikpOyBpYTY0X3NybHpfZCgpOyB9IHdoaWxlICgwKQotI2RlZmluZSBnZXRfcG1kKGMpIGlhNjRfZ2V0X3BtZChwZXJmX3JlZyhjKSkKLSNkZWZpbmUgZ2V0X3BtYyhjKSBpYTY0X2dldF9wbWMocGVyZl9yZWcoYykpCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0gSVJRIGhhbmRsZXIgLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIFRoZSBhcmdzIG1hdGNoIHRoZSBhcmdzIGZvciBwZm1fb3ZlcmZsb3dfaGFuZGxlciBpbiBwZXJmbW9uLmMuCi0gKiBUaGUgdGFza19zdHJ1Y3QgaXMgY3VycmVudGx5IGZpbGxlZCBpbiB3aXRoIHRoZSBwZXJmbW9uICJvd25lciIgb2YKLSAqIHRoZSBQTVUuICBUaGlzIG1pZ2h0IGNoYW5nZS4gIEknbSBub3Qgc3VyZSBpdCBtYWtlcyBzZW5zZSBpbiBwZXJmbW9uCi0gKiBlaXRoZXIgd2l0aCBzeXN0ZW0td2lkZSBwcm9maWxpbmcuCi0gKiBwbWMwIGlzIGEgYml0IG1hc2sgZm9yIG92ZXJmbG93ZWQgY291bnRlcnMgKGJpdHMgNC03KQotICogVGhpcyByb3V0aW5lIHNob3VsZCByZXR1cm4gMCB0byByZXN1bWUgaW50ZXJydXB0cy4KLSAqLwotaW5saW5lIHN0YXRpYyB2b2lkCi1vcF9kb19wbXVfaW50ZXJydXB0KHU2NCBwbWMwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1aW50IGNwdSA9IG9wX2NwdV9pZCgpOwotCWludCBjdHI7Ci0KLQlmb3IgKGN0ciA9IDAgOyBjdHIgPCBvcF9ucl9jb3VudGVycyA7ICsrY3RyKSB7Ci0JCWlmIChwbWRfb3ZlcmZsb3dlZChwbWMwLCBjdHIpKSB7Ci0JCQlvcF9kb19wcm9maWxlKGNwdSwgcmVncy0+Y3JfaWlwLCAxLCBjdHIpOwotCQkJc2V0X3BtZF9uZWcob3Byb2ZfZGF0YVtjcHVdLmN0cl9jb3VudFtjdHJdLCBjdHIpOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgdm9pZAotb3BfcmF3X3BtdV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqYXJnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1NjQgcG1jMDsKLQotCXBtYzAgPSBpYTY0X2dldF9wbWMoMCk7Ci0KLQlpZiAoKHBtYzAgJiB+MHgxVUwpICE9IDBVTCkgewotCQlvcF9kb19wbXVfaW50ZXJydXB0KHBtYzAsIHJlZ3MpOwotCQlpYTY0X3NldF9wbWMoMCwgMCk7Ci0JCWlhNjRfc3Jsel9kKCk7Ci0JfQotfQotCi0KLSNkZWZpbmUgTVlfT1BST0ZJTEVfVkVDVE9SIChJQTY0X1BFUkZNT05fVkVDVE9SIC0gMikKLQotc3RhdGljIHZvaWQKLW9wX3NldF9wbXYodm9pZCAqZHVtbXkpCi17Ci0JaWE2NF9zZXRfcG12KE1ZX09QUk9GSUxFX1ZFQ1RPUik7Ci0JaWE2NF9zcmx6X2QoKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotb3BfcmVzdG9yZV9wbXYodm9pZCogZHVtbXkpCi17Ci0JaWE2NF9zZXRfcG12KElBNjRfUEVSRk1PTl9WRUNUT1IpOwotCWlhNjRfc3Jsel9kKCk7Ci19Ci0KLQotc3RhdGljIGludAotaW5zdGFsbF9oYW5kbGVyKHZvaWQpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBUcnkgaXQgbGVnYWxseSAtIGNvbmZ1c2lvbiBhYm91dCB2ZWMgdnMgaXJxICovCi0JZXJyID0gcmVxdWVzdF9pcnEoTVlfT1BST0ZJTEVfVkVDVE9SLCBvcF9yYXdfcG11X2ludGVycnVwdCwgCi0JCQlTQV9JTlRFUlJVUFQgfCBTQV9QRVJDUFVfSVJRLCAib3Byb2ZpbGUiLCBOVUxMKTsKLQotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgIm9wcm9maWxlX0lBNjQ6IHJlcXVlc3RfaXJxIGZhaWxzLCAiCi0JCQkJInJldHVybnMgJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JaWYgKChzbXBfY2FsbF9mdW5jdGlvbihvcF9zZXRfcG12LCBOVUxMLCAwLCAxKSkpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgIm9wcm9maWxlX0lBNjQ6IHVuZXhwZWN0ZWQgZmFpbHVyZSAiCi0JCQkJIm9mIHNtcF9jYWxsX2Z1bmN0aW9uKG9wX3NldF9wbXYpXG4iKTsKLQl9Ci0KLQlvcF9zZXRfcG12KE5VTEwpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotCi1zdGF0aWMgaW50Ci1yZXN0b3JlX2hhbmRsZXIodm9pZCkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWlmICgoc21wX2NhbGxfZnVuY3Rpb24ob3BfcmVzdG9yZV9wbXYsIE5VTEwsIDAsIDEpKSkgewotCQlwcmludGsoS0VSTl9BTEVSVCAib3Byb2ZpbGVfSUE2NDogdW5leHBlY3RlZCBmYWlsdXJlICIKLQkJCQkib2Ygc21wX2NhbGxfZnVuY3Rpb24ob3BfcmVzdG9yZV9wbXYpXG4iKTsKLQl9Ci0KLQlvcF9yZXN0b3JlX3BtdihOVUxMKTsKLQotCWZyZWVfaXJxKE1ZX09QUk9GSUxFX1ZFQ1RPUiwgTlVMTCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tIFBNVSBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogVGhpcyBpcyBraW5kIG9mIGFydGlmaWNpYWwuICBUaGUgcHJvYyBpbnRlcmZhY2UgbWlnaHQgcmVhbGx5IHdhbnQgdG8KLSAqIGFjY2VwdCByZWdpc3RlciB2YWx1ZXMgZGlyZWN0bHkuICBUaGVyZSBhcmUgb3RoZXIgZmVhdHVyZXMgbm90IGV4cG9zZWQgCi0gKiBieSB0aGlzIGxpbWl0ZWQgaW50ZXJmYWNlLiAgT2YgY291cnNlIHRoYXQgbWlnaHQgcmVxdWlyZSBhbGwgc29ydHMgb2YKLSAqIHZhbGlkaXR5IGNoZWNraW5nPz8/ICovCi1zdGF0aWMgdm9pZAotcG1jX2ZpbGxfaW4odWxvbmcgKnZhbCwgdTgga2VybmVsLCB1OCB1c2VyLCB1OCBldmVudCwgdTggdW0pCi17Ci0JLyogZW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uICovCi0JKnZhbCB8PSAoMTw8NSk7Ci0KLQkvKiBzZXR1cCBhcyBhIHByaXZpbGVnZWQgbW9uaXRvciAqLwotCSp2YWwgfD0gKDE8PDYpOwotCi0JLyogTWNLaW5sZXkgcmVxdWlyZXMgcG1jNCB0byBoYXZlIGJpdCAyMyBzZXQgKGVuYWJsZSBQTVUpLgotCSAqIEl0IGlzIHN1cHBvc2VkbHkgaWdub3JlZCBpbiBvdGhlciBwbWMgcmVnaXN0ZXJzLgotCSAqIFRyeSBhc3N1bWluZyBpdCdzIGlnbm9yZWQgaW4gSXRhbml1bSwgdG9vLCBhbmQganVzdAotCSAqIHNldCBpdCBmb3IgZXZlcnlvbmUuCi0JICovCi0KLQkqdmFsIHw9ICgxPDwyMyk7Ci0KLQkvKiBlbmFibGUvZGlzYWJsZSBjaG9zZW4gT1MgYW5kIFVTUiBjb3VudGluZyAqLwotCSh1c2VyKSAgID8gKCp2YWwgfD0gKDE8PDMpKQotCQkgOiAoKnZhbCAmPSB+KDE8PDMpKTsKLQotCShrZXJuZWwpID8gKCp2YWwgfD0gKDE8PDApKQotCQkgOiAoKnZhbCAmPSB+KDE8PDApKTsKLQotCS8qIHdoYXQgYXJlIHdlIGNvdW50aW5nID8gKi8KLQkqdmFsICY9IH4oMHhmZiA8PCA4KTsKLQkqdmFsIHw9ICgoZXZlbnQgJiAweGZmKSA8PCA4KTsKLQkqdmFsICY9IH4oMHhmIDw8IDE2KTsKLQkqdmFsIHw9ICgodW0gJiAweGYpIDw8IDE2KTsKLX0KLQotCi1zdGF0aWMgdm9pZAotcG11X3NldHVwKHZvaWQgKmR1bW15KQotewotCXVsb25nIHBtY192YWw7Ci0JaW50IGlpOwotCi0JLyogc2V0dXAgZWFjaCBjb3VudGVyICovCi0JZm9yIChpaSA9IDAgOyBpaSA8IG9wX25yX2NvdW50ZXJzIDsgKytpaSkgewotCQlpZiAoc3lzY3RsLmN0cltpaV0uZW5hYmxlZCkgewotCQkJcG1jX3ZhbCA9IDA7Ci0KLQkJCXNldF9wbWRfbmVnKHN5c2N0bC5jdHJbaWldLmNvdW50LCBpaSk7Ci0JCQlwbWNfZmlsbF9pbigmcG1jX3ZhbCwgc3lzY3RsLmN0cltpaV0ua2VybmVsLCAKLQkJCQlzeXNjdGwuY3RyW2lpXS51c2VyLCBzeXNjdGwuY3RyW2lpXS5ldmVudCwgCi0JCQkJc3lzY3RsLmN0cltpaV0udW5pdF9tYXNrKTsKLQotCQkJc2V0X3BtYyhwbWNfdmFsLCBpaSk7Ci0JCX0KLQl9Ci19Ci0KLQotdm9pZCAKLWRpc2FibGVfcHNyKHZvaWQgKmR1bW15KQotewotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCS8qIGRpc2FibGUgcHJvZmlsaW5nIGZvciBteSBzYXZlZCBzdGF0ZSAqLwotCXJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikoKHVuc2lnbmVkIGxvbmcpIGN1cnJlbnQgKyBJQTY0X1NUS19PRkZTRVQpOwotCXJlZ3MtLTsKLQlpYTY0X3BzcihyZWdzKS0+cHAgPSAwOwotCS8qIHNob3VsZG4ndCBuZWVkIHRvICovCi0JaWE2NF9wc3IocmVncyktPnVwID0gMDsKLQotCS8qIGRpc2FibGUgcHJvZmlsaW5nIGZvciBteSBjdXJyZW50IHN0YXRlICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyc20gcHNyLnBwOzsiOjo6ICJtZW1vcnkiKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1BFUkZNT04pICYmIGRlZmluZWQoQ09ORklHX1NNUCkKLSNpZiBWX0FUX0xFQVNUKDIsIDQsIDIxKQotCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF9pbmZvIHw9ICBQRk1fQ1BVSU5GT19TWVNUX1dJREU7Ci0JbG9jYWxfY3B1X2RhdGEtPnBmbV9zeXN0X2luZm8gJj0gflBGTV9DUFVJTkZPX0RDUl9QUDsKLQkvKiBGSVhNRTogd2hhdCB0b2RvIHdpdGggdGhlIDNyZCBmbGFncyBQRk1fQ1BVSU5GT19FWENMX0lETEUgMHg0ICovCi0jZWxzZQotCS8qIGRpc2FibGUgcHJvZmlsaW5nIGZvciBldmVyeW9uZSBlbHNlICovCi0JbG9jYWxfY3B1X2RhdGEtPnBmbV9zeXN0X3dpZGUgPSAxOwotCWxvY2FsX2NwdV9kYXRhLT5wZm1fZGNyX3BwID0gMDsKLSNlbmRpZgotI2VuZGlmCi0JaWE2NF9zZXRfcG1jKDAsMCk7Ci0JaWE2NF9zcmx6X2QoKTsKLX0KLQotCi1zdGF0aWMgaW50Ci1wbXVfc2V0dXBfYWxsKHZvaWQpCi17Ci0KLQkvKiBUaGlzIHdvdWxkIGJlIGEgZ3JlYXQgcGxhY2UgdG8gcmVzZXJ2ZSBhbGwgY3B1cyB3aXRoIAotCSAqIHNvbWUgc29ydCBvZiBjYWxsIHRvIHBlcmZtb25jdGwgKHNvbWV0aGluZyBsaWtlIHRoZQotCSAqIENSRUFURV9DT05URVhUIGNvbW1hbmQpLiAgVGhlIGN1cnJlbnQgaW50ZXJmYWNlIHRvIAotCSAqIHBlcmZtb25jdGwgd2FudHMgdG8gYmUgY2FsbGVkIGZyb20gYSBkaWZmZXJlbnQgdGFzayBpZAotCSAqIGZvciBlYWNoIENQVSB0byBiZSBzZXQgdXAgKGFuZCBkb2Vzbid0IGFsbG93IGNhbGxzIGZyb20KLQkgKiBtb2R1bGVzLgotCSAqLwotCi0JLyogZGlzYWJsZSBwcm9maWxpbmcgd2l0aCB0aGUgcHNyLnBwIGJpdCAqLwotCWlmICgoc21wX2NhbGxfZnVuY3Rpb24oZGlzYWJsZV9wc3IsIE5VTEwsIDAsIDEpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlkaXNhYmxlX3BzcihOVUxMKTsKLQotCS8qIG5vdyBJJ3ZlIHJlc2VydmVkIHRoZSBQTVVzIGFuZCB0aGV5IHNob3VsZCBiZSBxdWlldCAqLwotCi0JaWYgKChzbXBfY2FsbF9mdW5jdGlvbihwbXVfc2V0dXAsIE5VTEwsIDAsIDEpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlwbXVfc2V0dXAoTlVMTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotI2lmbmRlZiBDT05GSUdfU01QCi0vKiBmcm9tIGxpbnV4L2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jICovCi0vKgotICogT3JpZ2luYWx5IFdyaXR0ZW4gYnkgR2FuZXNoIFZlbmtpdGFjaGFsYW0sIElCTSBDb3JwLgotICogQ29weXJpZ2h0IChDKSAxOTk5IEdhbmVzaCBWZW5raXRhY2hhbGFtIDx2ZW5raXRhY0B1cy5pYm0uY29tPgotICoKLSAqIE1vZGlmaWNhdGlvbnMgYnkgU3RlcGhhbmUgRXJhbmlhbiwgSGV3bGV0dC1QYWNrYXJkIENvLgotICogTW9kaWZpY2F0aW9ucyBieSBEYXZpZCBNb3NiZXJnZXItVGFuZywgSGV3bGV0dC1QYWNrYXJkIENvLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAyICBIZXdsZXR0IFBhY2thcmQgQ28KLSAqICAgICAgICAgICAgICAgU3RlcGhhbmUgRXJhbmlhbiA8ZXJhbmlhbkBocGwuaHAuY29tPgotICogICAgICAgICAgICAgICBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+Ci0gKi8KLQotLyoKLSAqIE9uIFVQIGtlcm5lbHMsIHdlIGRvIG5vdCBuZWVkIHRvIGNvbnN0YW50bHkgc2V0IHRoZSBwc3IucHAgYml0Ci0gKiB3aGVuIGEgdGFzayBpcyBzY2hlZHVsZWQuIFRoZSBwc3IucHAgYml0IGNhbiBvbmx5IGJlIGNoYW5nZWQgaW4KLSAqIHRoZSBrZXJuZWwgYmVjYXVzZSBvZiBhIHVzZXIgcmVxdWVzdC4gR2l2ZW4gd2UgYXJlIG9uIGEgVVAgbm9uIHByZWVlbXB0aXZlIAotICoga2VybmVsIHdlIGtub3cgdGhhdCBubyBvdGhlciB0YXNrIGlzIHJ1bm5pbmcsIHNvIHdlIGNuYSBzaW1wbHkgdXBkYXRlIHRoZWlyCi0gKiBwc3IucHAgZnJvbSB0aGVpciBzYXZlZCBzdGF0ZS4gVGhlcmUgaXMgdGhpcyBubyBpbXBhY3Qgb24gdGhlIGNvbnRleHQgc3dpdGNoCi0gKiBjb2RlIGNvbXBhcmVkIHRvIHRoZSBTTVAgY2FzZS4KLSAqLwotc3RhdGljIHZvaWQKLW9wX3Rhc2tsaXN0X3RvZ2dsZV9wcCh1bnNpZ25lZCBpbnQgdmFsKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0KLQlmb3JfZWFjaF90YXNrKHApIHsKLQkJcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSgodW5zaWduZWQgbG9uZykgcCArIElBNjRfU1RLX09GRlNFVCk7Ci0KLQkJLyoKLQkJICogcG9zaXRpb24gb24gcHRfcmVncyBzYXZlZCBvbiBzdGFjayBvbiAxc3QgZW50cnkgaW50byB0aGUga2VybmVsCi0JCSAqLwotCQlyZWdzLS07Ci0KLQkJLyoKLQkJICogdXBkYXRlIHBzci5wcAotCQkgKi8KLQkJaWE2NF9wc3IocmVncyktPnBwID0gdmFsOwotCX0KLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci19Ci0jZW5kaWYKLQotCi1zdGF0aWMgdm9pZAotcG11X3N0YXJ0KHZvaWQgKmluZm8pCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3M7Ci0KLQlpZiAoaW5mbyAmJiAoKigodWludCAqKWluZm8pICE9IG9wX2NwdV9pZCgpKSkKLQkJcmV0dXJuOwotCi0JLyogcHJpbnRrKEtFUk5fQUxFUlQgIm9wcm9maWxlX0lBNjQ6IHBtdV9zdGFydCBvbiBjcHUgJWRcbiIsIAotCSAgCW9wX2NwdV9pZCgpKTsgKi8KLQkvKiBUaGUgZGVmYXVsdCBjb250cm9sIHJlZ2lzdGVyIHBwIHZhbHVlIGlzIGNvcGllZCBpbnRvIHBzci5wcAotCSAqIG9uIGFuIGludGVycnVwdC4gIFRoaXMgYWxsb3dzIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIHRvCi0JICogYmUgbW9uaXRvcmVkLgotCSAqLwotCWlhNjRfc2V0X2RjcihpYTY0X2dldF9kY3IoKSB8IElBNjRfRENSX1BQKTsKLQotI2lmZGVmIENPTkZJR19QRVJGTU9OCi0jaWZkZWYgQ09ORklHX1NNUAotI2lmIFZfQVRfTEVBU1QoMiwgNCwgMjEpCi0JbG9jYWxfY3B1X2RhdGEtPnBmbV9zeXN0X2luZm8gfD0gUEZNX0NQVUlORk9fU1lTVF9XSURFOwotCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF9pbmZvIHw9IFBGTV9DUFVJTkZPX0RDUl9QUDsKLQkvKiBGSVhNRTogd2hhdCB0b2RvIHdpdGggdGhlIDNyZCBmbGFncyBQRk1fQ1BVSU5GT19FWENMX0lETEUgMHg0ICovCi0jZWxzZQotCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF93aWRlID0gMTsKLQlsb2NhbF9jcHVfZGF0YS0+cGZtX2Rjcl9wcCA9IDE7Ci0jZW5kaWYKLSNlbHNlCi0Jb3BfdGFza2xpc3RfdG9nZ2xlX3BwKDEpOwotI2VuZGlmCi0jZW5kaWYKLQkvKiBzZXQgaXQgaW4gbXkgc2F2ZWQgc3RhdGUgKi8KLQlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKSBjdXJyZW50ICsgSUE2NF9TVEtfT0ZGU0VUKTsKLQlyZWdzLS07Ci0JaWE2NF9wc3IocmVncyktPnBwID0gMTsKLQotCS8qIHNldCBpdCBpbiBteSBjdXJyZW50IHN0YXRlICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzc20gcHNyLnBwOzsiOjo6ICJtZW1vcnkiKTsKLQlpYTY0X3NybHpfZCgpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1wbXVfc3RvcCh2b2lkICppbmZvKQotewotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCi0JaWYgKGluZm8gJiYgKCooKHVpbnQgKilpbmZvKSAhPSBvcF9jcHVfaWQoKSkpCi0JCXJldHVybjsKLQotCS8qIHN0b3AgaW4gbXkgY3VycmVudCBzdGF0ZSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgicnNtIHBzci5wcDs7Ijo6OiAibWVtb3J5Iik7Ci0KLQkvKiBkaXNhYmxlIHRoZSBkY3IgcHAgKi8KLQlpYTY0X3NldF9kY3IoaWE2NF9nZXRfZGNyKCkgJiB+SUE2NF9EQ1JfUFApOwotCi0jaWZkZWYgQ09ORklHX1BFUkZNT04KLSNpZmRlZiBDT05GSUdfU01QCi0jaWYgVl9BVF9MRUFTVCgyLCA0LCAyMSkKLQlsb2NhbF9jcHVfZGF0YS0+cGZtX3N5c3RfaW5mbyAmPSB+UEZNX0NQVUlORk9fU1lTVF9XSURFOwotCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF9pbmZvICY9IH5QRk1fQ1BVSU5GT19EQ1JfUFA7Ci0JLyogRklYTUU6IHdoYXQgdG9kbyB3aXRoIHRoZSAzcmQgZmxhZ3MgUEZNX0NQVUlORk9fRVhDTF9JRExFIDB4NCAqLwotI2Vsc2UKLQlsb2NhbF9jcHVfZGF0YS0+cGZtX3N5c3Rfd2lkZSA9IDA7Ci0JbG9jYWxfY3B1X2RhdGEtPnBmbV9kY3JfcHAgPSAwOwotI2VuZGlmCi0jZWxzZQotCXBmbV90YXNrbGlzdF90b2dnbGVfcHAoMCk7Ci0jZW5kaWYKLSNlbmRpZgotCi0JLyogZGlzYWJsZSBpbiBteSBzYXZlZCBzdGF0ZSAqLwotCXJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikoKHVuc2lnbmVkIGxvbmcpIGN1cnJlbnQgKyBJQTY0X1NUS19PRkZTRVQpOwotCXJlZ3MtLTsKLQlpYTY0X3BzcihyZWdzKS0+cHAgPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1wbXVfc2VsZWN0X3N0YXJ0KHVpbnQgY3B1KQotewotCWlmIChjcHUgPT0gb3BfY3B1X2lkKCkpCi0JCXBtdV9zdGFydChOVUxMKTsKLQllbHNlCi0JCXNtcF9jYWxsX2Z1bmN0aW9uKHBtdV9zdGFydCwgJmNwdSwgMCwgMSk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXBtdV9zZWxlY3Rfc3RvcCh1aW50IGNwdSkKLXsKLQlpZiAoY3B1ID09IG9wX2NwdV9pZCgpKQotCQlwbXVfc3RvcChOVUxMKTsKLQllbHNlCi0JCXNtcF9jYWxsX2Z1bmN0aW9uKHBtdV9zdG9wLCAmY3B1LCAwLCAxKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotcG11X3N0YXJ0X2FsbCh2b2lkKQotewotCWludCBjcHUsIGk7Ci0gCi0JZm9yIChjcHU9MDsgY3B1IDwgc21wX251bV9jcHVzOyBjcHUrKykgewotCQlzdHJ1Y3QgX29wcm9mX2RhdGEgKiBkYXRhID0gJm9wcm9mX2RhdGFbY3B1XTsKLQotCQlmb3IgKGkgPSAwIDsgaSA8IG9wX25yX2NvdW50ZXJzIDsgKytpKSB7Ci0JCQlpZiAoc3lzY3RsLmN0cltpXS5lbmFibGVkKSB7Ci0JCQkJZGF0YS0+Y3RyX2NvdW50W2ldID0gc3lzY3RsLmN0cltpXS5jb3VudDsKLQkJCX0gZWxzZSB7Ci0JCQkJZGF0YS0+Y3RyX2NvdW50W2ldID0gMDsKLQkJCX0KLQkJfQotCX0KLSAKLQlpZiAoIWluc3RhbGxfaGFuZGxlcigpKSB7Ci0JCXNtcF9jYWxsX2Z1bmN0aW9uKHBtdV9zdGFydCwgTlVMTCwgMCwgMSk7Ci0JCXBtdV9zdGFydChOVUxMKTsKLQl9Ci0JCS8qIEZJWE1FIG5lZWQgc29tZSB3YXkgdG8gZmFpbCBoZXJlICovOwotfQotCi0KLXN0YXRpYyB2b2lkCi1wbXVfc3RvcF9hbGwodm9pZCkKLXsKLQlzbXBfY2FsbF9mdW5jdGlvbihwbXVfc3RvcCwgTlVMTCwgMCwgMSk7Ci0JcG11X3N0b3AoTlVMTCk7Ci0JcmVzdG9yZV9oYW5kbGVyKCk7Ci19Ci0KLSAKLXN0YXRpYyBpbnQKLXBtdV9jaGVja19wYXJhbXModm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgZW5hYmxlZCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgb3BfbnJfY291bnRlcnMgOyBpKyspIHsKLQkJaWYgKCFzeXNjdGwuY3RyW2ldLmVuYWJsZWQpCi0JCQljb250aW51ZTsKLQotCQllbmFibGVkID0gMTsKLQotCQlpZiAoIXN5c2N0bC5jdHJbaV0udXNlciAmJiAhc3lzY3RsLmN0cltpXS5rZXJuZWwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IG5laXRoZXIga2VybmVsIG5vciB1c2VyICIKLQkJCSAgICAgICAic2V0IGZvciBjb3VudGVyICVkXG4iLCBpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGNoZWNrX3JhbmdlKHN5c2N0bC5jdHJbaV0uY291bnQsIDEsIE9QX01BWF9QRVJGX0NPVU5ULAotCQkJImN0ciBjb3VudCB2YWx1ZSAlZCBub3QgaW4gcmFuZ2UgKCVkICVsZClcbiIpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFlbmFibGVkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IG5vIGNvdW50ZXJzIGhhdmUgYmVlbiBlbmFibGVkLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3Qgb3BfbXNycyBjcHVfbXNyc1tOUl9DUFVTXTsKLQotCi1zdGF0aWMgdm9pZCBmcmVlX21zcl9ncm91cChzdHJ1Y3Qgb3BfbXNyX2dyb3VwICogZ3JvdXApCi17Ci0JaWYgKGdyb3VwLT5hZGRycykKLQkJa2ZyZWUoZ3JvdXAtPmFkZHJzKTsKLQlpZiAoZ3JvdXAtPnNhdmVkKQotCQlrZnJlZShncm91cC0+c2F2ZWQpOwotCWdyb3VwLT5hZGRycyA9IE5VTEw7Ci0JZ3JvdXAtPnNhdmVkID0gTlVMTDsKLX0KLSAKLQotc3RhdGljIHZvaWQgcG11X3NhdmVfcmVnaXN0ZXJzKHZvaWQgKiBkdW1teSkKLXsKLQl1aW50IGk7Ci0JdWludCBjb25zdCBjcHUgPSBvcF9jcHVfaWQoKTsKLQlzdHJ1Y3Qgb3BfbXNyX2dyb3VwICogY291bnRlcnMgPSAmY3B1X21zcnNbY3B1XS5jb3VudGVyczsKLQlzdHJ1Y3Qgb3BfbXNyX2dyb3VwICogY29udHJvbHMgPSAmY3B1X21zcnNbY3B1XS5jb250cm9sczsKLQotCWNvdW50ZXJzLT5hZGRycyA9IE5VTEw7IAotCWNvdW50ZXJzLT5zYXZlZCA9IE5VTEw7Ci0JY29udHJvbHMtPmFkZHJzID0gTlVMTDsKLQljb250cm9scy0+c2F2ZWQgPSBOVUxMOwotCi0JY291bnRlcnMtPnNhdmVkID0ga21hbGxvYygKLQkJb3BfbnJfY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IG9wX3NhdmVkX21zciksIEdGUF9LRVJORUwpOwotCWlmICghY291bnRlcnMtPnNhdmVkKQotCQlnb3RvIGZhdWx0OwotIAotCWNvbnRyb2xzLT5zYXZlZCA9IGttYWxsb2MoCi0JCW9wX25yX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBvcF9zYXZlZF9tc3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbnRyb2xzLT5zYXZlZCkKLQkJZ290byBmYXVsdDsKLSAKLQlmb3IgKGkgPSAwOyBpIDwgb3BfbnJfY291bnRlcnM7ICsraSkgewotCQljb250cm9scy0+c2F2ZWRbaV0ubG93ID0gZ2V0X3BtYyhpKTsKLQkJY291bnRlcnMtPnNhdmVkW2ldLmxvdyA9IGdldF9wbWQoaSk7Ci0JfQotCXJldHVybjsKLQotZmF1bHQ6Ci0JZnJlZV9tc3JfZ3JvdXAoY291bnRlcnMpOwotCWZyZWVfbXNyX2dyb3VwKGNvbnRyb2xzKTsKLX0KLSAKLQotc3RhdGljIHZvaWQgcG11X3Jlc3RvcmVfcmVnaXN0ZXJzKHZvaWQgKiBkdW1teSkKLXsKLQl1aW50IGk7Ci0JdWludCBjb25zdCBjcHUgPSBvcF9jcHVfaWQoKTsKLQlzdHJ1Y3Qgb3BfbXNyX2dyb3VwICogY291bnRlcnMgPSAmY3B1X21zcnNbY3B1XS5jb3VudGVyczsKLQlzdHJ1Y3Qgb3BfbXNyX2dyb3VwICogY29udHJvbHMgPSAmY3B1X21zcnNbY3B1XS5jb250cm9sczsKLQotCWZvciAoaSA9IDA7IGkgPCBvcF9ucl9jb3VudGVyczsgKytpKSB7Ci0JCXNldF9wbWMoY29udHJvbHMtPnNhdmVkW2ldLmxvdywgaSk7Ci0JCXNldF9wbWQoY291bnRlcnMtPnNhdmVkW2ldLmxvdywgaSk7Ci0JfQotCi0JZnJlZV9tc3JfZ3JvdXAoY291bnRlcnMpOwotCWZyZWVfbXNyX2dyb3VwKGNvbnRyb2xzKTsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLXBtdV9pbml0KHZvaWQpCi17Ci0JaW50IGVyciA9IDA7IAotCi0JLyogZmlndXJlIG91dCBwcm9jZXNzb3IgdHlwZSBjb25maWd1cmUgbnVtYmVyIG9mIGJpdHMgaW4gcG1kCi0JICAgYW5kIG51bWJlciBvZiBjb3VudGVycyAqLwotCXN3aXRjaCAoZ2V0X2NwdV90eXBlKCkpIHsKLQljYXNlIENQVV9JQTY0XzE6Ci0JCXBtZF9tYXNrID0gSUE2NF8xX1BNRF9NQVNLX1ZBTDsgYnJlYWs7Ci0JY2FzZSBDUFVfSUE2NF8yOgotCWNhc2UgQ1BVX0lBNjQ6Ci0JCXBtZF9tYXNrID0gSUE2NF8yX1BNRF9NQVNLX1ZBTDsgYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTzsgYnJlYWs7Ci0JfQotCi0Jb3BfbnJfY291bnRlcnMgPSA0OwotCi0JaWYgKChlcnIgPSBzbXBfY2FsbF9mdW5jdGlvbihwbXVfc2F2ZV9yZWdpc3RlcnMsIE5VTEwsIDAsIDEpKSkgewotCQlnb3RvIG91dDsKLQl9Ci0JcG11X3NhdmVfcmVnaXN0ZXJzKE5VTEwpOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLSAKLQotc3RhdGljIHZvaWQKLXBtdV9kZWluaXQodm9pZCkKLXsKLQlzbXBfY2FsbF9mdW5jdGlvbihwbXVfcmVzdG9yZV9yZWdpc3RlcnMsIE5VTEwsIDAsIDEpOwotCXBtdV9yZXN0b3JlX3JlZ2lzdGVycyhOVUxMKTsKLX0KLSAKLQotc3RhdGljIGNoYXIgKm5hbWVzW10gPSB7ICIwIiwgIjEiLCAiMiIsICIzIiwgfTsKLQotCi1zdGF0aWMgaW50Ci1wbXVfYWRkX3N5c2N0bHMoY3RsX3RhYmxlICogbmV4dCkKLXsKLQljdGxfdGFibGUgKiBzdGFydCA9IG5leHQ7IAotCWN0bF90YWJsZSAqIHRhYjsgCi0JaW50IGksIGo7Ci0gCi0JZm9yIChpPTA7IGkgPCBvcF9ucl9jb3VudGVyczsgaSsrKSB7Ci0JCW5leHQtPmN0bF9uYW1lID0gMTsKLQkJbmV4dC0+cHJvY25hbWUgPSBuYW1lc1tpXTsKLQkJbmV4dC0+bW9kZSA9IDA3MDA7Ci0KLQkJaWYgKCEodGFiID0ga21hbGxvYyhzaXplb2YoY3RsX3RhYmxlKSo3LCBHRlBfS0VSTkVMKSkpCi0JCQlnb3RvIGNsZWFudXA7Ci0gCi0JCW5leHQtPmNoaWxkID0gdGFiOwotCi0JCW1lbXNldCh0YWIsIDAsIHNpemVvZihjdGxfdGFibGUpKjcpOwotCQl0YWJbMF0gPSAoKGN0bF90YWJsZSkgeyAxLCAiZW5hYmxlZCIsICZzeXNjdGxfcGFybXMuY3RyW2ldLmVuYWJsZWQsIHNpemVvZihpbnQpLCAwNjAwLCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7Ci0JCXRhYlsxXSA9ICgoY3RsX3RhYmxlKSB7IDEsICJldmVudCIsICZzeXNjdGxfcGFybXMuY3RyW2ldLmV2ZW50LCBzaXplb2YoaW50KSwgMDYwMCwgTlVMTCwgbHByb2NfZG9pbnR2ZWMsIE5VTEwsICB9KTsKLQkJdGFiWzJdID0gKChjdGxfdGFibGUpIHsgMSwgImNvdW50IiwgJnN5c2N0bF9wYXJtcy5jdHJbaV0uY291bnQsIHNpemVvZihpbnQpLCAwNjAwLCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7Ci0JCXRhYlszXSA9ICgoY3RsX3RhYmxlKSB7IDEsICJ1bml0X21hc2siLCAmc3lzY3RsX3Bhcm1zLmN0cltpXS51bml0X21hc2ssIHNpemVvZihpbnQpLCAwNjAwLCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7Ci0JCXRhYls0XSA9ICgoY3RsX3RhYmxlKSB7IDEsICJrZXJuZWwiLCAmc3lzY3RsX3Bhcm1zLmN0cltpXS5rZXJuZWwsIHNpemVvZihpbnQpLCAwNjAwLCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7Ci0JCXRhYls1XSA9ICgoY3RsX3RhYmxlKSB7IDEsICJ1c2VyIiwgJnN5c2N0bF9wYXJtcy5jdHJbaV0udXNlciwgc2l6ZW9mKGludCksIDA2MDAsIE5VTEwsIGxwcm9jX2RvaW50dmVjLCBOVUxMLCB9KTsKLQkJbmV4dCsrOwotCX0KLQotCXJldHVybiAwOwotCi1jbGVhbnVwOgotCW5leHQgPSBzdGFydDsKLQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCWtmcmVlKG5leHQtPmNoaWxkKTsKLQkJbmV4dCsrOwotCX0KLQlyZXR1cm4gLUVGQVVMVDsKLX0KLQotCi1zdGF0aWMgdm9pZCBwbXVfcmVtb3ZlX3N5c2N0bHMoY3RsX3RhYmxlICogbmV4dCkKLXsKLQlpbnQgaWk7Ci0KLQlmb3IgKGlpPTA7IGlpIDwgb3BfbnJfY291bnRlcnM7IGlpKyspIHsKLQkJa2ZyZWUobmV4dC0+Y2hpbGQpOwotCQluZXh0Kys7Ci0JfQotfQotIAotCi1zdHJ1Y3Qgb3BfaW50X29wZXJhdGlvbnMgb3Bfbm1pX29wcyA9IHsKLQlpbml0OiBwbXVfaW5pdCwKLQlkZWluaXQ6IHBtdV9kZWluaXQsCi0JYWRkX3N5c2N0bHM6IHBtdV9hZGRfc3lzY3RscywKLQlyZW1vdmVfc3lzY3RsczogcG11X3JlbW92ZV9zeXNjdGxzLAotCWNoZWNrX3BhcmFtczogcG11X2NoZWNrX3BhcmFtcywKLQlzZXR1cDogcG11X3NldHVwX2FsbCwKLQlzdGFydDogcG11X3N0YXJ0X2FsbCwKLQlzdG9wOiBwbXVfc3RvcF9hbGwsCi0Jc3RhcnRfY3B1OiBwbXVfc2VsZWN0X3N0YXJ0LAotCXN0b3BfY3B1OiBwbXVfc2VsZWN0X3N0b3AsIAotfTsKLQotCi1zdHJ1Y3Qgb3BfaW50X29wZXJhdGlvbnMgY29uc3QgKiBvcF9pbnRfaW50ZXJmYWNlKCkKLXsKLQlyZXR1cm4gJm9wX25taV9vcHM7Ci19Ci0KLS8qIE5lZWQgdGhpcyBkdW1teSBzbyBtb2R1bGUvb3Byb2ZpbGUuYyBsaW5rcyAqLwotc3RydWN0IG9wX2ludF9vcGVyYXRpb25zIG9wX3J0Y19vcHMgPSB7Ci0JaW5pdDogTlVMTCwKLQlkZWluaXQ6IE5VTEwsCi0JYWRkX3N5c2N0bHM6IE5VTEwsCi0JcmVtb3ZlX3N5c2N0bHM6IE5VTEwsCi0JY2hlY2tfcGFyYW1zOiBOVUxMLAotCXNldHVwOiBOVUxMLAotCXN0YXJ0OiBOVUxMLAotCXN0b3A6IE5VTEwsCi0Jc3RhcnRfY3B1OiBOVUxMLAotCXN0b3BfY3B1OiBOVUxMLAotfTsKZGlmZiAtLWdpdCBhL21vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmMgYi9tb2R1bGUvaWE2NC9vcF9zeXNjYWxscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODJiNWVlLi4wMDAwMDAwCi0tLSBhL21vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9zeXNjYWxscy5jCi0gKiBUcmFjaW5nIG9mIHN5c3RlbSBjYWxscwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEJvYiBNb250Z29tZXJ5Ci0gKiBAYXV0aG9yIFdpbGwgQ29oZW4KLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1hbi5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLQotI2luY2x1ZGUgIm9wcm9maWxlLmgiCi0jaW5jbHVkZSAib3BfZGNhY2hlLmgiCi0jaW5jbHVkZSAib3BfdXRpbC5oIgotCi11aW50IGRuYW1lX3RvcDsKLXN0cnVjdCBxc3RyICoqZG5hbWVfc3RhY2s7Ci1jaGFyICogcG9vbF9wb3M7Ci1jaGFyICogcG9vbF9zdGFydDsKLWNoYXIgKiBwb29sX2VuZDsKLSAKLXZvaWQgb3Byb2ZfcHV0X25vdGUoc3RydWN0IG9wX25vdGUgKnNhbXApOwotCi0vKiAtLS0tLS0tLS0tLS0gc3lzdGVtIGNhbGxzIC0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuOwotICAgICAgICB1bnNpZ25lZCBsb25nIHByb3Q7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotfTsKLQotLyogLS0tLS0tLS0tIElBNjQgdmVyc2lvbnMgb2Ygc3lzdGVtIGNhbGxzIC0tLS0tLSAqLwotYXNtbGlua2FnZSBzdGF0aWMgaW50ICgqb2xkX3N5c19jbG9uZSkobG9uZywgbG9uZyk7Ci1hc21saW5rYWdlIHN0YXRpYyBpbnQgKCpvbGRfc3lzX2Nsb25lMikobG9uZywgbG9uZywgbG9uZyk7Ci1hc21saW5rYWdlIHN0YXRpYyBpbnQgKCpvbGRfc3lzX2V4ZWN2ZSkoY2hhciAqLCBjaGFyICoqLCBjaGFyICoqKTsKLWFzbWxpbmthZ2Ugc3RhdGljIHVuc2lnbmVkIGxvbmcgKCpvbGRfc3lzX21tYXApKHVuc2lnbmVkIGxvbmcsCi0JCQkJdW5zaWduZWQgbG9uZywgaW50LCBpbnQsIGludCwgbG9uZyk7Ci1hc21saW5rYWdlIHN0YXRpYyB1bnNpZ25lZCBsb25nICgqb2xkX3N5c19tbWFwMikodW5zaWduZWQgbG9uZywKLQkJCQl1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgaW50LCBsb25nKTsKLWFzbWxpbmthZ2Ugc3RhdGljIGxvbmcgKCpvbGRfc3lzX2luaXRfbW9kdWxlKShjaGFyIGNvbnN0ICosIHN0cnVjdCBtb2R1bGUgKik7Ci1hc21saW5rYWdlIHN0YXRpYyBsb25nICgqb2xkX3N5c19leGl0KShpbnQpOwotCi0vKiAtLS0tLS0tLS0gZGVjbGFyYXRpb25zIG9mIGludGVyY2VwdGlvbiBzdHVicyBmb3IgSUE2NCAgLS0tLS0tICovCi1hc21saW5rYWdlIGxvbmcgcG9zdF9zdHViX2Nsb25lKGxvbmcsIGxvbmcpOwotYXNtbGlua2FnZSBsb25nIHBvc3Rfc3R1Yl9jbG9uZTIobG9uZywgbG9uZywgbG9uZyk7Ci1hc21saW5rYWdlIGxvbmcgbXlfaWE2NF9leGVjdmUoY2hhciAqLCBjaGFyICoqLCBjaGFyICoqKTsKLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBwb3N0X3N0dWJfbW1hcCh1bnNpZ25lZCBsb25nLAotCQkJCQl1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgaW50LCBsb25nKTsKLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBwb3N0X3N0dWJfbW1hcDIodW5zaWduZWQgbG9uZywKLQkJCQkJdW5zaWduZWQgbG9uZywgaW50LCBpbnQsIGludCwgbG9uZyk7Ci1hc21saW5rYWdlIGxvbmcgcG9zdF9zdHViX2luaXRfbW9kdWxlKGNoYXIgY29uc3QgKiwgc3RydWN0IG1vZHVsZSAqKTsKLWFzbWxpbmthZ2UgbG9uZyBwcmVfc3R1Yl9leGl0KGludCk7Ci0KLS8qIElBNjQgc3lzdGVtIGNhbGwgdGFibGUgZG9lc24ndCB1c2UgZnVuY3Rpb24gcG9pbnRlcnMsIGl0IHVzZXMKLSAqIHBvaW50ZXJzIHRvIGNvZGUgKG5vdCB0aGUgc2FtZSB0aGluZykuICBCYXNpY2FsbHkgaXQgY2FuIHZpb2xhdGUgdGhlCi0gKiBwcm9jZWR1cmUgY2FsbGluZyBydWxlcyBiZWNhdXNlIHRoZXNlICJwcm9jZWR1cmUgY2FsbHMiIGFyZSBtYWRlIGJ5Ci0gKiB0aGUgYXNzZW1ibHkgbGFuZ3VhZ2UgQlJFQUsgaGFuZGxlciBpbiBpdnQuUy4KLSAqLwotCi1zdHJ1Y3QgZmRlc2MgewotCXZvaWQgKmlwOwotCXZvaWQgKmdwOwotfTsKLQotc3RydWN0IGZkZXNjIGZkZXNjX2Nsb25lOwotc3RydWN0IGZkZXNjIGZkZXNjX2Nsb25lMjsKLXN0cnVjdCBmZGVzYyBmZGVzY19leGVjdmU7Ci1zdHJ1Y3QgZmRlc2MgZmRlc2NfbW1hcDsKLXN0cnVjdCBmZGVzYyBmZGVzY19tbWFwMjsKLXN0cnVjdCBmZGVzYyBmZGVzY19pbml0X21vZHVsZTsKLXN0cnVjdCBmZGVzYyBmZGVzY19leGl0OwotLyogLS0tLS0tLS0tLS0gRW5kIG9mIElBNjQgd2VpcmRuZXNzIGZvciBub3cgLS0tLS0tLS0tLS0tLS0gKi8KLQotc3BpbmxvY2tfdCBtYXBfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKLQotLyogY2FsbGVkIHdpdGggbWFwX2xvY2sgaGVsZCAqLwotc3RhdGljIHZvaWQgb3Byb2Zfb3V0cHV0X21hcCh1bG9uZyBhZGRyLCB1bG9uZyBsZW4sCi0JdWxvbmcgb2Zmc2V0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGlzX2V4ZWN2ZSkKLXsKLQlzdHJ1Y3Qgb3Bfbm90ZSBub3RlOwotCi0JLyogZG9uJ3QgYm90aGVyIHdpdGggL2Rldi96ZXJvIG1hcHBpbmdzIGV0Yy4gKi8KLQlpZiAoIWxlbikKLQkJcmV0dXJuOwotCi0Jbm90ZS5waWQgPSBjdXJyZW50LT5waWQ7Ci0Jbm90ZS50Z2lkID0gb3BfZ2V0X3RnaWQoKTsKLQlub3RlLmFkZHIgPSBhZGRyOwotCW5vdGUubGVuID0gbGVuOwotCW5vdGUub2Zmc2V0ID0gb2Zmc2V0OwotCW5vdGUudHlwZSA9IGlzX2V4ZWN2ZSA/IE9QX0VYRUMgOiBPUF9NQVA7Ci0Jbm90ZS5oYXNoID0gaGFzaF9wYXRoKGZpbGUpOwotCWlmIChub3RlLmhhc2ggPT0gLTEpCi0JCXJldHVybjsKLQlvcHJvZl9wdXRfbm90ZSgmbm90ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgb3Byb2Zfb3V0cHV0X21hcHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQotewotCWludCBzaXplPTA7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICptYXA7Ci0KLQkvKiB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1tX3VzZXJzIGhlcmUsIHNpbmNlIHRoZXJlIGlzIGF0Ci0JICAgbGVhc3Qgb25lIHVzZXIgKGN1cnJlbnQpLCBhbmQgaWYgdGhlcmUncyBvdGhlciBjb2RlIHVzaW5nIHRoaXMKLQkgICBtbSwgdGhlbiBtbV91c2VycyBtdXN0IGJlIGF0IGxlYXN0IDI7IHdlIHNob3VsZCBuZXZlciBoYXZlIHRvCi0JICAgbW1wdXQoKSBoZXJlLiAqLwotCi0JaWYgKCEobW0gPSB0YXNrLT5tbSkpCi0JCWdvdG8gb3V0OwotCi0JbG9ja19tbWFwKG1tKTsKLQlzcGluX2xvY2soJm1hcF9sb2NrKTsKLQotCS8qIFdlIG5lZWQgdHdvIHBhc3MsIGRhZW1vbiBhc3N1bWUgdGhhbiB0aGUgZmlyc3QgbW1hcCBub3RpZmljYXRpb24KLQkgKiBpcyBmb3IgdGhlIGV4ZWN1dGFibGUgYnV0IHNvbWUgcHJvY2VzcyBkb2Vzbid0IGZvbGxvdyB0aGlzIG1vZGVsLgotCSAqLwotCWZvciAobWFwID0gbW0tPm1tYXA7IG1hcDsgbWFwID0gbWFwLT52bV9uZXh0KSB7Ci0JCWlmICghKG1hcC0+dm1fZmxhZ3MgJiBWTV9FWEVDKSB8fCAhbWFwLT52bV9maWxlKQotCQkJY29udGludWU7Ci0JCWlmICghKG1hcC0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKSkKLQkJCWNvbnRpbnVlOwotCi0JCW9wcm9mX291dHB1dF9tYXAobWFwLT52bV9zdGFydCwgbWFwLT52bV9lbmQtbWFwLT52bV9zdGFydCwKLQkJCUdFVF9WTV9PRkZTRVQobWFwKSwgbWFwLT52bV9maWxlLCAxKTsKLQl9Ci0JZm9yIChtYXAgPSBtbS0+bW1hcDsgbWFwOyBtYXAgPSBtYXAtPnZtX25leHQpIHsKLQkJaWYgKCEobWFwLT52bV9mbGFncyAmIFZNX0VYRUMpIHx8ICFtYXAtPnZtX2ZpbGUpCi0JCQljb250aW51ZTsKLQkJaWYgKG1hcC0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKQotCQkJY29udGludWU7Ci0KLQkJb3Byb2Zfb3V0cHV0X21hcChtYXAtPnZtX3N0YXJ0LCBtYXAtPnZtX2VuZC1tYXAtPnZtX3N0YXJ0LAotCQkJR0VUX1ZNX09GRlNFVChtYXApLCBtYXAtPnZtX2ZpbGUsIDApOwotCX0KLQlzcGluX3VubG9jaygmbWFwX2xvY2spOwotCXVubG9ja19tbWFwKG1tKTsKLQotb3V0OgotCXJldHVybiBzaXplOwotfQotCi0KLS8qIGV4ZWN2ZSBpcyBhIHNwZWNpYWwgY2FzZSBvbiBJQTY0LiAgVGhlIG90aGVycyBnZXQgdGhlIHJlc3VsdCBhbmQKLSAqIGFyZ3VtZW50cyBhZnRlciB0aGUgc3lzdGVtIGNhbGwgaGFzIGJlZW4gbWFkZSBmcm9tIHRoZSBBU00gc3R1Yi4gKi8KLQotYXNtbGlua2FnZSBsb25nCi1teV9zeXNfZXhlY3ZlIChjaGFyICpmaWxlbmFtZSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnQgZXJyb3I7Ci0KLQlNT0RfSU5DX1VTRV9DT1VOVDsKLQotCWZpbGVuYW1lID0gZ2V0bmFtZShmaWxlbmFtZSk7Ci0JZXJyb3IgPSBQVFJfRVJSKGZpbGVuYW1lKTsKLQlpZiAoSVNfRVJSKGZpbGVuYW1lKSkKLQkJZ290byBvdXQ7Ci0JZXJyb3IgPSBkb19leGVjdmUoZmlsZW5hbWUsIGFyZ3YsIGVudnAsIHJlZ3MpOwotCi0JaWYgKCFlcnJvcikgewotCQlQVFJBQ0VfT0ZGKGN1cnJlbnQpOwotCQlvcHJvZl9vdXRwdXRfbWFwcyhjdXJyZW50KTsKLQl9Ci0JcHV0bmFtZShmaWxlbmFtZSk7Ci1vdXQ6Ci0JdW5sb2NrX2V4ZWN2ZSgpOwotCU1PRF9ERUNfVVNFX0NPVU5UOwotCXJldHVybiBlcnJvcjsKLX0KLQotCi1zdGF0aWMgdm9pZCBvdXRfbW1hcCh1bG9uZyBhZGRyLCB1bG9uZyBsZW4sIHVsb25nIHByb3QsIHVsb25nIGZsYWdzLAotCXVsb25nIGZkLCB1bG9uZyBvZmZzZXQpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGU7Ci0KLQlsb2NrX291dF9tbWFwKCk7Ci0gCi0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJZ290byBvdXQ7Ci0KLQlzcGluX2xvY2soJm1hcF9sb2NrKTsKLQlvcHJvZl9vdXRwdXRfbWFwKGFkZHIsIGxlbiwgb2Zmc2V0LCBmaWxlLCAwKTsKLQlzcGluX3VubG9jaygmbWFwX2xvY2spOwotCi0JZnB1dChmaWxlKTsKLQotb3V0OgotCXVubG9ja19vdXRfbW1hcCgpOwotfQotCi0KLS8qIAotICogSUE2NCBtbWFwIHJvdXRpbmVzOgotICogVGhlIHBvc3Rfc3lzXyogcm91dGluZXMgYXJlIGNhbGxlZCBhZnRlciB0aGUgc3lzY2FsbCBoYXMgYmVlbiBtYWRlLgotICogVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgc3lzdGVtIGNhbGwuCi0gKi8KLWFzbWxpbmthZ2Ugdm9pZCBwb3N0X3N5c19tbWFwMih1bG9uZyByZXQsIHVsb25nIGFkZHIsIHVsb25nIGxlbiwKLQl1bG9uZyBwcm90LCB1bG9uZyBmbGFncywgdWxvbmcgZmQsIHVsb25nIHBnb2ZmKQotewotCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSBBU00gc3R1Yi4gKi8KLQlNT0RfSU5DX1VTRV9DT1VOVDsKLQotCWlmICgocHJvdCAmIFBST1RfRVhFQykgJiYgcmV0ID49IDApCi0JCW91dF9tbWFwKHJldCwgbGVuLCBwcm90LCBmbGFncywgZmQsIHBnb2ZmIDw8IFBBR0VfU0hJRlQpOwotCWdvdG8gb3V0Owotb3V0OgotCU1PRF9ERUNfVVNFX0NPVU5UOwotfQotCi1hc21saW5rYWdlIHZvaWQgcG9zdF9zeXNfbW1hcCh1bG9uZyByZXQsIHVsb25nIGFkZHIsIHVsb25nIGxlbiwKLQl1bG9uZyBwcm90LCB1bG9uZyBmbGFncywgdWxvbmcgZmQsIHVsb25nIG9mZikKLXsKLQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUgQVNNIHN0dWIuICovCi0JTU9EX0lOQ19VU0VfQ09VTlQ7Ci0KLQlpZiAoKHByb3QgJiBQUk9UX0VYRUMpICYmIHJldCA+PSAwKQotCQlvdXRfbW1hcChyZXQsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBvZmYpOwotCWdvdG8gb3V0Owotb3V0OgotCU1PRF9ERUNfVVNFX0NPVU5UOwotfQotCi0KLWlubGluZSBzdGF0aWMgdm9pZCBvcHJvZl9yZXBvcnRfZm9yayh1MzIgb2xkX3BpZCwgdTMyIG5ld19waWQsIHUzMiBvbGRfdGdpZCwgdTMyIG5ld190Z2lkKQotewotCXN0cnVjdCBvcF9ub3RlIG5vdGU7Ci0KLQlub3RlLnR5cGUgPSBPUF9GT1JLOwotCW5vdGUucGlkID0gb2xkX3BpZDsKLQlub3RlLnRnaWQgPSBvbGRfdGdpZDsKLQlub3RlLmFkZHIgPSBuZXdfcGlkOwotCW5vdGUubGVuID0gbmV3X3RnaWQ7Ci0Jb3Byb2ZfcHV0X25vdGUoJm5vdGUpOwotfQotCi0KLWFzbWxpbmthZ2Ugdm9pZCBwb3N0X3N5c19jbG9uZShsb25nIHJldCwgbG9uZyBhcmcwLCBsb25nIGFyZzEpCi17Ci0JdTMyIHBpZCA9IGN1cnJlbnQtPnBpZDsKLQl1MzIgdGdpZCA9IG9wX2dldF90Z2lkKCk7Ci0KLQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUgQVNNIHN0dWIuICovCi0JTU9EX0lOQ19VU0VfQ09VTlQ7Ci0KLQlpZiAocmV0KQotCQkvKiBGSVhNRTogbXkgbGliYyBzaG93IGNsb25lKCkgaXMgbm90IGltcGxlbWVudGVkIGluIGlhNjQgCi0JCSAqIGJ1dCB1c2VkIG9ubHkgYnkgZm9yaygpIHdpdGggYSBTSUdDSElMRCBmaXJzdCBwYXJhbWV0ZXIKLQkJICogc28gd2UgYXNzdW1lIGl0J3MgYSBmb3JrICovCi0JCW9wcm9mX3JlcG9ydF9mb3JrKHBpZCwgcmV0LCBwaWQsIHRnaWQpOwotCU1PRF9ERUNfVVNFX0NPVU5UOwotfQotCi1hc21saW5rYWdlIHZvaWQgcG9zdF9zeXNfY2xvbmUyKGxvbmcgcmV0LCBsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKQotewotCXUzMiBwaWQgPSBjdXJyZW50LT5waWQ7Ci0JdTMyIHRnaWQgPSBvcF9nZXRfdGdpZCgpOwotCWxvbmcgY2xvbmVfZmxhZ3MgPSBhcmcwOwotCi0JLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIEFTTSBzdHViLiAqLwotCU1PRF9JTkNfVVNFX0NPVU5UOwotCi0JaWYgKHJldCkgewotCQlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpCi0JCQlvcHJvZl9yZXBvcnRfZm9yayhwaWQsIHJldCwgdGdpZCwgdGdpZCk7Ci0JCWVsc2UKLQkJCW9wcm9mX3JlcG9ydF9mb3JrKHBpZCwgcmV0LCB0Z2lkLCByZXQpOwotCX0KLQlNT0RfREVDX1VTRV9DT1VOVDsKLX0KLQotYXNtbGlua2FnZSB2b2lkCi1wb3N0X3N5c19pbml0X21vZHVsZShsb25nIHJldCwgY2hhciBjb25zdCAqIG5hbWVfdXNlciwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtb2R1bGUgKiBtb2RfdXNlcikKLXsKLQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUgQVNNIHN0dWIuICovCi0JTU9EX0lOQ19VU0VfQ09VTlQ7Ci0KLQlpZiAocmV0ID49IDApIHsKLQkJc3RydWN0IG9wX25vdGUgbm90ZTsKLQotCQlub3RlLnR5cGUgPSBPUF9EUk9QX01PRFVMRVM7Ci0JCW9wcm9mX3B1dF9ub3RlKCZub3RlKTsKLQl9Ci0JTU9EX0RFQ19VU0VfQ09VTlQ7Ci19Ci0KLS8qIEV4aXQgbXVzdCB1c2UgYSBwcmUtY2FsbCBpbnRlcmNlcHQgc3R1Yi4gIFRoZXJlIGlzIG5vIHBvc3QgZXhpdC4gKi8KLWFzbWxpbmthZ2Ugdm9pZCBwcmVfc3lzX2V4aXQoaW50IGVycm9yX2NvZGUpCi17Ci0Jc3RydWN0IG9wX25vdGUgbm90ZTsKLQotCU1PRF9JTkNfVVNFX0NPVU5UOwotCi0Jbm90ZS5hZGRyID0gY3VycmVudC0+dGltZXMudG1zX3V0aW1lOwotCW5vdGUubGVuID0gY3VycmVudC0+dGltZXMudG1zX3N0aW1lOwotCW5vdGUub2Zmc2V0ID0gY3VycmVudC0+c3RhcnRfdGltZTsKLQlub3RlLnR5cGUgPSBPUF9FWElUOwotCW5vdGUucGlkID0gY3VycmVudC0+cGlkOwotCW5vdGUudGdpZCA9IG9wX2dldF90Z2lkKCk7Ci0Jb3Byb2ZfcHV0X25vdGUoJm5vdGUpOwotCi0JLyogdGhpcyBsb29rcyBVUC1kYW5nZXJvdXMsIGFzIHRoZSBleGl0IHNsZWVwcyBhbmQgd2UgZG9uJ3QKLQkgKiBoYXZlIGEgdXNlIGNvdW50LCBidXQgaW4gZmFjdCBpdHMgb2sgYXMgc3lzX2V4aXQgaXMgbm9yZXR1cm4sCi0JICogc28gd2UgY2FuIG5ldmVyIGNvbWUgYmFjayB0byB0aGlzIG5vbi1leGlzdGVudCBleGVjIHBhZ2UKLQkgKi8KLQlNT0RfREVDX1VTRV9DT1VOVDsKLX0KLQotZXh0ZXJuIHZvaWQgKnN5c19jYWxsX3RhYmxlW107Ci0KLS8qIEZJWE1FOiAgTm93IHRoYXQgSSdtIG5ldmVyIHRyeWluZyB0byBkbyBhIEMtbGV2ZWwgY2FsbCB0aHJvdWdoIHRoZXNlCi0gKiBwb2ludGVycywgSSBzaG91bGQganVzdCBzYXZlLCBpbnRlcmNlcHQsIGFuZCByZXN0b3JlIHdpdGggdm9pZCAqCi0gKiBpbnN0ZWFkIG9mIHRoZSB2b2lkICogcGFydCBvZiB0aGUgZnVuY3Rpb24gZGVzY3JpcHRvciwgSSB0aGluay4KLSAqLwotCi12b2lkIG9wX3NhdmVfc3lzY2FsbHModm9pZCkKLXsKLQlmZGVzY19jbG9uZS5pcCA9IHN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmUgLSBfX05SX25pX3N5c2NhbGxdOwotCW9sZF9zeXNfY2xvbmUgPSAodm9pZCAqKSZmZGVzY19jbG9uZTsKLQlmZGVzY19jbG9uZTIuaXAgPSBzeXNfY2FsbF90YWJsZVtfX05SX2Nsb25lMiAtIF9fTlJfbmlfc3lzY2FsbF07Ci0Jb2xkX3N5c19jbG9uZTIgPSAodm9pZCAqKSZmZGVzY19jbG9uZTI7Ci0JZmRlc2NfZXhlY3ZlLmlwID0gc3lzX2NhbGxfdGFibGVbX19OUl9leGVjdmUgLSBfX05SX25pX3N5c2NhbGxdOwotCW9sZF9zeXNfZXhlY3ZlID0gKHZvaWQgKikmZmRlc2NfZXhlY3ZlOwotCWZkZXNjX21tYXAuaXAgPSBzeXNfY2FsbF90YWJsZVtfX05SX21tYXAgLSBfX05SX25pX3N5c2NhbGxdOwotCW9sZF9zeXNfbW1hcCA9ICh2b2lkICopJmZkZXNjX21tYXA7Ci0JZmRlc2NfbW1hcDIuaXAgPSBzeXNfY2FsbF90YWJsZVtfX05SX21tYXAyIC0gX19OUl9uaV9zeXNjYWxsXTsKLQlvbGRfc3lzX21tYXAyID0gKHZvaWQgKikmZmRlc2NfbW1hcDI7Ci0JZmRlc2NfaW5pdF9tb2R1bGUuaXAgPSBzeXNfY2FsbF90YWJsZVtfX05SX2luaXRfbW9kdWxlIC0gX19OUl9uaV9zeXNjYWxsXTsKLQlvbGRfc3lzX2luaXRfbW9kdWxlID0gKHZvaWQgKikmZmRlc2NfaW5pdF9tb2R1bGU7Ci0JZmRlc2NfZXhpdC5pcCA9IHN5c19jYWxsX3RhYmxlW19fTlJfZXhpdCAtIF9fTlJfbmlfc3lzY2FsbF07Ci0Jb2xkX3N5c19leGl0ID0gKHZvaWQgKikmZmRlc2NfZXhpdDsKLX0KLQotdm9pZCBvcF9pbnRlcmNlcHRfc3lzY2FsbHModm9pZCkKLXsKLQkvKiBNdXN0IGV4dHJhY3QgdGhlIGZ1bmN0aW9uIGFkZHJlc3MgZnJvbSB0aGUgc3R1YiBmdW5jdGlvbgotCSAqIGRlc2NyaXB0b3JzLgotCSAqLwotCXN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmUgLSBfX05SX25pX3N5c2NhbGxdID0gCi0JCSgoc3RydWN0IGZkZXNjICopcG9zdF9zdHViX2Nsb25lKS0+aXA7Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9jbG9uZTIgLSBfX05SX25pX3N5c2NhbGxdID0gCi0JCSgoc3RydWN0IGZkZXNjICopcG9zdF9zdHViX2Nsb25lMiktPmlwOwotCXN5c19jYWxsX3RhYmxlW19fTlJfZXhlY3ZlIC0gX19OUl9uaV9zeXNjYWxsXSA9IAotCQkoKHN0cnVjdCBmZGVzYyAqKW15X2lhNjRfZXhlY3ZlKS0+aXA7Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9tbWFwIC0gX19OUl9uaV9zeXNjYWxsXSA9IAotCQkoKHN0cnVjdCBmZGVzYyAqKXBvc3Rfc3R1Yl9tbWFwKS0+aXA7Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9tbWFwMiAtIF9fTlJfbmlfc3lzY2FsbF0gPSAKLQkJKChzdHJ1Y3QgZmRlc2MgKilwb3N0X3N0dWJfbW1hcDIpLT5pcDsKLQlzeXNfY2FsbF90YWJsZVtfX05SX2luaXRfbW9kdWxlIC0gX19OUl9uaV9zeXNjYWxsXSA9IAotCQkoKHN0cnVjdCBmZGVzYyAqKXBvc3Rfc3R1Yl9pbml0X21vZHVsZSktPmlwOwotCXN5c19jYWxsX3RhYmxlW19fTlJfZXhpdCAtIF9fTlJfbmlfc3lzY2FsbF0gPSAKLQkJKChzdHJ1Y3QgZmRlc2MgKilwcmVfc3R1Yl9leGl0KS0+aXA7Ci19Ci0KLXZvaWQgb3BfcmVzdG9yZV9zeXNjYWxscyh2b2lkKQotewotCXN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmUgLSBfX05SX25pX3N5c2NhbGxdID0gCi0JCSgoc3RydWN0IGZkZXNjICopb2xkX3N5c19jbG9uZSktPmlwOwotCXN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmUyIC0gX19OUl9uaV9zeXNjYWxsXSA9IAotCQkoKHN0cnVjdCBmZGVzYyAqKW9sZF9zeXNfY2xvbmUyKS0+aXA7Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9leGVjdmUgLSBfX05SX25pX3N5c2NhbGxdID0gCi0JCSgoc3RydWN0IGZkZXNjICopb2xkX3N5c19leGVjdmUpLT5pcDsKLQlzeXNfY2FsbF90YWJsZVtfX05SX21tYXAgLSBfX05SX25pX3N5c2NhbGxdID0gCi0JCSgoc3RydWN0IGZkZXNjICopb2xkX3N5c19tbWFwKS0+aXA7Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9tbWFwMiAtIF9fTlJfbmlfc3lzY2FsbF0gPSAKLQkJKChzdHJ1Y3QgZmRlc2MgKilvbGRfc3lzX21tYXAyKS0+aXA7Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9pbml0X21vZHVsZSAtIF9fTlJfbmlfc3lzY2FsbF0gPSAKLQkJKChzdHJ1Y3QgZmRlc2MgKilvbGRfc3lzX2luaXRfbW9kdWxlKS0+aXA7Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9leGl0IC0gX19OUl9uaV9zeXNjYWxsXSA9IAotCQkoKHN0cnVjdCBmZGVzYyAqKW9sZF9zeXNfZXhpdCktPmlwOwotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlL2lhNjQvb3Byb2ZpbGVfc3R1YnMuUyBiL21vZHVsZS9pYTY0L29wcm9maWxlX3N0dWJzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2OTVmNTAuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL2lhNjQvb3Byb2ZpbGVfc3R1YnMuUworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wcm9maWxlX3N0dWJzLlMKLSAqIEFzc2VtYmx5IGxhbmd1YWdlIHN5c3RlbSBjYWxsIGludGVyY2VwdG9yIHN0dWJzIAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDEtMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEJvYiBNb250Z29tZXJ5IDxib2JfbW9udGdvbWVyeUBocC5jb20+Ci0gKi8KLQotLyoKLSAqIFRoaXMgaW50ZXJjZXB0b3IgZm9yIGV4ZWN2ZSB3YXMgc3RvbGVuIGZyb20gaWE2NC9rZXJuZWwvZW50cnkuUwotICoKLSAqIEtlcm5lbCBlbnRyeSBwb2ludHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDEgSGV3bGV0dC1QYWNrYXJkIENvCi0gKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgVkEgTGludXggU3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAxOTk5IFdhbHQgRHJ1bW1vbmQgPGRydW1tb25kQHZhbGludXguY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk5IEFzaXQgTWFsbGljayA8QXNpdC5LLk1hbGxpY2tAaW50ZWwuY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk5IERvbiBEdWdnZXIgPERvbi5EdWdnZXJAaW50ZWwuY29tPgotICovCi0vKgotICogaWE2NF9zd2l0Y2hfdG8gbm93IHBsYWNlcyBjb3JyZWN0IHZpcnR1YWwgbWFwcGluZyBpbiBpbiBUUjIgZm9yCi0gKiBrZXJuZWwgc3RhY2suIFRoaXMgYWxsb3dzIHVzIHRvIGhhbmRsZSBpbnRlcnJ1cHRzIHdpdGhvdXQgY2hhbmdpbmcKLSAqIHRvIHBoeXNpY2FsIG1vZGUuCi0gKgotICogSm9uYXRoYW4gTmlja2xpbgk8bmlja2xpbkBtaXNzaW9uY3JpdGljYWxsaW51eC5jb20+Ci0gKiBQYXRyaWNrIE8nUm91cmtlCTxvcm91cmtlQG1pc3Npb25jcml0aWNhbGxpbnV4LmNvbT4KLSAqIDExLzA3LzIwMDAKLSAqLwotLyoKLSAqIEdsb2JhbCAocHJlc2VydmVkKSBwcmVkaWNhdGUgdXNhZ2Ugb24gc3lzY2FsbCBlbnRyeS9leGl0IHBhdGg6Ci0gKgotICoJcEtlcm46CQlTZWUgZW50cnkuaC4KLSAqCXBVc2VyOgkJU2VlIGVudHJ5LmguCi0gKglwU3lzOgkJU2VlIGVudHJ5LmguCi0gKglwTm9uU3lzOgkhcFN5cwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotI2luY2x1ZGUgPGFzbS9rcmVncy5oPgotI2luY2x1ZGUgPGFzbS9vZmZzZXRzLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotCi0jaW5jbHVkZSAiSUE2NG1pbnN0YXRlLmgiCi0KLQkvKgotCSAqIGV4ZWN2ZSgpIGlzIHNwZWNpYWwgYmVjYXVzZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIHdlIG5lZWQgdG8KLQkgKiBzZXR1cCBhIG51bGwgcmVnaXN0ZXIgd2luZG93IGZyYW1lLgotCSAqLwotR0xPQkFMX0VOVFJZKG15X2lhNjRfZXhlY3ZlKQotCS5wcm9sb2d1ZSBBU01fVU5XX1BSTEdfUlB8QVNNX1VOV19QUkxHX1BGUywgQVNNX1VOV19QUkxHX0dSU0FWRSgzKQotCWFsbG9jIGxvYzE9YXIucGZzLDMsMyw0LDAKLQltb3YgbG9jMD1ycAotCW1vdiBsb2MyPWdwCi0JLmJvZHkKLQltb3Ygb3V0MD1pbjAJCQkvLyBmaWxlbmFtZQotCTs7CQkJCS8vIHN0b3AgYml0IGJldHdlZW4gYWxsb2MgYW5kIGNhbGwKLQltb3Ygb3V0MT1pbjEJCQkvLyBhcmd2Ci0JbW92IG91dDI9aW4yCQkJLy8gZW52cAotCWFkZCBvdXQzPTE2LHNwCQkJLy8gcmVncwotCS8qIAotCSAqIFdlIGFyZSBoZXJlIHdpdGggdGhlIGtlcm5lbCdzIGdwIHJlZ2lzdGVyIHZhbHVlIGJ1dCB3ZSBuZWVkCi0JICogdG8gZmluZCB0aGUgbW9kdWxlJ3MgZ3AgdmFsdWUgYmVmb3JlIHdlIGNhbiBjYWxsIG91ciBvd24KLQkgKiByb3V0aW5lLiAgVGhhdCdzIHdoeSB3ZSBjYW4ndCBqdXN0IHVzZToKLQkgKglici5jYWxsLnNwdGsubWFueSBycD1teV9zeXNfZXhlY3ZlCi0JICogVXNlIGlwLXJlbGF0aXZlIGFkZHJlc3NpbmcgdG8gZ2V0IHRvIHRoZSBmcHRyIHNpbmNlIEkgY2FuJ3QKLQkgKiB1c2UgZ3AtcmVsYXRpdmUgYW55dGhpbmcgd2l0aG91dCB0aGUgbW9kdWxlJ3MgZ3AuCi0JICovCi0uTDFfZXhlY3ZlOgotCW1vdiByMyA9IGlwCi0JOzsKLQlhZGRsIHIxNCA9IC5mcHRyX2V4ZWN2ZSAtIC5MMV9leGVjdmUsIHIzCi0JOzsKLSAgICAgICAgbGQ4IHIxND1bcjE0XQotICAgICAgICA7OwotICAgICAgICBsZDggcjE1PVtyMTRdLDgKLSAgICAgICAgOzsKLSAgICAgICAgbGQ4IGdwPVtyMTRdCi0gICAgICAgIDs7Ci0gICAgICAgIG1vdiBiNj1yMTUKLSAgICAgICAgYnIuY2FsbC5zcHRrLm1hbnkgYjA9YjYKLQk7OwotLnJldDA6CWNtcDQuZ2UgcDYscDc9cjgscjAKLQltb3YgYXIucGZzPWxvYzEJCQkvLyByZXN0b3JlIGFyLnBmcwotCXN4dDQgcjg9cjgJCQkvLyByZXR1cm4gNjQtYml0IHJlc3VsdAotCTs7Ci0Jc3RmLnNwaWxsIFtzcF09ZjAKLShwNikJY21wLm5lIHBLZXJuLHBVc2VyPXIwLHIwCS8vIGEgc3VjY2Vzc2Z1bCBleGVjdmUoKSBsYW5kcyB1cyBpbiB1c2VyLW1vZGUuLi4KLQltb3YgZ3A9bG9jMgotCW1vdiBycD1sb2MwCi0ocDYpCW1vdiBhci5wZnM9cjAJCQkvLyBjbGVhciBhci5wZnMgb24gc3VjY2VzcwotKHA3KQlici5yZXQuc3B0ay5tYW55IHJwCi0KLQkvKgotCSAqIEluIHRoZW9yeSwgd2UnZCBoYXZlIHRvIHphcCB0aGlzIHN0YXRlIG9ubHkgdG8gcHJldmVudCBsZWFraW5nIG9mCi0JICogc2VjdXJpdHkgc2Vuc2l0aXZlIHN0YXRlIChlLmcuLCBpZiBjdXJyZW50LT5tbS0+ZHVtcGFibGUgaXMgemVybykuICBIb3dldmVyLAotCSAqIHRoaXMgZXhlY3V0ZXMgaW4gbGVzcyB0aGFuIDIwIGN5Y2xlcyBldmVuIG9uIEl0YW5pdW0sIHNvIGl0J3Mgbm90IHdvcnRoCi0JICogb3B0aW1pemluZyBmb3IuLi4pLgotCSAqLwotCW1vdiByND0wOwkJbW92IGYyPWYwOwkJbW92IGIxPXIwCi0JbW92IHI1PTA7CQltb3YgZjM9ZjA7CQltb3YgYjI9cjAKLQltb3YgcjY9MDsJCW1vdiBmND1mMDsJCW1vdiBiMz1yMAotCW1vdiByNz0wOwkJbW92IGY1PWYwOwkJbW92IGI0PXIwCi0JbW92IGFyLnVuYXQ9MDsJCW1vdiBmMTA9ZjA7CQltb3YgYjU9cjAKLQlsZGYuZmlsbCBmMTE9W3NwXTsJbGRmLmZpbGwgZjEyPVtzcF07CW1vdiBmMTM9ZjAKLQlsZGYuZmlsbCBmMTQ9W3NwXTsJbGRmLmZpbGwgZjE1PVtzcF07CW1vdiBmMTY9ZjAKLQlsZGYuZmlsbCBmMTc9W3NwXTsJbGRmLmZpbGwgZjE4PVtzcF07CW1vdiBmMTk9ZjAKLQlsZGYuZmlsbCBmMjA9W3NwXTsJbGRmLmZpbGwgZjIxPVtzcF07CW1vdiBmMjI9ZjAKLQlsZGYuZmlsbCBmMjM9W3NwXTsJbGRmLmZpbGwgZjI0PVtzcF07CW1vdiBmMjU9ZjAKLQlsZGYuZmlsbCBmMjY9W3NwXTsJbGRmLmZpbGwgZjI3PVtzcF07CW1vdiBmMjg9ZjAKLQlsZGYuZmlsbCBmMjk9W3NwXTsJbGRmLmZpbGwgZjMwPVtzcF07CW1vdiBmMzE9ZjAKLQltb3YgYXIubGM9MAotCWJyLnJldC5zcHRrLm1hbnkgcnAKLQkuYWxpZ24gMTYKLS5mcHRyX2V4ZWN2ZToKLQlkYXRhOCBAZnB0cihteV9zeXNfZXhlY3ZlKQotRU5EKG15X2lhNjRfZXhlY3ZlKQotCi0vKiBUaGVzZSBpbnRlcmNlcHRvcnMgYXJlIGZyb20gSUE2NHN5c2NhbGxzdHViLmggbWFjcm9zICovCi0jaW5jbHVkZSAiSUE2NHN5c2NhbGxzdHViLmgiCi0KLVNZU0NBTExTVFVCX1BPU1QoY2xvbmUpCi0KLVNZU0NBTExTVFVCX1BPU1QoY2xvbmUyKQotCi1TWVNDQUxMU1RVQl9QT1NUKG1tYXApCi0KLVNZU0NBTExTVFVCX1BPU1QobW1hcDIpCi0KLVNZU0NBTExTVFVCX1BPU1QoaW5pdF9tb2R1bGUpCi0KLVNZU0NBTExTVFVCX1BSRShleGl0KQpkaWZmIC0tZ2l0IGEvbW9kdWxlL29wX2NhY2hlLmggYi9tb2R1bGUvb3BfY2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZkNzcyYS4uMDAwMDAwMAotLS0gYS9tb2R1bGUvb3BfY2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BfY2FjaGUuaAotICogQ2FjaGUgZGVmaW5pdGlvbnMgZm9yIGNvbXBhdGliaWxpdHkKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIE9QX0NBQ0hFX0gKLSNkZWZpbmUgT1BfQ0FDSEVfSAotCi0jaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0KLSNpZm5kZWYgTDFfQ0FDSEVfQUxJR04KLSNkZWZpbmUgTDFfQ0FDSEVfQUxJR04oeCkgKCgoeCkrKEwxX0NBQ0hFX0JZVEVTLTEpKSZ+KEwxX0NBQ0hFX0JZVEVTLTEpKQotI2VuZGlmCi0KLSNpZm5kZWYgU01QX0NBQ0hFX0JZVEVTCi0jZGVmaW5lIFNNUF9DQUNIRV9CWVRFUyBMMV9DQUNIRV9CWVRFUwotI2VuZGlmCi0KLS8qIDIuNC4wIGludHJvZHVjZWQgX19jYWNoZWxpbmVfYWxpZ25lZCAqLwotI2lmbmRlZiBfX19fY2FjaGVsaW5lX2FsaWduZWQKLSNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKQotI2VuZGlmCi0KLSNpZm5kZWYgX19jYWNoZWxpbmVfYWxpZ25lZAotI2lmZGVmIE1PRFVMRQotI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkIF9fX19jYWNoZWxpbmVfYWxpZ25lZAotI2Vsc2UKLSNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZAkJCQkJXAotCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUyksCQlcCi0JCSBfX3NlY3Rpb25fXygiLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQiKSkpCi0jZW5kaWYKLSNlbmRpZiAvKiBfX2NhY2hlbGluZV9hbGlnbmVkICovCi0KLS8qIDIuNC4xMCBpbnRyb2R1Y2VkIF9fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCAqLwotI2lmbmRlZiBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIF9fX19jYWNoZWxpbmVfYWxpZ25lZAotI2Vsc2UKLSNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLSNlbmRpZgotCi0jaWZuZGVmIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBfX2NhY2hlbGluZV9hbGlnbmVkCi0jZWxzZQotI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLSNlbmRpZgotCi0jZW5kaWYgLyogIU9QX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL21vZHVsZS9vcF9kY2FjaGUuaCBiL21vZHVsZS9vcF9kY2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhMGExYS4uMDAwMDAwMAotLS0gYS9tb2R1bGUvb3BfZGNhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wX2RjYWNoZS5oCi0gKiBDb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyBmb3IgZGNhY2hlIGxvb2t1cHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaWZuZGVmIE9QX0RDQUNIRV9ICi0jZGVmaW5lIE9QX0RDQUNIRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0KLSNpbmNsdWRlICJvcHJvZmlsZS5oIgotCi1leHRlcm4gdWludCBvcF9kbmFtZV90b3A7Ci1leHRlcm4gc3RydWN0IHFzdHIgKipvcF9kbmFtZV9zdGFjazsKLWV4dGVybiBjaGFyICogb3BfcG9vbF9wb3M7Ci1leHRlcm4gY2hhciAqIG9wX3Bvb2xfc3RhcnQ7Ci1leHRlcm4gY2hhciAqIG9wX3Bvb2xfZW5kOwotCi11aW50IGRvX2hhc2goc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKnZmc21udCwgc3RydWN0IGRlbnRyeSAqcm9vdCwgc3RydWN0IHZmc21vdW50ICpyb290bW50KTsKLQotaW5saW5lIHN0YXRpYyB1aW50IGFsbG9jX2luX3Bvb2woY2hhciBjb25zdCAqIHN0ciwgdWludCBsZW4pOwotaW5saW5lIHN0YXRpYyBpbnQgYWRkX2hhc2hfZW50cnkoc3RydWN0IG9wX2hhc2hfaW5kZXggKiBlbnRyeSwgdWludCBwYXJlbnQsIGNoYXIgY29uc3QgKiBuYW1lLCB1aW50IGxlbik7Ci1pbmxpbmUgc3RhdGljIHVpbnQgbmFtZV9oYXNoKGNoYXIgY29uc3QgKiBuYW1lLCB1aW50IGxlbiwgdWludCBwYXJlbnQpOwotCi1pbmxpbmUgc3RhdGljIHVpbnQgbmFtZV9oYXNoKGNoYXIgY29uc3QgKiBuYW1lLCB1aW50IGxlbiwgdWludCBwYXJlbnQpCi17Ci0JdWludCBoYXNoPTA7Ci0KLQl3aGlsZSAobGVuLS0pCi0JCWhhc2ggPSAoaGFzaCArIChuYW1lW2xlbl0gPDwgNCkgKyAobmFtZVtsZW5dID4+IDQpKSAqIDExOwotCi0JcmV0dXJuIChoYXNoIF4gcGFyZW50KSAlIE9QX0hBU0hfTUFQX05SOwotfQotCi0vKiBlbXB0eSBhc2NlbmRpbmcgZG5hbWUgc3RhY2sgKi8KLWlubGluZSBzdGF0aWMgdm9pZCBwdXNoX2RuYW1lKHN0cnVjdCBxc3RyICpkbmFtZSkKLXsKLQlvcF9kbmFtZV9zdGFja1tvcF9kbmFtZV90b3BdID0gZG5hbWU7Ci0JaWYgKG9wX2RuYW1lX3RvcCAhPSBETkFNRV9TVEFDS19NQVgpCi0JCW9wX2RuYW1lX3RvcCsrOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogb3ZlcmZsb3dlZCBkbmFtZSBzdGFjayAhXG4iKTsKLX0KLQotaW5saW5lIHN0YXRpYyBzdHJ1Y3QgcXN0ciAqcG9wX2RuYW1lKHZvaWQpCi17Ci0JaWYgKG9wX2RuYW1lX3RvcCA9PSAwKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBvcF9kbmFtZV9zdGFja1stLW9wX2RuYW1lX3RvcF07Ci19Ci0KLWlubGluZSBzdGF0aWMgdWludCBhbGxvY19pbl9wb29sKGNoYXIgY29uc3QgKiBzdHIsIHVpbnQgbGVuKQotewotCWNoYXIgKiBwbGFjZSA9IG9wX3Bvb2xfcG9zOwotCWlmIChvcF9wb29sX3BvcyArIGxlbiArIDEgPj0gb3BfcG9vbF9lbmQpCi0JCXJldHVybiAwOwotCi0Jc3RyY3B5KHBsYWNlLCBzdHIpOwotCW9wX3Bvb2xfcG9zICs9IGxlbiArIDE7Ci0JcmV0dXJuIHBsYWNlIC0gb3BfcG9vbF9zdGFydDsKLX0KLQotaW5saW5lIHN0YXRpYyBjaGFyICogZ2V0X2Zyb21fcG9vbCh1aW50IGluZGV4KQotewotCXJldHVybiBvcF9wb29sX3N0YXJ0ICsgaW5kZXg7Ci19Ci0KLWlubGluZSBzdGF0aWMgaW50IGFkZF9oYXNoX2VudHJ5KHN0cnVjdCBvcF9oYXNoX2luZGV4ICogZW50cnksIHVpbnQgcGFyZW50LCBjaGFyIGNvbnN0ICogbmFtZSwgdWludCBsZW4pCi17Ci0JZW50cnktPm5hbWUgPSBhbGxvY19pbl9wb29sKG5hbWUsIGxlbik7Ci0JaWYgKCFlbnRyeS0+bmFtZSkKLQkJcmV0dXJuIC0xOwotCWVudHJ5LT5wYXJlbnQgPSBwYXJlbnQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBPUF9EQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvbW9kdWxlL29wX2RuYW1lLmMgYi9tb2R1bGUvb3BfZG5hbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkwZDdiNy4uMDAwMDAwMAotLS0gYS9tb2R1bGUvb3BfZG5hbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wX2RuYW1lLmMKLSAqIGRlbnRyeSBzdGFjayB3YWxraW5nCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1hbi5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLQotI2luY2x1ZGUgIm9wcm9maWxlLmgiCi0jaW5jbHVkZSAib3BfZGNhY2hlLmgiCi0jaW5jbHVkZSAib3BfdXRpbC5oIgotCi0vKiAtLS0tLS0tLS0gZGV2aWNlIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0gKi8KLQotdWludCBvcF9kbmFtZV90b3A7Ci1zdHJ1Y3QgcXN0ciAqKiBvcF9kbmFtZV9zdGFjazsKLWNoYXIgKiBvcF9wb29sX3BvczsKLWNoYXIgKiBvcF9wb29sX3N0YXJ0OwotY2hhciAqIG9wX3Bvb2xfZW5kOwotCi1zdGF0aWMgdWxvbmcgaGFzaF9tYXBfb3BlbjsKLXN0YXRpYyBzdHJ1Y3Qgb3BfaGFzaF9pbmRleCAqIGhhc2hfbWFwOwotCi11bnNpZ25lZCBsb25nIGlzX21hcF9yZWFkeSh2b2lkKQotewotCXJldHVybiBoYXNoX21hcF9vcGVuOwotfQotCi1pbnQgb3Byb2ZfaW5pdF9oYXNobWFwKHZvaWQpCi17Ci0JdWludCBpOwotCi0Jb3BfZG5hbWVfc3RhY2sgPSBrbWFsbG9jKEROQU1FX1NUQUNLX01BWCAqIHNpemVvZihzdHJ1Y3QgcXN0ciAqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvcF9kbmFtZV9zdGFjaykKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jb3BfZG5hbWVfdG9wID0gMDsKLQltZW1zZXQob3BfZG5hbWVfc3RhY2ssIDAsIEROQU1FX1NUQUNLX01BWCAqIHNpemVvZihzdHJ1Y3QgcXN0ciAqKSk7Ci0KLQloYXNoX21hcCA9IHJ2bWFsbG9jKFBBR0VfQUxJR04oT1BfSEFTSF9NQVBfU0laRSkpOwotCWlmICghaGFzaF9tYXApCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZm9yIChpID0gMDsgaSA8IE9QX0hBU0hfTUFQX05SOyArK2kpIHsKLQkJaGFzaF9tYXBbaV0ubmFtZSA9IDA7Ci0JCWhhc2hfbWFwW2ldLnBhcmVudCA9IC0xOwotCX0KLQotCW9wX3Bvb2xfc3RhcnQgPSAoY2hhciAqKShoYXNoX21hcCArIE9QX0hBU0hfTUFQX05SKTsKLQlvcF9wb29sX2VuZCA9IG9wX3Bvb2xfc3RhcnQgKyBQT09MX1NJWkU7Ci0Jb3BfcG9vbF9wb3MgPSBvcF9wb29sX3N0YXJ0OwotCi0JLyogRW5zdXJlIHRoYXQgdGhlIHplcm8gaGFzaCBtYXAgZW50cnkgaXMgbmV2ZXIgdXNlZCwgd2UgdXNlIHRoaXMKLQkgKiB2YWx1ZSBhcyBlbmQgb2YgcGF0aCB0ZXJtaW5hdG9yICovCi0JaGFzaF9tYXBbMF0ubmFtZSA9IGFsbG9jX2luX3Bvb2woIi8iLCAxKTsKLQloYXNoX21hcFswXS5wYXJlbnQgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgb3Byb2ZfZnJlZV9oYXNobWFwKHZvaWQpCi17Ci0Ja2ZyZWUob3BfZG5hbWVfc3RhY2spOwotCXJ2ZnJlZShoYXNoX21hcCwgUEFHRV9BTElHTihPUF9IQVNIX01BUF9TSVpFKSk7Ci19Ci0KLWludCBvcHJvZl9oYXNoX21hcF9vcGVuKHZvaWQpCi17Ci0JaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmhhc2hfbWFwX29wZW4pKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBvcHJvZl9oYXNoX21hcF9yZWxlYXNlKHZvaWQpCi17Ci0JaWYgKCFoYXNoX21hcF9vcGVuKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWNsZWFyX2JpdCgwLCZoYXNoX21hcF9vcGVuKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IG9wcm9mX2hhc2hfbWFwX21tYXAoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCi17Ci0JdWxvbmcgc3RhcnQgPSAodWxvbmcpdm1hLT52bV9zdGFydDsKLQl1bG9uZyBwYWdlLCBwb3M7Ci0JdWxvbmcgc2l6ZSA9ICh1bG9uZykodm1hLT52bV9lbmQtdm1hLT52bV9zdGFydCk7Ci0KLQlpZiAoc2l6ZSA+IFBBR0VfQUxJR04oT1BfSEFTSF9NQVBfU0laRSkgfHwgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgfHwgR0VUX1ZNX09GRlNFVCh2bWEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBvcyA9ICh1bG9uZyloYXNoX21hcDsKLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJcGFnZSA9IGt2aXJ0X3RvX3BhKHBvcyk7Ci0JCWlmIChyZW1hcF9wYWdlX3JhbmdlKHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCQlzdGFydCArPSBQQUdFX1NJWkU7Ci0JCXBvcyArPSBQQUdFX1NJWkU7Ci0JCXNpemUgLT0gUEFHRV9TSVpFOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0jaWZuZGVmIE5FRURfMl8yX0RFTlRSSUVTCi1pbnQgd2luZF9kZW50cmllc18yXzQoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IHZmc21vdW50ICogdmZzbW50LCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwgc3RydWN0IHZmc21vdW50ICogcm9vdG1udCkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICogZCA9IGRlbnRyeTsKLQlzdHJ1Y3QgdmZzbW91bnQgKiB2ID0gdmZzbW50OwotCi0JLyogd2luZCB0aGUgZGVudHJpZXMgb250byB0aGUgc3RhY2sgcGFnZXMgKi8KLQlmb3IgKDs7KSB7Ci0JCS8qIGRlbGV0ZWQgPyAqLwotCQlpZiAoIUlTX1JPT1QoZCkgJiYgbGlzdF9lbXB0eSgmZC0+ZF9oYXNoKSkKLQkJCXJldHVybiAwOwotCi0JCS8qIHRoZSByb290ICovCi0JCWlmIChkID09IHJvb3QgJiYgdiA9PSByb290bW50KQotCQkJYnJlYWs7Ci0KLQkJaWYgKGQgPT0gdi0+bW50X3Jvb3QgfHwgSVNfUk9PVChkKSkgewotCQkJaWYgKHYtPm1udF9wYXJlbnQgPT0gdikKLQkJCQlicmVhazsKLQkJCS8qIGNyb3NzIHRoZSBtb3VudCBwb2ludCAqLwotCQkJZCA9IHYtPm1udF9tb3VudHBvaW50OwotCQkJdiA9IHYtPm1udF9wYXJlbnQ7Ci0JCX0KLQotCQlwdXNoX2RuYW1lKCZkLT5kX25hbWUpOwotCi0JCWQgPSBkLT5kX3BhcmVudDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyogY2FsbGVkIHdpdGggbm90ZV9sb2NrIGhlbGQgKi8KLXVpbnQgZG9fcGF0aF9oYXNoXzJfNChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqdmZzbW50KQotewotCXVpbnQgdmFsdWU7Ci0Jc3RydWN0IHZmc21vdW50ICogcm9vdG1udDsKLQlzdHJ1Y3QgZGVudHJ5ICogcm9vdDsKLQotCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwotCXJvb3RtbnQgPSBtbnRnZXQoY3VycmVudC0+ZnMtPnJvb3RtbnQpOwotCXJvb3QgPSBkZ2V0KGN1cnJlbnQtPmZzLT5yb290KTsKLQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwotCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7Ci0KLQl2YWx1ZSA9IGRvX2hhc2goZGVudHJ5LCB2ZnNtbnQsIHJvb3QsIHJvb3RtbnQpOwotCi0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQlkcHV0KHJvb3QpOwotCW1udHB1dChyb290bW50KTsKLQlyZXR1cm4gdmFsdWU7Ci19Ci0jZW5kaWYgLyogTkVFRF8yXzJfREVOVFJJRVMgKi8KLQotLyogY2FsbGVkIHdpdGggbm90ZV9sb2NrIGhlbGQgKi8KLXVpbnQgZG9faGFzaChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKiB2ZnNtbnQsIHN0cnVjdCBkZW50cnkgKiByb290LCBzdHJ1Y3QgdmZzbW91bnQgKiByb290bW50KQotewotCXN0cnVjdCBxc3RyICogZG5hbWU7Ci0JdWludCB2YWx1ZSA9IC0xOwotCXVpbnQgZmlyc3RoYXNoOwotCXVpbnQgaW5jcjsKLQl1aW50IHBhcmVudCA9IDA7Ci0Jc3RydWN0IG9wX2hhc2hfaW5kZXggKmVudHJ5OwotCi0JaWYgKCF3aW5kX2RlbnRyaWVzKGRlbnRyeSwgdmZzbW50LCByb290LCByb290bW50KSkKLQkJZ290byBvdXQ7Ci0KLQkvKiB1bndpbmQgYW5kIGhhc2ggKi8KLQotCXdoaWxlICgoZG5hbWUgPSBwb3BfZG5hbWUoKSkpIHsKLQkJLyogaWYgTiBpcyBwcmltZSwgdmFsdWUgaW4gWzAtTlsgYW5kIGluY3IgPSBtYXgoMSwgdmFsdWUpIHRoZW4KLQkJICogaXRlcmF0aW9uOiB2YWx1ZSA9ICh2YWx1ZSArIGluY3IpICUgTiBjb3ZlcnMgdGhlIHJhbmdlIFswLU5bCi0JCSAqIGluIE4gaXRlcmF0aW9ucyAqLwotCQlpbmNyID0gZmlyc3RoYXNoID0gdmFsdWUgPSBuYW1lX2hhc2goZG5hbWUtPm5hbWUsIGRuYW1lLT5sZW4sIHBhcmVudCk7Ci0JCWlmIChpbmNyID09IDApCi0JCQlpbmNyID0gMTsKLQotCXJldHJ5OgotCQllbnRyeSA9ICZoYXNoX21hcFt2YWx1ZV07Ci0JCS8qIGV4aXN0aW5nIGVudHJ5ID8gKi8KLQkJaWYgKHN0cmVxKGdldF9mcm9tX3Bvb2woZW50cnktPm5hbWUpLCBkbmFtZS0+bmFtZSkKLQkJCSYmIGVudHJ5LT5wYXJlbnQgPT0gcGFyZW50KQotCQkJZ290byBuZXh0OwotCi0JCS8qIG5ldyBlbnRyeSA/ICovCi0JCWlmIChlbnRyeS0+cGFyZW50ID09IC0xKSB7Ci0JCQlpZiAoYWRkX2hhc2hfZW50cnkoZW50cnksIHBhcmVudCwgZG5hbWUtPm5hbWUsIGRuYW1lLT5sZW4pKQotCQkJCWdvdG8gZnVsbHBvb2w7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQotCQkvKiBub3BlLCBmaW5kIGFub3RoZXIgcGxhY2UgaW4gdGhlIHRhYmxlICovCi0JCXZhbHVlID0gKHZhbHVlICsgaW5jcikgJSBPUF9IQVNIX01BUF9OUjsKLQotCQlpZiAodmFsdWUgPT0gZmlyc3RoYXNoKQotCQkJZ290byBmdWxsdGFibGU7Ci0KLQkJZ290byByZXRyeTsKLQluZXh0OgotCQlwYXJlbnQgPSB2YWx1ZTsKLQl9Ci0KLW91dDoKLQlvcF9kbmFtZV90b3AgPSAwOwotCXJldHVybiB2YWx1ZTsKLWZ1bGxwb29sOgotCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IHN0cmluZyBwb29sIGV4aGF1c3RlZC5cbiIpOwotCXZhbHVlID0gLTE7Ci0JZ290byBvdXQ7Ci1mdWxsdGFibGU6Ci0JcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogY29tcG9uZW50IGhhc2ggdGFibGUgZnVsbCA6KFxuIik7Ci0JdmFsdWUgPSAtMTsKLQlnb3RvIG91dDsKLX0KZGlmZiAtLWdpdCBhL21vZHVsZS9vcF9pbml0LmMgYi9tb2R1bGUvb3BfaW5pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTM5NGZjLi4wMDAwMDAwCi0tLSBhL21vZHVsZS9vcF9pbml0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wX2luaXQuYwotICogSW5pdGlhbGlzYXRpb24gc3R1YnMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0vLyBGSVhNRTogYW55IHBvaW50IGluIHRoaXMgZmlsZSBub3cgd2UgZG9uJ3QgZmlkZGxlCi0vLyB3aXRoIC1tYXJjaCBvcHRpb25zID8/Ci0gCi0jdW5kZWYgX19OT19WRVJTSU9OX18KLSAKLSNpbmNsdWRlICJvcHJvZmlsZS5oIgotCi1FWFBPUlRfTk9fU1lNQk9MUzsKLQotaW50IF9faW5pdCBzdHViX2luaXQodm9pZCkKLXsKLQlzeXNjdGwuY3B1X3R5cGUgPSBnZXRfY3B1X3R5cGUoKTsKLQlyZXR1cm4gb3Byb2ZfaW5pdCgpOwotfQotCi12b2lkIF9fZXhpdCBzdHViX2V4aXQodm9pZCkKLXsKLQlvcHJvZl9leGl0KCk7Ci19Ci0KLW1vZHVsZV9pbml0KHN0dWJfaW5pdCk7Ci1tb2R1bGVfZXhpdChzdHViX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlL29wX3V0aWwuYyBiL21vZHVsZS9vcF91dGlsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MjVkNzUuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL29wX3V0aWwuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wX3V0aWwuYwotICogVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvd3JhcHBlci5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLQotI2luY2x1ZGUgImNvbXBhdC5oIgotCi0jaW5jbHVkZSAib3BfdXRpbC5oIgotIAotLyogR2l2ZW4gUEdEIGZyb20gdGhlIGFkZHJlc3Mgc3BhY2UncyBwYWdlIHRhYmxlLCByZXR1cm4gdGhlIGtlcm5lbAotICogdmlydHVhbCBtYXBwaW5nIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwcGVkIGF0IEFEUi4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2aXJ0X3RvX2t2YShwZ2RfdCAqIHBnZCwgdW5zaWduZWQgbG9uZyBhZHIpCi17Ci0JdW5zaWduZWQgbG9uZyByZXQgPSAwVUw7Ci0JcG1kX3QgKnBtZDsKLQlwdGVfdCAqcHRlcCwgcHRlOwotCi0JaWYgKCFwZ2Rfbm9uZSgqcGdkKSkgewotCQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgYWRyKTsKLQkJaWYgKCFwbWRfbm9uZSgqcG1kKSkgewotCQkJcHRlcCA9IHB0ZV9vZmZzZXQocG1kLCBhZHIpOwotCQkJcHRlID0gKnB0ZXA7Ci0JCQlpZiAocHRlX3ByZXNlbnQocHRlKSkgewotCQkJCXJldCA9ICh1bnNpZ25lZCBsb25nKSBwdGVfcGFnZV9hZGRyZXNzKHB0ZSk7Ci0JCQkJcmV0IHw9IGFkciAmIChQQUdFX1NJWkUgLSAxKTsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBIZXJlIHdlIHdhbnQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeS4KLSAqIFRoaXMgaXMgdXNlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgY29udGVudHMgb2YgdGhlCi0gKiBhcmVhIGFuZCBtYXJraW5nIHRoZSBwYWdlcyBhcyByZXNlcnZlZC4KLSAqLwotdW5zaWduZWQgbG9uZyBrdmlydF90b19wYSh1bnNpZ25lZCBsb25nIGFkcikKLXsKLQl1bnNpZ25lZCBsb25nIHZhLCBrdmEsIHJldDsKLQotCXZhID0gVk1BTExPQ19WTUFERFIoYWRyKTsKLQlrdmEgPSB1dmlydF90b19rdmEocGdkX29mZnNldF9rKHZhKSwgdmEpOwotCXJldCA9IF9fcGEoa3ZhKTsKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkICogcnZtYWxsb2Moc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl2b2lkICogbWVtOwotCXVuc2lnbmVkIGxvbmcgYWRyLCBwYWdlOwotCi0JbWVtID0gVk1BTExPQ18zMihzaXplKTsKLQlpZiAoIW1lbSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltZW1zZXQobWVtLCAwLCBzaXplKTsKLQotCWFkcj0odW5zaWduZWQgbG9uZykgbWVtOwotCXdoaWxlIChzaXplID4gMCkgewotCQlwYWdlID0ga3ZpcnRfdG9fcGEoYWRyKTsKLQkJbWVtX21hcF9yZXNlcnZlKHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylfX3ZhKHBhZ2UpKSk7Ci0JCWFkciArPSBQQUdFX1NJWkU7Ci0JCXNpemUgLT0gUEFHRV9TSVpFOwotCX0KLQlyZXR1cm4gbWVtOwotfQotCi12b2lkIHJ2ZnJlZSh2b2lkICogbWVtLCBzaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgYWRyLCBwYWdlOwotCi0JaWYgKCFtZW0pCi0JCXJldHVybjsKLQotCWFkcj0odW5zaWduZWQgbG9uZykgbWVtOwotCXdoaWxlIChzaXplID4gMCkgewotCQlwYWdlID0ga3ZpcnRfdG9fcGEoYWRyKTsKLQkJbWVtX21hcF91bnJlc2VydmUodmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nKV9fdmEocGFnZSkpKTsKLQotCQlhZHIgKz0gUEFHRV9TSVpFOwotCQlzaXplIC09IFBBR0VfU0laRTsKLQl9Ci0JdmZyZWUobWVtKTsKLX0KLQotaW50IGNoZWNrX3JhbmdlKGludCB2YWwsIGludCBsLCBpbnQgaCwgY2hhciBjb25zdCAqIG1zZykKLXsKLQlpZiAodmFsIDwgbCB8fCB2YWwgPiBoKSB7Ci0JCXByaW50ayhtc2csIHZhbCwgbCwgaCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0gCmRpZmYgLS1naXQgYS9tb2R1bGUvb3BfdXRpbC5oIGIvbW9kdWxlL29wX3V0aWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlYTQwZS4uMDAwMDAwMAotLS0gYS9tb2R1bGUvb3BfdXRpbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF91dGlsLmgKLSAqIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaWZuZGVmIE9QX1VUSUxfSAotI2RlZmluZSBPUF9VVElMX0gKLSAKLXVuc2lnbmVkIGxvbmcga3ZpcnRfdG9fcGEodW5zaWduZWQgbG9uZyBhZHIpOwotdm9pZCAqIHJ2bWFsbG9jKHNpZ25lZCBsb25nIHNpemUpOwotdm9pZCBydmZyZWUodm9pZCAqIG1lbSwgc2lnbmVkIGxvbmcgc2l6ZSk7Ci0vLyByZXR1cm5zIG5vbi16ZXJvIG9uIGZhaWx1cmUsIGluY2x1c2l2ZQotaW50IGNoZWNrX3JhbmdlKGludCB2YWwsIGludCBsLCBpbnQgaCwgY2hhciBjb25zdCAqIG1zZyk7Ci0KLSNlbmRpZiAvKiBPUF9VVElMX0ggKi8KZGlmZiAtLWdpdCBhL21vZHVsZS9vcHJvZmlsZS5jIGIvbW9kdWxlL29wcm9maWxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwZGJiNzIuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL29wcm9maWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4ODMgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcHJvZmlsZS5jCi0gKiBNYWluIGRyaXZlciBjb2RlCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgIm9wcm9maWxlLmgiCi0jaW5jbHVkZSAib3BfdXRpbC5oIgotI2luY2x1ZGUgImNvbmZpZy5oIgotCi1FWFBPUlRfTk9fU1lNQk9MUzsKLSAKLU1PRFVMRV9BVVRIT1IoIkpvaG4gTGV2b24gKGxldm9uQG1vdmVtZW50YXJpYW4ub3JnKSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb250aW51b3VzIFByb2ZpbGluZyBNb2R1bGUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotTU9EVUxFX1BBUk0oYWxsb3dfdW5sb2FkLCAiaSIpOwotTU9EVUxFX1BBUk1fREVTQyhhbGxvd191bmxvYWQsICJBbGxvdyBtb2R1bGUgdG8gYmUgdW5sb2FkZWQuIik7Ci0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGludCBhbGxvd191bmxvYWQ7Ci0jZWxzZQotc3RhdGljIGludCBhbGxvd191bmxvYWQgPSAxOwotI2VuZGlmCi0KLS8qIHN5c2N0bCBzZXR0YWJsZXMgKi8KLXN0cnVjdCBvcHJvZl9zeXNjdGwgc3lzY3RsX3Bhcm1zOwotLyogc29tZSBvZiB0aGUgc3lzIGN0bCBzZXR0YWJsZSB2YXJpYWJsZSBuZWVkcyB0byBiZSBjb3BpZWQgdG8gcHJvdGVjdAotICogYWdhaW5zdCB1c2VyIHRoYXQgdHJ5IHRvIGNoYW5nZSB0aHJvdWdoIC9wcm9jL3N5cy9kZXYvb3Byb2ZpbGUvICogcnVubmluZwotICogcGFyYW1ldGVycyBkdXJpbmcgcHJvZmlsaW5nICovCi1zdHJ1Y3Qgb3Byb2Zfc3lzY3RsIHN5c2N0bDsKLQotc3RhdGljIGVudW0gb3Byb2Zfc3RhdGUgc3RhdGUgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPSBTVE9QUEVEOwotCSAKLXN0YXRpYyBpbnQgb3BfbWFqb3I7Ci0KLXN0YXRpYyB2b2xhdGlsZSB1bG9uZyBvcHJvZl9vcGVuZWQgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci1zdGF0aWMgdm9sYXRpbGUgdWxvbmcgb3Byb2Zfbm90ZV9vcGVuZWQgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQob3Byb2Zfd2FpdCk7Ci0KLXN0YXRpYyB1MzIgb3Byb2ZfcmVhZHlbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci1zdHJ1Y3QgX29wcm9mX2RhdGEgb3Byb2ZfZGF0YVtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwotCi1zdHJ1Y3Qgb3Bfbm90ZSAqIG5vdGVfYnVmZmVyIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotdTMyIG5vdGVfcG9zIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotCi0vLyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgb3BzIHN0cnVjdHVyZSB0byB1c2UKLXN0YXRpYyBzdHJ1Y3Qgb3BfaW50X29wZXJhdGlvbnMgY29uc3QgKiBpbnRfb3BzOwotCi1zdGF0aWMgY2hhciBjb25zdCAqIG9wX3ZlcnNpb24gPSBQQUNLQUdFICIgIiBWRVJTSU9OOwotIAotLyogLS0tLS0tLS0tLS0tLS0tLSBpbnRlcnJ1cHQgZW50cnkgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWlubGluZSBzdGF0aWMgaW50IG5lZWRfd2FrZXVwKHVpbnQgY3B1LCBzdHJ1Y3QgX29wcm9mX2RhdGEgKiBkYXRhKQotewotCXJldHVybiBkYXRhLT5uZXh0YnVmID49IChkYXRhLT5idWZfc2l6ZSAtIGRhdGEtPmJ1Zl93YXRlcm1hcmspICYmICFvcHJvZl9yZWFkeVtjcHVdOwotfQotCi1pbmxpbmUgc3RhdGljIHZvaWQgbmV4dF9zYW1wbGUoc3RydWN0IF9vcHJvZl9kYXRhICogZGF0YSkKLXsKLQlpZiAodW5saWtlbHkoKytkYXRhLT5uZXh0YnVmID09IGRhdGEtPmJ1Zl9zaXplKSkKLQkJZGF0YS0+bmV4dGJ1ZiA9IDA7Ci19Ci0KLWlubGluZSBzdGF0aWMgdm9pZCBldmljdF9vcF9lbnRyeSh1aW50IGNwdSwgc3RydWN0IF9vcHJvZl9kYXRhICogZGF0YSwgbG9uZyBpcnFfZW5hYmxlZCkKLXsKLQluZXh0X3NhbXBsZShkYXRhKTsKLQlpZiAobGlrZWx5KCFuZWVkX3dha2V1cChjcHUsIGRhdGEpKSkKLQkJcmV0dXJuOwotCi0JLyogbG9ja2luZyByYXRpb25hbGUgOgotCSAqCi0JICogb3RoZXIgQ1BVcyBhcmUgbm90IGEgcmFjZSBjb25jZXJuIHNpbmNlIHdlIHN5bmNoIG9uIG9wcm9mX3dhaXQtPmxvY2suCi0JICoKLQkgKiBmb3IgdGhlIGN1cnJlbnQgQ1BVLCB3ZSBtaWdodCBoYXZlIGludGVycnVwdGVkIGFub3RoZXIgdXNlciBvZiBlLmcuCi0JICogcnVucXVldWVfbG9jaywgZGVhZGxvY2tpbmcgb24gU01QIGFuZCByYWNpbmcgb24gVVAuIFNvIHdlIGNoZWNrIHRoYXQgSVJRcwotCSAqIHdlcmUgbm90IGRpc2FibGVkIChjb3JyZXNwb25kaW5nIHRvIHRoZSBpcnFzYXZlL3Jlc3RvcmVzIGluIF9fd2FrZV91cCgpLgotCSAqCi0JICogTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgYWxsIHNwaW5sb2NrcyB0YWtlbiBieSB0aGUgZnVsbCB3YWtlX3VwIHBhdGgKLQkgKiB0byBoYXZlIHNhdmVkIElSUXMgLSBvdGhlcndpc2Ugd2UgY2FuIGludGVycnVwdCB3aGlsc3QgaG9sZGluZyBhIHNwaW5sb2NrCi0JICogdGFrZW4gZnJvbSBzb21lIG5vbi13YWtlX3VwKCkgcGF0aCBhbmQgZGVhZGxvY2suIEN1cnJlbnRseSB0aGlzIG1lYW5zIG9ubHkKLQkgKiBvcHJvZl93YWl0LT5sb2NrIGFuZCBydW5xdWV1ZV9sb2NrOiBhbGwgaW5zdGFuY2VzIGRpc2FibGUgSVJRcyBiZWZvcmUKLQkgKiB0YWtpbmcgdGhlIGxvY2suCi0JICoKLQkgKiBUaGlzIHdpbGwgbWVhbiB0aGF0IGFwcHJvYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYSBudW1iZXIgb2YgdGhlCi0JICogZXZpY3Rpb25zIG1heSBmYWlsIHRvIHdha2UgdXAgdGhlIGRhZW1vbi4gV2Ugc2ltcGx5IGhvcGUgdGhpcyBkb2Vzbid0Ci0JICogdGFrZSBsb25nOyBhIHBhdGhvbG9naWNhbCBjYXNlIGNvdWxkIGNhdXNlIGJ1ZmZlciBvdmVyZmxvdy4KLQkgKgotCSAqIE5vdGUgdGhhdCB3ZSB1c2Ugb3Byb2ZfcmVhZHkgYXMgb3VyIGZsYWcgZm9yIHdoZXRoZXIgd2UgaGF2ZSBpbml0aWF0ZWQgYQotCSAqIHdha2UtdXAuIE9uY2UgdGhlIHdha2UtdXAgaXMgcmVjZWl2ZWQsIHRoZSBmbGFnIGlzIHJlc2V0IGFzIHdlbGwgYXMKLQkgKiBkYXRhLT5uZXh0YnVmLCBwcmV2ZW50aW5nIG11bHRpcGxlIHdha2V1cHMuCi0JICoKLQkgKiBPbiAyLjIsIGEgZ2xvYmFsIHdhaXRxdWV1ZV9sb2NrIGlzIHVzZWQsIHNvIHdlIG11c3QgY2hlY2sgaXQncyBub3QgaGVsZAotCSAqIGJ5IHRoZSBjdXJyZW50IENQVS4gV2UgbWFrZSBzdXJlIHRoYXQgYW55IHVzZXJzIG9mIHRoZSB3YWl0IHF1ZXVlIChpLmUuCi0JICogdXMgYW5kIHRoZSBjb2RlIGZvciB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoKSkgZGlzYWJsZSBpbnRlcnJ1cHRzIHNvIGl0J3MKLQkgKiBzdGlsbCBzYWZlIHRvIGNoZWNrIElGX01BU0suCi0JICovCi0JaWYgKGxpa2VseShpcnFfZW5hYmxlZCkpIHsKLQkJb3Byb2ZfcmVhZHlbY3B1XSA9IDE7Ci0JCXdha2VfdXAoJm9wcm9mX3dhaXQpOwotCX0KLX0KLQotaW5saW5lIHN0YXRpYyB2b2lkCi1maWxsX29wX2VudHJ5KHN0cnVjdCBvcF9zYW1wbGUgKiBvcHMsIGxvbmcgZWlwLCBwaWRfdCBwaWQsIHBpZF90IHRnaWQsIGludCBjdHIpCi17Ci0Jb3BzLT5laXAgPSBlaXA7Ci0Jb3BzLT5waWQgPSBwaWQ7Ci0Jb3BzLT50Z2lkID0gdGdpZDsKLQlvcHMtPmNvdW50ZXIgPSBjdHI7Ci19Ci0KLXZvaWQgZmFzdGNhbGwgb3BfZG9fcHJvZmlsZSh1aW50IGNwdSwgbG9uZyBlaXAsIGxvbmcgaXJxX2VuYWJsZWQsIGludCBjdHIpCi17Ci0Jc3RydWN0IF9vcHJvZl9kYXRhICogZGF0YSA9ICZvcHJvZl9kYXRhW2NwdV07Ci0JcGlkX3QgY29uc3QgcGlkID0gY3VycmVudC0+cGlkOwotCXBpZF90IGNvbnN0IHRnaWQgPSBvcF9nZXRfdGdpZCgpOwotCXN0cnVjdCBvcF9zYW1wbGUgKiBzYW1wbGVzID0gJmRhdGEtPmJ1ZmZlcltkYXRhLT5uZXh0YnVmXTsKLQotCWRhdGEtPm5yX2lycSsrOwotCi0JZmlsbF9vcF9lbnRyeShzYW1wbGVzLCBlaXAsIHBpZCwgdGdpZCwgY3RyKTsKLQlldmljdF9vcF9lbnRyeShjcHUsIGRhdGEsIGlycV9lbmFibGVkKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLSBkcml2ZXIgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIG9ubHkgc3RvcCBhbmQgc3RhcnQgcHJvZmlsaW5nIGludGVycnVwdCB3aGVuIHdlIGFyZQotICogZnVsbHkgcnVubmluZyAhCi0gKi8KLXN0YXRpYyB2b2lkIHN0b3BfY3B1X3BlcmZjdHIoaW50IGNwdSkKLXsKLQlpZiAoc3RhdGUgPT0gUlVOTklORykKLQkJaW50X29wcy0+c3RvcF9jcHUoY3B1KTsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRfY3B1X3BlcmZjdHIoaW50IGNwdSkKLXsKLQlpZiAoc3RhdGUgPT0gUlVOTklORykKLQkJaW50X29wcy0+c3RhcnRfY3B1KGNwdSk7Ci19Ci0gCi1zcGlubG9ja190IG5vdGVfbG9jayBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKLS8qIHdoaWNoIGJ1ZmZlciBuci4gaXMgd2FpdGluZyB0byBiZSByZWFkID8gKi8KLWludCBjcHVfYnVmZmVyX3dhaXRpbmc7Ci0gCi1zdGF0aWMgaW50IGlzX3JlYWR5KHZvaWQpCi17Ci0JdWludCBjcHVfbnI7Ci0JZm9yIChjcHVfbnIgPSAwIDsgY3B1X25yIDwgc21wX251bV9jcHVzOyBjcHVfbnIrKykgewotCQlpZiAob3Byb2ZfcmVhZHlbY3B1X25yXSkgewotCQkJY3B1X2J1ZmZlcl93YWl0aW5nID0gY3B1X25yOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBzdGF0aWMgdm9pZCB1cF9hbmRfY2hlY2tfbm90ZSh2b2lkKQotewotCW5vdGVfcG9zKys7Ci0JaWYgKGxpa2VseShub3RlX3BvcyA8IChzeXNjdGwubm90ZV9zaXplIC0gT1BfUFJFX05PVEVfV0FURVJNQVJLKHN5c2N0bC5ub3RlX3NpemUpKSAmJiAhaXNfcmVhZHkoKSkpCi0JCXJldHVybjsKLQotCS8qIGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwganVzdCBwaW4KLQkgKiB0byB0aGUgbGFzdCBlbnRyeSB1bnRpbCBpdCBpcyByZWFkLiBUaGlzIGxvc2VzCi0JICogbm90ZXMsIGJ1dCB3ZSBoYXZlIG5vIGNob2ljZS4gKi8KLQlpZiAodW5saWtlbHkobm90ZV9wb3MgPT0gc3lzY3RsLm5vdGVfc2l6ZSkpIHsKLQkJc3RhdGljIGludCB3YXJuZWQ7Ci0JCWlmICghd2FybmVkKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJub3RlIGJ1ZmZlciBvdmVyZmxvdzogcmVzdGFydCAiCi0JCQkgICAgICAgIm9wcm9maWxlIHdpdGggYSBsYXJnZXIgbm90ZSBidWZmZXIuXG4iKTsKLQkJCXdhcm5lZCA9IDE7Ci0JCX0KLQkJc3lzY3RsLm5yX25vdGVfYnVmZmVyX292ZXJmbG93Kys7Ci0JCW5vdGVfcG9zID0gc3lzY3RsLm5vdGVfc2l6ZSAtIDE7Ci0JfQotCi0JLyogd2UganVzdCB1c2UgY3B1IDAgYXMgYSBjb252ZW5pZW50IG9uZSB0byB3YWtlIHVwICovCi0Jb3Byb2ZfcmVhZHlbMF0gPSAyOwotCW9wcm9mX3dha2VfdXAoJm9wcm9mX3dhaXQpOwotfQotCi0vKiBpZiBob2xkaW5nIG5vdGVfbG9jayAqLwotdm9pZCBfX29wcm9mX3B1dF9ub3RlKHN0cnVjdCBvcF9ub3RlICogb25vdGUpCi17Ci0JLyogaWdub3JlIG5vdGUgaWYgd2UncmUgbm90IHVwIGFuZCBydW5uaW5nIGZ1bGx5ICovCi0JaWYgKHN0YXRlICE9IFJVTk5JTkcpCi0JCXJldHVybjsKLQotCW1lbWNweSgmbm90ZV9idWZmZXJbbm90ZV9wb3NdLCBvbm90ZSwgc2l6ZW9mKHN0cnVjdCBvcF9ub3RlKSk7Ci0JdXBfYW5kX2NoZWNrX25vdGUoKTsKLX0KLQotdm9pZCBvcHJvZl9wdXRfbm90ZShzdHJ1Y3Qgb3Bfbm90ZSAqIG9ub3RlKQotewotCXNwaW5fbG9jaygmbm90ZV9sb2NrKTsKLQlfX29wcm9mX3B1dF9ub3RlKG9ub3RlKTsKLQlzcGluX3VubG9jaygmbm90ZV9sb2NrKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgb3Byb2Zfbm90ZV9yZWFkKGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKLXsKLQlzdHJ1Y3Qgb3Bfbm90ZSAqIG15YnVmOwotCXVpbnQgbnVtOwotCXNzaXplX3QgbWF4OwotCi0JbWF4ID0gc2l6ZW9mKHN0cnVjdCBvcF9ub3RlKSAqIHN5c2N0bC5ub3RlX3NpemU7Ci0KLQlpZiAoKnBwb3MgfHwgY291bnQgIT0gbWF4KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW15YnVmID0gdm1hbGxvYyhtYXgpOwotCWlmICghbXlidWYpCi0JCXJldHVybiAtRUZBVUxUOwotCi0Jc3Bpbl9sb2NrKCZub3RlX2xvY2spOwotCi0JbnVtID0gbm90ZV9wb3M7Ci0KLQljb3VudCA9IG5vdGVfcG9zICogc2l6ZW9mKHN0cnVjdCBvcF9ub3RlKTsKLQotCWlmIChjb3VudCkKLQkJbWVtY3B5KG15YnVmLCBub3RlX2J1ZmZlciwgY291bnQpOwotCi0Jbm90ZV9wb3MgPSAwOwotCi0Jc3Bpbl91bmxvY2soJm5vdGVfbG9jayk7Ci0KLQlpZiAoY291bnQgJiYgY29weV90b191c2VyKGJ1ZiwgbXlidWYsIGNvdW50KSkKLQkJY291bnQgPSAtRUZBVUxUOwotCi0JdmZyZWUobXlidWYpOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludCBvcHJvZl9ub3RlX29wZW4odm9pZCkKLXsKLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmb3Byb2Zfbm90ZV9vcGVuZWQpKQotCQlyZXR1cm4gLUVCVVNZOwotCUlOQ19VU0VfQ09VTlRfTUFZQkU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Byb2Zfbm90ZV9yZWxlYXNlKHZvaWQpCi17Ci0JQlVHX09OKCFvcHJvZl9ub3RlX29wZW5lZCk7Ci0JY2xlYXJfYml0KDAsICZvcHJvZl9ub3RlX29wZW5lZCk7Ci0JREVDX1VTRV9DT1VOVF9NQVlCRTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjaGVja19idWZmZXJfYW1vdW50KGludCBjcHVfbnIpCi17Ci0Jc3RydWN0IF9vcHJvZl9kYXRhICogZGF0YSA9ICZvcHJvZl9kYXRhW2NwdV9ucl07IAotCWludCBzaXplID0gZGF0YS0+YnVmX3NpemU7Ci0JaW50IG51bSA9IGRhdGEtPm5leHRidWY7Ci0JaWYgKG51bSA8IHNpemUgLSBkYXRhLT5idWZfd2F0ZXJtYXJrICYmIG9wcm9mX3JlYWR5W2NwdV9ucl0gIT0gMikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcHJvZmlsZTogRGV0ZWN0ZWQgb3ZlcmZsb3cgb2Ygc2l6ZSAlZC4gIgotCQkgICAgICAgIllvdSBtdXN0IGluY3JlYXNlIHRoZSBtb2R1bGUgYnVmZmVyIHNpemUgd2l0aFxuIgotCQkgICAgICAgIm9wY29udHJvbCAtLXNldHVwIC0tYnVmZXItc2l6ZT0gb3IgcmVkdWNlIHRoZSAiCi0JCSAgICAgICAiaW50ZXJydXB0IGZyZXF1ZW5jeVxuIiwgbnVtKTsKLQkJZGF0YS0+bnJfYnVmZmVyX292ZXJmbG93ICs9IG51bTsKLQkJbnVtID0gc2l6ZTsKLQl9IGVsc2UKLQkJZGF0YS0+bmV4dGJ1ZiA9IDA7Ci0JcmV0dXJuIG51bTsKLX0KLQotc3RhdGljIGludCBjb3B5X2J1ZmZlcihjaGFyICogYnVmLCBpbnQgY3B1X25yKQotewotCXN0cnVjdCBvcF9idWZmZXJfaGVhZCBoZWFkOwotCWludCByZXQgPSAtRUZBVUxUOwotCi0Jc3RvcF9jcHVfcGVyZmN0cihjcHVfbnIpOwotIAotCWhlYWQuY3B1X25yID0gY3B1X25yOwotCWhlYWQuY291bnQgPSBjaGVja19idWZmZXJfYW1vdW50KGNwdV9ucik7Ci0JaGVhZC5zdGF0ZSA9IHN0YXRlOwotCi0Jb3Byb2ZfcmVhZHlbY3B1X25yXSA9IDA7Ci0KLQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmhlYWQsIHNpemVvZihzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQpKSkKLQkJZ290byBvdXQ7Ci0gCi0JaWYgKGhlYWQuY291bnQpIHsKLQkJc2l6ZV90IGNvbnN0IHNpemUgPSBoZWFkLmNvdW50ICogc2l6ZW9mKHN0cnVjdCBvcF9zYW1wbGUpOwotCQlpZiAoY29weV90b191c2VyKGJ1ZiArIHNpemVvZihzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQpLAotCQkJb3Byb2ZfZGF0YVtjcHVfbnJdLmJ1ZmZlciwgc2l6ZSkpCi0JCQlnb3RvIG91dDsKLQkJcmV0ID0gc2l6ZSArIHNpemVvZihzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQpOwotCX0gZWxzZSB7Ci0JCXJldCA9IHNpemVvZihzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQpOwotCX0KLSAKLW91dDoKLQlzdGFydF9jcHVfcGVyZmN0cihjcHVfbnIpOwotCXJldHVybiByZXQ7Ci19Ci0gCi1zdGF0aWMgc3NpemVfdCBvcHJvZl9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQotewotCXNzaXplX3QgbWF4OwotCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfUFRSQUNFKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXN3aXRjaCAoTUlOT1IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldikpIHsKLQkJY2FzZSAyOiByZXR1cm4gb3Byb2Zfbm90ZV9yZWFkKGJ1ZiwgY291bnQsIHBwb3MpOwotCQljYXNlIDA6IGJyZWFrOwotCQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltYXggPSBzaXplb2Yoc3RydWN0IG9wX2J1ZmZlcl9oZWFkKSArIHNpemVvZihzdHJ1Y3Qgb3Bfc2FtcGxlKSAqIHN5c2N0bC5idWZfc2l6ZTsKLQotCWlmICgqcHBvcyB8fCBjb3VudCAhPSBtYXgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoIChzdGF0ZSkgewotCQljYXNlIFJVTk5JTkc6Ci0JCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUob3Byb2Zfd2FpdCwgaXNfcmVhZHkoKSk7Ci0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJcmV0dXJuIC1FSU5UUjsKLQkJCWJyZWFrOwotCi0JCS8qIE5vbi1vYnZpb3VzLiBJZiBPX05PTkJMT0NLIGlzIHNldCwgdGhhdCBtZWFucwotCQkgKiB0aGUgZGFlbW9uIGtub3dzIGl0IGhhcyB0byBxdWl0IGFuZCBpcyBhc2tpbmcKLQkJICogZm9yIGZpbmFsIGJ1ZmZlciBkYXRhLiBJZiBpdCdzIG5vdCBzZXQsIHRoZW4gd2UKLQkJICogaGF2ZSBqdXN0IHRyYW5zaXRpb25lZCB0byBTVE9QUElORywgYW5kIHdlIG11c3QKLQkJICogaW5mb3JtIHRoZSBkYWVtb24gKHdoaWNoIHdlIGNhbiBkbyBqdXN0IGJ5IGEgbm9ybWFsCi0JCSAqIG9wZXJhdGlvbikuCi0JCSAqLwotCQljYXNlIFNUT1BQSU5HOiB7Ci0JCQlpbnQgY3B1OwotCi0JCQlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCi0JCQkJYnJlYWs7Ci0KLQkJCWZvciAoY3B1ID0gMDsgY3B1IDwgc21wX251bV9jcHVzOyArK2NwdSkgewotCQkJCWlmIChvcHJvZl9kYXRhW2NwdV0ubmV4dGJ1ZikgewotCQkJCQljcHVfYnVmZmVyX3dhaXRpbmcgPSBjcHU7Ci0JCQkJCW9wcm9mX3JlYWR5W2NwdV0gPSAyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0gCi0JCQlpZiAoY3B1ID09IHNtcF9udW1fY3B1cykKLQkJCQlyZXR1cm4gLUVBR0FJTjsKLSAKLQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTVE9QUEVEOiBCVUcoKTsKLQl9Ci0KLQlyZXR1cm4gY29weV9idWZmZXIoYnVmLCBjcHVfYnVmZmVyX3dhaXRpbmcpOwotfQotCi0KLXN0YXRpYyBpbnQgb3Byb2Zfc3RhcnQodm9pZCk7Ci1zdGF0aWMgaW50IG9wcm9mX3N0b3Aodm9pZCk7Ci0KLXN0YXRpYyBpbnQgb3Byb2Zfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm8sIHN0cnVjdCBmaWxlICogZmlsZSkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfUFRSQUNFKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXN3aXRjaCAoTUlOT1IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldikpIHsKLQkJY2FzZSAxOiByZXR1cm4gb3Byb2ZfaGFzaF9tYXBfb3BlbigpOwotCQljYXNlIDI6IHJldHVybiBvcHJvZl9ub3RlX29wZW4oKTsKLQkJY2FzZSAwOgotCQkJLyogbWFrZSBzdXJlIHRoZSBvdGhlciBkZXZpY2VzIGFyZSBvcGVuICovCi0JCQlpZiAoaXNfbWFwX3JlYWR5KCkpCi0JCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmb3Byb2Zfb3BlbmVkKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWVyciA9IG9wcm9mX3N0YXJ0KCk7Ci0JaWYgKGVycikKLQkJY2xlYXJfYml0KDAsICZvcHJvZl9vcGVuZWQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Byb2ZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm8sIHN0cnVjdCBmaWxlICogZmlsZSkKLXsKLQlzd2l0Y2ggKE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpKSB7Ci0JCWNhc2UgMTogcmV0dXJuIG9wcm9mX2hhc2hfbWFwX3JlbGVhc2UoKTsKLQkJY2FzZSAyOiByZXR1cm4gb3Byb2Zfbm90ZV9yZWxlYXNlKCk7Ci0JCWNhc2UgMDogYnJlYWs7Ci0JCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOwotCX0KLQotCUJVR19PTighb3Byb2Zfb3BlbmVkKTsKLQotCWNsZWFyX2JpdCgwLCAmb3Byb2Zfb3BlbmVkKTsKLQotCS8vIEZJWE1FOiBpcyB0aGlzIHNhZmUgd2hlbiBJIGtpbGwgLTkgdGhlIGRhZW1vbiA/IAotCXJldHVybiBvcHJvZl9zdG9wKCk7Ci19Ci0KLXN0YXRpYyBpbnQgb3Byb2ZfbW1hcChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKLXsKLQlpZiAoTUlOT1IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldikgPT0gMSkKLQkJcmV0dXJuIG9wcm9mX2hhc2hfbWFwX21tYXAoZmlsZSwgdm1hKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyogY2FsbGVkIHVuZGVyIHNwaW5sb2NrLCBjYW5ub3Qgc2xlZXAgKi8KLXN0YXRpYyB2b2lkIG9wcm9mX2ZyZWVfbWVtKHVpbnQgbnVtKQotewotCXVpbnQgaTsKLQlmb3IgKGk9MDsgaSA8IG51bTsgaSsrKSB7Ci0JCWlmIChvcHJvZl9kYXRhW2ldLmJ1ZmZlcikKLQkJCXZmcmVlKG9wcm9mX2RhdGFbaV0uYnVmZmVyKTsKLQkJb3Byb2ZfZGF0YVtpXS5idWZmZXIgPSBOVUxMOwotCX0KLQl2ZnJlZShub3RlX2J1ZmZlcik7Ci0Jbm90ZV9idWZmZXIgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IG9wcm9mX2luaXRfZGF0YSh2b2lkKQotewotCXVpbnQgaSwgbm90ZWJ1ZnNpemU7Ci0JdWxvbmcgYnVmX3NpemU7Ci0Jc3RydWN0IF9vcHJvZl9kYXRhICogZGF0YTsKLQotCXN5c2N0bC5ucl9ub3RlX2J1ZmZlcl9vdmVyZmxvdyA9IDA7Ci0Jbm90ZWJ1ZnNpemUgPSBzaXplb2Yoc3RydWN0IG9wX25vdGUpICogc3lzY3RsLm5vdGVfc2l6ZTsKLQlub3RlX2J1ZmZlciA9IHZtYWxsb2Mobm90ZWJ1ZnNpemUpOwotIAlpZiAoIW5vdGVfYnVmZmVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IGZhaWxlZCB0byBhbGxvY2F0ZSBub3RlIGJ1ZmZlciBvZiAldSBieXRlc1xuIiwKLQkJCW5vdGVidWZzaXplKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCW5vdGVfcG9zID0gMDsKLQotCS8vIHNhZmUgaW5pdAotCWZvciAoaSA9IDA7IGkgPCBzbXBfbnVtX2NwdXM7ICsraSkgewotCQlkYXRhID0gJm9wcm9mX2RhdGFbaV07Ci0JCWRhdGEtPmJ1Zl9zaXplID0gMDsKLQkJZGF0YS0+YnVmZmVyID0gMDsKLQkJZGF0YS0+YnVmX3dhdGVybWFyayA9IDA7Ci0JCWRhdGEtPm5yX2J1ZmZlcl9vdmVyZmxvdyA9IDA7Ci0JfQotIAotCWJ1Zl9zaXplID0gKHNpemVvZihzdHJ1Y3Qgb3Bfc2FtcGxlKSAqIHN5c2N0bC5idWZfc2l6ZSk7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IHNtcF9udW1fY3B1cyA7ICsraSkgewotCQlkYXRhID0gJm9wcm9mX2RhdGFbaV07Ci0KLQkJZGF0YS0+YnVmZmVyID0gdm1hbGxvYyhidWZfc2l6ZSk7Ci0JCWlmICghZGF0YS0+YnVmZmVyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiBmYWlsZWQgdG8gYWxsb2NhdGUgZXZpY3Rpb24gYnVmZmVyIG9mICVsdSBieXRlc1xuIixidWZfc2l6ZSk7Ci0JCQlvcHJvZl9mcmVlX21lbShpKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJbWVtc2V0KGRhdGEtPmJ1ZmZlciwgMCwgYnVmX3NpemUpOwotCi0JCWRhdGEtPmJ1Zl9zaXplID0gc3lzY3RsLmJ1Zl9zaXplOwotCQlkYXRhLT5idWZfd2F0ZXJtYXJrID0gT1BfUFJFX1dBVEVSTUFSSyhkYXRhLT5idWZfc2l6ZSk7Ci0JCWRhdGEtPm5leHRidWYgPSAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBhcm1zX2NoZWNrKHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWlmICgoZXJyID0gY2hlY2tfcmFuZ2Uoc3lzY3RsLmJ1Zl9zaXplLCBPUF9NSU5fQlVGX1NJWkUsIE9QX01BWF9CVUZfU0laRSwKLQkJInN5c2N0bC5idWZfc2l6ZSB2YWx1ZSAlZCBub3QgaW4gcmFuZ2UgKCVkICVkKVxuIikpKQotCQlyZXR1cm4gZXJyOwotCWlmICgoZXJyID0gY2hlY2tfcmFuZ2Uoc3lzY3RsLm5vdGVfc2l6ZSwgT1BfTUlOX05PVEVfVEFCTEVfU0laRSwgT1BfTUFYX05PVEVfVEFCTEVfU0laRSwKLQkJInN5c2N0bC5ub3RlX3NpemUgdmFsdWUgJWQgbm90IGluIHJhbmdlICglZCAlZClcbiIpKSkKLQkJcmV0dXJuIGVycjsKLQotCWlmICgoZXJyID0gaW50X29wcy0+Y2hlY2tfcGFyYW1zKCkpKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIERFQ0xBUkVfTVVURVgoc3lzY3Rsc2VtKTsKLQotCi1zdGF0aWMgaW50IG9wcm9mX3N0YXJ0KHZvaWQpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQlkb3duKCZzeXNjdGxzZW0pOwotCi0JLyogc2F2ZSB0aGUgc3lzY3RsIHNldHRhYmxlIHRoaW5ncyB0byBwcm90ZWN0IGFnYWluc3QgY2hhbmdlIHRocm91Z2gKLQkgKiBzeXN0Y2wgdGhlIHByb2ZpbGVyIHBhcmFtcyAqLwotCXN5c2N0bF9wYXJtcy5jcHVfdHlwZSA9IHN5c2N0bC5jcHVfdHlwZTsKLQlzeXNjdGwgPSBzeXNjdGxfcGFybXM7Ci0KLQlpZiAoKGVyciA9IG9wcm9mX2luaXRfZGF0YSgpKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoKGVyciA9IHBhcm1zX2NoZWNrKCkpKSB7Ci0JCW9wcm9mX2ZyZWVfbWVtKHNtcF9udW1fY3B1cyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICgoZXJyID0gaW50X29wcy0+c2V0dXAoKSkpIHsKLQkJb3Byb2ZfZnJlZV9tZW0oc21wX251bV9jcHVzKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jb3BfaW50ZXJjZXB0X3N5c2NhbGxzKCk7Ci0KLQlpbnRfb3BzLT5zdGFydCgpOwotCi0Jc3RhdGUgPSBSVU5OSU5HOwotCi1vdXQ6Ci0JdXAoJnN5c2N0bHNlbSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIHN0b3AgaW50ZXJydXB0cyBiZWluZyBnZW5lcmF0ZWQgYW5kIG5vdGVzIGFycml2aW5nLgotICogVGhpcyBpcyBpZGVtcG90ZW50LgotICovCi1zdGF0aWMgdm9pZCBvcHJvZl9wYXJ0aWFsX3N0b3Aodm9pZCkKLXsKLQlCVUdfT04oc3RhdGUgPT0gU1RPUFBFRCk7Ci0KLQlpZiAoc3RhdGUgPT0gUlVOTklORykgewotCQlvcF9yZXN0b3JlX3N5c2NhbGxzKCk7Ci0JCWludF9vcHMtPnN0b3AoKTsKLQl9Ci0KLQlzdGF0ZSA9IFNUT1BQSU5HOwotfQotCi1zdGF0aWMgaW50IG9wcm9mX3N0b3Aodm9pZCkKLXsKLQl1aW50IGk7Ci0JLy8gRklYTUU6IGVyciBub3QgbmVlZGVkIAotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JZG93bigmc3lzY3Rsc2VtKTsKLQotCUJVR19PTihzdGF0ZSA9PSBTVE9QUEVEKTsKLQotCS8qIGhlcmUgd2UgbmVlZCB0byA6Ci0JICogYnJpbmcgYmFjayB0aGUgb2xkIHN5c3RlbSBjYWxscwotCSAqIHN0b3AgdGhlIHBlcmYgY291bnRlcgotCSAqIGJyaW5nIGJhY2sgdGhlIG9sZCBOTUkgaGFuZGxlcgotCSAqIHJlc2V0IHRoZSBtYXAgYnVmZmVyIHN0dWZmIGFuZCByZWFkeSB2YWx1ZXMKLQkgKgotCSAqIE5vdGhpbmcgd2lsbCBiZSBhYmxlIHRvIHdyaXRlIGludG8gdGhlIG1hcCBidWZmZXIgYmVjYXVzZQotCSAqIHdlIHN5bmNocm9uaXNlIHZpYSB0aGUgc3BpbmxvY2tzCi0JICovCi0KLQlvcHJvZl9wYXJ0aWFsX3N0b3AoKTsKLQotCXNwaW5fbG9jaygmbm90ZV9sb2NrKTsKLQotCWZvciAoaSA9IDAgOyBpIDwgc21wX251bV9jcHVzOyBpKyspIHsKLQkJc3RydWN0IF9vcHJvZl9kYXRhICogZGF0YSA9ICZvcHJvZl9kYXRhW2ldOwotCQlvcHJvZl9yZWFkeVtpXSA9IDA7Ci0JCWRhdGEtPm5leHRidWYgPSAwOwotCX0KLQotCW9wcm9mX2ZyZWVfbWVtKHNtcF9udW1fY3B1cyk7Ci0KLQlzcGluX3VubG9jaygmbm90ZV9sb2NrKTsKLQllcnIgPSAwOwotCi0JLyogRklYTUU6IGNhbiB3ZSByZWFsbHkgc2F5IHRoaXMgPyAqLwotCXN0YXRlID0gU1RPUFBFRDsKLQl1cCgmc3lzY3Rsc2VtKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvcHJvZl9mb3BzID0gewotI2lmZGVmIEhBVkVfRklMRV9PUEVSQVRJT05TX09XTkVSCi0Jb3duZXI6IFRISVNfTU9EVUxFLAotI2VuZGlmCi0Jb3Blbjogb3Byb2Zfb3BlbiwKLQlyZWxlYXNlOiBvcHJvZl9yZWxlYXNlLAotCXJlYWQ6IG9wcm9mX3JlYWQsCi0JbW1hcDogb3Byb2ZfbW1hcCwKLX07Ci0KLS8qCi0gKiAvcHJvYy9zeXMvZGV2L29wcm9maWxlLwotICogICAgICAgICAgICAgICAgICAgICAgICBidWZzaXplCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGVzaXplCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9zdG9wCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIG5yX2ludGVycnVwdHMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgI2N0ci8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudAotICogICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudAotICogICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRfbWFzawotICogICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbAotICogICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIKLSAqCi0gKiAjY3RyIGlzIGluIFswLTFdIGZvciBQUHJvIGNvcmUsIFswLTNdIGZvciBBdGhsb24gY29yZQotICoKLSAqLwotCi0vKiBUaGVzZSBhY2Nlc3Mgcm91dGluZXMgYXJlIGJhc2ljYWxseSBub3Qgc2FmZSBvbiBTTVAgZm9yIG1vZHVsZSB1bmxvYWQuCi0gKiBBbmQgdGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgLSB0aGUgQVBJIGlzIGJyb2tlbi4gV2UnbGwganVzdAotICogbWFrZSBhIGJlc3QtZWZmb3J0cyB0aGluZy4gTm90ZSB0aGUgc2VtIGlzIG5lZWRlZCB0byBwcmV2ZW50IHBhcm1zX2NoZWNrCi0gKiBieXBhc3NpbmcgZHVyaW5nIG9wcm9mX3N0YXJ0KCkuCi0gKi8KLQotc3RhdGljIHZvaWQgbG9ja19zeXNjdGwodm9pZCkKLXsKLQlNT0RfSU5DX1VTRV9DT1VOVDsKLQlkb3duKCZzeXNjdGxzZW0pOwotfQotCi1zdGF0aWMgdm9pZCB1bmxvY2tfc3lzY3RsKHZvaWQpCi17Ci0JdXAoJnN5c2N0bHNlbSk7Ci0JTU9EX0RFQ19VU0VfQ09VTlQ7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X25yX2ludGVycnVwdHMoY3RsX3RhYmxlICogdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogYnVmZmVyLCBzaXplX3QgKiBsZW5wKQotewotCXVpbnQgY3B1OwotCWludCByZXQgPSAtRUlOVkFMOwotCi0JbG9ja19zeXNjdGwoKTsKLQotCWlmICh3cml0ZSkKLQkJZ290byBvdXQ7Ci0KLQlzeXNjdGwubnJfaW50ZXJydXB0cyA9IDA7Ci0KLQlmb3IgKGNwdSA9IDAgOyBjcHUgPCBzbXBfbnVtX2NwdXM7IGNwdSsrKSB7Ci0JCXN5c2N0bC5ucl9pbnRlcnJ1cHRzICs9IG9wcm9mX2RhdGFbY3B1XS5ucl9pcnE7Ci0JCW9wcm9mX2RhdGFbY3B1XS5ucl9pcnEgPSAwOwotCX0KLQotCXJldCA9ICBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wKTsKLW91dDoKLQl1bmxvY2tfc3lzY3RsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnZXRfbnJfYnVmZmVyX292ZXJmbG93KGN0bF90YWJsZSAqIHRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICogZmlscCwgdm9pZCAqIGJ1ZmZlciwgc2l6ZV90ICogbGVucCkKLXsKLQl1aW50IGNwdTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWxvY2tfc3lzY3RsKCk7Ci0KLQlpZiAod3JpdGUpCi0JCWdvdG8gb3V0OwotCi0JZm9yIChjcHUgPSAwIDsgY3B1IDwgc21wX251bV9jcHVzOyBjcHUrKykgewotCQlzeXNjdGwubnJfYnVmZmVyX292ZXJmbG93ICs9IG9wcm9mX2RhdGFbY3B1XS5ucl9idWZmZXJfb3ZlcmZsb3c7Ci0JCW9wcm9mX2RhdGFbY3B1XS5ucl9idWZmZXJfb3ZlcmZsb3cgPSAwOwotCX0KLQotCXJldCA9ICBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wKTsKLW91dDoKLQl1bmxvY2tfc3lzY3RsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGxwcm9jX2RvaW50dmVjKGN0bF90YWJsZSAqIHRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICogZmlscCwgdm9pZCAqIGJ1ZmZlciwgc2l6ZV90ICogbGVucCkKLXsKLQlpbnQgZXJyOwotCi0JbG9ja19zeXNjdGwoKTsKLQllcnIgPSBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wKTsKLQl1bmxvY2tfc3lzY3RsKCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBkb19hY3R1YWxfZHVtcCh2b2lkKQotewotCXVpbnQgY3B1OwotCi0JZm9yIChjcHUgPSAwIDsgY3B1IDwgc21wX251bV9jcHVzOyBjcHUrKykgewotCQlvcHJvZl9yZWFkeVtjcHVdID0gMjsKLQl9Ci0Jb3Byb2Zfd2FrZV91cCgmb3Byb2Zfd2FpdCk7Ci19Ci0KLXN0YXRpYyBpbnQgc3lzY3RsX2RvX2R1bXAoY3RsX3RhYmxlICogdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogYnVmZmVyLCBzaXplX3QgKiBsZW5wKQotewotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JbG9ja19zeXNjdGwoKTsKLQotCWlmIChzdGF0ZSAhPSBSVU5OSU5HKQotCQlnb3RvIG91dDsKLSAKLQlpZiAoIXdyaXRlKSB7Ci0JCWVyciA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnApOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkb19hY3R1YWxfZHVtcCgpOwotCi0JZXJyID0gMDsKLW91dDoKLQl1bmxvY2tfc3lzY3RsKCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzeXNjdGxfZG9fZHVtcF9zdG9wKGN0bF90YWJsZSAqIHRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICogZmlscCwgdm9pZCAqIGJ1ZmZlciwgc2l6ZV90ICogbGVucCkKLXsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCWxvY2tfc3lzY3RsKCk7Ci0KLQlpZiAoc3RhdGUgIT0gUlVOTklORykKLQkJZ290byBvdXQ7Ci0gCi0JaWYgKCF3cml0ZSkgewotCQllcnIgPSBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jb3Byb2ZfcGFydGlhbF9zdG9wKCk7Ci0KLQkvKiBhbHNvIHdha2VzIHVwIGRhZW1vbiAqLwotCWRvX2FjdHVhbF9kdW1wKCk7Ci0KLQllcnIgPSAwOwotb3V0OgotCXVubG9ja19zeXNjdGwoKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGNvbnN0IG5yX29wcm9mX3N0YXRpYyA9IDg7Ci0KLXN0YXRpYyBjdGxfdGFibGUgb3Byb2ZfdGFibGVbXSA9IHsKLQl7IDEsICJidWZzaXplIiwgJnN5c2N0bF9wYXJtcy5idWZfc2l6ZSwgc2l6ZW9mKGludCksIDA2NDQsIE5VTEwsICZscHJvY19kb2ludHZlYywgTlVMTCwgfSwKLQl7IDEsICJkdW1wIiwgJnN5c2N0bF9wYXJtcy5kdW1wLCBzaXplb2YoaW50KSwgMDY2NiwgTlVMTCwgJnN5c2N0bF9kb19kdW1wLCBOVUxMLCB9LAotCXsgMSwgImR1bXBfc3RvcCIsICZzeXNjdGxfcGFybXMuZHVtcF9zdG9wLCBzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwgJnN5c2N0bF9kb19kdW1wX3N0b3AsIE5VTEwsIH0sCi0JeyAxLCAibnJfaW50ZXJydXB0cyIsICZzeXNjdGwubnJfaW50ZXJydXB0cywgc2l6ZW9mKGludCksIDA0NDQsIE5VTEwsICZnZXRfbnJfaW50ZXJydXB0cywgTlVMTCwgfSwKLQl7IDEsICJub3Rlc2l6ZSIsICZzeXNjdGxfcGFybXMubm90ZV9zaXplLCBzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwgJmxwcm9jX2RvaW50dmVjLCBOVUxMLCB9LAotCXsgMSwgImNwdV90eXBlIiwgJnN5c2N0bC5jcHVfdHlwZSwgc2l6ZW9mKGludCksIDA0NDQsIE5VTEwsICZscHJvY19kb2ludHZlYywgTlVMTCwgfSwKLQl7IDEsICJub3RlX2J1ZmZlcl9vdmVyZmxvdyIsICZzeXNjdGwubnJfbm90ZV9idWZmZXJfb3ZlcmZsb3csIHNpemVvZihpbnQpLCAwNDQ0LCBOVUxMLCAmbHByb2NfZG9pbnR2ZWMsIE5VTEwsIH0sCi0JeyAxLCAiYnVmZmVyX292ZXJmbG93IiwgJnN5c2N0bC5ucl9idWZmZXJfb3ZlcmZsb3csIHNpemVvZihpbnQpLCAwNDQ0LCBOVUxMLCAmZ2V0X25yX2J1ZmZlcl9vdmVyZmxvdywgTlVMTCwgfSwKLQl7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwKLQl7IDAsIH0sCi19OwotCi1zdGF0aWMgY3RsX3RhYmxlIG9wcm9mX3Jvb3RbXSA9IHsKLQl7MSwgIm9wcm9maWxlIiwgTlVMTCwgMCwgMDc1NSwgb3Byb2ZfdGFibGV9LAotIAl7MCx9LAotfTsKLQotc3RhdGljIGN0bF90YWJsZSBkZXZfcm9vdFtdID0gewotCXtDVExfREVWLCAiZGV2IiwgTlVMTCwgMCwgMDU1NSwgb3Byb2Zfcm9vdH0sCi0JezAsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqIHN5c2N0bF9oZWFkZXI7Ci0KLS8qIE5PVEU6IHdlIGRvICpub3QqIHN1cHBvcnQgc3lzY3RsKCkgc3lzY2FsbCAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3N5c2N0bCh2b2lkKQotewotCWludCBlcnIgPSAwOwotCWN0bF90YWJsZSAqIG5leHQgPSAmb3Byb2ZfdGFibGVbbnJfb3Byb2Zfc3RhdGljXTsKLQotCS8qIHRoZXNlIHN5c2N0bCBwYXJtcyBuZWVkIHNlbnNpYmxlIHZhbHVlICovCi0Jc3lzY3RsX3Bhcm1zLmJ1Zl9zaXplID0gT1BfREVGQVVMVF9CVUZfU0laRTsKLQlzeXNjdGxfcGFybXMubm90ZV9zaXplID0gT1BfREVGQVVMVF9OT1RFX1NJWkU7Ci0KLQlpZiAoKGVyciA9IGludF9vcHMtPmFkZF9zeXNjdGxzKG5leHQpKSkgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCXN5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoZGV2X3Jvb3QsIDApOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qIG5vdCBzYWZlIHRvIG1hcmsgYXMgX19leGl0IHNpbmNlIHVzZWQgZnJvbSBfX2luaXQgY29kZSAqLwotc3RhdGljIHZvaWQgY2xlYW51cF9zeXNjdGwodm9pZCkKLXsKLQljdGxfdGFibGUgKiBuZXh0ID0gJm9wcm9mX3RhYmxlW25yX29wcm9mX3N0YXRpY107Ci0JdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3lzY3RsX2hlYWRlcik7Ci0KLQlpbnRfb3BzLT5yZW1vdmVfc3lzY3RscyhuZXh0KTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBjYW5fdW5sb2FkKHZvaWQpCi17Ci0JaW50IGNhbiA9IC1FQlVTWTsKLQlkb3duKCZzeXNjdGxzZW0pOwotCi0JaWYgKGFsbG93X3VubG9hZCAmJiBzdGF0ZSA9PSBTVE9QUEVEICYmICFHRVRfVVNFX0NPVU5UKFRISVNfTU9EVUxFKSkKLQkJY2FuID0gMDsKLQl1cCgmc3lzY3Rsc2VtKTsKLQlyZXR1cm4gY2FuOwotfQotCi1pbnQgX19pbml0IG9wcm9mX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChzeXNjdGwuY3B1X3R5cGUgIT0gQ1BVX1JUQykgewotCQlpbnRfb3BzID0gb3BfaW50X2ludGVyZmFjZSgpOwotCi0JCS8vIHRyeSB0byBpbml0LCBmYWxsIGJhY2sgdG8gcnRjIGlmIG5vdAotCQlpZiAoKGVyciA9IGludF9vcHMtPmluaXQoKSkpIHsKLQkJCWludF9vcHMgPSAmb3BfcnRjX29wczsKLQkJCWlmICgoZXJyID0gaW50X29wcy0+aW5pdCgpKSkgewotCQkJCXJldHVybiBlcnI7Ci0JCQl9Ci0JCQlzeXNjdGwuY3B1X3R5cGUgPSBDUFVfUlRDOwotCQl9Ci0JfSBlbHNlIHsKLQkJaW50X29wcyA9ICZvcF9ydGNfb3BzOwotCQlpZiAoKGVyciA9IGludF9vcHMtPmluaXQoKSkpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmICgoZXJyID0gaW5pdF9zeXNjdGwoKSkpCi0JCWdvdG8gb3V0X2VycjsKLQotCWVyciA9IG9wX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJvcHJvZiIsICZvcHJvZl9mb3BzKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXRfZXJyMjsKLQotCWVyciA9IG9wcm9mX2luaXRfaGFzaG1hcCgpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IGNvdWxkbid0IGFsbG9jYXRlIGhhc2ggbWFwICFcbiIpOwotCQl1bnJlZ2lzdGVyX2NocmRldihvcF9tYWpvciwgIm9wcm9mIik7Ci0JCWdvdG8gb3V0X2VycjI7Ci0JfQotCi0JLyogbW9kdWxlIG1pZ2h0IG5vdCBiZSB1bmxvYWRhYmxlICovCi0JVEhJU19NT0RVTEUtPmNhbl91bmxvYWQgPSBjYW5fdW5sb2FkOwotCi0JLyogZG8gdGhpcyBub3cgc28gd2UgZG9uJ3QgaGF2ZSB0byB0cmFjayBzYXZlL3Jlc3RvcmVzIGxhdGVyICovCi0Jb3Bfc2F2ZV9zeXNjYWxscygpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgbG9hZGVkLCBtYWpvciAldVxuIiwgb3BfdmVyc2lvbiwgb3BfbWFqb3IpOwotCXJldHVybiAwOwotCi1vdXRfZXJyMjoKLQljbGVhbnVwX3N5c2N0bCgpOwotb3V0X2VycjoKLQlpbnRfb3BzLT5kZWluaXQoKTsKLQlyZXR1cm4gZXJyOwotfQotCi12b2lkIF9fZXhpdCBvcHJvZl9leGl0KHZvaWQpCi17Ci0Jb3Byb2ZfZnJlZV9oYXNobWFwKCk7Ci0KLQl1bnJlZ2lzdGVyX2NocmRldihvcF9tYWpvciwgIm9wcm9mIik7Ci0KLQljbGVhbnVwX3N5c2N0bCgpOwotCi0JaW50X29wcy0+ZGVpbml0KCk7Ci19Ci0KLS8qCi0gKiAiVGhlIG1vc3QgdmFsdWFibGUgY29tbW9kaXR5IEkga25vdyBvZiBpcyBpbmZvcm1hdGlvbi4iCi0gKiAgICAgIC0gR29yZG9uIEdla2tvCi0gKi8KZGlmZiAtLWdpdCBhL21vZHVsZS9vcHJvZmlsZS5oIGIvbW9kdWxlL29wcm9maWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNzQ0MjQuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL29wcm9maWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcHJvZmlsZS5oCi0gKiBNYWluIGRyaXZlciBjb2RlCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUFJPRklMRV9ICi0jZGVmaW5lIE9QUk9GSUxFX0gKLQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlICJjb21wYXQuaCIKLQotI2luY2x1ZGUgIm9wX2NvbmZpZ18yNC5oIgotI2luY2x1ZGUgIm9wX2h3X2NvbmZpZy5oIgotI2luY2x1ZGUgIm9wX2ludGVyZmFjZS5oIgotI2luY2x1ZGUgIm9wX2NwdV90eXBlLmgiCi0KLSN1bmRlZiBtaW4KLSN1bmRlZiBtYXgKLQotI2RlZmluZSBzdHJlcShhLCBiKSAoIXN0cmNtcCgoYSksIChiKSkpCi0KLS8qIHBlci1jcHUgZHluYW1pYyBkYXRhICovCi1zdHJ1Y3QgX29wcm9mX2RhdGEgewotCS8qIGV2aWN0aW9uIGJ1ZmZlciAqLwotCXN0cnVjdCBvcF9zYW1wbGUgKiBidWZmZXI7Ci0JLyogbnIuIGluIGJ1ZmZlciAqLwotCXVpbnQgYnVmX3NpemU7Ci0JLyogd2UgdHJ5IHRvIHdha2V1cCB3aGVuIG5leHRidWYgPj0gYnVmX3dhdGVybWFyayAqLwotCXVpbnQgYnVmX3dhdGVybWFyazsKLQkvKiBuZXh0IGluIGJ1ZmZlciAoYXRvbWljKSAqLwotCXVpbnQgbmV4dGJ1ZjsKLQkvKiBudW1iZXIgb2YgSVJRcyBmb3IgdGhpcyBDUFUgKi8KLQl1aW50IG5yX2lycTsKLQkvKiBidWZmZXIgb3ZlcmZsb3cgY3VtdWxhdGVkIHNpemUgKi8KLQl1aW50IG5yX2J1ZmZlcl9vdmVyZmxvdzsKLQkvKiByZXNldCBjb3VudGVyIHZhbHVlcyAqLwotCXVpbnQgY3RyX2NvdW50W09QX01BWF9DT1VOVEVSU107Ci19OwotCi0vKiByZWZsZWN0IC9wcm9jL3N5cy9kZXYvb3Byb2ZpbGUvI2NvdW50ZXIgZmlsZXMgKi8KLXN0cnVjdCBvcHJvZl9jb3VudGVyIHsKLQlpbnQgY291bnQ7Ci0JaW50IGVuYWJsZWQ7Ci0JaW50IGV2ZW50OwotCWludCBrZXJuZWw7Ci0JaW50IHVzZXI7Ci0JaW50IHVuaXRfbWFzazsKLX07Ci0KLS8qIHJlZmxlY3QgL3Byb2Mvc3lzL2Rldi9vcHJvZmlsZSBmaWxlcyAqLwotc3RydWN0IG9wcm9mX3N5c2N0bCB7Ci0JLyogbnIuIGluIGV2aWN0aW9uIGJ1ZmZzZXIgKi8KLQlpbnQgYnVmX3NpemU7Ci0JLyogc3lzY3RsIGR1bXAgKi8KLQlpbnQgZHVtcDsKLQkvKiBkdW1wIGFuZCBzdG9wICovCi0JaW50IGR1bXBfc3RvcDsKLQkvKiBuci4gaW4gbm90ZSBidWZmZXIgKi8KLQlpbnQgbm90ZV9zaXplOwotCS8qIG5yLiBpbnRlcnJ1cHRzIG9jY3VyZWQgKi8KLQlpbnQgbnJfaW50ZXJydXB0czsKLQkvKiB0aGUgY3B1IGNvcmUgdHlwZTogQ1BVX1BQUk8sIENQVV9QSUkgLi4uICovCi0JaW50IGNwdV90eXBlOwotCS8qIG5yIG5vdGUgYnVmZmVyIG92ZXJmbG93ICovCi0JaW50IG5yX25vdGVfYnVmZmVyX292ZXJmbG93OwotCS8qIG5yIGJ1ZmZlciBvdmVyZmxvdyAqLwotCWludCBucl9idWZmZXJfb3ZlcmZsb3c7Ci0JLyogY291bnRlciBzZXR1cCAqLwotCXN0cnVjdCBvcHJvZl9jb3VudGVyIGN0cltPUF9NQVhfQ09VTlRFUlNdOwotfTsKLQotLyoqCi0gKiBBIGludGVycnVwdCBoYW5kbGVyIG11c3QgaW1wbGVtZW50IHRoZXNlIHJvdXRpbmVzLgotICogV2hlbiBhbiBpbnRlcnJ1cHQgYXJyaXZlcywgaXQgbXVzdCBldmVudHVhbGx5IGNhbGwKLSAqIG9wX2RvX3Byb2ZpbGUoKS4KLSAqLwotc3RydWN0IG9wX2ludF9vcGVyYXRpb25zIHsKLQkvKiBpbml0aWFsaXNlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBvbiBtb2R1bGUgbG9hZC4KLQkgKiBPbiBmYWlsdXJlIGRlaW5pdCBoYW5kbGVyIGlzIG5vdCBjYWxsZWQgc28gYWxsIHJlc291cmNlcwotCSAqIGFsbG9jYXRlZCBieSBpbml0KCkgbXVzdCBiZSBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUKLQkgKiAob3IgMCBvbiBzdWNjZXNzKQotCSAqLwotCWludCAoKmluaXQpKHZvaWQpOwotCS8qIGRlaW5pdGlhbGlzZSBvbiBtb2R1bGUgdW5sb2FkICovCi0Jdm9pZCAoKmRlaW5pdCkodm9pZCk7Ci0JLyogYWRkIGFueSBoYW5kbGVyLXNwZWNpZmljIHN5c2N0bHMgYXQgdGhlIHBvc2l0aW9uIGdpdmVuIGJ5IEBuZXh0LiBSZXR1cm4gMCBvbiBzdWNjZXNzICovCi0JaW50ICgqYWRkX3N5c2N0bHMpKGN0bF90YWJsZSAqbmV4dCk7Ci0JLyogcmVtb3ZlIGhhbmRsZXItc3BlY2lmaWMgc3lzY3RscyAqLwotCXZvaWQgKCpyZW1vdmVfc3lzY3RscykoY3RsX3RhYmxlICpuZXh0KTsKLQkvKiBjaGVjayBnaXZlbiBwcm9maWxpbmcgcGFyYW1ldGVycyBhcmUgY29ycmVjdC4gUmV0dXJuIDAgb24gc3VjY2VzcyAqLwotCWludCAoKmNoZWNrX3BhcmFtcykodm9pZCk7Ci0JLyogc2V0dXAgdGhlIGhhbmRsZXIgZnJvbSBwcm9maWxpbmcgcGFyYW1ldGVycy4gUmV0dXJuIDAgb24gc3VjY2VzcyAqLwotCWludCAoKnNldHVwKSh2b2lkKTsKLQkvKiBzdGFydCBwcm9maWxpbmcgb24gYWxsIENQVXMgKi8KLQl2b2lkICgqc3RhcnQpKHZvaWQpOwotCS8qIHN0b3AgcHJvZmlsaW5nIG9uIGFsbCBDUFVzICovCi0Jdm9pZCAoKnN0b3ApKHZvaWQpOwotCS8qIHN0YXJ0IHByb2ZpbGluZyBvbiB0aGUgZ2l2ZW4gQ1BVICovCi0Jdm9pZCAoKnN0YXJ0X2NwdSkodWludCk7Ci0JLyogc3RvcCBwcm9maWxpbmcgb24gdGhlIGdpdmVuIENQVSAqLwotCXZvaWQgKCpzdG9wX2NwdSkodWludCk7Ci19OwotCi0vKiBtYXhpbXVtIGRlcHRoIG9mIGRuYW1lIHRyZWVzIC0gdGhpcyBpcyBqdXN0IGEgcGFnZSAqLwotI2RlZmluZSBETkFNRV9TVEFDS19NQVggMTAyNAotCi0vKiBvcHJvZl9zdGFydCgpIGNvcHkgaGVyZSB0aGUgc3lzY3RsIHNldHRhYmxlIHBhcmFtZXRlcnMgKi8KLWV4dGVybiBzdHJ1Y3Qgb3Byb2Zfc3lzY3RsIHN5c2N0bDsKLQotaW50IG9wcm9mX2luaXQodm9pZCk7Ci12b2lkIG9wcm9mX2V4aXQodm9pZCk7Ci11bnNpZ25lZCBsb25nIGlzX21hcF9yZWFkeSh2b2lkKTsKLWludCBvcHJvZl9oYXNoX21hcF9vcGVuKHZvaWQpOwotaW50IG9wcm9mX2hhc2hfbWFwX3JlbGVhc2Uodm9pZCk7Ci1pbnQgb3Byb2ZfaGFzaF9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotaW50IG9wcm9mX21hcF9vcGVuKHZvaWQpOwotaW50IG9wcm9mX21hcF9yZWxlYXNlKHZvaWQpOwotaW50IG9wcm9mX2luaXRfaGFzaG1hcCh2b2lkKTsKLXZvaWQgb3Byb2ZfZnJlZV9oYXNobWFwKHZvaWQpOwotCi0vKiB1c2VkIGJ5IGludGVycnVwdCBoYW5kbGVycyBpZiB0aGUgdW5kZXJsaW5lZCBoYXJ3YXJlIGRvZXNuJ3Qgc3VwcG9ydAotICogcGVyZm9ybWFuY2UgY291bnRlciAqLwotZXh0ZXJuIHN0cnVjdCBvcF9pbnRfb3BlcmF0aW9ucyBvcF9ydGNfb3BzOwotCi12b2lkIEZBU1RDQUxMKG9wX2RvX3Byb2ZpbGUodWludCBjcHUsIGxvbmcgZWlwLCBsb25nIGlycV9lbmFibGVkLCBpbnQgY3RyKSk7Ci1leHRlcm4gc3RydWN0IF9vcHJvZl9kYXRhIG9wcm9mX2RhdGFbTlJfQ1BVU107Ci1leHRlcm4gc3RydWN0IG9wcm9mX3N5c2N0bCBzeXNjdGxfcGFybXM7Ci1leHRlcm4gaW50IGxwcm9jX2RvaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wKTsKLQotLyogZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBmaWxlICovCi0vKiBtdXN0IHJldHVybiBPUF9SVEMgaWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBzb21ldGhpbmcgbGlrZQotICogcGVyZiBjb3VudGVyICovCi1vcF9jcHUgZ2V0X2NwdV90eXBlKHZvaWQpOwotLyogcmV0dXJuIGFuIGludGVyZmFjZSBwb2ludGVyLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGlmIGdldF9jcHVfdHlwZQotICogZG9lc24ndCByZXR1cm4gT1BfUlRDICovCi1zdHJ1Y3Qgb3BfaW50X29wZXJhdGlvbnMgY29uc3QgKiBvcF9pbnRfaW50ZXJmYWNlKHZvaWQpOwotLyogaW50ZXJjZXB0IHRoZSBuZWVkZWQgc3lzY2FsbCAqLwotdm9pZCBvcF9pbnRlcmNlcHRfc3lzY2FsbHModm9pZCk7Ci12b2lkIG9wX3Jlc3RvcmVfc3lzY2FsbHModm9pZCk7Ci12b2lkIG9wX3NhdmVfc3lzY2FsbHModm9pZCk7Ci0KLSNlbmRpZiAvKiBPUFJPRklMRV9IICovCmRpZmYgLS1naXQgYS9tb2R1bGUveDg2L01ha2VmaWxlLmluIGIvbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmMTgzMy4uMDAwMDAwMAotLS0gYS9tb2R1bGUveDg2L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotT1BST0ZJTEVfRElSPUBPUFJPRklMRV9ESVJACi1WRVJTSU9OPUBWRVJTSU9OQAotS1ZFUlM9QEtWRVJTQAotS1NSQz1AS1NSQ0AKLQotRVhUUkFfQ0ZMQUdTPUBFWFRSQV9DRkxBR1NfTU9EVUxFQCAtRF9fTk9fVkVSU0lPTl9fIFwKLQktSSQoT1BST0ZJTEVfRElSKS8gLUkkKE9QUk9GSUxFX0RJUikvbGlidXRpbCAtSSQoT1BST0ZJTEVfRElSKS9saWJvcCAtSSQoT1BST0ZJTEVfRElSKS9tb2R1bGUKLSAKLVVTRV9TVEFOREFSRF9BU19SVUxFPTEKLSAKLSMgTkI6IGRvIG5vdCBhZGQgYSBmaWxlIGhlcmUgd2l0aG91dCBhZGRpbmcgaXQgdG8gRVhUUkFfRElTVCBpbiAuLi9NYWtlZmlsZS5hbQotCi1PX1RBUkdFVCA6PSBhcmNoLm8KLQotb2JqLXkgOj0gY3B1X3R5cGUubyBvcF9hcGljLm8gb3BfZml4bWFwLm8gb3BfcnRjLm8gb3Bfbm1pLm8gXAotCW9wX21vZGVsX3Bwcm8ubyBvcF9tb2RlbF9hdGhsb24ubyBvcF9tb2RlbF9wNC5vIAotCi1vYmoteSArPSBvcHJvZmlsZV9ubWkubyBvcF9zeXNjYWxscy5vCi0KLW9iai1tIDo9ICQoT19UQVJHRVQpCi1PX09CSlMgOj0gJChvYmoteSkKLU1fT0JKUyA6PSAkKE9fVEFSR0VUKQotCi1UT1BESVIgOj0gJChLU1JDKQotQ09ORklHX1NIRUxMIDo9IFRPUERJUj0kKEtTUkMpIC9iaW4vYmFzaAotaW5jbHVkZSAkKEtTUkMpL1J1bGVzLm1ha2UKLQotIyBGSVhNRTogZGVwZW5kZW5jaWVzIApkaWZmIC0tZ2l0IGEvbW9kdWxlL3g4Ni9hcGljX2NvbXBhdC5oIGIvbW9kdWxlL3g4Ni9hcGljX2NvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGIzOGYzLi4wMDAwMDAwCi0tLSBhL21vZHVsZS94ODYvYXBpY19jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKgotICogQGZpbGUgYXBpY19jb21wYXQuaAotICogRGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyBmb3IgQVBJQyBpbnRlcmFjdGlvbgotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICovCi0KLSNpZm5kZWYgQVBJQ19DT01QQVRfSAotI2RlZmluZSBBUElDX0NPTVBBVF9ICi0KLSNpZiBWX0JFRk9SRSgyLDQsMCkKLS8qIGV2ZW4gb24gU01QLCBzb21lIGRlZmluZXMgYXJlIG1pc3NpbmcgaW4gMi4yICovCi0jZGVmaW5lIEFQSUNfTFZSCQkweDMwCi0jZGVmaW5lIEFQSUNfTFZUUEMJCTB4MzQwCi0jZGVmaW5lIEFQSUNfTFZURVJSCQkweDM3MAotI2RlZmluZSBHRVRfQVBJQ19WRVJTSU9OKHgpCSgoeCkmMHhGRikKLSNkZWZpbmUgR0VUX0FQSUNfTUFYTFZUKHgpCSgoKHgpPj4xNikmMHhGRikKLSNkZWZpbmUgQVBJQ19JTlRFR1JBVEVEKHgpCSgoeCkmMHhGMCkKLSNlbHNlCi0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNlbmRpZgotCi0jaWZuZGVmIE1TUl9JQTMyX0FQSUNCQVNFCi0jZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFIDB4MUIKLSNlbmRpZgotIAotI2lmbmRlZiBBUElDX1NQSVZfQVBJQ19FTkFCTEVECi0jZGVmaW5lIEFQSUNfU1BJVl9BUElDX0VOQUJMRUQgKDE8PDgpCi0jZW5kaWYKLQotI2lmbmRlZiBBUElDX0RFRkFVTFRfUEhZU19CQVNFCi0jZGVmaW5lIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UgMHhmZWUwMDAwMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCi0KLSNkZWZpbmUgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRQkJMHhmZWUwMDAwMAotI2RlZmluZSBBUElDX1NQSVYJCQkweEYwCi0jZGVmaW5lIEFQSUNfRVNSCQkJMHgyODAKLSNkZWZpbmUgQVBJQ19MVlRUCQkJMHgzMjAKLSNkZWZpbmUgQVBJQ19MVlQwCQkJMHgzNTAKLSNkZWZpbmUgQVBJQ19MVlRfTUFTS0VECQkJKDE8PDE2KQotI2RlZmluZSBBUElDX0xWVF9MRVZFTF9UUklHR0VSCQkoMTw8MTUpCi0jZGVmaW5lIEFQSUNfTU9ERV9OTUkJCQkweDQKLSNkZWZpbmUgQVBJQ19NT0RFX0VYSU5UCQkJMHg3Ci0jZGVmaW5lIEdFVF9BUElDX0RFTElWRVJZX01PREUoeCkJKCgoeCk+PjgpJjB4NykKLSNkZWZpbmUgU0VUX0FQSUNfREVMSVZFUllfTU9ERSh4LHkpCSgoKHgpJn4weDcwMCl8KCh5KTw8OCkpCi0jZGVmaW5lIEFQSUNfTFZUMQkJCTB4MzYwCi0jZGVmaW5lIEFQSUNfU0VORF9QRU5ESU5HCQkoMTw8MTIpCi0jZGVmaW5lIEFQSUNfVERDUgkJCTB4M0UwCi0jZGVmaW5lIEFQSUNfVERSX0RJVl8xCQkJMHhCCi0KLS8qIHdoZW4gIUNPTkZJR19YODZfTE9DQUxfQVBJQyB3ZSBuZWVkIHRvIHByb3ZpZGUgYSB2YWxpZCB2YSB0byBtYXAgdGhlCi0gKiB0aGUgcGEgb2YgQVBJQyBvbnRvLiBUaGlzIHZhIG11c3QgYmUgdW4tY2FjaGFibGUvdW4tc3dhcGFibGUqLwotLyojZGVmaW5lIEFQSUNfQkFTRSAoZml4X3RvX3ZpcnQoRklYX0FQSUNfQkFTRSkpKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHZpcnRfYXBpY19iYXNlOwotLyogdGhlIG90aGVyIGRlZmluZSBhYm92ZSBjYW4gYmUgcmVkZWZpbmVkIHVudGlsIHRoZSByZWYgaXMgaWRlbnRpY2FsLCB0aGlzCi0gKiBhbGxvdyBhIGNvbXBpbGUgdGltZSBjaGVja2luZyBidXQgdGhpcyBuZWVkIHRvIGJlIHJlZGVmaW5lZCBkaWZmZXJlbnRseSAqLwotI3VuZGVmIEFQSUNfQkFTRQotI2RlZmluZSBBUElDX0JBU0UJdmlydF9hcGljX2Jhc2UKLQotc3RhdGljIF9faW5saW5lIHZvaWQgYXBpY193cml0ZSh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyB2KQotewotCSooKHZvbGF0aWxlIHUzMiAqKShBUElDX0JBU0UrcmVnKSkgPSB2OwotfQotCi1zdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgbG9uZyBhcGljX3JlYWQodW5zaWduZWQgbG9uZyByZWcpCi17Ci0JcmV0dXJuICooKHZvbGF0aWxlIHUzMiAqKShBUElDX0JBU0UrcmVnKSk7Ci19Ci0KLSNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpICovCi0KLSNlbmRpZiAvKiBBUElDX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9tb2R1bGUveDg2L2NwdV90eXBlLmMgYi9tb2R1bGUveDg2L2NwdV90eXBlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwYjJlOTguLjAwMDAwMDAKLS0tIGEvbW9kdWxlL3g4Ni9jcHVfdHlwZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qKgotICogQGZpbGUgY3B1X3R5cGUuYwotICogQ1BVIGRldGVybWluYXRpb24KLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSAib3Byb2ZpbGUuaCIKLSNpbmNsdWRlICJvcF9tc3IuaCIKLQotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotCi1FWFBPUlRfTk9fU1lNQk9MUzsKLQotTU9EVUxFX1BBUk0oZm9yY2VfcnRjLCAiaSIpOwotTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9ydGMsICJmb3JjZSBSVEMgbW9kZS4iKTsKLXN0YXRpYyBpbnQgZm9yY2VfcnRjOwotCi0jaWZuZGVmIEhUX1NVUFBPUlQKLS8qKgotICogcDRfdGhyZWFkcyAtIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBsb2dpY2FsIHByb2Nlc3NvciB0aHJlYWRzIGluIGEgZGllCi0gKiAKLSAqIHJldHVybnMgbnVtYmVyIG9mIHRocmVhZHMgaW4gcDQgZGllICgxIGZvciBub24tSFQgcHJvY2Vzc29ycykKLSAqLwotc3RhdGljIGludCBwNF90aHJlYWRzKHZvaWQpCi17Ci0JaW50IHByb2Nlc3Nvcl90aHJlYWRzID0gMTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAodGVzdF9iaXQoWDg2X0ZFQVRVUkVfSFQsICZjdXJyZW50X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KSkgewotCQkvKiBUaGlzIGl0IGEgUGVudGl1bSA0IHdpdGggSFQsIGZpbmQgbnVtYmVyIG9mIHRocmVhZHMgKi8KLQkJaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKLQotCQljcHVpZCAoMSwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0JCXByb2Nlc3Nvcl90aHJlYWRzID0gKGVieCA+PiAxNikgJiAweGZmOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLQlyZXR1cm4gcHJvY2Vzc29yX3RocmVhZHM7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0vKioKLSAqIGRvX2NwdV9pZCAtIENhbGwgdGhlIGNwdWlkIGluc3RydWN0aW9uIGFuZCBmaWxsIGluIGRhdGEgYXQgcGFzc2VkIGFkZHJlc3MKLSAqCi0gKiBXZSBleHBlY3QgdGhhdCBkYXRhIGlzIHBvaW50aW5nIHRvIGFuIGFycmF5IG9mIHVuc2lnbmVkIGNoYXJzIGFzIGJpZyBhcyB0aGVyZQotICogYXJlIGNwdXMgaW4gYW4gc21wIHN5c3RlbS4KLSAqLwotc3RhdGljIHZvaWQgZG9fY3B1X2lkKHZvaWQgKmRhdGEpCi17Ci0JaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKLQl1bnNpZ25lZCBjaGFyICogcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgZGF0YTsKLQotCWNwdWlkKDEsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCi0JLyogYml0cyBFQlhbMzE6MjRdIGRlZmluZSBBUElDIElEICovCi0JcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0gPSAodW5zaWduZWQgY2hhcikgKChlYnggJiAweGZmMDAwMDAwKSA+PiAyNCk7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBwNF9odF9lbmFibGVkIC0gRGV0ZXJtaW5lcyBpZiBIeXBlciBUaHJlYWRpbmcgaXMgZW5hYmxlZCBvciBub3QuCi0gKgotICogQSBQNCBjYW4gYmUgY2FwYWJsZSBvZiBIVCwgYnV0IG5vdCBlbmFibGVkIHZpYSBCSU9TLiAgVGhlIGNoZWNrIGZvciAKLSAqIHRoaXMgaXMgdW5mb3J0dW5hdGVseSBub3Qgc2ltcGxlIGFuZCBpbnZvbHZlcyBydW5uaW5nIGNwdWlkIG9uIGFsbCAKLSAqIGxvZ2ljYWwgcHJvY2Vzc29ycyBhbmQgY2hlY2tpbmcgZm9yIGJpdHMgaW4gdGhlIEFQSUNfSUQgZmllbGRzLiAKLSAqIEFzIHBlciBJbnRlbCBkb2NzLiAgUmV0dXJucyAxIGlmIGVuYWJsZWQsIDAgb3RoZXJ3aXNlLgotICoKLSAqLwotc3RhdGljIGludCBwNF9odF9lbmFibGVkKHZvaWQpCi17Ci0jaWZuZGVmIENPTkZJR19TTVAKLQlyZXR1cm4gMDsKLSNlbHNlCi0JaW50IGVuYWJsZWQsIHRocmVhZHMsIGk7Ci0JdW5zaWduZWQgY2hhciBtYXNrOwotCXVuc2lnbmVkIGNoYXIgYXBpY19pZFtzbXBfbnVtX2NwdXNdOwotCXVuc2lnbmVkIGludCBjcHU7Ci0KLQkvKiBGaXJzdCBjaGVjayBmb3IgY2FwYWJpbGl0eSAqLwotCXRocmVhZHMgPSBwNF90aHJlYWRzKCk7Ci0JaWYgKHRocmVhZHMgPT0gMSkgcmV0dXJuIDA7Ci0JLyogQ3JlYXRlIG1hc2sgZm9yIGxvdyBvcmRlciBiaXRzICovCi0JbWFzayA9IDB4ZmY7Ci0JaSA9IDE7Ci0Jd2hpbGUgKGkgPCB0aHJlYWRzKSB7Ci0JCWkgKj0gMjsKLQkJbWFzayA8PD0gMTsKLQl9Ci0JLyogR2V0IEFQSUNfSUQgZnJvbSBhbGwgbG9naWFsIHByb2NzIGFuZCBzZWxmICovCi0Jc21wX2NhbGxfZnVuY3Rpb24oZG9fY3B1X2lkLCBhcGljX2lkLCAxLCAxKTsKLQlkb19jcHVfaWQoYXBpY19pZCk7Ci0JLyogSWYgdGhlIGxvdyBvcmRlciBiaXRzIGFyZSBvbiwgdGhlbiBIVCBpcyBlbmFibGVkICovCi0JZW5hYmxlZCA9IDA7Ci0JY3B1ID0gMDsKLQlkbyB7Ci0JCWlmIChhcGljX2lkW2NwdV0gJiB+bWFzaykgewotCQkJZW5hYmxlZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQljcHUrKzsKLQl9IHdoaWxlIChjcHUgPCBzbXBfbnVtX2NwdXMpOwotCi0JcmV0dXJuIGVuYWJsZWQ7Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotfQotI2VuZGlmIC8qICFIVF9TVVBQT1JUICovCi0KLQotb3BfY3B1IHA0X2NwdV90eXBlKHZvaWQpCi17Ci0JX191OCBtb2RlbCA9IGN1cnJlbnRfY3B1X2RhdGEueDg2X21vZGVsOwotCWlmIChtb2RlbCA8PSAzKSB7Ci0jaWZkZWYgSFRfU1VQUE9SVAotCQlpZiAoc21wX251bV9zaWJsaW5ncyA9PSAxKSB7Ci0JCQlyZXR1cm4gQ1BVX1A0OwotCQl9IGVsc2UgaWYgKHNtcF9udW1fc2libGluZ3MgPT0gMikgewotCQkJcmV0dXJuIENQVV9QNF9IVDI7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJICAgICAgICJvcHJvZmlsZTogUDQgSFQgdW5zdXBwb3J0ZWQgbnVtYmVyIG9mIHNpYmxpbmdzIgotCQkJICAgICAgICJwcm9jZXNzb3IsIHJldmVydGluZyB0byBSVENcbiIpOwotCQkJcmV0dXJuIENQVV9SVEM7Ci0JCX0KLSNlbHNlCi0JCS8qIENhbm5vdCBoYW5kbGUgZW5hYmxlZCBIVCBQNCBoYXJkd2FyZSAqLwotCQlpZiAoKHA0X3RocmVhZHMoKSA+IDEpICYmIHA0X2h0X2VuYWJsZWQoKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSAgICAgICAib3Byb2ZpbGU6IFA0IEhUIGVuYWJsZWQsIHJldmVydGluZyB0byBSVENcbiIpOwotCQkJcmV0dXJuIENQVV9SVEM7Ci0JCX0KLQkJZWxzZQotCQkJcmV0dXJuIENQVV9QNDsKLSNlbmRpZgotCX0gZWxzZQotCQkvKiBEbyBub3Qga25vdyB3aGF0IGl0IGlzICovCi0JCXJldHVybiBDUFVfUlRDOwotfQotCi0gCi1fX2luaXQgb3BfY3B1IGdldF9jcHVfdHlwZSh2b2lkKQotewotCV9fdTggdmVuZG9yID0gY3VycmVudF9jcHVfZGF0YS54ODZfdmVuZG9yOwotCV9fdTggZmFtaWx5ID0gY3VycmVudF9jcHVfZGF0YS54ODY7Ci0JX191OCBtb2RlbCA9IGN1cnJlbnRfY3B1X2RhdGEueDg2X21vZGVsOwotCV9fdTE2IHZhbDsKLQotCWlmIChmb3JjZV9ydGMpCi0JCXJldHVybiBDUFVfUlRDOwotCi0Jc3dpdGNoICh2ZW5kb3IpIHsKLQkJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJCWlmIChmYW1pbHkgPT0gNikgewotCQkJCS8qIGNlcnRhaW4gbW9kZWxzIG9mIEs3IGRvZXMgbm90IGhhdmUgYXBpYy4KLQkJCQkgKiBDaGVjayBpZiBhcGljIGlzIHJlYWxseSBwcmVzZW50IGJlZm9yZSBlbmFibGluZyBpdC4KLQkJCQkgKiBJQTMyIFYzLCA3LjQuMSAqLwotCQkJCXZhbCA9IGNwdWlkX2VkeCgxKTsKLQkJCQlpZiAoISh2YWwgJiAoMSA8PCA5KSkpCi0JCQkJCXJldHVybiBDUFVfUlRDOwotCQkJCXJldHVybiBDUFVfQVRITE9OOwotCQkJfQotCQkJaWYgKGZhbWlseSA9PSAxNSkKLQkJCQlyZXR1cm4gQ1BVX0hBTU1FUjsKLQkJCXJldHVybiBDUFVfUlRDOwotCi0JCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJCXN3aXRjaCAoZmFtaWx5KSB7Ci0JCQlkZWZhdWx0OgotCQkJCXJldHVybiBDUFVfUlRDOwotCQkJY2FzZSA2OgotCQkJCS8qIEEgUDYtY2xhc3MgcHJvY2Vzc29yICovCi0JCQkJaWYgKG1vZGVsID4gNSkKLQkJCQkJcmV0dXJuIENQVV9QSUlJOwotCQkJCWVsc2UgaWYgKG1vZGVsID4gMikKLQkJCQkJcmV0dXJuIENQVV9QSUk7Ci0JCQkJcmV0dXJuIENQVV9QUFJPOwotCQkJY2FzZSAweGY6Ci0JCQkJcmV0dXJuIHA0X2NwdV90eXBlKCk7Ci0JCQl9Ci0JCQkKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBDUFVfUlRDOwotCX0KLX0KZGlmZiAtLWdpdCBhL21vZHVsZS94ODYvb3BfYXBpYy5jIGIvbW9kdWxlL3g4Ni9vcF9hcGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNGVmNTcuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL3g4Ni9vcF9hcGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9hcGljLmMKLSAqCi0gKiBBUElDIHNldHVwIGV0Yy4gcm91dGluZXMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgRGF2ZSBKb25lcwotICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAib3Byb2ZpbGUuaCIKLSNpbmNsdWRlICJvcF9tc3IuaCIKLSNpbmNsdWRlICJvcF9hcGljLmgiCi0KLS8qIHVzZWQgdG8gc2F2ZS9yZXN0b3JlIG9yaWdpbmFsIGtlcm5lbCBubWkgKi8KLXN0YXRpYyBzdHJ1Y3QgZ2F0ZV9zdHJ1Y3Qga2VybmVsX25taTsKLXN0YXRpYyB1bG9uZyBsdnRwY19tYXNrZWQ7Ci0KLS8qIHRoaXMgbWFza2luZyBjb2RlIGlzIHVuc2FmZSBhbmQgbmFzdHkgYnV0IG1pZ2h0IGRlYWwgd2l0aCB0aGUgc21hbGwKLSAqIHJhY2Ugd2hlbiBpbnN0YWxsaW5nIHRoZSBOTUkgZW50cnkgaW50byB0aGUgSURULgotICovCi1zdGF0aWMgdm9pZCBtYXNrX2x2dHBjKHZvaWQgKiBlKQotewotCXUzMiB2ID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOwotCWx2dHBjX21hc2tlZCA9IHYgJiBBUElDX0xWVF9NQVNLRUQ7Ci0JYXBpY193cml0ZShBUElDX0xWVFBDLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLX0KLQotc3RhdGljIHZvaWQgdW5tYXNrX2x2dHBjKHZvaWQgKiBlKQotewotCWlmICghbHZ0cGNfbWFza2VkKQotCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIGFwaWNfcmVhZChBUElDX0xWVFBDKSAmIH5BUElDX0xWVF9NQVNLRUQpOwotfQotCi0KLXZvaWQgaW5zdGFsbF9ubWkodm9pZCkKLXsKLQlzdHJ1Y3QgX2Rlc2NyIGRlc2NyOwotCi0JLyogTk1JIGhhbmRsZXIgaXMgYXQgaWR0X3RhYmxlW0lEVF9WRUNUT1JfTlVNQkVSXSAgICAgICAgICAgICovCi0JLyogc2VlIEludGVsIFZvbC4zIEZpZ3VyZSA1LTIsIGludGVycnVwdCBnYXRlICAgICAgICAgICAgICAgICovCi0KLQlzbXBfY2FsbF9mdW5jdGlvbihtYXNrX2x2dHBjLCBOVUxMLCAwLCAxKTsKLQltYXNrX2x2dHBjKE5VTEwpOwotCi0Jc3RvcmVfaWR0KGRlc2NyKTsKLQlrZXJuZWxfbm1pID0gZGVzY3IuYmFzZVtOTUlfVkVDVE9SX05VTV07Ci0JU0VUX05NSV9HQVRFOwotCi0Jc21wX2NhbGxfZnVuY3Rpb24odW5tYXNrX2x2dHBjLCBOVUxMLCAwLCAxKTsKLQl1bm1hc2tfbHZ0cGMoTlVMTCk7Ci19Ci0KLXZvaWQgcmVzdG9yZV9ubWkodm9pZCkKLXsKLQlzdHJ1Y3QgX2Rlc2NyIGRlc2NyOwotCi0Jc21wX2NhbGxfZnVuY3Rpb24obWFza19sdnRwYywgTlVMTCwgMCwgMSk7Ci0JbWFza19sdnRwYyhOVUxMKTsKLQotCXN0b3JlX2lkdChkZXNjcik7Ci0JZGVzY3IuYmFzZVtOTUlfVkVDVE9SX05VTV0gPSBrZXJuZWxfbm1pOwotCi0Jc21wX2NhbGxfZnVuY3Rpb24odW5tYXNrX2x2dHBjLCBOVUxMLCAwLCAxKTsKLQl1bm1hc2tfbHZ0cGMoTlVMTCk7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLSBBUElDIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIHVpbnQgc2F2ZWRfbHZ0cGNbTlJfQ1BVU107Ci0KLXZvaWQgX19pbml0IGx2dHBjX2FwaWNfc2V0dXAodm9pZCAqIGR1bW15KQotewotCXVpbnQgdmFsOwotCi0JLyogc2V0IHVwIExWVFBDIGFzIHdlIG5lZWQgaXQgKi8KLQkvKiBJQTMyIFYzLCBGaWd1cmUgNy44ICovCi0JdmFsID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOwotCXNhdmVkX2x2dHBjW29wX2NwdV9pZCgpXSA9IHZhbDsKLQkvKiBhbGxvdyBQQyBvdmVyZmxvdyBpbnRlcnJ1cHRzICovCi0JdmFsICY9IH5BUElDX0xWVF9NQVNLRUQ7Ci0JLyogc2V0IGRlbGl2ZXJ5IHRvIE5NSSAqLwotCXZhbCA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsLCBBUElDX01PREVfTk1JKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIHZhbCk7Ci19Ci0KLS8qIG5vdCBzYWZlIHRvIG1hcmsgYXMgX19leGl0IHNpbmNlIHVzZWQgZnJvbSBfX2luaXQgY29kZSAqLwotdm9pZCBsdnRwY19hcGljX3Jlc3RvcmUodm9pZCAqIGR1bW15KQotewotCS8qIHJlc3RvcmluZyBBUElDX0xWVFBDIGNhbiB0cmlnZ2VyIGFuIGFwaWMgZXJyb3IgYmVjYXVzZSB0aGUgZGVsaXZlcnkKLQkgKiBtb2RlIGFuZCB2ZWN0b3IgbnIgY29tYmluYXRpb24gY2FuIGJlIGlsbGVnYWwuIFRoYXQncyBieSBkZXNpZ246IG9uCi0JICogcG93ZXIgb24gYXBpYyBsdnQgY29udGFpbiBhIHplcm8gdmVjdG9yIG5yIHdoaWNoIGFyZSBsZWdhbCBvbmx5IGZvcgotCSAqIE5NSSBkZWxpdnJleSBtb2RlLiBTbyBpbmhpYml0IGFwaWMgZXJyIGJlZm9yZSByZXN0b3JpbmcgbHZ0cGMKLQkgKi8KLQl1aW50IHYgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgc2F2ZWRfbHZ0cGNbb3BfY3B1X2lkKCldKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2KTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZW5hYmxlX2FwaWModm9pZCkKLXsKLQl1aW50IG1zcl9sb3csIG1zcl9oaWdoOwotCXVpbnQgdmFsOwotCi0JLyogZW5hYmxlIGxvY2FsIEFQSUMgdmlhIE1TUi4gRm9yZ2V0dGluZyB0aGlzIGlzIGEgZnVuIHdheSB0bwotCSAqIGxvY2sgdGhlIGJveC4gQnV0IHdlIGhhdmUgdG8gaG9wZSB0aGlzIGlzIGFsbG93ZWQgaWYgdGhlIEFQSUMKLQkgKiBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQuCi0JICoKLQkgKiBJQTMyIFYzLCA3LjQuMiAqLwotCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3JfbG93LCBtc3JfaGlnaCk7Ci0JaWYgKChtc3JfbG93ICYgKDEgPDwgMTEpKSA9PSAwKQotCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyX2xvdyB8ICgxPDwxMSksIG1zcl9oaWdoKTsKLQotCS8qIGV2ZW4gaWYgdGhlIGFwaWMgaXMgdXAgd2UgbXVzdCBjaGVjayBmb3IgYSBnb29kIEFQSUMgKi8KLQotCS8qIElBMzIgVjMsIDcuNC4xNSAqLwotCXZhbCA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JaWYgKCFBUElDX0lOVEVHUkFURUQoR0VUX0FQSUNfVkVSU0lPTih2YWwpKSkKLQkJZ290byBub3RfbG9jYWxfYXBpYzsKLQotCS8qIExWVDAsTFZUMSxMVlRULExWVFBDICovCi0JaWYgKEdFVF9BUElDX01BWExWVChhcGljX3JlYWQoQVBJQ19MVlIpKSA8IDQpCi0JCWdvdG8gbm90X2xvY2FsX2FwaWM7Ci0KLQkvKiBJQTMyIFYzLCA3LjQuMTQuMSAqLwotCXZhbCA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCWlmICghKHZhbCAmIEFQSUNfU1BJVl9BUElDX0VOQUJMRUQpKQotCQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsIHwgQVBJQ19TUElWX0FQSUNfRU5BQkxFRCk7Ci0KLQlyZXR1cm4gISEodmFsICYgQVBJQ19TUElWX0FQSUNfRU5BQkxFRCk7Ci0KLW5vdF9sb2NhbF9hcGljOgotCS8qIGRpc2FibGUgdGhlIGFwaWMgb25seSBpZiBpdCB3YXMgZGlzYWJsZWQgKi8KLQlpZiAoKG1zcl9sb3cgJiAoMSA8PCAxMSkpID09IDApCi0JCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3JfbG93ICYgfigxPDwxMSksIG1zcl9oaWdoKTsKLQotCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IG5vIHN1aXRhYmxlIGxvY2FsIEFQSUMuIEZhbGxpbmcgYmFjayB0byBSVEMgbW9kZS5cbiIpOwotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZG9fYXBpY19zZXR1cCh2b2lkKQotewotCXVpbnQgdmFsOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCXZhbCA9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7Ci0JdmFsID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWwsIEFQSUNfTU9ERV9FWElOVCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHZhbCk7Ci0KLQkvKiBlZGdlIHRyaWdnZXJlZCwgSUEgNy40LjExICovCi0JdmFsID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSgwLCBBUElDX01PREVfTk1JKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsKTsKLQotCS8qIGNsZWFyIGVycm9yIHJlZ2lzdGVyICovCi0JLyogSUEzMiBWMywgNy40LjE3ICovCi0JLyogUEhFIG11c3QgYmUgY2xlYXJlZCBhZnRlciB1bm1hc2tpbmcgYnkgYSBiYWNrLXRvLWJhY2sgd3JpdGUsCi0JICogYnV0IGl0IGlzIHByb2JhYmx5IG9rIGJlY2F1c2Ugd2UgbWFzayBvbmx5LCB0aGUgRVNSIGlzIG5vdAotCSAqIHVwZGF0ZWQgaXMgdGhpcyBhIHJlYWwgcHJvYmxlbSA/ICovCi0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0KLQkvKiBtYXNrIGVycm9yIGludGVycnVwdCAqLwotCS8qIElBMzIgVjMsIEZpZ3VyZSA3LjggKi8KLQl2YWwgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCXZhbCB8PSBBUElDX0xWVF9NQVNLRUQ7Ci0JYXBpY193cml0ZShBUElDX0xWVEVSUiwgdmFsKTsKLQotCS8qIHNldHVwIHRpbWVyIHZlY3RvciAqLwotCS8qIElBMzIgVjMsIDcuNC44ICovCi0JYXBpY193cml0ZShBUElDX0xWVFQsIEFQSUNfU0VORF9QRU5ESU5HIHwgMHgzMSk7Ci0KLQkvKiBEaXZpZGUgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwotCS8qIFBIRSB0aGUgYXBpYyBjbG9jayBpcyBiYXNlZCBvbiB0aGUgRlNCLiBUaGlzIHNob3VsZCBvbmx5Ci0JICogY2hhbmdlZCB3aXRoIGEgY2FsaWJyYXRpb24gbWV0aG9kLiAgKi8KLQl2YWwgPSBBUElDX1REUl9ESVZfMTsKLQlhcGljX3dyaXRlKEFQSUNfVERDUiwgdmFsKTsKLQotCWxvY2FsX2lycV9lbmFibGUoKTsKLX0KLQotLyogZG9lcyB0aGUgQ1BVIGhhdmUgYSBsb2NhbCBBUElDID8gKi8KLXN0YXRpYyBpbnQgX19pbml0IGNoZWNrX2NwdV9vayh2b2lkKQotewotCWlmIChzeXNjdGwuY3B1X3R5cGUgIT0gQ1BVX1BQUk8gJiYKLQkJc3lzY3RsLmNwdV90eXBlICE9IENQVV9QSUkgJiYKLQkJc3lzY3RsLmNwdV90eXBlICE9IENQVV9QSUlJICYmCi0JCXN5c2N0bC5jcHVfdHlwZSAhPSBDUFVfQVRITE9OICYmCi0JCXN5c2N0bC5jcHVfdHlwZSAhPSBDUFVfSEFNTUVSICYmCi0JCXN5c2N0bC5jcHVfdHlwZSAhPSBDUFVfUDQgJiYKLQkJc3lzY3RsLmNwdV90eXBlICE9IENQVV9QNF9IVDIpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBfX2luaXQgYXBpY19zZXR1cCh2b2lkKQotewotCXUzMiB2YWw7Ci0KLQlpZiAoIWNoZWNrX2NwdV9vaygpKQotCQlnb3RvIG5vZGV2OwotCi0JZml4bWFwX3NldHVwKCk7Ci0KLQlzd2l0Y2ggKGVuYWJsZV9hcGljKCkpIHsKLQkJY2FzZSAwOgotCQkJZG9fYXBpY19zZXR1cCgpOwotCQkJdmFsID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBlbmFibGVkIGxvY2FsIEFQSUMuIEVyciBjb2RlICUuMDh4XG4iLCB2YWwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBBUElDIHdhcyBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIG5vZGV2OwotCX0KLQotCWx2dHBjX2FwaWNfc2V0dXAoTlVMTCk7Ci0JcmV0dXJuIDA7Ci1ub2RldjoKLQlwcmludGsoS0VSTl9XQVJOSU5HICJZb3VyIENQVSBkb2VzIG5vdCBoYXZlIGEgbG9jYWwgQVBJQywgZS5nLiAiCi0JICAgICAgICJtb2JpbGUgUDYuIEZhbGxpbmcgYmFjayB0byBSVEMgbW9kZS5cbiIpOwotCXJldHVybiAtRU5PREVWOwotfQotCi12b2lkIGFwaWNfcmVzdG9yZSh2b2lkKQotewotCWZpeG1hcF9yZXN0b3JlKCk7Ci19CmRpZmYgLS1naXQgYS9tb2R1bGUveDg2L29wX2FwaWMuaCBiL21vZHVsZS94ODYvb3BfYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDNiMzBhLi4wMDAwMDAwCi0tLSBhL21vZHVsZS94ODYvb3BfYXBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9hcGljLmgKLSAqIHg4NiBhcGljLCBubWksIHBlcmYgY291bnRlciBkZWNsYXJhdGlvbgotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICogQGF1dGhvciBEYXZlIEpvbmVzCi0gKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKLSAqLwotCi0jaWZuZGVmIE9QX0FQSUNfSAotI2RlZmluZSBPUF9BUElDX0gKLQotI2luY2x1ZGUgImFwaWNfY29tcGF0LmgiCi0KLSNkZWZpbmUgTk1JX0dBVEVfVFlQRSAxNAotI2RlZmluZSBOTUlfVkVDVE9SX05VTSAyCi0jZGVmaW5lIE5NSV9EUExfTEVWRUwgMAotCi0KLS8qIGNvcGllZCBmcm9tIGtlcm5lbCAyLjQuMTkgOiBhcmNoL2kzODYvdHJhcHMuYyAqLwotCi1zdHJ1Y3QgZ2F0ZV9zdHJ1Y3QgewotCXUzMiBhOwotCXUzMiBiOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotI2RlZmluZSBfc2V0X2dhdGUoZ2F0ZV9hZGRyLCB0eXBlLCBkcGwsIGFkZHIpIFwKLWRvIHsgXAotCWludCBfX2QwLCBfX2QxOyBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3Z3ICUlZHgsICUlYXhcblx0IiBcCi0JIm1vdncgJTQsICUlZHhcblx0IiBcCi0JIm1vdmwgJSVlYXgsICUwXG5cdCIgXAotCSJtb3ZsICUlZWR4LCAlMSIgXAotCToiPW0iICgqKChsb25nICopIChnYXRlX2FkZHIpKSksIFwKLQkgIj1tIiAoKigxKyhsb25nICopIChnYXRlX2FkZHIpKSksICI9JmEiIChfX2QwKSwgIj0mZCIgKF9fZDEpIFwKLQk6ImkiICgoc2hvcnQpICgweDgwMDArKGRwbDw8MTMpKyh0eXBlPDw4KSkpLCBcCi0JICIzIiAoKGNoYXIgKikgKGFkZHIpKSwgIjIiIChfX0tFUk5FTF9DUyA8PCAxNikpOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFNFVF9OTUlfR0FURQlcCi0JX3NldF9nYXRlKCZkZXNjci5iYXNlW05NSV9WRUNUT1JfTlVNXSwgTk1JX0dBVEVfVFlQRSwgTk1JX0RQTF9MRVZFTCwgJm9wX25taSk7Ci0KLSNkZWZpbmUgc3RvcmVfaWR0KGFkZHIpIFwKLQlkbyB7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzaWR0ICUwIiBcCi0JCQk6ICI9bSIgKGFkZHIpIFwKLQkJCTogOiAibWVtb3J5Iik7IFwKLQl9IHdoaWxlICgwKQotIAotc3RydWN0IF9kZXNjciB7IAotCXUxNiBsaW1pdDsgCi0Jc3RydWN0IGdhdGVfc3RydWN0ICogYmFzZTsgCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotdm9pZCBsdnRwY19hcGljX3NldHVwKHZvaWQgKmR1bW15KTsKLXZvaWQgbHZ0cGNfYXBpY19yZXN0b3JlKHZvaWQgKmR1bW15KTsKLWludCBhcGljX3NldHVwKHZvaWQpOwotdm9pZCBhcGljX3Jlc3RvcmUodm9pZCk7Ci12b2lkIGluc3RhbGxfbm1pKHZvaWQpOwotdm9pZCByZXN0b3JlX25taSh2b2lkKTsKLQotdm9pZCBmaXhtYXBfc2V0dXAodm9pZCk7Ci12b2lkIGZpeG1hcF9yZXN0b3JlKHZvaWQpOwotCi1hc21saW5rYWdlIHZvaWQgb3Bfbm1pKHZvaWQpOwotCi0jZW5kaWYgLyogT1BfQVBJQ19IICovCmRpZmYgLS1naXQgYS9tb2R1bGUveDg2L29wX2FyY2guaCBiL21vZHVsZS94ODYvb3BfYXJjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmY0MWU5Li4wMDAwMDAwCi0tLSBhL21vZHVsZS94ODYvb3BfYXJjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9hcmNoLmgKLSAqIGRlZmluZXMgcmVnaXN0ZXJzIGZvciB4ODYKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBXaWxsIENvaGVuCi0gKi8KLQotI2lmbmRlZiBPUF9BUkNIX0gKLSNkZWZpbmUgT1BfQVJDSF9ICi0KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLS8qIEhvdyB0byBhY2Nlc3MgdGhlIHByb2Nlc3NvcidzIGluc3RydWN0aW9uIHBvaW50ZXIgKi8KLSNpZm5kZWYgaW5zdHJ1Y3Rpb25fcG9pbnRlcgotI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPmVpcCkKLSNlbmRpZgotCi0vKiBCaXQgaW4gcHJvY2Vzc29yJ3Mgc3RhdHVzIHJlZ2lzdGVyIGZvciBpbnRlcnJ1cHQgbWFza2luZyAqLwotI2RlZmluZSBJUlFfRU5BQkxFRChyZWdzKQkoKHJlZ3MpLT5lZmxhZ3MgJiBJRl9NQVNLKQotCi0jZW5kaWYgLyogT1BfQVJDSF9IICovCmRpZmYgLS1naXQgYS9tb2R1bGUveDg2L29wX2ZpeG1hcC5jIGIvbW9kdWxlL3g4Ni9vcF9maXhtYXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JmZDU3Mi4uMDAwMDAwMAotLS0gYS9tb2R1bGUveDg2L29wX2ZpeG1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BfZml4bWFwLmMKLSAqIEhvcnJpYmxlIGhhY2tzIGZvciBjb21wYXRpYmlsaXR5J3Mgc2FrZS4KLSAqIEJhc2VkIGluIHBhcnQgb24gYXJjaC9pMzg2L2tlcm5lbC9tcHBhcnNlLmMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAib3Byb2ZpbGUuaCIKLSNpbmNsdWRlICJhcGljX2NvbXBhdC5oIgotCi0jaWZuZGVmIGNwdV9oYXNfcGdlCi0jaWYgVl9CRUZPUkUoMiwgNCwgMCkKLSNkZWZpbmUgY3B1X2hhc19wZ2UgKHRlc3RfYml0KFg4Nl9GRUFUVVJFX1BHRSwgJmJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpKSAKLSNlbHNlCi0jZGVmaW5lIGNwdV9oYXNfcGdlICh0ZXN0X2JpdChYODZfRkVBVFVSRV9QR0UsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpKQotI2VuZGlmCi0jZW5kaWYKLQotdW5zaWduZWQgbG9uZyB2aXJ0X2FwaWNfYmFzZTsKLQotLyogc29tZSBzdGF0aWMgY29tbWVudGVkIG91dCB0byBhdm9pZCB3YXJuaW5nLCB0cnlpbmcgdG8gZmlndXJlIG91dAotICogaW4gZXhhY3RseSB3aGljaCBjaXJjdW1zdGFuY2VzIHdlIG5lZWQgdGhpcyBmdW5jdGlvbiBpcyB0b28gcHJvbmUKLSAqIGVycm9yIHRvIGJlIG1hZGUgdy9vIGEgZnVsbCByZWJ1aWxkIG9mIHN1cHBvcnRlZCBrZXJuZWwgdmVyc2lvbiAqLwotLyogaG93IGFib3V0IF9fYXR0cmlidXRlX18oX191bnVzZWRfXykgdGhlbiA/ICovCi0KLS8qIEZJWE1FIGlzIHRoaXMgY29tbWVudCByaWdodCA/ICovCi0vKiBXZSBkb24ndCB0YWtlIGNhcmUgYWJvdXQgbG9ja2luZyBtbS0+cGFnZV90YWJsZV9sb2NrIGJlY2F1c2UgdGhpcyBpcwotICogb25seSBuZWVkZWQgb24gU01QIGFuZCBvbiBTTVAgd2UgaGF2ZSBhbHJlYWR5IGEgc2Vuc2libGUgc2V0dXAgKi8KLQotLypzdGF0aWMqLyB2b2lkIHNldF9wdGVfcGh5cyh1bG9uZyB2YWRkciwgdWxvbmcgcGh5cykKLXsKLQlwZ3Byb3RfdCBwcm90OwotCXBnZF90ICpwZ2Q7Ci0JcG1kX3QgKnBtZDsKLQlwdGVfdCAqcHRlOwotCi0JcGdkID0gcGdkX29mZnNldF9rKHZhZGRyKTsKLQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgdmFkZHIpOwotCXB0ZSA9IHB0ZV9vZmZzZXQocG1kLCB2YWRkcik7Ci0JcHJvdCA9IFBBR0VfS0VSTkVMOwotCS8qIHdoZW4gIUNPTkZJR19YODZfTE9DQUxfQVBJQyB3ZSBjYW4ndCByZWx5IG9uIG5vIGNhY2hlIGZsYWcgc2V0ICovCi0JcGdwcm90X3ZhbChwcm90KSB8PSBfUEFHRV9QQ0Q7Ci0JaWYgKGNwdV9oYXNfcGdlKQotCQlwZ3Byb3RfdmFsKHByb3QpIHw9IF9QQUdFX0dMT0JBTDsKLQlzZXRfcHRlKHB0ZSwgbWtfcHRlX3BoeXMocGh5cywgcHJvdCkpOwotCV9fZmx1c2hfdGxiX29uZSh2YWRkcik7Ci19Ci0KLS8qc3RhdGljKi8gdm9pZCBhbGxvY19maXhtYXAodm9pZCkKLXsKLQkvKiBkaXJ0eSBoYWNrIDovICovCi0JdmlydF9hcGljX2Jhc2UgPSAodWxvbmcpdm1hbGxvYyg0MDk2KTsKLQlzZXRfcHRlX3BoeXModmlydF9hcGljX2Jhc2UsIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpOwotfQotCi0vKnN0YXRpYyovIHZvaWQgZnJlZV9maXhtYXAodm9pZCkKLXsKLQl1bG9uZyB2YWRkcjsKLQlwZ2RfdCAqcGdkOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnB0ZTsKLQotCXZhZGRyID0gdmlydF9hcGljX2Jhc2U7Ci0JaWYgKCF2YWRkcikKLQkJcmV0dXJuOwotCi0JcGdkID0gcGdkX29mZnNldF9rKHZhZGRyKTsKLQlpZiAoIXBnZCkKLQkJcmV0dXJuOwotCi0JcG1kID0gcG1kX29mZnNldChwZ2QsIHZhZGRyKTsKLQlpZiAoIXBtZCkKLQkJcmV0dXJuOwotCi0JcHRlID0gcHRlX29mZnNldChwbWQsIHZhZGRyKTsKLQlpZiAoIXB0ZSkKLQkJcmV0dXJuOwotCi0JLyogRklYTUU6IGlzIHRoaXMgdGhlIHJpZ2h0IHdheSAqLwotCXB0ZV9jbGVhcihwdGUpOwotCV9fZmx1c2hfdGxiX29uZSh2YWRkcik7Ci0KLQl2ZnJlZSgodm9pZCopdmlydF9hcGljX2Jhc2UpOwotfQotCi0vKgotICogTWFrZSBzdXJlIHdlIGNhbiBhY2Nlc3MgdGhlIEFQSUMuIFNvbWUga2VybmVsIHZlcnNpb25zIGNyZWF0ZQotICogYSBtZWFuaW5nbGVzcyB6ZXJvLXBhZ2UgbWFwcGluZyBmb3IgdGhlIGxvY2FsIEFQSUM6IHdlIG11c3QKLSAqIGRldGVjdCB0aGlzIGNhc2UgYW5kIHJlc2V0IGl0LgotICoKLSAqIFNvbWUga2VybmVsIHZlcnNpb25zL2NvbmZpZ3Mgd29uJ3QgbWFwIHRoZSBBUElDIGF0IGFsbCwgaW4KLSAqIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBoYWNrIGl0IG91cnNlbHZlcy4KLSAqLwotdm9pZCBmaXhtYXBfc2V0dXAodm9pZCkKLXsKLSNpZiBWX0JFRk9SRSgyLDQsMTApCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCi0Jc3RhdGljIGludCBmaW5kX2ludGVsX3NtcCh2b2lkKTsKLQotCWlmICghZmluZF9pbnRlbF9zbXAoKSkgewotCQlzZXRfcHRlX3BoeXMoX19maXhfdG9fdmlydChGSVhfQVBJQ19CQVNFKSwKLQkJCUFQSUNfREVGQVVMVF9QSFlTX0JBU0UpOwotCQlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTogcmVtYXBwaW5nIGxvY2FsIEFQSUMuXG4iKTsKLQl9Ci0jZWxzZQotCWFsbG9jX2ZpeG1hcCgpOwotCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBtYXBwaW5nIEFQSUMuXG4iKTsKLSNlbmRpZiAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KLSNlbHNlCi0jaWYgIWRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQotCWFsbG9jX2ZpeG1hcCgpOwotCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBtYXBwaW5nIEFQSUMuXG4iKTsKLSNlbmRpZgotI2VuZGlmCi19Ci0KLXZvaWQgZml4bWFwX3Jlc3RvcmUodm9pZCkKLXsKLSNpZiBWX0JFRk9SRSgyLDQsMTApCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCi0JLyogTm90aGluZyB0byBkbyAqLwotI2Vsc2UKLQlmcmVlX2ZpeG1hcCgpOwotCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBmcmVlaW5nIEFQSUMgbWFwcGluZy5cbiIpOwotI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLwotI2Vsc2UKLSNpZiAhZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCi0JZnJlZV9maXhtYXAoKTsKLQlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTogZnJlZWluZyBBUElDIG1hcHBpbmcuXG4iKTsKLSNlbmRpZgotI2VuZGlmCi19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0gTVAgdGFibGUgY29kZSAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIFZfQkVGT1JFKDIsNCwxMCkgJiYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCi0KLXN0YXRpYyBpbnQgX19pbml0IG1wZl9jaGVja3N1bSh1bnNpZ25lZCBjaGFyICptcCwgaW50IGxlbikKLXsKLQlpbnQgc3VtID0gMDsKLQotCXdoaWxlIChsZW4tLSkKLQkJc3VtICs9ICptcCsrOwotCi0JcmV0dXJuIHN1bSAmIDB4RkY7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1wZl90YWJsZV9vayhzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKiBtcGYsIHVuc2lnbmVkIGxvbmcgKmJwKQotewotCWlmICgqYnAgIT0gU01QX01BR0lDX0lERU5UKQotCQlyZXR1cm4gMDsKLQlpZiAobXBmLT5tcGZfbGVuZ3RoICE9IDEpCi0JCXJldHVybiAwOwotCWlmIChtcGZfY2hlY2tzdW0oKHVuc2lnbmVkIGNoYXIgKilicCwgMTYpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAobXBmLT5tcGZfc3BlY2lmaWNhdGlvbiA9PSAxIHx8IG1wZi0+bXBmX3NwZWNpZmljYXRpb24gPT0gNCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNtcF9zY2FuX2NvbmZpZyAodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKLXsKLQl1bnNpZ25lZCBsb25nICpicCA9IHBoeXNfdG9fdmlydChiYXNlKTsKLQlzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKm1wZjsKLQotCXdoaWxlIChsZW5ndGggPiAwKSB7Ci0JCW1wZiA9IChzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKilicDsKLQkJaWYgKG1wZl90YWJsZV9vayhtcGYsIGJwKSkKLQkJCXJldHVybiAxOwotCQlicCArPSA0OwotCQlsZW5ndGggLT0gMTY7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBmaW5kX2ludGVsX3NtcCh2b2lkKQotewotCXVuc2lnbmVkIGludCBhZGRyZXNzOwotCi0JaWYgKHNtcF9zY2FuX2NvbmZpZygweDAsMHg0MDApIHx8Ci0JCXNtcF9zY2FuX2NvbmZpZyg2MzkqMHg0MDAsMHg0MDApIHx8Ci0JCXNtcF9zY2FuX2NvbmZpZygweEYwMDAwLDB4MTAwMDApKSB7Ci0JCXJldHVybiAxOwotCX0KLQotCWFkZHJlc3MgPSAqKHVuc2lnbmVkIHNob3J0ICopcGh5c190b192aXJ0KDB4NDBFKTsKLQlhZGRyZXNzIDw8PSA0OwotCXJldHVybiBzbXBfc2Nhbl9jb25maWcoYWRkcmVzcywgMHgxMDAwKTsKLX0KLQotI2VuZGlmIC8qIFZfQkVGT1JFKDIsNCwxMCkgJiYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpICovCmRpZmYgLS1naXQgYS9tb2R1bGUveDg2L29wX21vZGVsX2F0aGxvbi5jIGIvbW9kdWxlL3g4Ni9vcF9tb2RlbF9hdGhsb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThhMWJlMS4uMDAwMDAwMAotLS0gYS9tb2R1bGUveDg2L29wX21vZGVsX2F0aGxvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BfbW9kZWxfYXRobG9uLmgKLSAqIGF0aGxvbiAvIEs3IG1vZGVsLXNwZWNpZmljIE1TUiBvcGVyYXRpb25zCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKLSAqLwotCi0jaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCi0jaW5jbHVkZSAib3BfYXJjaC5oIgotI2luY2x1ZGUgIm9wX21zci5oIgotCi0jZGVmaW5lIE5VTV9DT1VOVEVSUyA0Ci0jZGVmaW5lIE5VTV9DT05UUk9MUyA0Ci0KLSNkZWZpbmUgQ1RSX1JFQUQobCwgaCwgbXNycywgYykgZG8ge3JkbXNyKG1zcnMtPmNvdW50ZXJzLmFkZHJzWyhjKV0sIChsKSwgKGgpKTt9IHdoaWxlICgwKQotI2RlZmluZSBDVFJfV1JJVEUobCwgbXNycywgYykgZG8ge3dybXNyKG1zcnMtPmNvdW50ZXJzLmFkZHJzWyhjKV0sIC0odTMyKShsKSwgMHhmZmZmKTt9IHdoaWxlICgwKQotI2RlZmluZSBDVFJfT1ZFUkZMT1dFRChuKSAoISgobikgJiAoMVU8PDMxKSkpCi0KLSNkZWZpbmUgQ1RSTF9SRUFEKGwsIGgsIG1zcnMsIGMpIGRvIHtyZG1zcihtc3JzLT5jb250cm9scy5hZGRyc1soYyldLCAobCksIChoKSk7fSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSTF9XUklURShsLCBoLCBtc3JzLCBjKSBkbyB7d3Jtc3IobXNycy0+Y29udHJvbHMuYWRkcnNbKGMpXSwgKGwpLCAoaCkpO30gd2hpbGUgKDApCi0jZGVmaW5lIENUUkxfU0VUX0FDVElWRShuKSAobiB8PSAoMTw8MjIpKQotI2RlZmluZSBDVFJMX1NFVF9JTkFDVElWRShuKSAobiAmPSB+KDE8PDIyKSkKLSNkZWZpbmUgQ1RSTF9DTEVBUih4KSAoeCAmPSAoMTw8MjEpKQotI2RlZmluZSBDVFJMX1NFVF9FTkFCTEUodmFsKSAodmFsIHw9IDE8PDIwKQotI2RlZmluZSBDVFJMX1NFVF9VU1IodmFsLCB1KSAodmFsIHw9ICgodSAmIDEpIDw8IDE2KSkKLSNkZWZpbmUgQ1RSTF9TRVRfS0VSTih2YWwsIGspICh2YWwgfD0gKChrICYgMSkgPDwgMTcpKQotI2RlZmluZSBDVFJMX1NFVF9VTSh2YWwsIG0pICh2YWwgfD0gKG0gPDwgOCkpCi0jZGVmaW5lIENUUkxfU0VUX0VWRU5UKHZhbCwgZSkgKHZhbCB8PSBlKQotCi0gCi1zdGF0aWMgdm9pZCBhdGhsb25fZmlsbF9pbl9hZGRyZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQotewotCW1zcnMtPmNvdW50ZXJzLmFkZHJzWzBdID0gTVNSX0s3X1BFUkZDVFIwOwotCW1zcnMtPmNvdW50ZXJzLmFkZHJzWzFdID0gTVNSX0s3X1BFUkZDVFIxOwotCW1zcnMtPmNvdW50ZXJzLmFkZHJzWzJdID0gTVNSX0s3X1BFUkZDVFIyOwotCW1zcnMtPmNvdW50ZXJzLmFkZHJzWzNdID0gTVNSX0s3X1BFUkZDVFIzOwotCi0JbXNycy0+Y29udHJvbHMuYWRkcnNbMF0gPSBNU1JfSzdfRVZOVFNFTDA7Ci0JbXNycy0+Y29udHJvbHMuYWRkcnNbMV0gPSBNU1JfSzdfRVZOVFNFTDE7Ci0JbXNycy0+Y29udHJvbHMuYWRkcnNbMl0gPSBNU1JfSzdfRVZOVFNFTDI7Ci0JbXNycy0+Y29udHJvbHMuYWRkcnNbM10gPSBNU1JfSzdfRVZOVFNFTDM7Ci19Ci0KLSAKLXN0YXRpYyB2b2lkIGF0aGxvbl9zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKLXsKLQl1aW50IGxvdywgaGlnaDsKLQlpbnQgaTsKLQotCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLwotCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPTlRST0xTOyArK2kpIHsKLQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCUNUUkxfQ0xFQVIobG93KTsKLQkJQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIGkpOwotCX0KLQkKLQkvKiBhdm9pZCBhIGZhbHNlIGRldGVjdGlvbiBvZiBjdHIgb3ZlcmZsb3dzIGluIE5NSSBoYW5kbGVyICovCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7Ci0JCUNUUl9XUklURSgxLCBtc3JzLCBpKTsKLQl9Ci0KLQkvKiBlbmFibGUgYWN0aXZlIGNvdW50ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmIChzeXNjdGwuY3RyW2ldLmVuYWJsZWQpIHsKLQotCQkJQ1RSX1dSSVRFKHN5c2N0bC5jdHJbaV0uY291bnQsIG1zcnMsIGkpOwotCi0JCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKLQkJCUNUUkxfQ0xFQVIobG93KTsKLQkJCUNUUkxfU0VUX0VOQUJMRShsb3cpOwotCQkJQ1RSTF9TRVRfVVNSKGxvdywgc3lzY3RsLmN0cltpXS51c2VyKTsKLQkJCUNUUkxfU0VUX0tFUk4obG93LCBzeXNjdGwuY3RyW2ldLmtlcm5lbCk7Ci0JCQlDVFJMX1NFVF9VTShsb3csIHN5c2N0bC5jdHJbaV0udW5pdF9tYXNrKTsKLQkJCUNUUkxfU0VUX0VWRU5UKGxvdywgc3lzY3RsLmN0cltpXS5ldmVudCk7Ci0JCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgYXRobG9uX2NoZWNrX2N0cnModWludCBjb25zdCBjcHUsIAotCQkJICAgICAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzLCAKLQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncykKLXsKLQl1aW50IGxvdywgaGlnaDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmIChzeXNjdGwuY3RyW2ldLmVuYWJsZWQpIHsKLQkJCUNUUl9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCQlpZiAoQ1RSX09WRVJGTE9XRUQobG93KSkgewotCQkJCW9wX2RvX3Byb2ZpbGUoY3B1LCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpLCBJUlFfRU5BQkxFRChyZWdzKSwgaSk7Ci0JCQkJQ1RSX1dSSVRFKG9wcm9mX2RhdGFbY3B1XS5jdHJfY291bnRbaV0sIG1zcnMsIGkpOwotCQkJfQotCQl9Ci0JfQotfQotCi0gCi1zdGF0aWMgdm9pZCBhdGhsb25fc3RhcnQoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQotewotCXVpbnQgbG93LCBoaWdoOwotCWludCBpOwotCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTIDsgKytpKSB7Ci0JCWlmIChzeXNjdGwuY3RyW2ldLmVuYWJsZWQpIHsKLQkJCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQkJQ1RSTF9TRVRfQUNUSVZFKGxvdyk7Ci0JCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgYXRobG9uX3N0b3Aoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQotewotCXVpbnQgbG93LCBoaWdoOwotCWludCBpOwotCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTIDsgKytpKSB7Ci0JCWlmIChzeXNjdGwuY3RyW2ldLmVuYWJsZWQpIHsKLQkJCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQkJQ1RSTF9TRVRfSU5BQ1RJVkUobG93KTsKLQkJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKLQkJfQotCX0KLX0KLQotCi1zdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfYXRobG9uX3NwZWMgPSB7Ci0JLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSUywKLQkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTLAotCS5maWxsX2luX2FkZHJlc3NlcyA9ICZhdGhsb25fZmlsbF9pbl9hZGRyZXNzZXMsCi0JLnNldHVwX2N0cnMgPSAmYXRobG9uX3NldHVwX2N0cnMsCi0JLmNoZWNrX2N0cnMgPSAmYXRobG9uX2NoZWNrX2N0cnMsCi0JLnN0YXJ0ID0gJmF0aGxvbl9zdGFydCwKLQkuc3RvcCA9ICZhdGhsb25fc3RvcAotfTsKZGlmZiAtLWdpdCBhL21vZHVsZS94ODYvb3BfbW9kZWxfcDQuYyBiL21vZHVsZS94ODYvb3BfbW9kZWxfcDQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY4NDAxOS4uMDAwMDAwMAotLS0gYS9tb2R1bGUveDg2L29wX21vZGVsX3A0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OTMgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9tb2RlbF9wNC5jCi0gKiBQNCBtb2RlbC1zcGVjaWZpYyBNU1Igb3BlcmF0aW9ucwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKLSAqLwotCi0jaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCi0jaW5jbHVkZSAib3BfbXNyLmgiCi0jaW5jbHVkZSAib3BfYXBpYy5oIgotI2luY2x1ZGUgIm9wX2FyY2guaCIKLQotI2RlZmluZSBOVU1fRVZFTlRTIDM5Ci0KLSNkZWZpbmUgTlVNX0NPVU5URVJTX05PTl9IVCA4Ci0jZGVmaW5lIE5VTV9FU0NSU19OT05fSFQgNDUKLSNkZWZpbmUgTlVNX0NDQ1JTX05PTl9IVCAxOAotI2RlZmluZSBOVU1fQ09OVFJPTFNfTk9OX0hUIChOVU1fRVNDUlNfTk9OX0hUICsgTlVNX0NDQ1JTX05PTl9IVCkKLQotI2RlZmluZSBOVU1fQ09VTlRFUlNfSFQyIDQKLSNkZWZpbmUgTlVNX0VTQ1JTX0hUMiAyMwotI2RlZmluZSBOVU1fQ0NDUlNfSFQyIDkKLSNkZWZpbmUgTlVNX0NPTlRST0xTX0hUMiAoTlVNX0VTQ1JTX0hUMiArIE5VTV9DQ0NSU19IVDIpCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzID0gTlVNX0NPVU5URVJTX05PTl9IVDsKLQotCi0vKiB0aGlzIGhhcyB0byBiZSBjaGVja2VkIGR5bmFtaWNhbGx5IHNpbmNlIHRoZQotICAgaHlwZXItdGhyZWFkZWRuZXNzIG9mIGEgY2hpcCBpcyBkaXNjb3ZlcmVkIGF0Ci0gICBrZXJuZWwgYm9vdC10aW1lLiAqLwotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX251bV9jb3VudGVycyh2b2lkKQotewotI2lmZGVmIEhUX1NVUFBPUlQKLQlpZiAoc21wX251bV9zaWJsaW5ncyA9PSAyKQotCQludW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlNfSFQyOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgaW5saW5lIGFkZHJfaW5jcmVtZW50KHZvaWQpCi17Ci0jaWZkZWYgSFRfU1VQUE9SVAotCXJldHVybiBzbXBfbnVtX3NpYmxpbmdzID09IDIgPyAyIDogMTsKLSNlbHNlCi0JcmV0dXJuIDE7Ci0jZW5kaWYKLX0KLQotCi0vKiB0YWJsZXMgdG8gc2ltdWxhdGUgc2ltcGxpZmllZCBoYXJkd2FyZSB2aWV3IG9mIHA0IHJlZ2lzdGVycyAqLwotc3RydWN0IHA0X2NvdW50ZXJfYmluZGluZyB7Ci0JaW50IHZpcnRfY291bnRlcjsKLQlpbnQgY291bnRlcl9hZGRyZXNzOwotCWludCBjY2NyX2FkZHJlc3M7Ci19OwotCi1zdHJ1Y3QgcDRfZXZlbnRfYmluZGluZyB7Ci0JaW50IGVzY3Jfc2VsZWN0OyAgLyogdmFsdWUgdG8gcHV0IGluIENDQ1IgKi8KLQlpbnQgZXZlbnRfc2VsZWN0OyAvKiB2YWx1ZSB0byBwdXQgaW4gRVNDUiAqLwotCXN0cnVjdCB7Ci0JCWludCB2aXJ0X2NvdW50ZXI7IC8qIGZvciB0aGlzIGNvdW50ZXIuLi4gKi8KLQkJaW50IGVzY3JfYWRkcmVzczsgLyogdXNlIHRoaXMgRVNDUiAgICAgICAqLwotCX0gYmluZGluZ3NbMl07Ci19OwotCi0vKiBuYjogdGhlc2UgQ1RSXyogZGVmaW5lcyBhcmUgYSBkdXBsaWNhdGUgb2YgZGVmaW5lcyBpbgotICAgZXZlbnQvaTM4Ni5wNCpldmVudHMuICovCi0KLQotI2RlZmluZSBDVFJfQlBVXzAgICAgICAoMSA8PCAwKQotI2RlZmluZSBDVFJfTVNfMCAgICAgICAoMSA8PCAxKQotI2RlZmluZSBDVFJfRkxBTUVfMCAgICAoMSA8PCAyKQotI2RlZmluZSBDVFJfSVFfNCAgICAgICAoMSA8PCAzKQotI2RlZmluZSBDVFJfQlBVXzIgICAgICAoMSA8PCA0KQotI2RlZmluZSBDVFJfTVNfMiAgICAgICAoMSA8PCA1KQotI2RlZmluZSBDVFJfRkxBTUVfMiAgICAoMSA8PCA2KQotI2RlZmluZSBDVFJfSVFfNSAgICAgICAoMSA8PCA3KQotCi1zdGF0aWMgc3RydWN0IHA0X2NvdW50ZXJfYmluZGluZyBwNF9jb3VudGVycyBbTlVNX0NPVU5URVJTX05PTl9IVF0gPSB7Ci0JeyBDVFJfQlBVXzAsICAgTVNSX1A0X0JQVV9QRVJGQ1RSMCwgICBNU1JfUDRfQlBVX0NDQ1IwIH0sCi0JeyBDVFJfTVNfMCwgICAgTVNSX1A0X01TX1BFUkZDVFIwLCAgICBNU1JfUDRfTVNfQ0NDUjAgfSwKLQl7IENUUl9GTEFNRV8wLCBNU1JfUDRfRkxBTUVfUEVSRkNUUjAsIE1TUl9QNF9GTEFNRV9DQ0NSMCB9LAotCXsgQ1RSX0lRXzQsICAgIE1TUl9QNF9JUV9QRVJGQ1RSNCwgICAgTVNSX1A0X0lRX0NDQ1I0IH0sCi0JeyBDVFJfQlBVXzIsICAgTVNSX1A0X0JQVV9QRVJGQ1RSMiwgICBNU1JfUDRfQlBVX0NDQ1IyIH0sCi0JeyBDVFJfTVNfMiwgICAgTVNSX1A0X01TX1BFUkZDVFIyLCAgICBNU1JfUDRfTVNfQ0NDUjIgfSwKLQl7IENUUl9GTEFNRV8yLCBNU1JfUDRfRkxBTUVfUEVSRkNUUjIsIE1TUl9QNF9GTEFNRV9DQ0NSMiB9LAotCXsgQ1RSX0lRXzUsICAgIE1TUl9QNF9JUV9QRVJGQ1RSNSwgICAgTVNSX1A0X0lRX0NDQ1I1IH0KLX07Ci0KLSNkZWZpbmUgTlVNX1VOVVNFRF9DQ0NSUwlOVU1fQ0NDUlNfTk9OX0hUIC0gTlVNX0NPVU5URVJTX05PTl9IVAotCi0vKiBBbGwgY2NjciB3ZSBkb24ndCB1c2UuICovCi1zdGF0aWMgaW50IHA0X3VudXNlZF9jY2NyW05VTV9VTlVTRURfQ0NDUlNdID0gewotCU1TUl9QNF9CUFVfQ0NDUjEsCU1TUl9QNF9CUFVfQ0NDUjMsCi0JTVNSX1A0X01TX0NDQ1IxLAlNU1JfUDRfTVNfQ0NDUjMsCi0JTVNSX1A0X0ZMQU1FX0NDQ1IxLAlNU1JfUDRfRkxBTUVfQ0NDUjMsCi0JTVNSX1A0X0lRX0NDQ1IwLAlNU1JfUDRfSVFfQ0NDUjEsCi0JTVNSX1A0X0lRX0NDQ1IyLAlNU1JfUDRfSVFfQ0NDUjMKLX07Ci0KLS8qIHA0IGV2ZW50IGNvZGVzIGluIGxpYm9wL29wX2V2ZW50LmggYXJlIGluZGljZXMgaW50byB0aGlzIHRhYmxlLiAqLwotCi1zdGF0aWMgc3RydWN0IHA0X2V2ZW50X2JpbmRpbmcgcDRfZXZlbnRzW05VTV9FVkVOVFNdID0gewotCQotCXsgLyogQlJBTkNIX1JFVElSRUQgKi8KLQkJMHgwNSwgMHgwNiwgCi0JCXsge0NUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1IyfSwKLQkJICB7Q1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KLQl9LAotCQotCXsgLyogTUlTUFJFRF9CUkFOQ0hfUkVUSVJFRCAqLwotCQkweDA0LCAweDAzLCAKLQkJeyB7IENUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1IwfSwKLQkJICB7IENUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IxfSB9Ci0JfSwKLQkKLQl7IC8qIFRDX0RFTElWRVJfTU9ERSAqLwotCQkweDAxLCAweDAxLAotCQl7IHsgQ1RSX01TXzAsIE1TUl9QNF9UQ19FU0NSMH0sICAKLQkJICB7IENUUl9NU18yLCBNU1JfUDRfVENfRVNDUjF9IH0KLQl9LAotCQotCXsgLyogQlBVX0ZFVENIX1JFUVVFU1QgKi8KLQkJMHgwMCwgMHgwMywgCi0JCXsgeyBDVFJfQlBVXzAsIE1TUl9QNF9CUFVfRVNDUjB9LAotCQkgIHsgQ1RSX0JQVV8yLCBNU1JfUDRfQlBVX0VTQ1IxfSB9Ci0JfSwKLQotCXsgLyogSVRMQl9SRUZFUkVOQ0UgKi8KLQkJMHgwMywgMHgxOCwKLQkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X0lUTEJfRVNDUjB9LAotCQkgIHsgQ1RSX0JQVV8yLCBNU1JfUDRfSVRMQl9FU0NSMX0gfQotCX0sCi0KLQl7IC8qIE1FTU9SWV9DQU5DRUwgKi8KLQkJMHgwNSwgMHgwMiwKLQkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfREFDX0VTQ1IwfSwKLQkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfREFDX0VTQ1IxfSB9Ci0JfSwKLQotCXsgLyogTUVNT1JZX0NPTVBMRVRFICovCi0JCTB4MDIsIDB4MDgsCi0JCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X1NBQVRfRVNDUjB9LAotCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9TQUFUX0VTQ1IxfSB9Ci0JfSwKLQotCXsgLyogTE9BRF9QT1JUX1JFUExBWSAqLwotCQkweDAyLCAweDA0LCAKLQkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfU0FBVF9FU0NSMH0sCi0JCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X1NBQVRfRVNDUjF9IH0KLQl9LAotCi0JeyAvKiBTVE9SRV9QT1JUX1JFUExBWSAqLwotCQkweDAyLCAweDA1LAotCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9TQUFUX0VTQ1IwfSwKLQkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfU0FBVF9FU0NSMX0gfQotCX0sCi0KLQl7IC8qIE1PQl9MT0FEX1JFUExBWSAqLwotCQkweDAyLCAweDAzLAotCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfTU9CX0VTQ1IwfSwKLQkJICB7IENUUl9CUFVfMiwgTVNSX1A0X01PQl9FU0NSMX0gfQotCX0sCi0KLQl7IC8qIFBBR0VfV0FMS19UWVBFICovCi0JCTB4MDQsIDB4MDEsCi0JCXsgeyBDVFJfQlBVXzAsIE1TUl9QNF9QTUhfRVNDUjB9LAotCQkgIHsgQ1RSX0JQVV8yLCBNU1JfUDRfUE1IX0VTQ1IxfSB9Ci0JfSwKLQotCXsgLyogQlNRX0NBQ0hFX1JFRkVSRU5DRSAqLwotCQkweDA3LCAweDBjLCAKLQkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X0JTVV9FU0NSMH0sCi0JCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9CU1VfRVNDUjF9IH0KLQl9LAotCi0JLyogaW50ZWwgZG9jIHZvbCAzIHRhYmxlIEEtMTogUDQgYW5kIHhlb24gd2l0aCBjcHVpZCBzaWduYXR1cmUgPCAweGYyNwotCSAqIGRvZW4ndCBhbGxvdyBNU1JfRlNCX0VTQ1IxIHNvIG9ubHkgY291bnRlciAwIGlzIGF2YWlsYWJsZSAqLwotCXsgLyogSU9RX0FMTE9DQVRJT04gKi8KLQkJMHgwNiwgMHgwMywgCi0JCXsgeyBDVFJfQlBVXzAsIE1TUl9QNF9GU0JfRVNDUjB9LAotCQkgIHsgMCwgMCB9IH0KLQl9LAotCi0JeyAvKiBJT1FfQUNUSVZFX0VOVFJJRVMgKi8KLQkJMHgwNiwgMHgxYSwgCi0JCXsgeyBDVFJfQlBVXzIsIE1TUl9QNF9GU0JfRVNDUjF9LAotCQkgIHsgMCwgMCB9IH0KLQl9LAotCi0JeyAvKiBGU0JfREFUQV9BQ1RJVklUWSAqLwotCQkweDA2LCAweDE3LCAKLQkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X0ZTQl9FU0NSMH0sCi0JCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9GU0JfRVNDUjF9IH0KLQl9LAotCi0JeyAvKiBCU1FfQUxMT0NBVElPTiAqLwotCQkweDA3LCAweDA1LCAKLQkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X0JTVV9FU0NSMH0sCi0JCSAgeyAwLCAwIH0gfQotCX0sCi0KLQl7IC8qIEJTUV9BQ1RJVkVfRU5UUklFUyAqLwotCQkweDA3LCAweDA2LAotCQkvKiBGSVhNRSBpbnRlbCBkb2MgZG9uJ3Qgc2F5IHdoaWNoIEVTQ1IxIHRvIHVzZSwgdXNpbmcKLQkJICAgQlNVX0VTQ1IxIGlzIGEgc2Vuc2libGUgZ3Vlc3MgYnV0IHdpbGwgbmVlZCB2YWxpZGF0aW9uICovCi0JCXsgeyBDVFJfQlBVXzIsIE1TUl9QNF9CU1VfRVNDUjEgfSwgIAotCQkgIHsgMCwgMCB9IH0KLQl9LAotCi0JeyAvKiBYODdfQVNTSVNUICovCi0JCTB4MDUsIDB4MDMsIAotCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjJ9LAotCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KLQl9LAotCi0JeyAvKiBTU0VfSU5QVVRfQVNTSVNUICovCi0JCTB4MDEsIDB4MzQsCi0JCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZJUk1fRVNDUjB9LAotCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1IxfSB9Ci0JfSwKLSAgCi0JeyAvKiBQQUNLRURfU1BfVU9QICovCi0JCTB4MDEsIDB4MDgsIAotCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKLQkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQotCX0sCi0gIAotCXsgLyogUEFDS0VEX0RQX1VPUCAqLwotCQkweDAxLCAweDBjLCAKLQkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCi0JCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KLQl9LAotCi0JeyAvKiBTQ0FMQVJfU1BfVU9QICovCi0JCTB4MDEsIDB4MGEsIAotCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKLQkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQotCX0sCi0KLQl7IC8qIFNDQUxBUl9EUF9VT1AgKi8KLQkJMHgwMSwgMHgwZSwKLQkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCi0JCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KLQl9LAotCi0JeyAvKiA2NEJJVF9NTVhfVU9QICovCi0JCTB4MDEsIDB4MDIsIAotCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKLQkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQotCX0sCi0gIAotCXsgLyogMTI4QklUX01NWF9VT1AgKi8KLQkJMHgwMSwgMHgxYSwgCi0JCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZJUk1fRVNDUjB9LAotCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1IxfSB9Ci0JfSwKLQotCXsgLyogWDg3X0ZQX1VPUCAqLwotCQkweDAxLCAweDA0LCAKLQkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCi0JCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KLQl9LAotICAKLQl7IC8qIFg4N19TSU1EX01PVkVTX1VPUCAqLwotCQkweDAxLCAweDJlLCAKLQkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCi0JCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KLQl9LAotICAKLQl7IC8qIE1BQ0hJTkVfQ0xFQVIgKi8KLQkJMHgwNSwgMHgwMiwgCi0JCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0sCi0JCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSM30gfQotCX0sCi0KLQl7IC8qIEdMT0JBTF9QT1dFUl9FVkVOVFMgKi8KLQkJMHgwNiwgMHgxMyAvKiBvbGRlciBtYW51YWwgc2F5cyAweDA1LCBuZXdlciAweDEzICovLAotCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfRlNCX0VTQ1IwfSwKLQkJICB7IENUUl9CUFVfMiwgTVNSX1A0X0ZTQl9FU0NSMX0gfQotCX0sCi0gIAotCXsgLyogVENfTVNfWEZFUiAqLwotCQkweDAwLCAweDA1LCAKLQkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAotCQkgIHsgQ1RSX01TXzIsIE1TUl9QNF9NU19FU0NSMX0gfQotCX0sCi0KLQl7IC8qIFVPUF9RVUVVRV9XUklURVMgKi8KLQkJMHgwMCwgMHgwOSwKLQkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAotCQkgIHsgQ1RSX01TXzIsIE1TUl9QNF9NU19FU0NSMX0gfQotCX0sCi0KLQl7IC8qIEZST05UX0VORF9FVkVOVCAqLwotCQkweDA1LCAweDA4LAotCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjJ9LAotCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KLQl9LAotCi0JeyAvKiBFWEVDVVRJT05fRVZFTlQgKi8KLQkJMHgwNSwgMHgwYywKLQkJeyB7IENUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1IyfSwKLQkJICB7IENUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9Ci0JfSwKLQotCXsgLyogUkVQTEFZX0VWRU5UICovCi0JCTB4MDUsIDB4MDksCi0JCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0sCi0JCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSM30gfQotCX0sCi0KLQl7IC8qIElOU1RSX1JFVElSRUQgKi8KLQkJMHgwNCwgMHgwMiwgCi0JCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMH0sCi0JCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQotCX0sCi0KLQl7IC8qIFVPUFNfUkVUSVJFRCAqLwotCQkweDA0LCAweDAxLAotCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjB9LAotCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjF9IH0KLQl9LAotCi0JeyAvKiBVT1BfVFlQRSAqLyAgICAKLQkJMHgwMiwgMHgwMiwgCi0JCXsgeyBDVFJfSVFfNCwgTVNSX1A0X1JBVF9FU0NSMH0sCi0JCSAgeyBDVFJfSVFfNSwgTVNSX1A0X1JBVF9FU0NSMX0gfQotCX0sCi0KLQl7IC8qIFJFVElSRURfTUlTUFJFRF9CUkFOQ0hfVFlQRSAqLwotCQkweDAyLCAweDA1LCAKLQkJeyB7IENUUl9NU18wLCBNU1JfUDRfVEJQVV9FU0NSMH0sCi0JCSAgeyBDVFJfTVNfMiwgTVNSX1A0X1RCUFVfRVNDUjF9IH0KLQl9LAotCi0JeyAvKiBSRVRJUkVEX0JSQU5DSF9UWVBFICovCi0JCTB4MDIsIDB4MDQsCi0JCXsgeyBDVFJfTVNfMCwgTVNSX1A0X1RCUFVfRVNDUjB9LAotCQkgIHsgQ1RSX01TXzIsIE1TUl9QNF9UQlBVX0VTQ1IxfSB9Ci0JfQotfTsKLQotCi0jZGVmaW5lIE1JU0NfUE1DX0VOQUJMRURfUCh4KSAoKHgpICYgMSA8PCA3KQotCi0jZGVmaW5lIEVTQ1JfUkVTRVJWRURfQklUUyAweDgwMDAwMDAzCi0jZGVmaW5lIEVTQ1JfQ0xFQVIoZXNjcikgKChlc2NyKSAmPSBFU0NSX1JFU0VSVkVEX0JJVFMpCi0jZGVmaW5lIEVTQ1JfU0VUX1VTUl8wKGVzY3IsIHVzcikgKChlc2NyKSB8PSAoKCh1c3IpICYgMSkgPDwgMikpCi0jZGVmaW5lIEVTQ1JfU0VUX09TXzAoZXNjciwgb3MpICgoZXNjcikgfD0gKCgob3MpICYgMSkgPDwgMykpCi0jZGVmaW5lIEVTQ1JfU0VUX1VTUl8xKGVzY3IsIHVzcikgKChlc2NyKSB8PSAoKCh1c3IpICYgMSkpKQotI2RlZmluZSBFU0NSX1NFVF9PU18xKGVzY3IsIG9zKSAoKGVzY3IpIHw9ICgoKG9zKSAmIDEpIDw8IDEpKQotI2RlZmluZSBFU0NSX1NFVF9FVkVOVF9TRUxFQ1QoZXNjciwgc2VsKSAoKGVzY3IpIHw9ICgoKHNlbCkgJiAweDNmKSA8PCAyNSkpCi0jZGVmaW5lIEVTQ1JfU0VUX0VWRU5UX01BU0soZXNjciwgbWFzaykgKChlc2NyKSB8PSAoKChtYXNrKSAmIDB4ZmZmZikgPDwgOSkpCi0jZGVmaW5lIEVTQ1JfUkVBRChlc2NyLGhpZ2gsZXYsaSkgZG8ge3JkbXNyKGV2LT5iaW5kaW5nc1soaSldLmVzY3JfYWRkcmVzcywgKGVzY3IpLCAoaGlnaCkpO30gd2hpbGUgKDApCi0jZGVmaW5lIEVTQ1JfV1JJVEUoZXNjcixoaWdoLGV2LGkpIGRvIHt3cm1zcihldi0+YmluZGluZ3NbKGkpXS5lc2NyX2FkZHJlc3MsIChlc2NyKSwgKGhpZ2gpKTt9IHdoaWxlICgwKQotCi0jZGVmaW5lIENDQ1JfUkVTRVJWRURfQklUUyAweDM4MDMwRkZGCi0jZGVmaW5lIENDQ1JfQ0xFQVIoY2NjcikgKChjY2NyKSAmPSBDQ0NSX1JFU0VSVkVEX0JJVFMpCi0jZGVmaW5lIENDQ1JfU0VUX1JFUVVJUkVEX0JJVFMoY2NjcikgKChjY2NyKSB8PSAweDAwMDMwMDAwKQotI2RlZmluZSBDQ0NSX1NFVF9FU0NSX1NFTEVDVChjY2NyLCBzZWwpICgoY2NjcikgfD0gKCgoc2VsKSAmIDB4MDcpIDw8IDEzKSkKLSNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8wKGNjY3IpICgoY2NjcikgfD0gKDE8PDI2KSkKLSNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8xKGNjY3IpICgoY2NjcikgfD0gKDE8PDI3KSkKLSNkZWZpbmUgQ0NDUl9TRVRfRU5BQkxFKGNjY3IpICgoY2NjcikgfD0gKDE8PDEyKSkKLSNkZWZpbmUgQ0NDUl9TRVRfRElTQUJMRShjY2NyKSAoKGNjY3IpICY9IH4oMTw8MTIpKQotI2RlZmluZSBDQ0NSX1JFQUQobG93LCBoaWdoLCBpKSBkbyB7cmRtc3IocDRfY291bnRlcnNbKGkpXS5jY2NyX2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCi0jZGVmaW5lIENDQ1JfV1JJVEUobG93LCBoaWdoLCBpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jY2NyX2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCi0jZGVmaW5lIENDQ1JfT1ZGX1AoY2NjcikgKChjY2NyKSAmICgxVTw8MzEpKQotI2RlZmluZSBDQ0NSX0NMRUFSX09WRihjY2NyKSAoKGNjY3IpICY9ICh+KDFVPDwzMSkpKQotCi0jZGVmaW5lIENUUl9SRUFEKGwsaCxpKSBkbyB7cmRtc3IocDRfY291bnRlcnNbKGkpXS5jb3VudGVyX2FkZHJlc3MsIChsKSwgKGgpKTt9IHdoaWxlICgwKQotI2RlZmluZSBDVFJfV1JJVEUobCxpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jb3VudGVyX2FkZHJlc3MsIC0odTMyKShsKSwgLTEpO30gd2hpbGUgKDApCi0jZGVmaW5lIENUUl9PVkVSRkxPV19QKGN0cikgKCEoKGN0cikgJiAweDgwMDAwMDAwKSkKLQotCi0vKiB0aGlzIGFzc2lnbnMgYSAic3RhZ2dlciIgdG8gdGhlIGN1cnJlbnQgQ1BVLCB3aGljaCBpcyB1c2VkIHRocm91Z2hvdXQKLSAgIHRoZSBjb2RlIGluIHRoaXMgbW9kdWxlIGFzIGFuIGV4dHJhIGFycmF5IG9mZnNldCwgdG8gc2VsZWN0IHRoZSAiZXZlbiIKLSAgIG9yICJvZGQiIHBhcnQgb2YgYWxsIHRoZSBkaXZpZGVkIHJlc291cmNlcy4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N0YWdnZXIodm9pZCkKLXsKLSNpZmRlZiBIVF9TVVBQT1JUCi0JaW50IGNwdTsKLQlpZiAoc21wX251bV9zaWJsaW5ncyA+IDEpIHsKLQkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlyZXR1cm4gKGNwdV9zaWJsaW5nX21hcFtjcHVdID4gY3B1KSA/IDAgOiAxOwotCX0KLSNlbmRpZgkKLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBmaW5hbGx5LCBtZWRpYXRlIGFjY2VzcyB0byBhIHJlYWwgaGFyZHdhcmUgY291bnRlcgotICAgYnkgcGFzc2luZyBhICJ2aXJ0dWFsIiBjb3VudGVyIG51bWVyIHRvIHRoaXMgbWFjcm8sCi0gICBhbG9uZyB3aXRoIHlvdXIgc3RhZ2dlciBzZXR0aW5nLiAqLwotI2RlZmluZSBWSVJUX0NUUihzdGFnZ2VyLCBpKSAoKGkpICsgKChudW1fY291bnRlcnMpICogKHN0YWdnZXIpKSkKLQotCi1zdGF0aWMgdm9pZCBwNF9maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpCi17Ci0JdW5zaWduZWQgaW50IGk7IAotCXVuc2lnbmVkIGludCBhZGRyLCBzdGFnOwotCi0Jc2V0dXBfbnVtX2NvdW50ZXJzKCk7Ci0Jc3RhZyA9IGdldF9zdGFnZ2VyKCk7Ci0KLQkvKiB0aGUgY291bnRlciByZWdpc3RlcnMgd2UgcGF5IGF0dGVudGlvbiB0byAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewotCQltc3JzLT5jb3VudGVycy5hZGRyc1tpXSA9Ci0JCQlwNF9jb3VudGVyc1tWSVJUX0NUUihzdGFnLCBpKV0uY291bnRlcl9hZGRyZXNzOwotCX0KLQotCS8qIEZJWE1FOiBiYWQgZmVlbGluZywgd2UgZG9uJ3Qgc2F2ZSB0aGUgMTAgY291bnRlcnMgd2UgZG9uJ3QgdXNlLiAqLwotCi0JLyogMTggQ0NDUiByZWdpc3RlcnMgKi8KLQlmb3IgKGkgPSAwLCBhZGRyID0gTVNSX1A0X0JQVV9DQ0NSMCArIHN0YWc7Ci0JICAgICBhZGRyIDw9IE1TUl9QNF9JUV9DQ0NSNTsgKytpLCBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsKLQkJbXNycy0+Y29udHJvbHMuYWRkcnNbaV0gPSBhZGRyOwotCX0KLQkKLQkvKiA0MyBFU0NSIHJlZ2lzdGVycyBpbiB0aHJlZSBkaXNjb250aWd1b3VzIGdyb3VwICovCi0JZm9yIChhZGRyID0gTVNSX1A0X0JTVV9FU0NSMCArIHN0YWc7Ci0JICAgICBhZGRyIDw9IE1TUl9QNF9TU1VfRVNDUjA7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7IAotCQltc3JzLT5jb250cm9scy5hZGRyc1tpXSA9IGFkZHI7Ci0JfQotCQotCWZvciAoYWRkciA9IE1TUl9QNF9NU19FU0NSMCArIHN0YWc7Ci0JICAgICBhZGRyIDw9IE1TUl9QNF9UQ19FU0NSMTsgKytpLCBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsgCi0JCW1zcnMtPmNvbnRyb2xzLmFkZHJzW2ldID0gYWRkcjsKLQl9Ci0JCi0JZm9yIChhZGRyID0gTVNSX1A0X0lYX0VTQ1IwICsgc3RhZzsKLQkgICAgIGFkZHIgPD0gTVNSX1A0X0NSVV9FU0NSMzsgKytpLCBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsgCi0JCW1zcnMtPmNvbnRyb2xzLmFkZHJzW2ldID0gYWRkcjsKLQl9Ci0KLQkvKiB0aGVyZSBhcmUgMiByZW1haW5pbmcgbm9uLWNvbnRpZ3VvdXNseSBsb2NhdGVkIEVTQ1JzICovCi0KLQlpZiAobnVtX2NvdW50ZXJzID09IE5VTV9DT1VOVEVSU19OT05fSFQpIHsgCi0JCS8qIHN0YW5kYXJkIG5vbi1IVCBDUFVzIGhhbmRsZSBib3RoIHJlbWFpbmluZyBFU0NScyovCi0JCW1zcnMtPmNvbnRyb2xzLmFkZHJzW2krK10gPSBNU1JfUDRfQ1JVX0VTQ1I1OwotCQltc3JzLT5jb250cm9scy5hZGRyc1tpKytdID0gTVNSX1A0X0NSVV9FU0NSNDsKLQotCX0gZWxzZSBpZiAoc3RhZyA9PSAwKSB7Ci0JCS8qIEhUIENQVXMgZ2l2ZSB0aGUgZmlyc3QgcmVtYWluZGVyIHRvIHRoZSBldmVuIHRocmVhZCwgYXMKLQkJICAgdGhlIDMybmQgY29udHJvbCByZWdpc3RlciAqLwotCQltc3JzLT5jb250cm9scy5hZGRyc1tpKytdID0gTVNSX1A0X0NSVV9FU0NSNDsKLQotCX0gZWxzZSB7Ci0JCS8qIGFuZCB0d28gY29waWVzIG9mIHRoZSBzZWNvbmQgdG8gdGhlIG9kZCB0aHJlYWQsCi0JCSAgIGZvciB0aGUgMjJzdCBhbmQgMjNuZCBjb250cm9sIHJlZ2lzdGVycyAqLwotCQltc3JzLT5jb250cm9scy5hZGRyc1tpKytdID0gTVNSX1A0X0NSVV9FU0NSNTsKLQkJbXNycy0+Y29udHJvbHMuYWRkcnNbaSsrXSA9IE1TUl9QNF9DUlVfRVNDUjU7Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIHBtY19zZXR1cF9vbmVfcDRfY291bnRlcih1bnNpZ25lZCBpbnQgY3RyKQotewotCWludCBpOwotCWludCBjb25zdCBtYXhiaW5kID0gMjsKLQl1bnNpZ25lZCBpbnQgY2NjciA9IDA7Ci0JdW5zaWduZWQgaW50IGVzY3IgPSAwOwotCXVuc2lnbmVkIGludCBoaWdoID0gMDsKLQl1bnNpZ25lZCBpbnQgY291bnRlcl9iaXQ7Ci0Jc3RydWN0IHA0X2V2ZW50X2JpbmRpbmcgKiBldiA9IDA7Ci0JdW5zaWduZWQgaW50IHN0YWc7Ci0KLQlzdGFnID0gZ2V0X3N0YWdnZXIoKTsKLQkKLQkvKiBjb252ZXJ0IGZyb20gY291bnRlciAqbnVtYmVyKiB0byBjb3VudGVyICpiaXQqICovCi0JY291bnRlcl9iaXQgPSAxIDw8IFZJUlRfQ1RSKHN0YWcsIGN0cik7Ci0JCi0JLyogZmluZCBvdXIgZXZlbnQgYmluZGluZyBzdHJ1Y3R1cmUuICovCi0JaWYgKHN5c2N0bC5jdHJbY3RyXS5ldmVudCA8PSAwIHx8IHN5c2N0bC5jdHJbY3RyXS5ldmVudCA+IE5VTV9FVkVOVFMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIAotCQkgICAgICAgIm9wcm9maWxlOiBQNCBldmVudCBjb2RlIDB4JXggb3V0IG9mIHJhbmdlXG4iLCAKLQkJICAgICAgIHN5c2N0bC5jdHJbY3RyXS5ldmVudCk7Ci0JCXJldHVybjsKLQl9Ci0JCi0JZXYgPSAmKHA0X2V2ZW50c1tzeXNjdGwuY3RyW2N0cl0uZXZlbnQgLSAxXSk7Ci0JCi0JZm9yIChpID0gMDsgaSA8IG1heGJpbmQ7IGkrKykgewotCQlpZiAoZXYtPmJpbmRpbmdzW2ldLnZpcnRfY291bnRlciAmIGNvdW50ZXJfYml0KSB7Ci0KLQkJCS8qIG1vZGlmeSBFU0NSICovCi0JCQlFU0NSX1JFQUQoZXNjciwgaGlnaCwgZXYsIGkpOwotCQkJRVNDUl9DTEVBUihlc2NyKTsKLQkJCWlmIChzdGFnID09IDApIHsKLQkJCQlFU0NSX1NFVF9VU1JfMChlc2NyLCBzeXNjdGwuY3RyW2N0cl0udXNlcik7Ci0JCQkJRVNDUl9TRVRfT1NfMChlc2NyLCBzeXNjdGwuY3RyW2N0cl0ua2VybmVsKTsKLQkJCX0gZWxzZSB7Ci0JCQkJRVNDUl9TRVRfVVNSXzEoZXNjciwgc3lzY3RsLmN0cltjdHJdLnVzZXIpOwotCQkJCUVTQ1JfU0VUX09TXzEoZXNjciwgc3lzY3RsLmN0cltjdHJdLmtlcm5lbCk7Ci0JCQl9Ci0JCQlFU0NSX1NFVF9FVkVOVF9TRUxFQ1QoZXNjciwgZXYtPmV2ZW50X3NlbGVjdCk7Ci0JCQlFU0NSX1NFVF9FVkVOVF9NQVNLKGVzY3IsIHN5c2N0bC5jdHJbY3RyXS51bml0X21hc2spOwkJCQotCQkJRVNDUl9XUklURShlc2NyLCBoaWdoLCBldiwgaSk7Ci0JCSAgICAgICAKLQkJCS8qIG1vZGlmeSBDQ0NSICovCi0JCQlDQ0NSX1JFQUQoY2NjciwgaGlnaCwgVklSVF9DVFIoc3RhZywgY3RyKSk7Ci0JCQlDQ0NSX0NMRUFSKGNjY3IpOwotCQkJQ0NDUl9TRVRfUkVRVUlSRURfQklUUyhjY2NyKTsKLQkJCUNDQ1JfU0VUX0VTQ1JfU0VMRUNUKGNjY3IsIGV2LT5lc2NyX3NlbGVjdCk7Ci0JCQlpZiAoc3RhZyA9PSAwKSB7Ci0JCQkJQ0NDUl9TRVRfUE1JX09WRl8wKGNjY3IpOwotCQkJfSBlbHNlIHsKLQkJCQlDQ0NSX1NFVF9QTUlfT1ZGXzEoY2Njcik7Ci0JCQl9Ci0JCQlDQ0NSX1dSSVRFKGNjY3IsIGhpZ2gsIFZJUlRfQ1RSKHN0YWcsIGN0cikpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JcHJpbnRrKEtFUk5fRVJSIAotCSAgICAgICAib3Byb2ZpbGU6IFA0IGV2ZW50IGNvZGUgMHgleCBubyBiaW5kaW5nLCBjdHIgJWRcbiIsCi0JICAgICAgIHN5c2N0bC5jdHJbY3RyXS5ldmVudCwgY3RyKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBwNF9zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOwotCXVuc2lnbmVkIGludCBhZGRyOwotCXVuc2lnbmVkIGludCBzdGFnOwotCi0Jc3RhZyA9IGdldF9zdGFnZ2VyKCk7Ci0KLQlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbG93LCBoaWdoKTsKLQlpZiAoISBNSVNDX1BNQ19FTkFCTEVEX1AobG93KSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiBQNCBQTUMgbm90IGF2YWlsYWJsZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjbGVhciB0aGUgY2NjcnMgd2Ugd2lsbCB1c2UgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IG51bV9jb3VudGVycyA7IGkrKykgewotCQlyZG1zcihwNF9jb3VudGVyc1tWSVJUX0NUUihzdGFnLCBpKV0uY2Njcl9hZGRyZXNzLCBsb3csIGhpZ2gpOwotCQlDQ0NSX0NMRUFSKGxvdyk7Ci0JCUNDQ1JfU0VUX1JFUVVJUkVEX0JJVFMobG93KTsKLQkJd3Jtc3IocDRfY291bnRlcnNbVklSVF9DVFIoc3RhZywgaSldLmNjY3JfYWRkcmVzcywgbG93LCBoaWdoKTsKLQl9Ci0KLQkvKiBjbGVhciBjY2NycyBvdXRzaWRlIG91ciBjb25jZXJuICovCi0JZm9yIChpID0gc3RhZyA7IGkgPCBOVU1fVU5VU0VEX0NDQ1JTIDsgaSArPSBhZGRyX2luY3JlbWVudCgpKSB7Ci0JCXJkbXNyKHA0X3VudXNlZF9jY2NyW2ldLCBsb3csIGhpZ2gpOwotCQlDQ0NSX0NMRUFSKGxvdyk7Ci0JCUNDQ1JfU0VUX1JFUVVJUkVEX0JJVFMobG93KTsKLQkJd3Jtc3IocDRfdW51c2VkX2NjY3JbaV0sIGxvdywgaGlnaCk7Ci0JfQotCi0JLyogY2xlYXIgYWxsIGVzY3JzIChpbmNsdWRpbmcgdGhvc2Ugb3V0c2lkZSBvdXIgY29uY2VybikgKi8KLQlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKLQkgICAgIGFkZHIgPD0gTVNSX1A0X1NTVV9FU0NSMDsgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7IAotCQl3cm1zcihhZGRyLCAwLCAwKTsKLQl9Ci0JCi0JZm9yIChhZGRyID0gTVNSX1A0X01TX0VTQ1IwICsgc3RhZzsKLQkgICAgIGFkZHIgPD0gTVNSX1A0X1RDX0VTQ1IxOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpeyAKLQkJd3Jtc3IoYWRkciwgMCwgMCk7Ci0JfQotCQotCWZvciAoYWRkciA9IE1TUl9QNF9JWF9FU0NSMCArIHN0YWc7Ci0JICAgICBhZGRyIDw9IE1TUl9QNF9DUlVfRVNDUjM7IGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSl7IAotCQl3cm1zcihhZGRyLCAwLCAwKTsKLQl9Ci0KLQlpZiAobnVtX2NvdW50ZXJzID09IE5VTV9DT1VOVEVSU19OT05fSFQpIHsJCQotCQl3cm1zcihNU1JfUDRfQ1JVX0VTQ1I0LCAwLCAwKTsKLQkJd3Jtc3IoTVNSX1A0X0NSVV9FU0NSNSwgMCwgMCk7Ci0JfSBlbHNlIGlmIChzdGFnID09IDApIHsKLQkJd3Jtc3IoTVNSX1A0X0NSVV9FU0NSNCwgMCwgMCk7Ci0JfSBlbHNlIHsKLQkJd3Jtc3IoTVNSX1A0X0NSVV9FU0NSNSwgMCwgMCk7Ci0JfQkJCi0JCi0JLyogc2V0dXAgYWxsIGNvdW50ZXJzICovCi0JZm9yIChpID0gMCA7IGkgPCBudW1fY291bnRlcnMgOyArK2kpIHsKLQkJaWYgKHN5c2N0bC5jdHJbaV0uZXZlbnQpIHsKLQkJCXBtY19zZXR1cF9vbmVfcDRfY291bnRlcihpKTsKLQkJCUNUUl9XUklURShzeXNjdGwuY3RyW2ldLmNvdW50LCBWSVJUX0NUUihzdGFnLCBpKSk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgcDRfY2hlY2tfY3Rycyh1bnNpZ25lZCBpbnQgY29uc3QgY3B1LCAKLQkJCSAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzLAotCQkJICBzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBjdHIsIGxvdywgaGlnaCwgc3RhZywgcmVhbDsKLQlpbnQgaTsKLQotCXN0YWcgPSBnZXRfc3RhZ2dlcigpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7Ci0JCQotCQlpZiAoIXN5c2N0bC5jdHJbaV0uZW5hYmxlZCkgCi0JCQljb250aW51ZTsKLQotCQkvKiAKLQkJICogdGhlcmUgaXMgc29tZSBlY2NlbnRyaWNpdHkgaW4gdGhlIGhhcmR3YXJlIHdoaWNoCi0JCSAqIHJlcXVpcmVzIHRoYXQgd2UgcGVyZm9ybSAyIGV4dHJhIGNvcnJlY3Rpb25zOgotCQkgKgotCQkgKiAtIGNoZWNrIGJvdGggdGhlIENDQ1I6T1ZGIGZsYWcgZm9yIG92ZXJmbG93IGFuZCB0aGUKLQkJICogICBjb3VudGVyIGhpZ2ggYml0IGZvciB1bi1mbGFnZ2VkIG92ZXJmbG93cy4KLQkJICoKLQkJICogLSB3cml0ZSB0aGUgY291bnRlciBiYWNrIHR3aWNlIHRvIGVuc3VyZSBpdCBnZXRzCi0JCSAqICAgdXBkYXRlZCBwcm9wZXJseS4KLQkJICogCi0JCSAqIHRoZSBmb3JtZXIgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBleHRyYSBOTUlzIGhhcHBlbmluZwotCQkgKiBkdXJpbmcgdGhlIGN1cnJlbnQgTk1JOyB0aGUgbGF0dGVyIGlzIHJlcG9ydGVkIGFzIGVycmF0YQotCQkgKiBOMTUgaW4gaW50ZWwgZG9jIDI0OTE5OS0wMjksIHBlbnRpdW0gNCBzcGVjaWZpY2F0aW9uCi0JCSAqIHVwZGF0ZSwgdGhvdWdoIHRoZWlyIHN1Z2dlc3RlZCB3b3JrLWFyb3VuZCBkb2VzIG5vdAotCQkgKiBhcHBlYXIgdG8gc29sdmUgdGhlIHByb2JsZW0uCi0JCSAqLwotCQkKLQkJcmVhbCA9IFZJUlRfQ1RSKHN0YWcsIGkpOwotCi0JCUNDQ1JfUkVBRChsb3csIGhpZ2gsIHJlYWwpOwotIAkJQ1RSX1JFQUQoY3RyLCBoaWdoLCByZWFsKTsKLQkJaWYgKENDQ1JfT1ZGX1AobG93KSB8fCBDVFJfT1ZFUkZMT1dfUChjdHIpKSB7Ci0JCQlvcF9kb19wcm9maWxlKGNwdSwgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSwgSVJRX0VOQUJMRUQocmVncyksIGkpOwotIAkJCUNUUl9XUklURShvcHJvZl9kYXRhW2NwdV0uY3RyX2NvdW50W2ldLCByZWFsKTsKLQkJCUNDQ1JfQ0xFQVJfT1ZGKGxvdyk7Ci0JCQlDQ0NSX1dSSVRFKGxvdywgaGlnaCwgcmVhbCk7Ci0gCQkJQ1RSX1dSSVRFKG9wcm9mX2RhdGFbY3B1XS5jdHJfY291bnRbaV0sIHJlYWwpOwotCQl9Ci0JfQotCi0JLyogUDQgcXVpcms6IHlvdSBoYXZlIHRvIHJlLXVubWFzayB0aGUgYXBpYyB2ZWN0b3IgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIGFwaWNfcmVhZChBUElDX0xWVFBDKSAmIH5BUElDX0xWVF9NQVNLRUQpOwotfQotCi0KLXN0YXRpYyB2b2lkIHA0X3N0YXJ0KHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKLXsKLQl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBzdGFnOwotCWludCBpOwotCi0Jc3RhZyA9IGdldF9zdGFnZ2VyKCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKLQkJaWYgKCFzeXNjdGwuY3RyW2ldLmVuYWJsZWQpCi0JCQljb250aW51ZTsKLQkJQ0NDUl9SRUFEKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOwotCQlDQ0NSX1NFVF9FTkFCTEUobG93KTsKLQkJQ0NDUl9XUklURShsb3csIGhpZ2gsIFZJUlRfQ1RSKHN0YWcsIGkpKTsKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgcDRfc3RvcChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCi17Ci0JdW5zaWduZWQgaW50IGxvdywgaGlnaCwgc3RhZzsKLQlpbnQgaTsKLQotCXN0YWcgPSBnZXRfc3RhZ2dlcigpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7Ci0JCS8qIEZJWE1FOiAyLjYgZHJpdmVyIGRvZXNuJ3QgZG8gdGhhdCA/ICovCi0JCWlmICghc3lzY3RsLmN0cltpXS5lbmFibGVkKQotCQkJY29udGludWU7Ci0JCUNDQ1JfUkVBRChsb3csIGhpZ2gsIFZJUlRfQ1RSKHN0YWcsIGkpKTsKLQkJQ0NDUl9TRVRfRElTQUJMRShsb3cpOwotCQlDQ0NSX1dSSVRFKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOwotCX0KLX0KLQotI2lmZGVmIEhUX1NVUFBPUlQKLQotc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX3A0X2h0Ml9zcGVjID0gewotCS5udW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlNfSFQyLAotCS5udW1fY29udHJvbHMgPSBOVU1fQ09OVFJPTFNfSFQyLAotCS5maWxsX2luX2FkZHJlc3NlcyA9ICZwNF9maWxsX2luX2FkZHJlc3NlcywKLQkuc2V0dXBfY3RycyA9ICZwNF9zZXR1cF9jdHJzLAotCS5jaGVja19jdHJzID0gJnA0X2NoZWNrX2N0cnMsCi0JLnN0YXJ0ID0gJnA0X3N0YXJ0LAotCS5zdG9wID0gJnA0X3N0b3AKLX07Ci0jZW5kaWYKLQotc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX3A0X3NwZWMgPSB7Ci0JLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSU19OT05fSFQsCi0JLm51bV9jb250cm9scyA9IE5VTV9DT05UUk9MU19OT05fSFQsCi0JLmZpbGxfaW5fYWRkcmVzc2VzID0gJnA0X2ZpbGxfaW5fYWRkcmVzc2VzLAotCS5zZXR1cF9jdHJzID0gJnA0X3NldHVwX2N0cnMsCi0JLmNoZWNrX2N0cnMgPSAmcDRfY2hlY2tfY3RycywKLQkuc3RhcnQgPSAmcDRfc3RhcnQsCi0JLnN0b3AgPSAmcDRfc3RvcAotfTsKZGlmZiAtLWdpdCBhL21vZHVsZS94ODYvb3BfbW9kZWxfcHByby5jIGIvbW9kdWxlL3g4Ni9vcF9tb2RlbF9wcHJvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmOTcwMzkuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL3g4Ni9vcF9tb2RlbF9wcHJvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9tb2RlbF9wcHJvLmgKLSAqIHBlbnRpdW0gcHJvIC8gUDYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQotICovCi0KLSNpbmNsdWRlICJvcF94ODZfbW9kZWwuaCIKLSNpbmNsdWRlICJvcF9hcmNoLmgiCi0jaW5jbHVkZSAib3BfbXNyLmgiCi0KLSNkZWZpbmUgTlVNX0NPVU5URVJTIDIKLSNkZWZpbmUgTlVNX0NPTlRST0xTIDIKLQotI2RlZmluZSBDVFJfUkVBRChsLCBoLCBtc3JzLCBjKSBkbyB7cmRtc3IobXNycy0+Y291bnRlcnMuYWRkcnNbKGMpXSwgKGwpLCAoaCkpO30gd2hpbGUgKDApCi0jZGVmaW5lIENUUl9XUklURShsLCBtc3JzLCBjKSBkbyB7d3Jtc3IobXNycy0+Y291bnRlcnMuYWRkcnNbKGMpXSwgLSh1MzIpKGwpLCAtMSk7fSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVPDwzMSkpKQotCi0jZGVmaW5lIENUUkxfUkVBRChsLCBoLCBtc3JzLCBjKSBkbyB7cmRtc3IoKG1zcnMtPmNvbnRyb2xzLmFkZHJzWyhjKV0pLCAobCksIChoKSk7fSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSTF9XUklURShsLCBoLCBtc3JzLCBjKSBkbyB7d3Jtc3IoKG1zcnMtPmNvbnRyb2xzLmFkZHJzWyhjKV0pLCAobCksIChoKSk7fSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSTF9TRVRfQUNUSVZFKG4pIChuIHw9ICgxPDwyMikpCi0jZGVmaW5lIENUUkxfU0VUX0lOQUNUSVZFKG4pIChuICY9IH4oMTw8MjIpKQotI2RlZmluZSBDVFJMX0NMRUFSKHgpICh4ICY9ICgxPDwyMSkpCi0jZGVmaW5lIENUUkxfU0VUX0VOQUJMRSh2YWwpICh2YWwgfD0gMTw8MjApCi0jZGVmaW5lIENUUkxfU0VUX1VTUih2YWwsIHUpICh2YWwgfD0gKCh1ICYgMSkgPDwgMTYpKQotI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCwgaykgKHZhbCB8PSAoKGsgJiAxKSA8PCAxNykpCi0jZGVmaW5lIENUUkxfU0VUX1VNKHZhbCwgbSkgKHZhbCB8PSAobSA8PCA4KSkKLSNkZWZpbmUgQ1RSTF9TRVRfRVZFTlQodmFsLCBlKSAodmFsIHw9IGUpCi0KLSAKLXN0YXRpYyB2b2lkIHBwcm9fZmlsbF9pbl9hZGRyZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQotewotCW1zcnMtPmNvdW50ZXJzLmFkZHJzWzBdID0gTVNSX1A2X1BFUkZDVFIwOwotCW1zcnMtPmNvdW50ZXJzLmFkZHJzWzFdID0gTVNSX1A2X1BFUkZDVFIxOwotCQotCW1zcnMtPmNvbnRyb2xzLmFkZHJzWzBdID0gTVNSX1A2X0VWTlRTRUwwOwotCW1zcnMtPmNvbnRyb2xzLmFkZHJzWzFdID0gTVNSX1A2X0VWTlRTRUwxOwotfQotCi0KLXN0YXRpYyB2b2lkIHBwcm9fc2V0dXBfY3RycyhzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCi17Ci0JdWludCBsb3csIGhpZ2g7Ci0JaW50IGk7Ci0KLQkvKiBjbGVhciBhbGwgY291bnRlcnMgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT05UUk9MUzsgKytpKSB7Ci0JCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQlDVFJMX0NMRUFSKGxvdyk7Ci0JCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKLQl9Ci0JCi0JLyogYXZvaWQgYSBmYWxzZSBkZXRlY3Rpb24gb2YgY3RyIG92ZXJmbG93cyBpbiBOTUkgaGFuZGxlciAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgewotCQlDVFJfV1JJVEUoMSwgbXNycywgaSk7Ci0JfQotCi0JLyogZW5hYmxlIGFjdGl2ZSBjb3VudGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgewotCQlpZiAoc3lzY3RsLmN0cltpXS5lbmFibGVkKSB7Ci0KLQkJCUNUUl9XUklURShzeXNjdGwuY3RyW2ldLmNvdW50LCBtc3JzLCBpKTsKLQotCQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCQlDVFJMX0NMRUFSKGxvdyk7Ci0JCQlDVFJMX1NFVF9FTkFCTEUobG93KTsKLQkJCUNUUkxfU0VUX1VTUihsb3csIHN5c2N0bC5jdHJbaV0udXNlcik7Ci0JCQlDVFJMX1NFVF9LRVJOKGxvdywgc3lzY3RsLmN0cltpXS5rZXJuZWwpOwotCQkJQ1RSTF9TRVRfVU0obG93LCBzeXNjdGwuY3RyW2ldLnVuaXRfbWFzayk7Ci0JCQlDVFJMX1NFVF9FVkVOVChsb3csIHN5c2N0bC5jdHJbaV0uZXZlbnQpOwotCQkJQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQl9Ci0JfQotfQotCi0gCi1zdGF0aWMgdm9pZCBwcHJvX2NoZWNrX2N0cnModWludCBjb25zdCBjcHUsIAotCQkJICAgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycywKLQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MpCi17Ci0JdWxvbmcgbG93LCBoaWdoOwotCWludCBpOwotCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKLQkJQ1RSX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKLQkJaWYgKENUUl9PVkVSRkxPV0VEKGxvdykpIHsKLQkJCW9wX2RvX3Byb2ZpbGUoY3B1LCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpLCBJUlFfRU5BQkxFRChyZWdzKSwgaSk7Ci0JCQlDVFJfV1JJVEUob3Byb2ZfZGF0YVtjcHVdLmN0cl9jb3VudFtpXSwgbXNycywgaSk7Ci0JCX0KLQl9Ci19Ci0KLSAKLXN0YXRpYyB2b2lkIHBwcm9fc3RhcnQoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQotewotCXVpbnQgbG93LCBoaWdoOwotCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIDApOwotCUNUUkxfU0VUX0FDVElWRShsb3cpOwotCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCAwKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBwcHJvX3N0b3Aoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQotewotCXVpbnQgbG93LCBoaWdoOwotCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIDApOwotCUNUUkxfU0VUX0lOQUNUSVZFKGxvdyk7Ci0JQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIDApOwotfQotCi0KLXN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWMgPSB7Ci0JLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSUywKLQkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTLAotCS5maWxsX2luX2FkZHJlc3NlcyA9ICZwcHJvX2ZpbGxfaW5fYWRkcmVzc2VzLAotCS5zZXR1cF9jdHJzID0gJnBwcm9fc2V0dXBfY3RycywKLQkuY2hlY2tfY3RycyA9ICZwcHJvX2NoZWNrX2N0cnMsCi0JLnN0YXJ0ID0gJnBwcm9fc3RhcnQsCi0JLnN0b3AgPSAmcHByb19zdG9wCi19OwpkaWZmIC0tZ2l0IGEvbW9kdWxlL3g4Ni9vcF9tc3IuaCBiL21vZHVsZS94ODYvb3BfbXNyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YjczMjkuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL3g4Ni9vcF9tc3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wX21zci5oCi0gKiB4ODYtc3BlY2lmaWMgTVNSIHN0dWZmCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUF9NU1JfSAotI2RlZmluZSBPUF9NU1JfSAotIAotLyogd29yay1hcm91bmQgY29tcGlsZXIgYnVnIGluIGdjYyAyLjkxLjY2LCBqdXN0IG1hcmsgYWxsIGlucHV0IHJlZ2lzdGVyIGFzCi0gKiBtYWdpY2FsbHkgY2xvYmVycmVkIGJ5IHdybXNyICovCi0jaWYgX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA9PSA5MQotCSN1bmRlZiB3cm1zcgotCSNkZWZpbmUgd3Jtc3IobXNyLCB2YWwxLCB2YWwyKQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJ3cm1zciIJCQlcCi0JCQkvKiBubyBvdXRwdXRzICovCQkJXAotCQkJOgkJCQkJXAotCQkJOiAiYyIgKG1zciksICJhIiAodmFsMSksICJkIiAodmFsMikJXAotCQkJOiAiZWN4IiwgImVheCIsICJlZHgiKQotI2VuZGlmCi0KLSNpZm5kZWYgTVNSX0lBMzJfTUlTQ19FTkFCTEUgCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFIDB4MWEwCi0jZW5kaWYKLQotLyogTVNScyAqLwotI2lmbmRlZiBNU1JfUDZfUEVSRkNUUjAKLSNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwIDB4YzEKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDZfUEVSRkNUUjEKLSNkZWZpbmUgTVNSX1A2X1BFUkZDVFIxIDB4YzIKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDZfRVZOVFNFTDAKLSNkZWZpbmUgTVNSX1A2X0VWTlRTRUwwIDB4MTg2Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A2X0VWTlRTRUwxCi0jZGVmaW5lIE1TUl9QNl9FVk5UU0VMMSAweDE4NwotI2VuZGlmCi0jaWZuZGVmIE1TUl9LN19FVk5UU0VMMAotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDAgMHhjMDAxMDAwMAotI2VuZGlmCi0jaWZuZGVmIE1TUl9LN19FVk5UU0VMMQotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDEgMHhjMDAxMDAwMQotI2VuZGlmCi0jaWZuZGVmIE1TUl9LN19FVk5UU0VMMgotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDIgMHhjMDAxMDAwMgotI2VuZGlmCi0jaWZuZGVmIE1TUl9LN19FVk5UU0VMMwotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDMgMHhjMDAxMDAwMwotI2VuZGlmCi0jaWZuZGVmIE1TUl9LN19QRVJGQ1RSMAotI2RlZmluZSBNU1JfSzdfUEVSRkNUUjAgMHhjMDAxMDAwNAotI2VuZGlmCi0jaWZuZGVmIE1TUl9LN19QRVJGQ1RSMQotI2RlZmluZSBNU1JfSzdfUEVSRkNUUjEgMHhjMDAxMDAwNQotI2VuZGlmCi0jaWZuZGVmIE1TUl9LN19QRVJGQ1RSMgotI2RlZmluZSBNU1JfSzdfUEVSRkNUUjIgMHhjMDAxMDAwNgotI2VuZGlmCi0jaWZuZGVmIE1TUl9LN19QRVJGQ1RSMwotI2RlZmluZSBNU1JfSzdfUEVSRkNUUjMgMHhjMDAxMDAwNwotI2VuZGlmCi0KLS8qIFRoZXJlIGFyZSAqODIqIHBlbnRpdW0gNCBNU1JzOgotICAgCi0gICAtIDEgbWlzYyByZWdpc3RlcgotCi0gICAtIDE4IGNvdW50ZXJzIChQRVJGQ1RScykKLSAgIAotICAgLSAxOCBjb3VudGVyIGNvbmZpZ3VyYXRpb24gY29udHJvbCByZWdpc3RlcnMgKENDQ1JzKQotICAgCi0gICAtIDQ1IGV2ZW50IHNlbGVjdGlvbiBjb250cm9sIHJlZ2lzdGVycyAoRVNDUnMpLiAqLwotCi0KLSNpZm5kZWYgTVNSX1A0X0JQVV9QRVJGQ1RSMAotI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIwIDB4MzAwCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JQVV9QRVJGQ1RSMQotI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIxIDB4MzAxCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JQVV9QRVJGQ1RSMgotI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIyIDB4MzAyCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JQVV9QRVJGQ1RSMwotI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIzIDB4MzAzCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X01TX1BFUkZDVFIwCi0jZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMCAweDMwNAotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9NU19QRVJGQ1RSMQotI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjEgMHgzMDUKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfTVNfUEVSRkNUUjIKLSNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIyIDB4MzA2Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X01TX1BFUkZDVFIzCi0jZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMyAweDMwNwotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMAotI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjAgMHgzMDgKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfRkxBTUVfUEVSRkNUUjEKLSNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIxIDB4MzA5Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0ZMQU1FX1BFUkZDVFIyCi0jZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMiAweDMwYQotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMwotI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjMgMHgzMGIKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfSVFfUEVSRkNUUjAKLSNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIwIDB4MzBjCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0lRX1BFUkZDVFIxCi0jZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMSAweDMwZAotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9JUV9QRVJGQ1RSMgotI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjIgMHgzMGUKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfSVFfUEVSRkNUUjMKLSNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIzIDB4MzBmCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0lRX1BFUkZDVFI0Ci0jZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSNCAweDMxMAotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9JUV9QRVJGQ1RSNQotI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjUgMHgzMTEKLSNlbmRpZgotCi0KLSNpZm5kZWYgTVNSX1A0X0JQVV9DQ0NSMAotI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IwIDB4MzYwCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JQVV9DQ0NSMQotI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IxIDB4MzYxCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JQVV9DQ0NSMgotI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IyIDB4MzYyCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JQVV9DQ0NSMwotI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IzIDB4MzYzCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X01TX0NDQ1IwCi0jZGVmaW5lIE1TUl9QNF9NU19DQ0NSMCAweDM2NAotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9NU19DQ0NSMQotI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjEgMHgzNjUKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfTVNfQ0NDUjIKLSNkZWZpbmUgTVNSX1A0X01TX0NDQ1IyIDB4MzY2Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X01TX0NDQ1IzCi0jZGVmaW5lIE1TUl9QNF9NU19DQ0NSMyAweDM2NwotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9GTEFNRV9DQ0NSMAotI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjAgMHgzNjgKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfRkxBTUVfQ0NDUjEKLSNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IxIDB4MzY5Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0ZMQU1FX0NDQ1IyCi0jZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMiAweDM2YQotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9GTEFNRV9DQ0NSMwotI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjMgMHgzNmIKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfSVFfQ0NDUjAKLSNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IwIDB4MzZjCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0lRX0NDQ1IxCi0jZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMSAweDM2ZAotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9JUV9DQ0NSMgotI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjIgMHgzNmUKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfSVFfQ0NDUjMKLSNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IzIDB4MzZmCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0lRX0NDQ1I0Ci0jZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNCAweDM3MAotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9JUV9DQ0NSNQotI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjUgMHgzNzEKLSNlbmRpZgotCi0KLSNpZm5kZWYgTVNSX1A0X0FMRl9FU0NSMAotI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IwIDB4M2NhCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0FMRl9FU0NSMQotI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IxIDB4M2NiCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JQVV9FU0NSMAotI2RlZmluZSBNU1JfUDRfQlBVX0VTQ1IwIDB4M2IyCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JQVV9FU0NSMQotI2RlZmluZSBNU1JfUDRfQlBVX0VTQ1IxIDB4M2IzCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JTVV9FU0NSMAotI2RlZmluZSBNU1JfUDRfQlNVX0VTQ1IwIDB4M2EwCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0JTVV9FU0NSMQotI2RlZmluZSBNU1JfUDRfQlNVX0VTQ1IxIDB4M2ExCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0NSVV9FU0NSMAotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IwIDB4M2I4Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0NSVV9FU0NSMQotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IxIDB4M2I5Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0NSVV9FU0NSMgotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IyIDB4M2NjCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0NSVV9FU0NSMwotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IzIDB4M2NkCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0NSVV9FU0NSNAotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I0IDB4M2UwCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0NSVV9FU0NSNQotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I1IDB4M2UxCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0RBQ19FU0NSMAotI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IwIDB4M2E4Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0RBQ19FU0NSMQotI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IxIDB4M2E5Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0ZJUk1fRVNDUjAKLSNkZWZpbmUgTVNSX1A0X0ZJUk1fRVNDUjAgMHgzYTQKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfRklSTV9FU0NSMQotI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMSAweDNhNQotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9GTEFNRV9FU0NSMAotI2RlZmluZSBNU1JfUDRfRkxBTUVfRVNDUjAgMHgzYTYKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfRkxBTUVfRVNDUjEKLSNkZWZpbmUgTVNSX1A0X0ZMQU1FX0VTQ1IxIDB4M2E3Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0ZTQl9FU0NSMAotI2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IwIDB4M2EyCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0ZTQl9FU0NSMQotI2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IxIDB4M2EzCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0lRX0VTQ1IwCi0jZGVmaW5lIE1TUl9QNF9JUV9FU0NSMCAweDNiYQotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9JUV9FU0NSMQotI2RlZmluZSBNU1JfUDRfSVFfRVNDUjEgMHgzYmIKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfSVNfRVNDUjAKLSNkZWZpbmUgTVNSX1A0X0lTX0VTQ1IwIDB4M2I0Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0lTX0VTQ1IxCi0jZGVmaW5lIE1TUl9QNF9JU19FU0NSMSAweDNiNQotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9JVExCX0VTQ1IwCi0jZGVmaW5lIE1TUl9QNF9JVExCX0VTQ1IwIDB4M2I2Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0lUTEJfRVNDUjEKLSNkZWZpbmUgTVNSX1A0X0lUTEJfRVNDUjEgMHgzYjcKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfSVhfRVNDUjAKLSNkZWZpbmUgTVNSX1A0X0lYX0VTQ1IwIDB4M2M4Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X0lYX0VTQ1IxCi0jZGVmaW5lIE1TUl9QNF9JWF9FU0NSMSAweDNjOQotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9NT0JfRVNDUjAKLSNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMCAweDNhYQotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9NT0JfRVNDUjEKLSNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMSAweDNhYgotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9NU19FU0NSMAotI2RlZmluZSBNU1JfUDRfTVNfRVNDUjAgMHgzYzAKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfTVNfRVNDUjEKLSNkZWZpbmUgTVNSX1A0X01TX0VTQ1IxIDB4M2MxCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X1BNSF9FU0NSMAotI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IwIDB4M2FjCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X1BNSF9FU0NSMQotI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IxIDB4M2FkCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X1JBVF9FU0NSMAotI2RlZmluZSBNU1JfUDRfUkFUX0VTQ1IwIDB4M2JjCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X1JBVF9FU0NSMQotI2RlZmluZSBNU1JfUDRfUkFUX0VTQ1IxIDB4M2JkCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X1NBQVRfRVNDUjAKLSNkZWZpbmUgTVNSX1A0X1NBQVRfRVNDUjAgMHgzYWUKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfU0FBVF9FU0NSMQotI2RlZmluZSBNU1JfUDRfU0FBVF9FU0NSMSAweDNhZgotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9TU1VfRVNDUjAKLSNkZWZpbmUgTVNSX1A0X1NTVV9FU0NSMCAweDNiZQotI2VuZGlmCi0vKiBndWVzczogbm90IGRlZmluZWQgaW4gbWFudWFsICovCi0jaWZuZGVmIE1TUl9QNF9TU1VfRVNDUjEKLSNkZWZpbmUgTVNSX1A0X1NTVV9FU0NSMSAweDNiZgotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9UQlBVX0VTQ1IwCi0jZGVmaW5lIE1TUl9QNF9UQlBVX0VTQ1IwIDB4M2MyCi0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X1RCUFVfRVNDUjEKLSNkZWZpbmUgTVNSX1A0X1RCUFVfRVNDUjEgMHgzYzMKLSNlbmRpZgotI2lmbmRlZiBNU1JfUDRfVENfRVNDUjAKLSNkZWZpbmUgTVNSX1A0X1RDX0VTQ1IwIDB4M2M0Ci0jZW5kaWYKLSNpZm5kZWYgTVNSX1A0X1RDX0VTQ1IxCi0jZGVmaW5lIE1TUl9QNF9UQ19FU0NSMSAweDNjNQotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9VMkxfRVNDUjAKLSNkZWZpbmUgTVNSX1A0X1UyTF9FU0NSMCAweDNiMAotI2VuZGlmCi0jaWZuZGVmIE1TUl9QNF9VMkxfRVNDUjEKLSNkZWZpbmUgTVNSX1A0X1UyTF9FU0NSMSAweDNiMQotI2VuZGlmCi0KLS8qIEh5cGVyLVRocmVhZGluZyAqLwotI2lmbmRlZiBYODZfRkVBVFVSRV9IVAotI2RlZmluZSBYODZfRkVBVFVSRV9IVAkJKDAqMzIrMjgpCi0jZW5kaWYKLQotI2VuZGlmIC8qIE9QX01TUl9IICovCmRpZmYgLS1naXQgYS9tb2R1bGUveDg2L29wX25taS5jIGIvbW9kdWxlL3g4Ni9vcF9ubWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNmYzM5NS4uMDAwMDAwMAotLS0gYS9tb2R1bGUveDg2L29wX25taS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAgQEAKLS8qKgotICogQGZpbGUgb3Bfbm1pLmMKLSAqIFNldHVwIGFuZCBoYW5kbGluZyBvZiBOTUkgUE1DIGludGVycnVwdHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSAib3Byb2ZpbGUuaCIKLSNpbmNsdWRlICJvcF9tc3IuaCIKLSNpbmNsdWRlICJvcF9hcGljLmgiCi0jaW5jbHVkZSAib3BfdXRpbC5oIgotI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgotCi1zdGF0aWMgc3RydWN0IG9wX21zcnMgY3B1X21zcnNbTlJfQ1BVU107Ci1zdGF0aWMgc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICogbW9kZWwgPSBOVUxMOwotCi1zdGF0aWMgc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICogZ2V0X21vZGVsKHZvaWQpCi17Ci0JaWYgKCFtb2RlbCkgewkKLQkJLyogcGljayBvdXQgb3VyIHBlci1tb2RlbCBmdW5jdGlvbiB0YWJsZSAqLwotCQlzd2l0Y2ggKHN5c2N0bC5jcHVfdHlwZSkgewotCQljYXNlIENQVV9BVEhMT046Ci0JCWNhc2UgQ1BVX0hBTU1FUjoKLQkJCW1vZGVsID0gJm9wX2F0aGxvbl9zcGVjOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1BVX1A0OgotCQkJbW9kZWwgPSAmb3BfcDRfc3BlYzsKLQkJCWJyZWFrOwotI2lmZGVmIEhUX1NVUFBPUlQKLQkJY2FzZSBDUFVfUDRfSFQyOgotCQkJbW9kZWwgPSAmb3BfcDRfaHQyX3NwZWM7Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJbW9kZWwgPSAmb3BfcHByb19zcGVjOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIG1vZGVsOwotfQotCi1hc21saW5rYWdlIHZvaWQgb3BfZG9fbm1pKHN0cnVjdCBwdF9yZWdzICogcmVncykKLXsKLQl1aW50IGNvbnN0IGNwdSA9IG9wX2NwdV9pZCgpOwotCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyA9ICZjcHVfbXNyc1tjcHVdOwotCi0JbW9kZWwtPmNoZWNrX2N0cnMoY3B1LCBtc3JzLCByZWdzKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLSBQTUMgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkIHBtY19zZXR1cF9jdHIodm9pZCAqIGR1bW15KQotewotCXVpbnQgY29uc3QgY3B1ID0gb3BfY3B1X2lkKCk7Ci0Jc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzID0gJmNwdV9tc3JzW2NwdV07Ci0JZ2V0X21vZGVsKCktPnNldHVwX2N0cnMobXNycyk7Ci19Ci0KLQotc3RhdGljIGludCBwbWNfc2V0dXBfYWxsKHZvaWQpCi17Ci0JaWYgKHNtcF9jYWxsX2Z1bmN0aW9uKHBtY19zZXR1cF9jdHIsIE5VTEwsIDAsIDEpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlwbWNfc2V0dXBfY3RyKE5VTEwpOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHBtY19zdGFydCh2b2lkICogaW5mbykKLXsKLQl1aW50IGNvbnN0IGNwdSA9IG9wX2NwdV9pZCgpOwotCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyA9ICZjcHVfbXNyc1tjcHVdOwotCi0JaWYgKGluZm8gJiYgKCooKHVpbnQgKilpbmZvKSAhPSBjcHUpKQotCQlyZXR1cm47Ci0KLQlnZXRfbW9kZWwoKS0+c3RhcnQobXNycyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcG1jX3N0b3Aodm9pZCAqaW5mbykKLXsKLQl1aW50IGNvbnN0IGNwdSA9IG9wX2NwdV9pZCgpOwotCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyA9ICZjcHVfbXNyc1tjcHVdOwotCi0JaWYgKGluZm8gJiYgKCooKHVpbnQgKilpbmZvKSAhPSBjcHUpKQotCQlyZXR1cm47Ci0KLQlnZXRfbW9kZWwoKS0+c3RvcChtc3JzKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBwbWNfc2VsZWN0X3N0YXJ0KHVpbnQgY3B1KQotewotCWlmIChjcHUgPT0gb3BfY3B1X2lkKCkpCi0JCXBtY19zdGFydChOVUxMKTsKLQllbHNlCi0JCXNtcF9jYWxsX2Z1bmN0aW9uKHBtY19zdGFydCwgJmNwdSwgMCwgMSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcG1jX3NlbGVjdF9zdG9wKHVpbnQgY3B1KQotewotCWlmIChjcHUgPT0gb3BfY3B1X2lkKCkpCi0JCXBtY19zdG9wKE5VTEwpOwotCWVsc2UKLQkJc21wX2NhbGxfZnVuY3Rpb24ocG1jX3N0b3AsICZjcHUsIDAsIDEpOwotfQotCi0KLXN0YXRpYyB2b2lkIHBtY19zdGFydF9hbGwodm9pZCkKLXsKLQlpbnQgY3B1LCBpOwotCi0JZm9yIChjcHUgPSAwIDsgY3B1IDwgc21wX251bV9jcHVzOyBjcHUrKykgewotCQlzdHJ1Y3QgX29wcm9mX2RhdGEgKiBkYXRhID0gJm9wcm9mX2RhdGFbY3B1XTsKLQotCQlmb3IgKGkgPSAwIDsgaSA8IGdldF9tb2RlbCgpLT5udW1fY291bnRlcnMgOyArK2kpIHsKLQkJCWlmIChzeXNjdGwuY3RyW2ldLmVuYWJsZWQpCi0JCQkJZGF0YS0+Y3RyX2NvdW50W2ldID0gc3lzY3RsLmN0cltpXS5jb3VudDsKLQkJCWVsc2UKLQkJCQlkYXRhLT5jdHJfY291bnRbaV0gPSAwOwotCQl9Ci0JfQotCi0JaW5zdGFsbF9ubWkoKTsKLQlzbXBfY2FsbF9mdW5jdGlvbihwbWNfc3RhcnQsIE5VTEwsIDAsIDEpOwotCXBtY19zdGFydChOVUxMKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBwbWNfc3RvcF9hbGwodm9pZCkKLXsKLQlzbXBfY2FsbF9mdW5jdGlvbihwbWNfc3RvcCwgTlVMTCwgMCwgMSk7Ci0JcG1jX3N0b3AoTlVMTCk7Ci0JcmVzdG9yZV9ubWkoKTsKLX0KLQotCi1zdGF0aWMgaW50IHBtY19jaGVja19wYXJhbXModm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgZW5hYmxlZCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ2V0X21vZGVsKCktPm51bV9jb3VudGVyczsgaSsrKSB7Ci0JCWlmICghc3lzY3RsLmN0cltpXS5lbmFibGVkKQotCQkJY29udGludWU7Ci0KLQkJZW5hYmxlZCA9IDE7Ci0KLQkJaWYgKCFzeXNjdGwuY3RyW2ldLnVzZXIgJiYgIXN5c2N0bC5jdHJbaV0ua2VybmVsKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiBuZWl0aGVyIGtlcm5lbCBub3IgdXNlciAiCi0JCQkgICAgICAgInNldCBmb3IgY291bnRlciAlZFxuIiwgaSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChjaGVja19yYW5nZShzeXNjdGwuY3RyW2ldLmNvdW50LCAxLCBPUF9NQVhfUEVSRl9DT1VOVCwKLQkJCSJjdHIgY291bnQgdmFsdWUgJWQgbm90IGluIHJhbmdlICglZCAlbGQpXG4iKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JfQotCi0JaWYgKCFlbmFibGVkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IG5vIGNvdW50ZXJzIGhhdmUgYmVlbiBlbmFibGVkLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGZyZWVfbXNyX2dyb3VwKHN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBncm91cCkKLXsKLQlpZiAoZ3JvdXAtPmFkZHJzKQotCQlrZnJlZShncm91cC0+YWRkcnMpOwotCWlmIChncm91cC0+c2F2ZWQpCi0JCWtmcmVlKGdyb3VwLT5zYXZlZCk7Ci0JZ3JvdXAtPmFkZHJzID0gTlVMTDsKLQlncm91cC0+c2F2ZWQgPSBOVUxMOwotfQotIAotCi1zdGF0aWMgdm9pZCBwbWNfc2F2ZV9yZWdpc3RlcnModm9pZCAqIGR1bW15KQotewotCXVpbnQgaTsKLQl1aW50IGNvbnN0IGNwdSA9IG9wX2NwdV9pZCgpOwotCXVpbnQgY29uc3QgbnJfY3RycyA9IGdldF9tb2RlbCgpLT5udW1fY291bnRlcnM7Ci0JdWludCBjb25zdCBucl9jdHJscyA9IGdldF9tb2RlbCgpLT5udW1fY29udHJvbHM7Ci0Jc3RydWN0IG9wX21zcl9ncm91cCAqIGNvdW50ZXJzID0gJmNwdV9tc3JzW2NwdV0uY291bnRlcnM7Ci0Jc3RydWN0IG9wX21zcl9ncm91cCAqIGNvbnRyb2xzID0gJmNwdV9tc3JzW2NwdV0uY29udHJvbHM7Ci0KLQljb3VudGVycy0+YWRkcnMgPSBOVUxMOyAKLQljb3VudGVycy0+c2F2ZWQgPSBOVUxMOwotCWNvbnRyb2xzLT5hZGRycyA9IE5VTEw7Ci0JY29udHJvbHMtPnNhdmVkID0gTlVMTDsKLQotCWNvdW50ZXJzLT5hZGRycyA9IGttYWxsb2MobnJfY3RycyAqIHNpemVvZih1aW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb3VudGVycy0+YWRkcnMpCi0JCWdvdG8gZmF1bHQ7Ci0KLQljb3VudGVycy0+c2F2ZWQgPSBrbWFsbG9jKAotCQlucl9jdHJzICogc2l6ZW9mKHN0cnVjdCBvcF9zYXZlZF9tc3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvdW50ZXJzLT5zYXZlZCkKLQkJZ290byBmYXVsdDsKLSAKLQljb250cm9scy0+YWRkcnMgPSBrbWFsbG9jKG5yX2N0cmxzICogc2l6ZW9mKHVpbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbnRyb2xzLT5hZGRycykKLQkJZ290byBmYXVsdDsKLQotCWNvbnRyb2xzLT5zYXZlZCA9IGttYWxsb2MoCi0JCW5yX2N0cmxzICogc2l6ZW9mKHN0cnVjdCBvcF9zYXZlZF9tc3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbnRyb2xzLT5zYXZlZCkKLQkJZ290byBmYXVsdDsKLSAKLQltb2RlbC0+ZmlsbF9pbl9hZGRyZXNzZXMoJmNwdV9tc3JzW2NwdV0pOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX2N0cnM7ICsraSkgewotCQlyZG1zcihjb3VudGVycy0+YWRkcnNbaV0sCi0JCQljb3VudGVycy0+c2F2ZWRbaV0ubG93LAotCQkJY291bnRlcnMtPnNhdmVkW2ldLmhpZ2gpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBucl9jdHJsczsgKytpKSB7Ci0JCXJkbXNyKGNvbnRyb2xzLT5hZGRyc1tpXSwKLQkJCWNvbnRyb2xzLT5zYXZlZFtpXS5sb3csCi0JCQljb250cm9scy0+c2F2ZWRbaV0uaGlnaCk7Ci0JfQotCXJldHVybjsKLQotZmF1bHQ6Ci0JZnJlZV9tc3JfZ3JvdXAoY291bnRlcnMpOwotCWZyZWVfbXNyX2dyb3VwKGNvbnRyb2xzKTsKLX0KLSAKLQotc3RhdGljIHZvaWQgcG1jX3Jlc3RvcmVfcmVnaXN0ZXJzKHZvaWQgKiBkdW1teSkKLXsKLQl1aW50IGk7Ci0JdWludCBjb25zdCBjcHUgPSBvcF9jcHVfaWQoKTsKLQl1aW50IGNvbnN0IG5yX2N0cnMgPSBnZXRfbW9kZWwoKS0+bnVtX2NvdW50ZXJzOwotCXVpbnQgY29uc3QgbnJfY3RybHMgPSBnZXRfbW9kZWwoKS0+bnVtX2NvbnRyb2xzOwotCXN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBjb3VudGVycyA9ICZjcHVfbXNyc1tjcHVdLmNvdW50ZXJzOwotCXN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBjb250cm9scyA9ICZjcHVfbXNyc1tjcHVdLmNvbnRyb2xzOwotCi0JaWYgKGNvbnRyb2xzLT5hZGRycykgewotCQlmb3IgKGkgPSAwOyBpIDwgbnJfY3RybHM7ICsraSkgewotCQkJd3Jtc3IoY29udHJvbHMtPmFkZHJzW2ldLAotCQkJCWNvbnRyb2xzLT5zYXZlZFtpXS5sb3csCi0JCQkJY29udHJvbHMtPnNhdmVkW2ldLmhpZ2gpOwotCQl9Ci0JfQotCi0JaWYgKGNvdW50ZXJzLT5hZGRycykgewotCQlmb3IgKGkgPSAwOyBpIDwgbnJfY3RyczsgKytpKSB7Ci0JCQl3cm1zcihjb3VudGVycy0+YWRkcnNbaV0sCi0JCQkJY291bnRlcnMtPnNhdmVkW2ldLmxvdywKLQkJCQljb3VudGVycy0+c2F2ZWRbaV0uaGlnaCk7Ci0JCX0KLQl9Ci0KLQlmcmVlX21zcl9ncm91cChjb3VudGVycyk7Ci0JZnJlZV9tc3JfZ3JvdXAoY29udHJvbHMpOwotfQotIAotCi1zdGF0aWMgaW50IHBtY19pbml0KHZvaWQpCi17Ci0JaW50IGVyciA9IDA7Ci0gCi0JaWYgKChlcnIgPSBzbXBfY2FsbF9mdW5jdGlvbihwbWNfc2F2ZV9yZWdpc3RlcnMsIE5VTEwsIDAsIDEpKSkgewotCQlnb3RvIG91dDsKLQl9Ci0JcG1jX3NhdmVfcmVnaXN0ZXJzKE5VTEwpOwotIAotCWlmICgoZXJyID0gYXBpY19zZXR1cCgpKSkKLQkJZ290byBvdXRfcmVzdG9yZTsKLQotCWlmICgoZXJyID0gc21wX2NhbGxfZnVuY3Rpb24obHZ0cGNfYXBpY19zZXR1cCwgTlVMTCwgMCwgMSkpKSB7Ci0JCWx2dHBjX2FwaWNfcmVzdG9yZShOVUxMKTsKLQkJZ290byBvdXRfcmVzdG9yZTsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gZXJyOwotb3V0X3Jlc3RvcmU6Ci0Jc21wX2NhbGxfZnVuY3Rpb24ocG1jX3Jlc3RvcmVfcmVnaXN0ZXJzLCBOVUxMLCAwLCAxKTsKLQlwbWNfcmVzdG9yZV9yZWdpc3RlcnMoTlVMTCk7Ci0JZ290byBvdXQ7Ci19Ci0KLSAKLXN0YXRpYyB2b2lkIHBtY19kZWluaXQodm9pZCkKLXsKLQlzbXBfY2FsbF9mdW5jdGlvbihsdnRwY19hcGljX3Jlc3RvcmUsIE5VTEwsIDAsIDEpOwotCWx2dHBjX2FwaWNfcmVzdG9yZShOVUxMKTsKLQotCWFwaWNfcmVzdG9yZSgpOwotCi0Jc21wX2NhbGxfZnVuY3Rpb24ocG1jX3Jlc3RvcmVfcmVnaXN0ZXJzLCBOVUxMLCAwLCAxKTsKLQlwbWNfcmVzdG9yZV9yZWdpc3RlcnMoTlVMTCk7Ci19Ci0gCi0KLXN0YXRpYyBjaGFyICpuYW1lc1tdID0geyAiMCIsICIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiIH07Ci0KLXN0YXRpYyBpbnQgcG1jX2FkZF9zeXNjdGxzKGN0bF90YWJsZSAqIG5leHQpCi17Ci0JY3RsX3RhYmxlICogc3RhcnQgPSBuZXh0OwotCWN0bF90YWJsZSAqIHRhYjsKLQlpbnQgaSwgajsKLQotCS8qIG5vdyBpbml0IHRoZSBzeXNjdGxzICovCi0JZm9yIChpPTA7IGkgPCBnZXRfbW9kZWwoKS0+bnVtX2NvdW50ZXJzOyBpKyspIHsKLQkJbmV4dC0+Y3RsX25hbWUgPSAxOwotCQluZXh0LT5wcm9jbmFtZSA9IG5hbWVzW2ldOwotCQluZXh0LT5tb2RlID0gMDc1NTsKLQotCQlpZiAoISh0YWIgPSBrbWFsbG9jKHNpemVvZihjdGxfdGFibGUpKjcsIEdGUF9LRVJORUwpKSkKLQkJCWdvdG8gY2xlYW51cDsKLQotCQluZXh0LT5jaGlsZCA9IHRhYjsKLQotCQltZW1zZXQodGFiLCAwLCBzaXplb2YoY3RsX3RhYmxlKSo3KTsKLQkJdGFiWzBdID0gKChjdGxfdGFibGUpIHsgMSwgImVuYWJsZWQiLCAmc3lzY3RsX3Bhcm1zLmN0cltpXS5lbmFibGVkLCBzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwgbHByb2NfZG9pbnR2ZWMsIE5VTEwsIH0pOwotCQl0YWJbMV0gPSAoKGN0bF90YWJsZSkgeyAxLCAiZXZlbnQiLCAmc3lzY3RsX3Bhcm1zLmN0cltpXS5ldmVudCwgc2l6ZW9mKGludCksIDA2NDQsIE5VTEwsIGxwcm9jX2RvaW50dmVjLCBOVUxMLCAgfSk7Ci0JCXRhYlsyXSA9ICgoY3RsX3RhYmxlKSB7IDEsICJjb3VudCIsICZzeXNjdGxfcGFybXMuY3RyW2ldLmNvdW50LCBzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwgbHByb2NfZG9pbnR2ZWMsIE5VTEwsIH0pOwotCQl0YWJbM10gPSAoKGN0bF90YWJsZSkgeyAxLCAidW5pdF9tYXNrIiwgJnN5c2N0bF9wYXJtcy5jdHJbaV0udW5pdF9tYXNrLCBzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwgbHByb2NfZG9pbnR2ZWMsIE5VTEwsIH0pOwotCQl0YWJbNF0gPSAoKGN0bF90YWJsZSkgeyAxLCAia2VybmVsIiwgJnN5c2N0bF9wYXJtcy5jdHJbaV0ua2VybmVsLCBzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwgbHByb2NfZG9pbnR2ZWMsIE5VTEwsIH0pOwotCQl0YWJbNV0gPSAoKGN0bF90YWJsZSkgeyAxLCAidXNlciIsICZzeXNjdGxfcGFybXMuY3RyW2ldLnVzZXIsIHNpemVvZihpbnQpLCAwNjQ0LCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7Ci0JCW5leHQrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotY2xlYW51cDoKLQluZXh0ID0gc3RhcnQ7Ci0JZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotCQlrZnJlZShuZXh0LT5jaGlsZCk7Ci0JCW5leHQrKzsKLQl9Ci0JcmV0dXJuIC1FRkFVTFQ7Ci19Ci0KLSAKLXN0YXRpYyB2b2lkIHBtY19yZW1vdmVfc3lzY3RscyhjdGxfdGFibGUgKiBuZXh0KQotewotCWludCBpOwotCWZvciAoaT0wOyBpIDwgZ2V0X21vZGVsKCktPm51bV9jb3VudGVyczsgaSsrKSB7Ci0JCWtmcmVlKG5leHQtPmNoaWxkKTsKLQkJbmV4dCsrOwotCX0KLX0KLQotIAotc3RhdGljIHN0cnVjdCBvcF9pbnRfb3BlcmF0aW9ucyBvcF9ubWlfb3BzID0gewotCWluaXQ6IHBtY19pbml0LAotCWRlaW5pdDogcG1jX2RlaW5pdCwKLQlhZGRfc3lzY3RsczogcG1jX2FkZF9zeXNjdGxzLAotCXJlbW92ZV9zeXNjdGxzOiBwbWNfcmVtb3ZlX3N5c2N0bHMsCi0JY2hlY2tfcGFyYW1zOiBwbWNfY2hlY2tfcGFyYW1zLAotCXNldHVwOiBwbWNfc2V0dXBfYWxsLAotCXN0YXJ0OiBwbWNfc3RhcnRfYWxsLAotCXN0b3A6IHBtY19zdG9wX2FsbCwKLQlzdGFydF9jcHU6IHBtY19zZWxlY3Rfc3RhcnQsCi0Jc3RvcF9jcHU6IHBtY19zZWxlY3Rfc3RvcCwKLX07Ci0KLQotc3RydWN0IG9wX2ludF9vcGVyYXRpb25zIGNvbnN0ICogb3BfaW50X2ludGVyZmFjZSgpCi17Ci0JcmV0dXJuICZvcF9ubWlfb3BzOwotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlL3g4Ni9vcF9ydGMuYyBiL21vZHVsZS94ODYvb3BfcnRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMjZmZDYuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL3g4Ni9vcF9ydGMuYworKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wX3J0Yy5jCi0gKiBTZXR1cCBhbmQgaGFuZGxpbmcgb2YgUlRDIGludGVycnVwdHMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBCb2IgTW9udGdvbWVyeQotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLSNpbmNsdWRlICJvcHJvZmlsZS5oIgotI2luY2x1ZGUgIm9wX2FyY2guaCIKLSNpbmNsdWRlICJvcF91dGlsLmgiCi0KLSNkZWZpbmUgUlRDX0lPX1BPUlRTIDIKLQotLyogbm90IGluIDIuMiAqLwotI2lmbmRlZiBSVENfSVJRCi0jZGVmaW5lIFJUQ19JUlEgOAotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0gUlRDIGhhbmRsZXIgLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkIGRvX3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqIGRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQotewotCXVpbnQgY3B1ID0gb3BfY3B1X2lkKCk7Ci0JdW5zaWduZWQgY2hhciBpbnRyX2ZsYWdzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpbnQgdXNlcm1vZGUgPSB1c2VyX21vZGUocmVncyk7Ci0JaWYgKChzeXNjdGwuY3RyWzBdLmtlcm5lbCAmJiB1c2VybW9kZSkKLQkJfHwgKHN5c2N0bC5jdHJbMF0udXNlciAmJiAhdXNlcm1vZGUpKQotCQlyZXR1cm47Ci0KLQlsb2NrX3J0YyhmbGFncyk7Ci0KLQkvKiByZWFkIGFuZCBhY2sgdGhlIGludGVycnVwdCAqLwotCWludHJfZmxhZ3MgPSBDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpOwotCS8qIElzIHRoaXMgbXkgdHlwZSBvZiBpbnRlcnJ1cHQ/ICovCi0JaWYgKGludHJfZmxhZ3MgJiBSVENfUEYpIHsKLQkJb3BfZG9fcHJvZmlsZShjcHUsIGluc3RydWN0aW9uX3BvaW50ZXIocmVncyksIElSUV9FTkFCTEVEKHJlZ3MpLCAwKTsKLQl9Ci0KLQl1bmxvY2tfcnRjKGZsYWdzKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBydGNfc2V0dXAodm9pZCkKLXsKLQl1bnNpZ25lZCBjaGFyIHRtcF9jb250cm9sOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciB0bXBfZnJlcV9zZWxlY3Q7Ci0JdW5zaWduZWQgbG9uZyB0YXJnZXQ7Ci0JdW5zaWduZWQgaW50IGV4cCwgZnJlcTsKLQotCWxvY2tfcnRjKGZsYWdzKTsKLQotCS8qIGRpc2FibGUgcGVyaW9kaWMgaW50ZXJydXB0cyAqLwotCXRtcF9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKLQl0bXBfY29udHJvbCAmPSB+UlRDX1BJRTsKLQlDTU9TX1dSSVRFKHRtcF9jb250cm9sLCBSVENfQ09OVFJPTCk7Ci0JQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKTsKLQotCS8qIFNldCB0aGUgZnJlcXVlbmN5IGZvciBwZXJpb2RpYyBpbnRlcnJ1cHRzIGJ5IGZpbmRpbmcgdGhlCi0JICogY2xvc2VzdCBwb3dlciBvZiB0d28gd2l0aGluIHRoZSBhbGxvd2VkIHJhbmdlLgotCSAqLwotCi0JdGFyZ2V0ID0gc3lzY3RsLmN0clswXS5jb3VudDsKLQotCWV4cCA9IDA7Ci0Jd2hpbGUgKHRhcmdldCA+ICgxIDw8IGV4cCkgKyAoKDEgPDwgZXhwKSA+PiAxKSkKLQkJZXhwKys7Ci0JZnJlcSA9IDE2IC0gZXhwOwotCi0JdG1wX2ZyZXFfc2VsZWN0ID0gQ01PU19SRUFEKFJUQ19GUkVRX1NFTEVDVCk7Ci0JdG1wX2ZyZXFfc2VsZWN0ID0gKHRtcF9mcmVxX3NlbGVjdCAmIDB4ZjApIHwgZnJlcTsKLQlDTU9TX1dSSVRFKHRtcF9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKLQotCS8qIFVwZGF0ZSAvcHJvYyB3aXRoIHRoZSBhY3R1YWwgZnJlcXVlbmN5LiAqLwotCXN5c2N0bF9wYXJtcy5jdHJbMF0uY291bnQgPSBzeXNjdGwuY3RyWzBdLmNvdW50ID0gMTw8ZXhwOwotCi0JdW5sb2NrX3J0YyhmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0Y19zdGFydCh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgdG1wX2NvbnRyb2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2tfcnRjKGZsYWdzKTsKLQotCS8qIEVuYWJsZSBwZXJpb2RpYyBpbnRlcnJ1cHRzICovCi0JdG1wX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOwotCXRtcF9jb250cm9sIHw9IFJUQ19QSUU7Ci0JQ01PU19XUklURSh0bXBfY29udHJvbCwgUlRDX0NPTlRST0wpOwotCi0JLyogcmVhZCB0aGUgZmxhZ3MgcmVnaXN0ZXIgdG8gc3RhcnQgaW50ZXJydXB0cyAqLwotCUNNT1NfUkVBRChSVENfSU5UUl9GTEFHUyk7Ci0KLQl1bmxvY2tfcnRjKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcnRjX3N0b3Aodm9pZCkKLXsKLQl1bnNpZ25lZCBjaGFyIHRtcF9jb250cm9sOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NrX3J0YyhmbGFncyk7Ci0KLQkvKiBkaXNhYmxlIHBlcmlvZGljIGludGVycnVwdHMgKi8KLQl0bXBfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7Ci0JdG1wX2NvbnRyb2wgJj0gflJUQ19QSUU7Ci0JQ01PU19XUklURSh0bXBfY29udHJvbCwgUlRDX0NPTlRST0wpOwotCUNNT1NfUkVBRChSVENfSU5UUl9GTEFHUyk7Ci0KLQl1bmxvY2tfcnRjKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcnRjX3N0YXJ0X2NwdSh1aW50IGNwdSkKLXsKLQlydGNfc3RhcnQoKTsKLX0KLQotc3RhdGljIHZvaWQgcnRjX3N0b3BfY3B1KHVpbnQgY3B1KQotewotCXJ0Y19zdG9wKCk7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX2NoZWNrX3BhcmFtcyh2b2lkKQotewotCWludCB0YXJnZXQgPSBzeXNjdGwuY3RyWzBdLmNvdW50OwotCi0JaWYgKGNoZWNrX3JhbmdlKHRhcmdldCwgT1BfTUlOX1JUQ19DT1VOVCwgT1BfTUFYX1JUQ19DT1VOVCwKLQkJIlJUQyB2YWx1ZSAlZCBpcyBvdXQgb2YgcmFuZ2UgKCVkLSVkKVxuIikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX2luaXQodm9pZCkKLXsKLQkgLyogcmVxdWVzdF9yZWdpb24gcmV0dXJucyAwIG9uICoqZmFpbHVyZSoqICovCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbl9jaGVjayhSVENfUE9SVCgwKSwgUlRDX0lPX1BPUlRTLCAib3Byb2ZpbGUiKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiBjYW4ndCBnZXQgUlRDIEkvTyBQb3J0c1xuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyogcmVxdWVzdF9pcnEgcmV0dXJucyAwIG9uICoqc3VjY2VzcyoqICovCi0JaWYgKHJlcXVlc3RfaXJxKFJUQ19JUlEsIGRvX3J0Y19pbnRlcnJ1cHQsCi0JCQlTQV9JTlRFUlJVUFQsICJvcHJvZmlsZSIsIE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IElSUSVkIGJ1c3kgXG4iLCBSVENfSVJRKTsKLQkJcmVsZWFzZV9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19QT1JUUyk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBydGNfZGVpbml0KHZvaWQpCi17Ci0JZnJlZV9pcnEoUlRDX0lSUSwgTlVMTCk7Ci0JcmVsZWFzZV9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19QT1JUUyk7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX2FkZF9zeXNjdGxzKGN0bF90YWJsZSAqIG5leHQpCi17Ci0JKm5leHQgPSAoKGN0bF90YWJsZSkgeyAxLCAicnRjX3ZhbHVlIiwgJnN5c2N0bF9wYXJtcy5jdHJbMF0uY291bnQsIHNpemVvZihpbnQpLCAwNjAwLCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0Y19yZW1vdmVfc3lzY3RscyhjdGxfdGFibGUgKiBuZXh0KQotewotCS8qIG5vdGhpbmcgdG8gZG8gKi8KLX0KLQotc3RydWN0IG9wX2ludF9vcGVyYXRpb25zIG9wX3J0Y19vcHMgPSB7Ci0JaW5pdDogcnRjX2luaXQsCi0JZGVpbml0OiBydGNfZGVpbml0LAotCWFkZF9zeXNjdGxzOiBydGNfYWRkX3N5c2N0bHMsCi0JcmVtb3ZlX3N5c2N0bHM6IHJ0Y19yZW1vdmVfc3lzY3RscywKLQljaGVja19wYXJhbXM6IHJ0Y19jaGVja19wYXJhbXMsCi0Jc2V0dXA6IHJ0Y19zZXR1cCwKLQlzdGFydDogcnRjX3N0YXJ0LAotCXN0b3A6IHJ0Y19zdG9wLAotCXN0YXJ0X2NwdTogcnRjX3N0YXJ0X2NwdSwKLQlzdG9wX2NwdTogcnRjX3N0b3BfY3B1LAotfTsKZGlmZiAtLWdpdCBhL21vZHVsZS94ODYvb3Bfc3lzY2FsbHMuYyBiL21vZHVsZS94ODYvb3Bfc3lzY2FsbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzZDA3MS4uMDAwMDAwMAotLS0gYS9tb2R1bGUveDg2L29wX3N5c2NhbGxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcF9zeXNjYWxscy5jCi0gKiBUcmFjaW5nIG9mIHN5c3RlbSBjYWxscwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0KLSNpbmNsdWRlICJvcHJvZmlsZS5oIgotCi12b2lkIG9wcm9mX3B1dF9ub3RlKHN0cnVjdCBvcF9ub3RlICpzYW1wKTsKLXZvaWQgX19vcHJvZl9wdXRfbm90ZShzdHJ1Y3Qgb3Bfbm90ZSAqc2FtcCk7Ci0KLWV4dGVybiBzcGlubG9ja190IG5vdGVfbG9jazsKLQotLyogLS0tLS0tLS0tLS0tIHN5c3RlbSBjYWxscyAtLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RydWN0IG1tYXBfYXJnX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotICAgICAgICB1bnNpZ25lZCBsb25nIGxlbjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBwcm90OwotICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgICB1bnNpZ25lZCBsb25nIGZkOwotICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldDsKLX07Ci0KLWFzbWxpbmthZ2Ugc3RhdGljIGludCAoKm9sZF9zeXNfZm9yaykoc3RydWN0IHB0X3JlZ3MpOwotYXNtbGlua2FnZSBzdGF0aWMgaW50ICgqb2xkX3N5c192Zm9yaykoc3RydWN0IHB0X3JlZ3MpOwotYXNtbGlua2FnZSBzdGF0aWMgaW50ICgqb2xkX3N5c19jbG9uZSkoc3RydWN0IHB0X3JlZ3MpOwotYXNtbGlua2FnZSBzdGF0aWMgaW50ICgqb2xkX3N5c19leGVjdmUpKHN0cnVjdCBwdF9yZWdzKTsKLWFzbWxpbmthZ2Ugc3RhdGljIGludCAoKm9sZF9vbGRfbW1hcCkoc3RydWN0IG1tYXBfYXJnX3N0cnVjdCAqKTsKLSNpZmRlZiBIQVZFX01NQVAyCi1hc21saW5rYWdlIHN0YXRpYyBsb25nICgqb2xkX3N5c19tbWFwMikodWxvbmcsIHVsb25nLCB1bG9uZywgdWxvbmcsIHVsb25nLCB1bG9uZyk7Ci0jZW5kaWYKLWFzbWxpbmthZ2Ugc3RhdGljIGxvbmcgKCpvbGRfc3lzX2luaXRfbW9kdWxlKShjaGFyIGNvbnN0ICosIHN0cnVjdCBtb2R1bGUgKik7Ci1hc21saW5rYWdlIHN0YXRpYyBsb25nICgqb2xkX3N5c19leGl0KShpbnQpOwotCi0vKiBjYWxsZWQgd2l0aCBub3RlX2xvY2sgaGVsZCAqLwotc3RhdGljIHZvaWQgb3Byb2Zfb3V0cHV0X21hcCh1bG9uZyBhZGRyLCB1bG9uZyBsZW4sCi0JdWxvbmcgb2Zmc2V0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGlzX2V4ZWN2ZSkKLXsKLQlzdHJ1Y3Qgb3Bfbm90ZSBub3RlOwotCi0JLyogZG9uJ3QgYm90aGVyIHdpdGggL2Rldi96ZXJvIG1hcHBpbmdzIGV0Yy4gKi8KLQlpZiAoIWxlbikKLQkJcmV0dXJuOwotCi0Jbm90ZS5waWQgPSBjdXJyZW50LT5waWQ7Ci0Jbm90ZS50Z2lkID0gb3BfZ2V0X3RnaWQoKTsKLQlub3RlLmFkZHIgPSBhZGRyOwotCW5vdGUubGVuID0gbGVuOwotCW5vdGUub2Zmc2V0ID0gb2Zmc2V0OwotCW5vdGUudHlwZSA9IGlzX2V4ZWN2ZSA/IE9QX0VYRUMgOiBPUF9NQVA7Ci0Jbm90ZS5oYXNoID0gaGFzaF9wYXRoKGZpbGUpOwotCWlmIChub3RlLmhhc2ggPT0gLTEpCi0JCXJldHVybjsKLQkvKiBob2xkaW5nIG5vdGUgbG9jayAqLwotCV9fb3Byb2ZfcHV0X25vdGUoJm5vdGUpOwotfQotCi1zdGF0aWMgaW50IG9wcm9mX291dHB1dF9tYXBzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlpbnQgc2l6ZT0wOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbWFwOwotCi0JLyogd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBtbV91c2VycyBoZXJlLCBzaW5jZSB0aGVyZSBpcyBhdAotCSAgIGxlYXN0IG9uZSB1c2VyIChjdXJyZW50KSwgYW5kIGlmIHRoZXJlJ3Mgb3RoZXIgY29kZSB1c2luZyB0aGlzCi0JICAgbW0sIHRoZW4gbW1fdXNlcnMgbXVzdCBiZSBhdCBsZWFzdCAyOyB3ZSBzaG91bGQgbmV2ZXIgaGF2ZSB0bwotCSAgIG1tcHV0KCkgaGVyZS4gKi8KLQotCWlmICghKG1tID0gdGFzay0+bW0pKQotCQlnb3RvIG91dDsKLQotCWxvY2tfbW1hcChtbSk7Ci0Jc3Bpbl9sb2NrKCZub3RlX2xvY2spOwotCi0JLyogV2UgbmVlZCB0d28gcGFzcywgZGFlbW9uIGFzc3VtZSB0aGFuIHRoZSBmaXJzdCBtbWFwIG5vdGlmaWNhdGlvbgotCSAqIGlzIGZvciB0aGUgZXhlY3V0YWJsZSBidXQgc29tZSBwcm9jZXNzIGRvZXNuJ3QgZm9sbG93IHRoaXMgbW9kZWwuCi0JICovCi0JZm9yIChtYXAgPSBtbS0+bW1hcDsgbWFwOyBtYXAgPSBtYXAtPnZtX25leHQpIHsKLQkJaWYgKCEobWFwLT52bV9mbGFncyAmIFZNX0VYRUMpIHx8ICFtYXAtPnZtX2ZpbGUpCi0JCQljb250aW51ZTsKLQkJaWYgKCEobWFwLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpKQotCQkJY29udGludWU7Ci0KLQkJb3Byb2Zfb3V0cHV0X21hcChtYXAtPnZtX3N0YXJ0LCBtYXAtPnZtX2VuZC1tYXAtPnZtX3N0YXJ0LAotCQkJR0VUX1ZNX09GRlNFVChtYXApLCBtYXAtPnZtX2ZpbGUsIDEpOwotCX0KLQlmb3IgKG1hcCA9IG1tLT5tbWFwOyBtYXA7IG1hcCA9IG1hcC0+dm1fbmV4dCkgewotCQlpZiAoIShtYXAtPnZtX2ZsYWdzICYgVk1fRVhFQykgfHwgIW1hcC0+dm1fZmlsZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobWFwLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCi0JCQljb250aW51ZTsKLQotCQlvcHJvZl9vdXRwdXRfbWFwKG1hcC0+dm1fc3RhcnQsIG1hcC0+dm1fZW5kLW1hcC0+dm1fc3RhcnQsCi0JCQlHRVRfVk1fT0ZGU0VUKG1hcCksIG1hcC0+dm1fZmlsZSwgMCk7Ci0JfQotCi0Jc3Bpbl91bmxvY2soJm5vdGVfbG9jayk7Ci0JdW5sb2NrX21tYXAobW0pOwotCi1vdXQ6Ci0JcmV0dXJuIHNpemU7Ci19Ci0KLWFzbWxpbmthZ2Ugc3RhdGljIGludCBteV9zeXNfZXhlY3ZlKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCi17Ci0JY2hhciAqZmlsZW5hbWU7Ci0JaW50IHJldDsKLQotCU1PRF9JTkNfVVNFX0NPVU5UOwotCi0JbG9ja19leGVjdmUoKTsKLQotCWZpbGVuYW1lID0gZ2V0bmFtZSgoY2hhciAqKXJlZ3MuZWJ4KTsKLQlpZiAoSVNfRVJSKGZpbGVuYW1lKSkgewotCQlyZXQgPSBQVFJfRVJSKGZpbGVuYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IGRvX2V4ZWN2ZShmaWxlbmFtZSwgKGNoYXIgKiopcmVncy5lY3gsIChjaGFyICoqKXJlZ3MuZWR4LCAmcmVncyk7Ci0KLQlpZiAoIXJldCkgewotCQlQVFJBQ0VfT0ZGKGN1cnJlbnQpOwotCQlvcHJvZl9vdXRwdXRfbWFwcyhjdXJyZW50KTsKLQl9Ci0KLQlwdXRuYW1lKGZpbGVuYW1lKTsKLQotb3V0OgotCXVubG9ja19leGVjdmUoKTsKLQlNT0RfREVDX1VTRV9DT1VOVDsKLSAgICAgICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgb3V0X21tYXAodWxvbmcgYWRkciwgdWxvbmcgbGVuLCB1bG9uZyBwcm90LCB1bG9uZyBmbGFncywKLQl1bG9uZyBmZCwgdWxvbmcgb2Zmc2V0KQotewotCXN0cnVjdCBmaWxlICpmaWxlOwotCi0JbG9ja19vdXRfbW1hcCgpOwotCi0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJZ290byBvdXQ7Ci0KLQlzcGluX2xvY2soJm5vdGVfbG9jayk7Ci0Jb3Byb2Zfb3V0cHV0X21hcChhZGRyLCBsZW4sIG9mZnNldCwgZmlsZSwgMCk7Ci0Jc3Bpbl91bmxvY2soJm5vdGVfbG9jayk7Ci0KLQlmcHV0KGZpbGUpOwotCi1vdXQ6Ci0JdW5sb2NrX291dF9tbWFwKCk7Ci19Ci0KLSNpZmRlZiBIQVZFX01NQVAyCi1hc21saW5rYWdlIHN0YXRpYyBpbnQgbXlfc3lzX21tYXAyKHVsb25nIGFkZHIsIHVsb25nIGxlbiwKLQl1bG9uZyBwcm90LCB1bG9uZyBmbGFncywgdWxvbmcgZmQsIHVsb25nIHBnb2ZmKQotewotCWludCByZXQ7Ci0KLQlNT0RfSU5DX1VTRV9DT1VOVDsKLQotCXJldCA9IG9sZF9zeXNfbW1hcDIoYWRkciwgbGVuLCBwcm90LCBmbGFncywgZmQsIHBnb2ZmKTsKLQotCWlmICgocHJvdCAmIFBST1RfRVhFQykgJiYgcmV0ID49IDApCi0JCW91dF9tbWFwKHJldCwgbGVuLCBwcm90LCBmbGFncywgZmQsIHBnb2ZmIDw8IFBBR0VfU0hJRlQpOwotCi0JTU9EX0RFQ19VU0VfQ09VTlQ7Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCi1hc21saW5rYWdlIHN0YXRpYyBpbnQgbXlfb2xkX21tYXAoc3RydWN0IG1tYXBfYXJnX3N0cnVjdCAqYXJnKQotewotCWludCByZXQ7Ci0KLQlNT0RfSU5DX1VTRV9DT1VOVDsKLQotCXJldCA9IG9sZF9vbGRfbW1hcChhcmcpOwotCi0JaWYgKHJldCA+PSAwKSB7Ci0JCXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgYTsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkgewotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJaWYgKGEucHJvdCZQUk9UX0VYRUMpCi0JCQlvdXRfbW1hcChyZXQsIGEubGVuLCBhLnByb3QsIGEuZmxhZ3MsIGEuZmQsIGEub2Zmc2V0KTsKLQl9Ci0KLW91dDoKLQlNT0RfREVDX1VTRV9DT1VOVDsKLQlyZXR1cm4gcmV0OwotfQotCi1pbmxpbmUgc3RhdGljIHZvaWQgb3Byb2ZfcmVwb3J0X2ZvcmsodTMyIG9sZF9waWQsIHUzMiBuZXdfcGlkLCB1MzIgb2xkX3RnaWQsIHUzMiBuZXdfdGdpZCkKLXsKLQlzdHJ1Y3Qgb3Bfbm90ZSBub3RlOwotCi0Jbm90ZS50eXBlID0gT1BfRk9SSzsKLQlub3RlLnBpZCA9IG9sZF9waWQ7Ci0Jbm90ZS50Z2lkID0gb2xkX3RnaWQ7Ci0Jbm90ZS5hZGRyID0gbmV3X3BpZDsKLQlub3RlLmxlbiA9IG5ld190Z2lkOwotCW9wcm9mX3B1dF9ub3RlKCZub3RlKTsKLX0KLQotYXNtbGlua2FnZSBzdGF0aWMgaW50IG15X3N5c19mb3JrKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCi17Ci0JdTMyIHBpZCA9IGN1cnJlbnQtPnBpZDsKLQl1MzIgdGdpZCA9IG9wX2dldF90Z2lkKCk7Ci0JaW50IHJldDsKLQotCU1PRF9JTkNfVVNFX0NPVU5UOwotCi0JcmV0ID0gb2xkX3N5c19mb3JrKHJlZ3MpOwotCWlmIChyZXQpCi0JCW9wcm9mX3JlcG9ydF9mb3JrKHBpZCwgcmV0LCB0Z2lkLCByZXQpOwotCU1PRF9ERUNfVVNFX0NPVU5UOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2Ugc3RhdGljIGludCBteV9zeXNfdmZvcmsoc3RydWN0IHB0X3JlZ3MgcmVncykKLXsKLQl1MzIgcGlkID0gY3VycmVudC0+cGlkOwotCXUzMiB0Z2lkID0gb3BfZ2V0X3RnaWQoKTsKLQlpbnQgcmV0OwotCi0JTU9EX0lOQ19VU0VfQ09VTlQ7Ci0JcmV0ID0gb2xkX3N5c192Zm9yayhyZWdzKTsKLQlpZiAocmV0KQotCQlvcHJvZl9yZXBvcnRfZm9yayhwaWQsIHJldCwgdGdpZCwgcmV0KTsKLQlNT0RfREVDX1VTRV9DT1VOVDsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIHN0YXRpYyBpbnQgbXlfc3lzX2Nsb25lKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCi17Ci0JdTMyIHBpZCA9IGN1cnJlbnQtPnBpZDsKLQl1MzIgdGdpZCA9IG9wX2dldF90Z2lkKCk7Ci0jaWYgVl9BVF9MRUFTVCgyLCA0LCAwKQotCXUzMiBjbG9uZV9mbGFncyA9IHJlZ3MuZWJ4OwotI2VuZGlmCi0JaW50IHJldDsKLQotCU1PRF9JTkNfVVNFX0NPVU5UOwotCXJldCA9IG9sZF9zeXNfY2xvbmUocmVncyk7Ci0JaWYgKHJldCkgewotI2lmIFZfQVRfTEVBU1QoMiwgNCwgMCkKLQkJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfVEhSRUFEKQotCQkJb3Byb2ZfcmVwb3J0X2ZvcmsocGlkLCByZXQsIHRnaWQsIHRnaWQpOwotCQllbHNlCi0jZW5kaWYKLQkJCW9wcm9mX3JlcG9ydF9mb3JrKHBpZCwgcmV0LCB0Z2lkLCByZXQpOwotCX0KLQlNT0RfREVDX1VTRV9DT1VOVDsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIHN0YXRpYyBsb25nIG15X3N5c19pbml0X21vZHVsZShjaGFyIGNvbnN0ICogbmFtZV91c2VyLCBzdHJ1Y3QgbW9kdWxlICogbW9kX3VzZXIpCi17Ci0JbG9uZyByZXQ7Ci0KLQlNT0RfSU5DX1VTRV9DT1VOVDsKLQotCXJldCA9IG9sZF9zeXNfaW5pdF9tb2R1bGUobmFtZV91c2VyLCBtb2RfdXNlcik7Ci0KLQlpZiAocmV0ID49IDApIHsKLQkJc3RydWN0IG9wX25vdGUgbm90ZTsKLQotCQlub3RlLnR5cGUgPSBPUF9EUk9QX01PRFVMRVM7Ci0JCW9wcm9mX3B1dF9ub3RlKCZub3RlKTsKLQl9Ci0JTU9EX0RFQ19VU0VfQ09VTlQ7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogdXNlZCBmcm9tIGRvX25taSAqLwotYXNtbGlua2FnZSBsb25nIG15X3N5c19leGl0KGludCBlcnJvcl9jb2RlKQotewotCXN0cnVjdCBvcF9ub3RlIG5vdGU7Ci0KLQlNT0RfSU5DX1VTRV9DT1VOVDsKLQotCW5vdGUudHlwZSA9IE9QX0VYSVQ7Ci0Jbm90ZS5waWQgPSBjdXJyZW50LT5waWQ7Ci0Jbm90ZS50Z2lkID0gb3BfZ2V0X3RnaWQoKTsKLQlvcHJvZl9wdXRfbm90ZSgmbm90ZSk7Ci0KLQkvKiB0aGlzIGxvb2tzIFVQLWRhbmdlcm91cywgYXMgdGhlIGV4aXQgc2xlZXBzIGFuZCB3ZSBkb24ndAotCSAqIGhhdmUgYSB1c2UgY291bnQsIGJ1dCBpbiBmYWN0IGl0cyBvayBhcyBzeXNfZXhpdCBpcyBub3JldHVybiwKLQkgKiBzbyB3ZSBjYW4gbmV2ZXIgY29tZSBiYWNrIHRvIHRoaXMgbm9uLWV4aXN0ZW50IGV4ZWMgcGFnZQotCSAqLwotCU1PRF9ERUNfVVNFX0NPVU5UOwotCXJldHVybiBvbGRfc3lzX2V4aXQoZXJyb3JfY29kZSk7Ci19Ci0KLWV4dGVybiB2b2lkICpzeXNfY2FsbF90YWJsZVtdOwotCi12b2lkIG9wX3NhdmVfc3lzY2FsbHModm9pZCkKLXsKLQlvbGRfc3lzX2ZvcmsgPSBzeXNfY2FsbF90YWJsZVtfX05SX2ZvcmtdOwotCW9sZF9zeXNfdmZvcmsgPSBzeXNfY2FsbF90YWJsZVtfX05SX3Zmb3JrXTsKLQlvbGRfc3lzX2Nsb25lID0gc3lzX2NhbGxfdGFibGVbX19OUl9jbG9uZV07Ci0Jb2xkX3N5c19leGVjdmUgPSBzeXNfY2FsbF90YWJsZVtfX05SX2V4ZWN2ZV07Ci0Jb2xkX29sZF9tbWFwID0gc3lzX2NhbGxfdGFibGVbX19OUl9tbWFwXTsKLSNpZmRlZiBIQVZFX01NQVAyCi0Jb2xkX3N5c19tbWFwMiA9IHN5c19jYWxsX3RhYmxlW19fTlJfbW1hcDJdOwotI2VuZGlmCi0Jb2xkX3N5c19pbml0X21vZHVsZSA9IHN5c19jYWxsX3RhYmxlW19fTlJfaW5pdF9tb2R1bGVdOwotCW9sZF9zeXNfZXhpdCA9IHN5c19jYWxsX3RhYmxlW19fTlJfZXhpdF07Ci19Ci0KLXZvaWQgb3BfaW50ZXJjZXB0X3N5c2NhbGxzKHZvaWQpCi17Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9mb3JrXSA9IG15X3N5c19mb3JrOwotCXN5c19jYWxsX3RhYmxlW19fTlJfdmZvcmtdID0gbXlfc3lzX3Zmb3JrOwotCXN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmVdID0gbXlfc3lzX2Nsb25lOwotCXN5c19jYWxsX3RhYmxlW19fTlJfZXhlY3ZlXSA9IG15X3N5c19leGVjdmU7Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9tbWFwXSA9IG15X29sZF9tbWFwOwotI2lmZGVmIEhBVkVfTU1BUDIKLQlzeXNfY2FsbF90YWJsZVtfX05SX21tYXAyXSA9IG15X3N5c19tbWFwMjsKLSNlbmRpZgotCXN5c19jYWxsX3RhYmxlW19fTlJfaW5pdF9tb2R1bGVdID0gbXlfc3lzX2luaXRfbW9kdWxlOwotCXN5c19jYWxsX3RhYmxlW19fTlJfZXhpdF0gPSBteV9zeXNfZXhpdDsKLX0KLQotdm9pZCBvcF9yZXN0b3JlX3N5c2NhbGxzKHZvaWQpCi17Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9mb3JrXSA9IG9sZF9zeXNfZm9yazsKLQlzeXNfY2FsbF90YWJsZVtfX05SX3Zmb3JrXSA9IG9sZF9zeXNfdmZvcms7Ci0Jc3lzX2NhbGxfdGFibGVbX19OUl9jbG9uZV0gPSBvbGRfc3lzX2Nsb25lOwotCXN5c19jYWxsX3RhYmxlW19fTlJfZXhlY3ZlXSA9IG9sZF9zeXNfZXhlY3ZlOwotCXN5c19jYWxsX3RhYmxlW19fTlJfbW1hcF0gPSBvbGRfb2xkX21tYXA7Ci0jaWZkZWYgSEFWRV9NTUFQMgotCXN5c19jYWxsX3RhYmxlW19fTlJfbW1hcDJdID0gb2xkX3N5c19tbWFwMjsKLSNlbmRpZgotCXN5c19jYWxsX3RhYmxlW19fTlJfaW5pdF9tb2R1bGVdID0gb2xkX3N5c19pbml0X21vZHVsZTsKLQlzeXNfY2FsbF90YWJsZVtfX05SX2V4aXRdID0gb2xkX3N5c19leGl0OwotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlL3g4Ni9vcF94ODZfbW9kZWwuaCBiL21vZHVsZS94ODYvb3BfeDg2X21vZGVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YTE1NDYuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL3g4Ni9vcF94ODZfbW9kZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKgotICogQGZpbGUgb3BfeDg2X21vZGVsLmgKLSAqIGludGVyZmFjZSB0byB4ODYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCi0gKi8KLQotI2lmbmRlZiBPUF9YODZfTU9ERUxfSAotI2RlZmluZSBPUF9YODZfTU9ERUxfSAotCi0jaW5jbHVkZSAib3Byb2ZpbGUuaCIKLQotc3RydWN0IG9wX3NhdmVkX21zciB7Ci0JdWludCBoaWdoOwotCXVpbnQgbG93OwotfTsKLQotc3RydWN0IG9wX21zcl9ncm91cCB7Ci0JdWludCAqIGFkZHJzOwotCXN0cnVjdCBvcF9zYXZlZF9tc3IgKiBzYXZlZDsKLX07Ci0KLXN0cnVjdCBvcF9tc3JzIHsKLQlzdHJ1Y3Qgb3BfbXNyX2dyb3VwIGNvdW50ZXJzOwotCXN0cnVjdCBvcF9tc3JfZ3JvdXAgY29udHJvbHM7Ci19OwotCi1zdHJ1Y3QgcHRfcmVnczsKLQotc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIHsKLQl1aW50IGNvbnN0IG51bV9jb3VudGVyczsKLQl1aW50IGNvbnN0IG51bV9jb250cm9sczsKLQl2b2lkICgqZmlsbF9pbl9hZGRyZXNzZXMpKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycyk7Ci0Jdm9pZCAoKnNldHVwX2N0cnMpKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7Ci0Jdm9pZCAoKmNoZWNrX2N0cnMpKHVpbnQgY29uc3QgY3B1LCAKLQkJc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzLAotCQlzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MpOwotCXZvaWQgKCpzdGFydCkoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKTsKLQl2b2lkICgqc3RvcCkoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcHByb19zcGVjOwotZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9hdGhsb25fc3BlYzsKLWV4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfc3BlYzsKLSNpZmRlZiBIVF9TVVBQT1JUCi1leHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX3A0X2h0Ml9zcGVjOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBPUF9YODZfTU9ERUxfSCAqLwpkaWZmIC0tZ2l0IGEvbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUyBiL21vZHVsZS94ODYvb3Byb2ZpbGVfbm1pLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZWMxNWMuLjAwMDAwMDAKLS0tIGEvbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIF9fQVNTRU1CTFlfXyAgLyogZm9yIHNvbWUgMi4yIGtlcm5lbCAqLwotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvc3lzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jZGVmaW5lIEFTU0VNQkxZCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0jZGVmaW5lIFNBVkVfQUxMIFwKLQljbGQ7IFwKLQlwdXNobCAlZXM7IFwKLQlwdXNobCAlZHM7IFwKLQlwdXNobCAlZWF4OyBcCi0JcHVzaGwgJWVicDsgXAotCXB1c2hsICVlZGk7IFwKLQlwdXNobCAlZXNpOyBcCi0JcHVzaGwgJWVkeDsgXAotCXB1c2hsICVlY3g7IFwKLQlwdXNobCAlZWJ4OyBcCi0JbW92bCAkKF9fS0VSTkVMX0RTKSwlZWR4OyBcCi0JbW92bCAlZWR4LCVkczsgXAotCW1vdmwgJWVkeCwlZXM7Ci0gCi0jZGVmaW5lIFJFU1RPUkVfQUxMCVwKLQlwb3BsICVlYng7CVwKLQlwb3BsICVlY3g7CVwKLQlwb3BsICVlZHg7CVwKLQlwb3BsICVlc2k7CVwKLQlwb3BsICVlZGk7CVwKLQlwb3BsICVlYnA7CVwKLQlwb3BsICVlYXg7CVwKLTE6CXBvcGwgJWRzOwlcCi0yOglwb3BsICVlczsJXAotCWFkZGwgJDQsJWVzcDsJXAotMzoJaXJldDsJCVwKLS5zZWN0aW9uIC5maXh1cCwiYXgiOwlcCi00Ogltb3ZsICQwLCglZXNwKTsJXAotCWptcCAxYjsJCVwKLTU6CW1vdmwgJDAsKCVlc3ApOwlcCi0Jam1wIDJiOwkJXAotNjoJcHVzaGwgJXNzOwlcCi0JcG9wbCAlZHM7CVwKLQlwdXNobCAlc3M7CVwKLQlwb3BsICVlczsJXAotCXB1c2hsICQxMTsJXAotCWNhbGwgbXlfc3lzX2V4aXQ7XAotLnByZXZpb3VzOwkJXAotLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAotCS5hbGlnbiA0OwlcCi0JLmxvbmcgMWIsNGI7CVwKLQkubG9uZyAyYiw1YjsJXAotCS5sb25nIDNiLDZiOwlcCi0ucHJldmlvdXMKLQotRU5UUlkob3Bfbm1pKQotICAgICAgICBwdXNobCAlZWF4Ci0gICAgICAgIFNBVkVfQUxMCi0gICAgICAgIG1vdmwgJWVzcCwlZWR4Ci0gICAgICAgIHB1c2hsICVlZHgKLSAgICAgICAgY2FsbCBvcF9kb19ubWkKLSAgICAgICAgYWRkbCAkNCwlZXNwCi0gICAgICAgIFJFU1RPUkVfQUxMCmRpZmYgLS1naXQgYS9vcGNvbnRyb2wvQW5kcm9pZC5tayBiL29wY29udHJvbC9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMzhlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9vcGNvbnRyb2wvQW5kcm9pZC5tawpAQCAtMCwwICsxLDE4IEBACitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVM6PSBcCisJb3Bjb250cm9sLmNwcAorCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IFwKKwlsaWJwb3B0IGxpYnV0aWwgbGliZGIgbGliYWJpYyBsaWJvcAorCitMT0NBTF9DX0lOQ0xVREVTIDo9IFwKKwkkKExPQ0FMX1BBVEgpLy4uIFwKKwkkKExPQ0FMX1BBVEgpLy4uL2xpYm9wCisKK0xPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9PUFRJT05BTF9FWEVDVVRBQkxFUykKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IGRlYnVnCitMT0NBTF9NT0RVTEU6PSBvcGNvbnRyb2wKKworaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCmRpZmYgLS1naXQgYS9vcGNvbnRyb2wvb3Bjb250cm9sLmNwcCBiL29wY29udHJvbC9vcGNvbnRyb2wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjI5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9vcGNvbnRyb2wvb3Bjb250cm9sLmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIG9wY29udHJvbC9vcGNvbnRyb2wuY3BwCisgKi8KKworI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworc3RhdGljIGludCB1c2FnZShjb25zdCBjaGFyKiBuYW1lKTsKK3N0YXRpYyBpbnQgZWNobyhjb25zdCBjaGFyKiBzdHIsIGNvbnN0IGNoYXIqIGZpbGUpOworc3RhdGljIGludCByZWFkX251bShjb25zdCBjaGFyKiBmaWxlKTsKKworc3RhdGljIGludCBzdGFydF9wcm9maWxlcihpbnQgYXJnYywgY2hhciBjb25zdCAqIGFyZ3ZbXSk7CitzdGF0aWMgaW50IHN0b3BfcHJvZmlsZXIoKTsKK3N0YXRpYyBpbnQgcmVzZXRfcHJvZmlsZXIoKTsKK3N0YXRpYyBpbnQgc3RhdHVzX3Byb2ZpbGVyKCk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICogYXJndltdKQoreworICAgIGlmIChhcmdjIDwgMikKKyAgICAgICAgcmV0dXJuIHVzYWdlKGFyZ3ZbMF0pOworCisgICAgY29uc3QgY2hhciogdG9vbCA9IGFyZ3ZbMV07CisKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBpZiAoIXN0cmNtcCgic3RhcnQiLCB0b29sKSkgICAgICAgIHJldCA9IHN0YXJ0X3Byb2ZpbGVyKGFyZ2MtMiwgYXJndisyKTsKKyAgICBlbHNlIGlmICghc3RyY21wKCJzdG9wIiwgdG9vbCkpICAgIHJldCA9IHN0b3BfcHJvZmlsZXIoKTsKKyAgICBlbHNlIGlmICghc3RyY21wKCJyZXNldCIsIHRvb2wpKSAgIHJldCA9IHJlc2V0X3Byb2ZpbGVyKCk7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgic3RhdHVzIiwgdG9vbCkpICByZXQgPSBzdGF0dXNfcHJvZmlsZXIoKTsKKworICAgIHJldHVybiByZXQgPyB1c2FnZShhcmd2WzBdKSA6IDA7Cit9CisKK2ludCB1c2FnZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHByaW50ZigidXNhZ2U6ICVzIFtzdGFydCBbLWUgZXZlbnRdWy1wIHR5cGVdWy1jIGRlcHRoXVstaSBuYW1lc10iCisgICAgICAgICAgICAiIHwgc3RvcCB8IHJlc2V0IHwgc3RhdHVzXVxuIiwgbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKKworaW50IHN0YXJ0X3Byb2ZpbGVyKGludCBhcmdjLCBjaGFyIGNvbnN0ICogYXJndltdKQoreworICAgIGNoYXIgY29uc3QqIGJhY2t0cmFjZV9kZXB0aCA9ICIwIjsKKyAgICBpZiAoYXJnYyYxKQorICAgICAgICByZXR1cm4gLTE7IAorCisgICAgd2hpbGUgKGFyZ2M+MCkgeworICAgICAgICBpZiAoIXN0cmNtcCgiLWMiLCBhcmd2WzBdKSkKKyAgICAgICAgICAgIGJhY2t0cmFjZV9kZXB0aCA9IGFyZ3ZbMV07CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoIi1wIiwgYXJndlswXSkpCisgICAgICAgICAgICA7IC8vIHR5cGUKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCgiLWUiLCBhcmd2WzBdKSkKKyAgICAgICAgICAgIDsgLy8gZXZlbnQKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCgiLWkiLCBhcmd2WzBdKSkKKyAgICAgICAgICAgIDsgLy8gaW1hZ2VzCisgICAgICAgIGFyZ2MtPTI7CisgICAgICAgIGFyZ3YrPTI7ICAgICAgICAKKyAgICB9CisKKyAgICBpbnQgZXJyOworCisgICAgZXJyID0gZWNobyhiYWNrdHJhY2VfZGVwdGgsIE9QX0RSSVZFUl9CQVNFIi9iYWNrdHJhY2VfZGVwdGgiKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIHByaW50ZigiY291bGRuJ3Qgc2V0IGJhY2t0cmFjZSBkZXB0aC4gYmFja3RyYWNlcyBkaXNhYmxlZC5cbiIpOworICAgIH0KKworICAgIGVyciA9IGVjaG8oIjEiLCBPUF9EUklWRVJfQkFTRSIvZW5hYmxlIik7CisgICAgaWYgKGVycikgeworICAgICAgICBwcmludGYoImNvdWxkbid0IHN0YXJ0IHByb2ZpbGluZywgaXMgdGhlIG9wcm9maWxlIGRyaXZlciBpbnN0YWxsZWQ/XG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vIFhYWDogc3RhcnQgZGFlbW9uIHdpdGggYWxsIGdvb2Qgb3B0aW9ucyAuLi4KKworICAgIG1rZGlyKE9QX0JBU0VfRElSLCA2NDQpOworICAgIHJldHVybiAwOworfQorCitpbnQgc3RvcF9wcm9maWxlcigpCit7CisgICAgaW50IGR1bXAsIHN0b3A7CisgICAgZHVtcCA9IGVjaG8oIjEiLCBPUF9EUklWRVJfQkFTRSIvZHVtcCIpOworICAgICAgICAvLyBYWFg6IHNob3VsZCB3YWl0IGZvciBjb21wbGV0ZV9kdW1wCisgICAgdXNsZWVwKDI1MDAwMCk7CisgICAgc3RvcCA9IGVjaG8oIjAiLCBPUF9EUklWRVJfQkFTRSIvZW5hYmxlIik7CisgICAgaWYgKGR1bXAgfHwgc3RvcCkgeworICAgICAgICBwcmludGYoImNvdWxkbid0IHN0b3AgcHJvZmlsaW5nLCBpcyB0aGUgb3Byb2ZpbGUgZHJpdmVyIGluc3RhbGxlZD9cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGludCBudW0gPSByZWFkX251bShPUF9EUklWRVJfQkFTRSIvc3RhdHMvY3B1MC9zYW1wbGVfcmVjZWl2ZWQiKTsKKyAgICBwcmludGYoInByb2ZpbGVyIHN0b3BwZWQgd2l0aCAldSBzYW1wbGVzIHJlY2VpdmVkXG4iLCBudW0pOworICAgIHJldHVybiAwOworfQorCitpbnQgcm1fZGlyX2NvbnRlbnQoY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBESVIqIGQgPSBvcGVuZGlyKHBhdGgpOworICAgIGlmIChkKSB7CisgICAgICAgIHN0cnVjdCBkaXJlbnQqIGRlOworICAgICAgICB3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkpIHsKKyAgICAgICAgICAgIGlmKGRlLT5kX25hbWVbMF0gPT0gJy4nKSBjb250aW51ZTsKKyAgICAgICAgICAgIHN0cnVjdCBzdGF0IHM7CisgICAgICAgICAgICBjaGFyKiB0bXAgPSAoY2hhciopbWFsbG9jKHN0cmxlbihwYXRoKStzdHJsZW4oZGUtPmRfbmFtZSkrMik7CisgICAgICAgICAgICBpZiAodG1wKSB7CisgICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICIlcy8lcyIsIHBhdGgsIGRlLT5kX25hbWUpOworICAgICAgICAgICAgICAgIGlmIChsc3RhdCh0bXAsICZzKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlID0gcy5zdF9tb2RlICYgU19JRk1UOworICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBTX0lGRElSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBybV9kaXJfY29udGVudCh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgcm1kaXIodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFNfSUZMTkspIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFNfSUZTT0NLKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBTX0lGUkVHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmsodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcmVlKHRtcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvc2VkaXIoZCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgcmVzZXRfcHJvZmlsZXIoKQoreworICAgIGVjaG8oIjEiLCBPUF9EUklWRVJfQkFTRSIvZHVtcCIpOworICAgIHVzbGVlcCgyNTAwMDApOworICAgIC8vIHNob3VsZCBlcmFzZSBhbGwgc2FtcGxlcworICAgIHJtX2Rpcl9jb250ZW50KE9QX0JBU0VfRElSKTsKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQgc3RhdHVzX3Byb2ZpbGVyKCkKK3sKKyAgICBpbnQgbnVtID0gcmVhZF9udW0oT1BfRFJJVkVSX0JBU0UiL2VuYWJsZSIpOworICAgIGlmIChudW0gPj0gMCkgeworICAgICAgICBwcmludGYoInByb2ZpbGVyICVzXG4iLCBudW0gPyAic3RhcnRlZCIgOiAibm90IHN0YXJ0ZWQiKTsKKyAgICAgICAgbnVtID0gcmVhZF9udW0oT1BfRFJJVkVSX0JBU0UiL3N0YXRzL2NwdTAvc2FtcGxlX3JlY2VpdmVkIik7CisgICAgICAgIHByaW50ZigiICAlOXUgc2FtcGxlcyByZWNlaXZlZFxuIiwgbnVtKTsKKyAgICAgICAgbnVtID0gcmVhZF9udW0oT1BfRFJJVkVSX0JBU0UiL3N0YXRzL2NwdTAvYmFja3RyYWNlX2Fib3J0ZWQiKTsKKyAgICAgICAgcHJpbnRmKCIgICU5dSBiYWNrdHJhY2UgYWJvcnRlZFxuIiwgbnVtKTsKKyAgICAgICAgbnVtID0gcmVhZF9udW0oT1BfRFJJVkVSX0JBU0UiL3N0YXRzL2NwdTAvc2FtcGxlX2xvc3Rfb3ZlcmZsb3ciKTsKKyAgICAgICAgcHJpbnRmKCIgICU5dSBzYW1wbGVzIGxvc3Qgb3ZlcmZsb3dcbiIsIG51bSk7CisgICAgICAgIG51bSA9IHJlYWRfbnVtKE9QX0RSSVZFUl9CQVNFIi9iYWNrdHJhY2VfZGVwdGgiKTsKKyAgICAgICAgcHJpbnRmKCIgICU5dSBiYWNrdHJhY2VfZGVwdGhcbiIsIG51bSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBwcmludGYoImNvdWxkbid0IGdldCBwcm9maWxpbmcgc3RhdHVzLCBpcyB0aGUgb3Byb2ZpbGUgZHJpdmVyIGluc3RhbGxlZD9cbiIpOworICAgIHJldHVybiAtMTsKKworfQorCitpbnQgZWNobyhjb25zdCBjaGFyKiBzdHIsIGNvbnN0IGNoYXIqIGZpbGUpCit7CisgICAgaW50IGZkID0gb3BlbihmaWxlLCBPX1dST05MWSk7CisgICAgaWYgKGZkPDApCisgICAgICAgIHJldHVybiBmZDsKKyAgICB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSk7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAwOworfQorCitpbnQgcmVhZF9udW0oY29uc3QgY2hhciogZmlsZSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyNTZdOworICAgIGludCBmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworICAgIGlmIChmZDwwKSByZXR1cm4gLTE7CisgICAgaW50IHJkID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKyAgICBidWZmZXJbcmRdID0gMDsKKyAgICByZXR1cm4gYXRvaShidWZmZXIpOworfQorCmRpZmYgLS1naXQgYS9wb3B0LmggYi9wb3B0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY4NWQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQuaApAQCAtMCwwICsxLDU2NCBAQAorLyoqIFxmaWxlIHBvcHQvcG9wdC5oCisgKiBcaW5ncm91cCBwb3B0CisgKi8KKworLyogKEMpIDE5OTgtMjAwMCBSZWQgSGF0LCBJbmMuIC0tIExpY2Vuc2luZyBkZXRhaWxzIGFyZSBpbiB0aGUgQ09QWUlORworICAgZmlsZSBhY2NvbXBhbnlpbmcgcG9wdCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgYXZhaWxhYmxlIGZyb20gCisgICBmdHA6Ly9mdHAucnBtLm9yZy9wdWIvcnBtL2Rpc3QuICovCisKKyNpZm5kZWYgSF9QT1BUCisjZGVmaW5lIEhfUE9QVAorCisjaW5jbHVkZSA8c3RkaW8uaD4JCQkvKiBmb3IgRklMRSAqICovCisKKyNkZWZpbmUgUE9QVF9PUFRJT05fREVQVEgJMTAKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxuYW1lIEFyZyB0eXBlIGlkZW50aWZpZXJzCisgKi8KKy8qQHsqLworI2RlZmluZSBQT1BUX0FSR19OT05FCQkwCS8qITwgbm8gYXJnICovCisjZGVmaW5lIFBPUFRfQVJHX1NUUklORwkJMQkvKiE8IGFyZyB3aWxsIGJlIHNhdmVkIGFzIHN0cmluZyAqLworI2RlZmluZSBQT1BUX0FSR19JTlQJCTIJLyohPCBhcmcgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gaW50ICovCisjZGVmaW5lIFBPUFRfQVJHX0xPTkcJCTMJLyohPCBhcmcgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gbG9uZyAqLworI2RlZmluZSBQT1BUX0FSR19JTkNMVURFX1RBQkxFCTQJLyohPCBhcmcgcG9pbnRzIHRvIHRhYmxlICovCisjZGVmaW5lIFBPUFRfQVJHX0NBTExCQUNLCTUJLyohPCB0YWJsZS13aWRlIGNhbGxiYWNrLi4uIG11c3QgYmUKKwkJCQkJICAgc2V0IGZpcnN0IGluIHRhYmxlOyBhcmcgcG9pbnRzIAorCQkJCQkgICB0byBjYWxsYmFjaywgZGVzY3JpcCBwb2ludHMgdG8gCisJCQkJCSAgIGNhbGxiYWNrIGRhdGEgdG8gcGFzcyAqLworI2RlZmluZSBQT1BUX0FSR19JTlRMX0RPTUFJTiAgICA2ICAgICAgIC8qITwgc2V0IHRoZSB0cmFuc2xhdGlvbiBkb21haW4KKwkJCQkJICAgZm9yIHRoaXMgdGFibGUgYW5kIGFueQorCQkJCQkgICBpbmNsdWRlZCB0YWJsZXM7IGFyZyBwb2ludHMKKwkJCQkJICAgdG8gdGhlIGRvbWFpbiBzdHJpbmcgKi8KKyNkZWZpbmUgUE9QVF9BUkdfVkFMCQk3CS8qITwgYXJnIHNob3VsZCB0YWtlIHZhbHVlIHZhbCAqLworI2RlZmluZQlQT1BUX0FSR19GTE9BVAkJOAkvKiE8IGFyZyB3aWxsIGJlIGNvbnZlcnRlZCB0byBmbG9hdCAqLworI2RlZmluZQlQT1BUX0FSR19ET1VCTEUJCTkJLyohPCBhcmcgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gZG91YmxlICovCisKKyNkZWZpbmUgUE9QVF9BUkdfTUFTSwkJMHgwMDAwRkZGRgorLypAfSovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcbmFtZSBBcmcgbW9kaWZpZXJzCisgKi8KKy8qQHsqLworI2RlZmluZSBQT1BUX0FSR0ZMQUdfT05FREFTSAkweDgwMDAwMDAwICAvKiE8IGFsbG93IC1sb25nb3B0aW9uICovCisjZGVmaW5lIFBPUFRfQVJHRkxBR19ET0NfSElEREVOIDB4NDAwMDAwMDAgIC8qITwgZG9uJ3Qgc2hvdyBpbiBoZWxwL3VzYWdlICovCisjZGVmaW5lIFBPUFRfQVJHRkxBR19TVFJJUAkweDIwMDAwMDAwICAvKiE8IHN0cmlwIHRoaXMgYXJnIGZyb20gYXJndihvbmx5IGFwcGxpZXMgdG8gbG9uZyBhcmdzKSAqLworI2RlZmluZQlQT1BUX0FSR0ZMQUdfT1BUSU9OQUwJMHgxMDAwMDAwMCAgLyohPCBhcmcgbWF5IGJlIG1pc3NpbmcgKi8KKworI2RlZmluZQlQT1BUX0FSR0ZMQUdfT1IJCTB4MDgwMDAwMDAgIC8qITwgYXJnIHdpbGwgYmUgb3InZWQgKi8KKyNkZWZpbmUJUE9QVF9BUkdGTEFHX05PUgkweDA5MDAwMDAwICAvKiE8IGFyZyB3aWxsIGJlIG5vcidlZCAqLworI2RlZmluZQlQT1BUX0FSR0ZMQUdfQU5ECTB4MDQwMDAwMDAgIC8qITwgYXJnIHdpbGwgYmUgYW5kJ2VkICovCisjZGVmaW5lCVBPUFRfQVJHRkxBR19OQU5ECTB4MDUwMDAwMDAgIC8qITwgYXJnIHdpbGwgYmUgbmFuZCdlZCAqLworI2RlZmluZQlQT1BUX0FSR0ZMQUdfWE9SCTB4MDIwMDAwMDAgIC8qITwgYXJnIHdpbGwgYmUgeG9yJ2VkICovCisjZGVmaW5lCVBPUFRfQVJHRkxBR19OT1QJMHgwMTAwMDAwMCAgLyohPCBhcmcgd2lsbCBiZSBuZWdhdGVkICovCisjZGVmaW5lIFBPUFRfQVJHRkxBR19MT0dJQ0FMT1BTIFwKKyAgICAgICAgKFBPUFRfQVJHRkxBR19PUnxQT1BUX0FSR0ZMQUdfQU5EfFBPUFRfQVJHRkxBR19YT1IpCisKKyNkZWZpbmUJUE9QVF9CSVRfU0VUCShQT1BUX0FSR19WQUx8UE9QVF9BUkdGTEFHX09SKQorCQkJCQkvKiE8IHNldCBhcmcgYml0KHMpICovCisjZGVmaW5lCVBPUFRfQklUX0NMUgkoUE9QVF9BUkdfVkFMfFBPUFRfQVJHRkxBR19OQU5EKQorCQkJCQkvKiE8IGNsZWFyIGFyZyBiaXQocykgKi8KKworI2RlZmluZQlQT1BUX0FSR0ZMQUdfU0hPV19ERUZBVUxUIDB4MDA4MDAwMDAgLyohPCBzaG93IGRlZmF1bHQgdmFsdWUgaW4gLS1oZWxwICovCisKKy8qQH0qLworCisvKiogXGluZ3JvdXAgcG9wdAorICogXG5hbWUgQ2FsbGJhY2sgbW9kaWZpZXJzCisgKi8KKy8qQHsqLworI2RlZmluZSBQT1BUX0NCRkxBR19QUkUJCTB4ODAwMDAwMDAgIC8qITwgY2FsbCB0aGUgY2FsbGJhY2sgYmVmb3JlIHBhcnNlICovCisjZGVmaW5lIFBPUFRfQ0JGTEFHX1BPU1QJMHg0MDAwMDAwMCAgLyohPCBjYWxsIHRoZSBjYWxsYmFjayBhZnRlciBwYXJzZSAqLworI2RlZmluZSBQT1BUX0NCRkxBR19JTkNfREFUQQkweDIwMDAwMDAwICAvKiE8IHVzZSBkYXRhIGZyb20gdGhlIGluY2x1ZGUgbGluZSwKKwkJCQkJICAgICAgIG5vdCB0aGUgc3VidGFibGUgKi8KKyNkZWZpbmUgUE9QVF9DQkZMQUdfU0tJUE9QVElPTgkweDEwMDAwMDAwICAvKiE8IGRvbid0IGNhbGxiYWNrIHdpdGggb3B0aW9uICovCisjZGVmaW5lIFBPUFRfQ0JGTEFHX0NPTlRJTlVFCTB4MDgwMDAwMDAgIC8qITwgY29udGludWUgY2FsbGJhY2tzIHdpdGggb3B0aW9uICovCisvKkB9Ki8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxuYW1lIEVycm9yIHJldHVybiB2YWx1ZXMKKyAqLworLypAeyovCisjZGVmaW5lIFBPUFRfRVJST1JfTk9BUkcJLTEwCS8qITwgbWlzc2luZyBhcmd1bWVudCAqLworI2RlZmluZSBQT1BUX0VSUk9SX0JBRE9QVAktMTEJLyohPCB1bmtub3duIG9wdGlvbiAqLworI2RlZmluZSBQT1BUX0VSUk9SX09QVFNUT09ERUVQCS0xMwkvKiE8IGFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkgKi8KKyNkZWZpbmUgUE9QVF9FUlJPUl9CQURRVU9URQktMTUJLyohPCBlcnJvciBpbiBwYXJhbXRlciBxdW90aW5nICovCisjZGVmaW5lIFBPUFRfRVJST1JfRVJSTk8JLTE2CS8qITwgZXJybm8gc2V0LCB1c2Ugc3RyZXJyb3IoZXJybm8pICovCisjZGVmaW5lIFBPUFRfRVJST1JfQkFETlVNQkVSCS0xNwkvKiE8IGludmFsaWQgbnVtZXJpYyB2YWx1ZSAqLworI2RlZmluZSBQT1BUX0VSUk9SX09WRVJGTE9XCS0xOAkvKiE8IG51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsICovCisjZGVmaW5lCVBPUFRfRVJST1JfQkFET1BFUkFUSU9OCS0xOQkvKiE8IG11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkICovCisjZGVmaW5lCVBPUFRfRVJST1JfTlVMTEFSRwktMjAJLyohPCBvcHQtPmFyZyBzaG91bGQgbm90IGJlIE5VTEwgKi8KKyNkZWZpbmUJUE9QVF9FUlJPUl9NQUxMT0MJLTIxCS8qITwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisvKkB9Ki8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxuYW1lIHBvcHRCYWRPcHRpb24oKSBmbGFncworICovCisvKkB7Ki8KKyNkZWZpbmUgUE9QVF9CQURPUFRJT05fTk9BTElBUyAgKDEgPDwgMCkgIC8qITwgZG9uJ3QgZ28gaW50byBhbiBhbGlhcyAqLworLypAfSovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcbmFtZSBwb3B0R2V0Q29udGV4dCgpIGZsYWdzCisgKi8KKy8qQHsqLworI2RlZmluZSBQT1BUX0NPTlRFWFRfTk9fRVhFQwkoMSA8PCAwKSAgLyohPCBpZ25vcmUgZXhlYyBleHBhbnNpb25zICovCisjZGVmaW5lIFBPUFRfQ09OVEVYVF9LRUVQX0ZJUlNUCSgxIDw8IDEpICAvKiE8IHBheSBhdHRlbnRpb24gdG8gYXJndlswXSAqLworI2RlZmluZSBQT1BUX0NPTlRFWFRfUE9TSVhNRUhBUkRFUiAoMSA8PCAyKSAvKiE8IG9wdGlvbnMgY2FuJ3QgZm9sbG93IGFyZ3MgKi8KKyNkZWZpbmUgUE9QVF9DT05URVhUX0FSR19PUFRTCSgxIDw8IDQpIC8qITwgcmV0dXJuIGFyZ3MgYXMgb3B0aW9ucyB3aXRoIHZhbHVlIDAgKi8KKy8qQH0qLworCisvKiogXGluZ3JvdXAgcG9wdAorICovCitzdHJ1Y3QgcG9wdE9wdGlvbiB7CisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovCisgICAgY29uc3QgY2hhciAqIGxvbmdOYW1lOwkvKiE8IG1heSBiZSBOVUxMICovCisgICAgY2hhciBzaG9ydE5hbWU7CQkvKiE8IG1heSBiZSBOVUwgKi8KKyAgICBpbnQgYXJnSW5mbzsKKy8qQHNoYXJlZEAqLyAvKkBudWxsQCovCisgICAgdm9pZCAqIGFyZzsJCQkvKiE8IGRlcGVuZHMgb24gYXJnSW5mbyAqLworICAgIGludCB2YWw7CQkJLyohPCAwIG1lYW5zIGRvbid0IHJldHVybiwganVzdCB1cGRhdGUgZmxhZyAqLworLypAb2JzZXJ2ZXJAKi8gLypAbnVsbEAqLworICAgIGNvbnN0IGNoYXIgKiBkZXNjcmlwOwkvKiE8IGRlc2NyaXB0aW9uIGZvciBhdXRvaGVscCAtLSBtYXkgYmUgTlVMTCAqLworLypAb2JzZXJ2ZXJAKi8gLypAbnVsbEAqLworICAgIGNvbnN0IGNoYXIgKiBhcmdEZXNjcmlwOwkvKiE8IGFyZ3VtZW50IGRlc2NyaXB0aW9uIGZvciBhdXRvaGVscCAqLworfTsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIEEgcG9wdCBhbGlhcyBhcmd1bWVudCBmb3IgcG9wdEFkZEFsaWFzKCkuCisgKi8KK3N0cnVjdCBwb3B0QWxpYXMgeworLypAb3duZWRAKi8gLypAbnVsbEAqLworICAgIGNvbnN0IGNoYXIgKiBsb25nTmFtZTsJLyohPCBtYXkgYmUgTlVMTCAqLworICAgIGNoYXIgc2hvcnROYW1lOwkJLyohPCBtYXkgYmUgTlVMICovCisgICAgaW50IGFyZ2M7CisvKkBvd25lZEAqLworICAgIGNvbnN0IGNoYXIgKiogYXJndjsJCS8qITwgbXVzdCBiZSBmcmVlKClhYmxlICovCit9OworCisvKiogXGluZ3JvdXAgcG9wdAorICogQSBwb3B0IGFsaWFzIG9yIGV4ZWMgYXJndW1lbnQgZm9yIHBvcHRBZGRJdGVtKCkuCisgKi8KKy8qQC1leHBvcnR0eXBlQCovCit0eXBlZGVmIHN0cnVjdCBwb3B0SXRlbV9zIHsKKyAgICBzdHJ1Y3QgcG9wdE9wdGlvbiBvcHRpb247CS8qITwgYWxpYXMvZXhlYyBuYW1lKHMpIGFuZCBkZXNjcmlwdGlvbi4gKi8KKyAgICBpbnQgYXJnYzsJCQkvKiE8IChhbGlhcykgbm8uIG9mIGFyZ3MuICovCisvKkBvd25lZEAqLworICAgIGNvbnN0IGNoYXIgKiogYXJndjsJCS8qITwgKGFsaWFzKSBhcmdzLCBtdXN0IGJlIGZyZWUoKWFibGUuICovCit9ICogcG9wdEl0ZW07CisvKkA9ZXhwb3J0dHlwZUAqLworCisvKiogXGluZ3JvdXAgcG9wdAorICogXG5hbWUgQXV0by1nZW5lcmF0ZWQgaGVscC91c2FnZQorICovCisvKkB7Ki8KKworLyoqCisgKiBFbXB0eSB0YWJsZSBtYXJrZXIgdG8gZW5hYmxlIGRpc3BsYXlpbmcgcG9wdCBhbGlhcy9leGVjIG9wdGlvbnMuCisgKi8KKy8qQC1leHBvcnR2YXJAKi8KKy8qQHVuY2hlY2tlZEAqLyAvKkBvYnNlcnZlckAqLworZXh0ZXJuIHN0cnVjdCBwb3B0T3B0aW9uIHBvcHRBbGlhc09wdGlvbnNbXTsKKy8qQD1leHBvcnR2YXJAKi8KKyNkZWZpbmUgUE9QVF9BVVRPQUxJQVMgeyBOVUxMLCAnXDAnLCBQT1BUX0FSR19JTkNMVURFX1RBQkxFLCBwb3B0QWxpYXNPcHRpb25zLCBcCisJCQkwLCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIsIE5VTEwgfSwKKworLyoqCisgKiBBdXRvIGhlbHAgdGFibGUgb3B0aW9ucy4KKyAqLworLypALWV4cG9ydHZhckAqLworLypAdW5jaGVja2VkQCovIC8qQG9ic2VydmVyQCovCitleHRlcm4gc3RydWN0IHBvcHRPcHRpb24gcG9wdEhlbHBPcHRpb25zW107CisvKkA9ZXhwb3J0dmFyQCovCisKKy8qQC1leHBvcnR2YXJAKi8KKy8qQHVuY2hlY2tlZEAqLyAvKkBvYnNlcnZlckAqLworZXh0ZXJuIHN0cnVjdCBwb3B0T3B0aW9uICogcG9wdEhlbHBPcHRpb25zSTE4TjsKKy8qQD1leHBvcnR2YXJAKi8KKworI2RlZmluZSBQT1BUX0FVVE9IRUxQIHsgTlVMTCwgJ1wwJywgUE9QVF9BUkdfSU5DTFVERV9UQUJMRSwgcG9wdEhlbHBPcHRpb25zLCBcCisJCQkwLCAiSGVscCBvcHRpb25zOiIsIE5VTEwgfSwKKworI2RlZmluZSBQT1BUX1RBQkxFRU5EIHsgTlVMTCwgJ1wwJywgMCwgMCwgMCwgTlVMTCwgTlVMTCB9CisvKkB9Ki8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqLworLypALWV4cG9ydHR5cGVAKi8KK3R5cGVkZWYgLypAYWJzdHJhY3RAKi8gc3RydWN0IHBvcHRDb250ZXh0X3MgKiBwb3B0Q29udGV4dDsKKy8qQD1leHBvcnR0eXBlQCovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qQC1leHBvcnR0eXBlIC10eXBldXNlQCovCit0eXBlZGVmIHN0cnVjdCBwb3B0T3B0aW9uICogcG9wdE9wdGlvbjsKKy8qQD1leHBvcnR0eXBlID10eXBldXNlQCovCisjZW5kaWYKKworLypALWV4cG9ydGNvbnN0QCovCitlbnVtIHBvcHRDYWxsYmFja1JlYXNvbiB7CisgICAgUE9QVF9DQUxMQkFDS19SRUFTT05fUFJFCT0gMCwgCisgICAgUE9QVF9DQUxMQkFDS19SRUFTT05fUE9TVAk9IDEsCisgICAgUE9QVF9DQUxMQkFDS19SRUFTT05fT1BUSU9OID0gMgorfTsKKy8qQD1leHBvcnRjb25zdEAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisvKkAtdHlwZUAqLworCisvKiogXGluZ3JvdXAgcG9wdAorICogVGFibGUgY2FsbGJhY2sgcHJvdG90eXBlLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIHJlYXNvbglyZWFzb24gZm9yIGNhbGxiYWNrCisgKiBAcGFyYW0gb3B0CQlvcHRpb24gdGhhdCB0cmlnZ2VyZWQgY2FsbGJhY2sKKyAqIEBwYXJhbSBhcmcJCUB0b2RvIERvY3VtZW50LgorICogQHBhcmFtIGRhdGEJCUB0b2RvIERvY3VtZW50LgorICovCit0eXBlZGVmIHZvaWQgKCpwb3B0Q2FsbGJhY2tUeXBlKSAocG9wdENvbnRleHQgY29uLCAKKwkJZW51bSBwb3B0Q2FsbGJhY2tSZWFzb24gcmVhc29uLAorCQkvKkBudWxsQCovIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogb3B0LAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiBhcmcsCisJCS8qQG51bGxAKi8gY29uc3Qgdm9pZCAqIGRhdGEpCisJLypAZ2xvYmFscyBpbnRlcm5hbFN0YXRlIEAqLworCS8qQG1vZGlmaWVzIGludGVybmFsU3RhdGUgQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogSW5pdGlhbGl6ZSBwb3B0IGNvbnRleHQuCisgKiBAcGFyYW0gbmFtZQkJY29udGV4dCBuYW1lICh1c3VhbGx5IGFyZ3ZbMF0gcHJvZ3JhbSBuYW1lKQorICogQHBhcmFtIGFyZ2MJCW5vLiBvZiBhcmd1bWVudHMKKyAqIEBwYXJhbSBhcmd2CQlhcmd1bWVudCBhcnJheQorICogQHBhcmFtIG9wdGlvbnMJYWRkcmVzcyBvZiBwb3B0IG9wdGlvbiB0YWJsZQorICogQHBhcmFtIGZsYWdzCQlvcidkIFBPUFRfQ09OVEVYVF8qIGJpdHMKKyAqIEByZXR1cm4JCWluaXRpYWxpemVkIHBvcHQgY29udGV4dAorICovCisvKkBvbmx5QCovIC8qQG51bGxAKi8KK3BvcHRDb250ZXh0IHBvcHRHZXRDb250ZXh0KAorCQkvKkBkZXBlbmRlbnRAKi8gLypAa2VlcEAqLyBjb25zdCBjaGFyICogbmFtZSwKKwkJaW50IGFyZ2MsIC8qQGRlcGVuZGVudEAqLyAvKkBrZWVwQCovIGNvbnN0IGNoYXIgKiogYXJndiwKKwkJLypAZGVwZW5kZW50QCovIC8qQGtlZXBAKi8gY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHRpb25zLAorCQlpbnQgZmxhZ3MpCisJLypAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZWluaXRpYWxpemUgcG9wdCBjb250ZXh0LgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICovCisvKkB1bnVzZWRAKi8KK3ZvaWQgcG9wdFJlc2V0Q29udGV4dCgvKkBudWxsQCovcG9wdENvbnRleHQgY29uKQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZXR1cm4gdmFsdWUgb2YgbmV4dCBvcHRpb24gZm91bmQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcmV0dXJuCQluZXh0IG9wdGlvbiB2YWwsIC0xIG9uIGxhc3QgaXRlbSwgUE9QVF9FUlJPUl8qIG9uIGVycm9yCisgKi8KK2ludCBwb3B0R2V0TmV4dE9wdCgvKkBudWxsQCovcG9wdENvbnRleHQgY29uKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyBjb24sIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmV0dXJuIG5leHQgb3B0aW9uIGFyZ3VtZW50IChpZiBhbnkpLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHJldHVybgkJb3B0aW9uIGFyZ3VtZW50LCBOVUxMIGlmIG5vIGFyZ3VtZW50IGlzIGF2YWlsYWJsZQorICovCisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovIC8qQHVudXNlZEAqLworY29uc3QgY2hhciAqIHBvcHRHZXRPcHRBcmcoLypAbnVsbEAqL3BvcHRDb250ZXh0IGNvbikKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmV0dXJuIG5leHQgYXJndW1lbnQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcmV0dXJuCQluZXh0IGFyZ3VtZW50LCBOVUxMIGlmIG5vIGFyZ3VtZW50IGlzIGF2YWlsYWJsZQorICovCisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovIC8qQHVudXNlZEAqLworY29uc3QgY2hhciAqIHBvcHRHZXRBcmcoLypAbnVsbEAqL3BvcHRDb250ZXh0IGNvbikKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUGVlayBhdCBjdXJyZW50IGFyZ3VtZW50LgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHJldHVybgkJY3VycmVudCBhcmd1bWVudCwgTlVMTCBpZiBubyBhcmd1bWVudCBpcyBhdmFpbGFibGUKKyAqLworLypAb2JzZXJ2ZXJAKi8gLypAbnVsbEAqLyAvKkB1bnVzZWRAKi8KK2NvbnN0IGNoYXIgKiBwb3B0UGVla0FyZygvKkBudWxsQCovcG9wdENvbnRleHQgY29uKQorCS8qQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmV0dXJuIHJlbWFpbmluZyBhcmd1bWVudHMuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcmV0dXJuCQlhcmd1bWVudCBhcnJheSwgTlVMTCB0ZXJtaW5hdGVkCisgKi8KKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8KK2NvbnN0IGNoYXIgKiogcG9wdEdldEFyZ3MoLypAbnVsbEAqL3BvcHRDb250ZXh0IGNvbikKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmV0dXJuIHRoZSBvcHRpb24gd2hpY2ggY2F1c2VkIHRoZSBtb3N0IHJlY2VudCBlcnJvci4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBmbGFncworICogQHJldHVybgkJb2ZmZW5kaW5nIG9wdGlvbgorICovCisvKkBvYnNlcnZlckAqLworY29uc3QgY2hhciAqIHBvcHRCYWRPcHRpb24oLypAbnVsbEAqL3BvcHRDb250ZXh0IGNvbiwgaW50IGZsYWdzKQorCS8qQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogRGVzdHJveSBjb250ZXh0LgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHJldHVybgkJTlVMTCBhbHdheXMKKyAqLworLypAbnVsbEAqLworcG9wdENvbnRleHQgcG9wdEZyZWVDb250ZXh0KCAvKkBvbmx5QCovIC8qQG51bGxAKi8gcG9wdENvbnRleHQgY29uKQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBBZGQgYXJndW1lbnRzIHRvIGNvbnRleHQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gYXJndgkJYXJndW1lbnQgYXJyYXksIE5VTEwgdGVybWluYXRlZAorICogQHJldHVybgkJMCBvbiBzdWNjZXNzLCBQT1BUX0VSUk9SX09QVFNUT09ERUVQIG9uIGZhaWx1cmUKKyAqLworLypAdW51c2VkQCovCitpbnQgcG9wdFN0dWZmQXJncyhwb3B0Q29udGV4dCBjb24sIC8qQGtlZXBAKi8gY29uc3QgY2hhciAqKiBhcmd2KQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBBZGQgYWxpYXMgdG8gY29udGV4dC4KKyAqIEB0b2RvIFBhc3MgYWxpYXMgYnkgcmVmZXJlbmNlLCBub3QgdmFsdWUuCisgKiBAZGVwcmVjYXRlZCBVc2UgcG9wdEFkZEl0ZW0gaW5zdGVhZC4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBhbGlhcwkJYWxpYXMgdG8gYWRkCisgKiBAcGFyYW0gZmxhZ3MJCSh1bnVzZWQpCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MKKyAqLworLypAdW51c2VkQCovCitpbnQgcG9wdEFkZEFsaWFzKHBvcHRDb250ZXh0IGNvbiwgc3RydWN0IHBvcHRBbGlhcyBhbGlhcywgaW50IGZsYWdzKQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBBZGQgYWxpYXMvZXhlYyBpdGVtIHRvIGNvbnRleHQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gbmV3SXRlbQlhbGlhcy9leGVjIGl0ZW0gdG8gYWRkCisgKiBAcGFyYW0gZmxhZ3MJCTAgZm9yIGFsaWFzLCAxIGZvciBleGVjCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MKKyAqLworaW50IHBvcHRBZGRJdGVtKHBvcHRDb250ZXh0IGNvbiwgcG9wdEl0ZW0gbmV3SXRlbSwgaW50IGZsYWdzKQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZWFkIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBmbgkJZmlsZSBuYW1lIHRvIHJlYWQKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9FUlJOTyBvbiBmYWlsdXJlCisgKi8KK2ludCBwb3B0UmVhZENvbmZpZ0ZpbGUocG9wdENvbnRleHQgY29uLCBjb25zdCBjaGFyICogZm4pCisJLypAZ2xvYmFscyBlcnJubywgZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyBjb24tPmV4ZWNzLCBjb24tPm51bUV4ZWNzLAorCQllcnJubywgZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZWFkIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIC9ldGMvcG9wdCBhbmQgJEhPTUUvLnBvcHQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gdXNlRW52CSh1bnVzZWQpCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MsIFBPUFRfRVJST1JfRVJSTk8gb24gZmFpbHVyZQorICovCisvKkB1bnVzZWRAKi8KK2ludCBwb3B0UmVhZERlZmF1bHRDb25maWcocG9wdENvbnRleHQgY29uLCAvKkB1bnVzZWRAKi8gaW50IHVzZUVudikKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgY29uLT5leGVjcywgY29uLT5udW1FeGVjcywKKwkJZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBEdXBsaWNhdGUgYW4gYXJndW1lbnQgYXJyYXkuCisgKiBAbm90ZTogVGhlIGFyZ3VtZW50IGFycmF5IGlzIG1hbGxvYydkIGFzIGEgc2luZ2xlIGFyZWEsIHNvIG9ubHkgYXJndiBtdXN0CisgKiBiZSBmcmVlJ2QuCisgKgorICogQHBhcmFtIGFyZ2MJCW5vLiBvZiBhcmd1bWVudHMKKyAqIEBwYXJhbSBhcmd2CQlhcmd1bWVudCBhcnJheQorICogQHJldHZhbCBhcmdjUHRyCWFkZHJlc3Mgb2YgcmV0dXJuZWQgbm8uIG9mIGFyZ3VtZW50cworICogQHJldHZhbCBhcmd2UHRyCWFkZHJlc3Mgb2YgcmV0dXJuZWQgYXJndW1lbnQgYXJyYXkKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9OT0FSRyBvbiBmYWlsdXJlCisgKi8KK2ludCBwb3B0RHVwQXJndihpbnQgYXJnYywgLypAbnVsbEAqLyBjb25zdCBjaGFyICoqYXJndiwKKwkJLypAbnVsbEAqLyAvKkBvdXRAKi8gaW50ICogYXJnY1B0ciwKKwkJLypAbnVsbEAqLyAvKkBvdXRAKi8gY29uc3QgY2hhciAqKiogYXJndlB0cikKKwkvKkBtb2RpZmllcyAqYXJnY1B0ciwgKmFyZ3ZQdHIgQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBhcmd1bWVudCBhcnJheS4KKyAqIFRoZSBwYXJzZSBhbGxvd3MgJywgIiwgYW5kIFwgcXVvdGluZywgYnV0ICcgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyAiIGFuZAorICogYm90aCBtYXkgaW5jbHVkZSBcIHF1b3Rlcy4KKyAqIEBub3RlOiBUaGUgYXJndW1lbnQgYXJyYXkgaXMgbWFsbG9jJ2QgYXMgYSBzaW5nbGUgYXJlYSwgc28gb25seSBhcmd2IG11c3QKKyAqIGJlIGZyZWUnZC4KKyAqCisgKiBAcGFyYW0gcwkJc3RyaW5nIHRvIHBhcnNlCisgKiBAcmV0dmFsIGFyZ2NQdHIJYWRkcmVzcyBvZiByZXR1cm5lZCBuby4gb2YgYXJndW1lbnRzCisgKiBAcmV0dmFsIGFyZ3ZQdHIJYWRkcmVzcyBvZiByZXR1cm5lZCBhcmd1bWVudCBhcnJheQorICovCitpbnQgcG9wdFBhcnNlQXJndlN0cmluZyhjb25zdCBjaGFyICogcywKKwkJLypAb3V0QCovIGludCAqIGFyZ2NQdHIsIC8qQG91dEAqLyBjb25zdCBjaGFyICoqKiBhcmd2UHRyKQorCS8qQG1vZGlmaWVzICphcmdjUHRyLCAqYXJndlB0ciBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBQYXJzZXMgYW4gaW5wdXQgY29uZmlndXJhdGlvbiBmaWxlIGFuZCByZXR1cm5zIGFuIHN0cmluZyB0aGF0IGlzIGEgCisgKiBjb21tYW5kIGxpbmUuICBGb3IgdXNlIHdpdGggcG9wdC4gIFlvdSBtdXN0IGZyZWUgdGhlIHJldHVybiB2YWx1ZSB3aGVuIGRvbmUuCisgKgorICogR2l2ZW4gdGhlIGZpbGU6CitcdmVyYmF0aW0KKyMgdGhpcyBsaW5lIGlzIGlnbm9yZWQKKyAgICAjICAgdGhpcyBvbmUgdG9vCithYWEKKyAgYmJiCisgICAgY2NjICAgCitibGE9YmxhCisKK3RoaXNfaXMgICA9ICAgZmRzYWZkYXMKKyAgICAgYmFkX2xpbmU9ICAgICAgICAKKyAgcmVhbGwgYmFkIGxpbmUgIAorICByZWFsbCBiYWQgbGluZSAgPSBhZ2FpbgorNTU1NT0gICA1NTU1NSAgIAorICB0ZXN0ID0gd2l0aCBsb3RzIG9mIHNwYWNlcworXGVuZHZlcmJhdGltCisqCisqIFRoZSByZXN1bHQgaXM6CitcdmVyYmF0aW0KKy0tYWFhIC0tYmJiIC0tY2NjIC0tYmxhPSJibGEiIC0tdGhpc19pcz0iZmRzYWZkYXMiIC0tNTU1NT0iNTU1NTUiIC0tdGVzdD0id2l0aCBsb3RzIG9mIHNwYWNlcyIKK1xlbmR2ZXJiYXRpbQorKgorKiBQYXNzaW5nIHRoaXMgdG8gcG9wdFBhcnNlQXJndlN0cmluZygpIHlpZWxkcyBhbiBhcmd2IG9mOgorXHZlcmJhdGltCisnLS1hYWEnCisnLS1iYmInIAorJy0tY2NjJyAKKyctLWJsYT1ibGEnIAorJy0tdGhpc19pcz1mZHNhZmRhcycgCisnLS01NTU1PTU1NTU1JyAKKyctLXRlc3Q9d2l0aCBsb3RzIG9mIHNwYWNlcycgCitcZW5kdmVyYmF0aW0KKyAqCisgKiBAYnVnIE5VTEwgaXMgcmV0dXJuZWQgaWYgZmlsZSBsaW5lIGlzIHRvbyBsb25nLgorICogQGJ1ZyBTaWxlbnRseSBpZ25vcmVzIGludmFsaWQgbGluZXMuCisgKgorICogQHBhcmFtIGZwCQlmaWxlIGhhbmRsZSB0byByZWFkCisgKiBAcGFyYW0gKmFyZ3N0cnAJcmV0dXJuIHN0cmluZyBvZiBvcHRpb25zIChtYWxsb2MnZCkKKyAqIEBwYXJhbSBmbGFncwkJdW51c2VkCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MKKyAqIEBzZWUJCQlwb3B0UGFyc2VBcmd2U3RyaW5nCisgKi8KKy8qQC1mY251c2VAKi8KK2ludCBwb3B0Q29uZmlnRmlsZVRvU3RyaW5nKEZJTEUgKmZwLCAvKkBvdXRAKi8gY2hhciAqKiBhcmdzdHJwLCBpbnQgZmxhZ3MpCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzICpmcCwgKmFyZ3N0cnAsIGZpbGVTeXN0ZW0gQCovOworLypAPWZjbnVzZUAqLworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmV0dXJuIGZvcm1hdHRlZCBlcnJvciBzdHJpbmcgZm9yIHBvcHQgZmFpbHVyZS4KKyAqIEBwYXJhbSBlcnJvcgkJcG9wdCBlcnJvcgorICogQHJldHVybgkJZXJyb3Igc3RyaW5nCisgKi8KKy8qQG9ic2VydmVyQCovCitjb25zdCBjaGFyICogcG9wdFN0cmVycm9yKGNvbnN0IGludCBlcnJvcikKKwkvKkAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIExpbWl0IHNlYXJjaCBmb3IgZXhlY3V0YWJsZXMuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gcGF0aAkJc2luZ2xlIHBhdGggdG8gc2VhcmNoIGZvciBleGVjdXRhYmxlcworICogQHBhcmFtIGFsbG93QWJzb2x1dGUJYWJzb2x1dGUgcGF0aHMgb25seT8KKyAqLworLypAdW51c2VkQCovCit2b2lkIHBvcHRTZXRFeGVjUGF0aChwb3B0Q29udGV4dCBjb24sIGNvbnN0IGNoYXIgKiBwYXRoLCBpbnQgYWxsb3dBYnNvbHV0ZSkKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUHJpbnQgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2Ygb3B0aW9ucy4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBmcAkJb3VwdXQgZmlsZSBoYW5kbGUKKyAqIEBwYXJhbSBmbGFncwkJKHVudXNlZCkKKyAqLwordm9pZCBwb3B0UHJpbnRIZWxwKHBvcHRDb250ZXh0IGNvbiwgRklMRSAqIGZwLCAvKkB1bnVzZWRAKi8gaW50IGZsYWdzKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSBAKi8KKwkvKkBtb2RpZmllcyAqZnAsIGZpbGVTeXN0ZW0gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUHJpbnQgdGVyc2UgZGVzY3JpcHRpb24gb2Ygb3B0aW9ucy4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBmcAkJb3VwdXQgZmlsZSBoYW5kbGUKKyAqIEBwYXJhbSBmbGFncwkJKHVudXNlZCkKKyAqLwordm9pZCBwb3B0UHJpbnRVc2FnZShwb3B0Q29udGV4dCBjb24sIEZJTEUgKiBmcCwgLypAdW51c2VkQCovIGludCBmbGFncykKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCisJLypAbW9kaWZpZXMgKmZwLCBmaWxlU3lzdGVtIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFByb3ZpZGUgdGV4dCB0byByZXBsYWNlIGRlZmF1bHQgIltPUFRJT04uLi5dIiBpbiBoZWxwL3VzYWdlIG91dHB1dC4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSB0ZXh0CQlyZXBsYWNlbWVudCB0ZXh0CisgKi8KKy8qQC1mY251c2VAKi8KK3ZvaWQgcG9wdFNldE90aGVyT3B0aW9uSGVscChwb3B0Q29udGV4dCBjb24sIGNvbnN0IGNoYXIgKiB0ZXh0KQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisvKkA9ZmNudXNlQCovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZXR1cm4gYXJndlswXSBmcm9tIGNvbnRleHQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcmV0dXJuCQlhcmd2WzBdCisgKi8KKy8qQC1mY251c2VAKi8KKy8qQG9ic2VydmVyQCovCitjb25zdCBjaGFyICogcG9wdEdldEludm9jYXRpb25OYW1lKHBvcHRDb250ZXh0IGNvbikKKwkvKkAqLzsKKy8qQD1mY251c2VAKi8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFNodWZmbGUgYXJndiBwb2ludGVycyB0byByZW1vdmUgc3RyaXBwZWQgYXJncywgcmV0dXJucyBuZXcgYXJnYy4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBhcmdjCQluby4gb2YgYXJncworICogQHBhcmFtIGFyZ3YJCWFyZyB2ZWN0b3IKKyAqIEByZXR1cm4JCW5ldyBhcmdjCisgKi8KKy8qQC1mY251c2VAKi8KK2ludCBwb3B0U3RyaXBwZWRBcmd2KHBvcHRDb250ZXh0IGNvbiwgaW50IGFyZ2MsIGNoYXIgKiogYXJndikKKwkvKkBtb2RpZmllcyAqYXJndiBAKi87CisvKkA9ZmNudXNlQCovCisKKy8qKgorICogU2F2ZSBhIGxvbmcsIHBlcmZvcm1pbmcgbG9naWNhbCBvcGVyYXRpb24gd2l0aCB2YWx1ZS4KKyAqIEB3YXJuaW5nIEFsaWdubWVudCBjaGVjayBtYXkgYmUgdG9vIHN0cmljdCBvbiBjZXJ0YWluIHBsYXRvcm1zLgorICogQHBhcmFtIGFyZwkJaW50ZWdlciBwb2ludGVyLCBhbGlnbmVkIG9uIGludCBib3VuZGFyeS4KKyAqIEBwYXJhbSBhcmdJbmZvCWxvZ2ljYWwgb3BlcmF0aW9uIChzZWUgUE9QVF9BUkdGTEFHXyopCisgKiBAcGFyYW0gYUxvbmcJCXZhbHVlIHRvIHVzZQorICogQHJldHVybgkJMCBvbiBzdWNjZXNzLCBQT1BUX0VSUk9SX05VTExBUkcvUE9QVF9FUlJPUl9CQURPUEVSQVRJT04KKyAqLworLypALWluY29uZGVmc0AqLworLypAdW51c2VkQCovCitpbnQgcG9wdFNhdmVMb25nKC8qQG51bGxAKi8gbG9uZyAqIGFyZywgaW50IGFyZ0luZm8sIGxvbmcgYUxvbmcpCisJLypAbW9kaWZpZXMgKmFyZyBAKi8KKwkvKkByZXF1aXJlcyBtYXhTZXQoYXJnKSA+PSAwIC9cIG1heFJlYWQoYXJnKSA9PSAwIEAqLzsKKy8qQD1pbmNvbmRlZnNAKi8KKworLyoqCisgKiBTYXZlIGFuIGludGVnZXIsIHBlcmZvcm1pbmcgbG9naWNhbCBvcGVyYXRpb24gd2l0aCB2YWx1ZS4KKyAqIEB3YXJuaW5nIEFsaWdubWVudCBjaGVjayBtYXkgYmUgdG9vIHN0cmljdCBvbiBjZXJ0YWluIHBsYXRvcm1zLgorICogQHBhcmFtIGFyZwkJaW50ZWdlciBwb2ludGVyLCBhbGlnbmVkIG9uIGludCBib3VuZGFyeS4KKyAqIEBwYXJhbSBhcmdJbmZvCWxvZ2ljYWwgb3BlcmF0aW9uIChzZWUgUE9QVF9BUkdGTEFHXyopCisgKiBAcGFyYW0gYUxvbmcJCXZhbHVlIHRvIHVzZQorICogQHJldHVybgkJMCBvbiBzdWNjZXNzLCBQT1BUX0VSUk9SX05VTExBUkcvUE9QVF9FUlJPUl9CQURPUEVSQVRJT04KKyAqLworLypALWluY29uZGVmc0AqLworLypAdW51c2VkQCovCitpbnQgcG9wdFNhdmVJbnQoLypAbnVsbEAqLyBpbnQgKiBhcmcsIGludCBhcmdJbmZvLCBsb25nIGFMb25nKQorCS8qQG1vZGlmaWVzICphcmcgQCovCisJLypAcmVxdWlyZXMgbWF4U2V0KGFyZykgPj0gMCAvXCBtYXhSZWFkKGFyZykgPT0gMCBAKi87CisvKkA9aW5jb25kZWZzQCovCisKKy8qQD10eXBlQCovCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9wcC9NYWtlZmlsZS5hbSBiL3BwL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDM2NDczLi4wMDAwMDAwCi0tLSBhL3BwL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotQU1fQ1BQRkxBR1MgPSBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYmRiIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYm9wdCsrIFwKLQktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJyZWdleCBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJwcAotCi1BTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKLQotYmluX1BST0dSQU1TID0gb3ByZXBvcnQgb3Bhbm5vdGF0ZSBvcGdwcm9mIG9wYXJjaGl2ZQotCi1MSUJTPUBQT1BUX0xJQlNAIEBCRkRfTElCU0AKLQotcHBfY29tbW9uID0gY29tbW9uX29wdGlvbi5jcHAgY29tbW9uX29wdGlvbi5oCi0KLWNvbW1vbl9saWJzID0gIFwKLQkuLi9saWJwcC9saWJwcC5hIFwKLQkuLi9saWJvcHQrKy9saWJvcHQrKy5hIFwKLQkuLi9saWJyZWdleC9saWJvcF9yZWdleC5hIFwKLQkuLi9saWJ1dGlsKysvbGlidXRpbCsrLmEgXAotCS4uL2xpYm9wL2xpYm9wLmEgXAotCS4uL2xpYnV0aWwvbGlidXRpbC5hIFwKLQkuLi9saWJkYi9saWJvZGIuYQotCi1vcHJlcG9ydF9TT1VSQ0VTID0gb3ByZXBvcnQuY3BwIFwKLQlvcHJlcG9ydF9vcHRpb25zLmggb3ByZXBvcnRfb3B0aW9ucy5jcHAgXAotCSQocHBfY29tbW9uKQotb3ByZXBvcnRfTERBREQgPSAkKGNvbW1vbl9saWJzKQotCi1vcGFubm90YXRlX1NPVVJDRVMgPSBvcGFubm90YXRlLmNwcCBcCi0Jb3Bhbm5vdGF0ZV9vcHRpb25zLmggb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcCBcCi0JJChwcF9jb21tb24pCi1vcGFubm90YXRlX0xEQUREID0gJChjb21tb25fbGlicykKLQotb3BncHJvZl9TT1VSQ0VTID0gb3BncHJvZi5jcHAgXAotCW9wZ3Byb2Zfb3B0aW9ucy5oIG9wZ3Byb2Zfb3B0aW9ucy5jcHAgXAotCSQocHBfY29tbW9uKQotb3BncHJvZl9MREFERCA9ICQoY29tbW9uX2xpYnMpCi0KLW9wYXJjaGl2ZV9TT1VSQ0VTID0gb3BhcmNoaXZlLmNwcCBcCi0Jb3BhcmNoaXZlX29wdGlvbnMuaCBvcGFyY2hpdmVfb3B0aW9ucy5jcHAgXAotCSQocHBfY29tbW9uKQotb3BhcmNoaXZlX0xEQUREID0gJChjb21tb25fbGlicykKZGlmZiAtLWdpdCBhL3BwL01ha2VmaWxlLmluIGIvcHAvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjOTFkMGEuLjAwMDAwMDAKLS0tIGEvcHAvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1MzQgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1TT1VSQ0VTID0gJChvcGFubm90YXRlX1NPVVJDRVMpICQob3BhcmNoaXZlX1NPVVJDRVMpICQob3BncHJvZl9TT1VSQ0VTKSAkKG9wcmVwb3J0X1NPVVJDRVMpCi0KLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSBASU5TVEFMTEAKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJpbl9QUk9HUkFNUyA9IG9wcmVwb3J0JChFWEVFWFQpIG9wYW5ub3RhdGUkKEVYRUVYVCkgb3BncHJvZiQoRVhFRVhUKSBcCi0Jb3BhcmNoaXZlJChFWEVFWFQpCi1zdWJkaXIgPSBwcAotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiCi1iaW5QUk9HUkFNU19JTlNUQUxMID0gJChJTlNUQUxMX1BST0dSQU0pCi1QUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQotYW1fX29iamVjdHNfMSA9IGNvbW1vbl9vcHRpb24uJChPQkpFWFQpCi1hbV9vcGFubm90YXRlX09CSkVDVFMgPSBvcGFubm90YXRlLiQoT0JKRVhUKSBcCi0Jb3Bhbm5vdGF0ZV9vcHRpb25zLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCi1vcGFubm90YXRlX09CSkVDVFMgPSAkKGFtX29wYW5ub3RhdGVfT0JKRUNUUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9IC4uL2xpYnBwL2xpYnBwLmEgLi4vbGlib3B0KysvbGlib3B0KysuYSBcCi0JLi4vbGlicmVnZXgvbGlib3BfcmVnZXguYSAuLi9saWJ1dGlsKysvbGlidXRpbCsrLmEgXAotCS4uL2xpYm9wL2xpYm9wLmEgLi4vbGlidXRpbC9saWJ1dGlsLmEgLi4vbGliZGIvbGlib2RiLmEKLW9wYW5ub3RhdGVfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9vcGFyY2hpdmVfT0JKRUNUUyA9IG9wYXJjaGl2ZS4kKE9CSkVYVCkgb3BhcmNoaXZlX29wdGlvbnMuJChPQkpFWFQpIFwKLQkkKGFtX19vYmplY3RzXzEpCi1vcGFyY2hpdmVfT0JKRUNUUyA9ICQoYW1fb3BhcmNoaXZlX09CSkVDVFMpCi1vcGFyY2hpdmVfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9vcGdwcm9mX09CSkVDVFMgPSBvcGdwcm9mLiQoT0JKRVhUKSBvcGdwcm9mX29wdGlvbnMuJChPQkpFWFQpIFwKLQkkKGFtX19vYmplY3RzXzEpCi1vcGdwcm9mX09CSkVDVFMgPSAkKGFtX29wZ3Byb2ZfT0JKRUNUUykKLW9wZ3Byb2ZfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9vcHJlcG9ydF9PQkpFQ1RTID0gb3ByZXBvcnQuJChPQkpFWFQpIG9wcmVwb3J0X29wdGlvbnMuJChPQkpFWFQpIFwKLQkkKGFtX19vYmplY3RzXzEpCi1vcHJlcG9ydF9PQkpFQ1RTID0gJChhbV9vcHJlcG9ydF9PQkpFQ1RTKQotb3ByZXBvcnRfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAotCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCi1DWFhMRCA9ICQoQ1hYKQotQ1hYTElOSyA9ICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLVNPVVJDRVMgPSAkKG9wYW5ub3RhdGVfU09VUkNFUykgJChvcGFyY2hpdmVfU09VUkNFUykgXAotCSQob3BncHJvZl9TT1VSQ0VTKSAkKG9wcmVwb3J0X1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKG9wYW5ub3RhdGVfU09VUkNFUykgJChvcGFyY2hpdmVfU09VUkNFUykgXAotCSQob3BncHJvZl9TT1VSQ0VTKSAkKG9wcmVwb3J0X1NPVVJDRVMpCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACi1BTVRBUiA9IEBBTVRBUkAKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkZEX0xJQlMgPSBAQkZEX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFURSA9IEBEQVRFQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVYRUVYVCA9IEBFWEVFWFRACi1FWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUtJTkMgPSBAS0lOQ0AKLUtTUkMgPSBAS1NSQ0AKLUtWRVJTID0gQEtWRVJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBQT1BUX0xJQlNAIEBCRkRfTElCU0AKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1PQyA9IEBNT0NACi1NT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACi1PQkpFWFQgPSBAT0JKRVhUQAotT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKLU9QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAotT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLU9QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAotT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBPUFRfTElCUyA9IEBQT1BUX0xJQlNACi1QVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKLVFUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAotUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAotUVRfTElCID0gQFFUX0xJQkAKLVFUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACi1TVFJJUCA9IEBTVFJJUEAKLVVJQyA9IEBVSUNACi1WRVJTSU9OID0gQFZFUlNJT05ACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACi1YX0xJQlMgPSBAWF9MSUJTQAotWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1kYXRhZGlyID0gQGRhdGFkaXJACi1lbmFibGVfYWJpX0ZBTFNFID0gQGVuYWJsZV9hYmlfRkFMU0VACi1lbmFibGVfYWJpX1RSVUUgPSBAZW5hYmxlX2FiaV9UUlVFQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1oYXZlX3F0X0ZBTFNFID0gQGhhdmVfcXRfRkFMU0VACi1oYXZlX3F0X1RSVUUgPSBAaGF2ZV9xdF9UUlVFQAotaGF2ZV94c2x0cHJvY19GQUxTRSA9IEBoYXZlX3hzbHRwcm9jX0ZBTFNFQAotaGF2ZV94c2x0cHJvY19UUlVFID0gQGhhdmVfeHNsdHByb2NfVFJVRUAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWtlcm5lbF9zdXBwb3J0X0ZBTFNFID0gQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAota2VybmVsX3N1cHBvcnRfVFJVRSA9IEBrZXJuZWxfc3VwcG9ydF9UUlVFQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdG9wZGlyID0gQHRvcGRpckAKLUFNX0NQUEZMQUdTID0gXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKyBcCi0JLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlicmVnZXggXAotCS1JICR7dG9wX3NyY2Rpcn0vbGlicHAKLQotQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1wcF9jb21tb24gPSBjb21tb25fb3B0aW9uLmNwcCBjb21tb25fb3B0aW9uLmgKLWNvbW1vbl9saWJzID0gXAotCS4uL2xpYnBwL2xpYnBwLmEgXAotCS4uL2xpYm9wdCsrL2xpYm9wdCsrLmEgXAotCS4uL2xpYnJlZ2V4L2xpYm9wX3JlZ2V4LmEgXAotCS4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYSBcCi0JLi4vbGlib3AvbGlib3AuYSBcCi0JLi4vbGlidXRpbC9saWJ1dGlsLmEgXAotCS4uL2xpYmRiL2xpYm9kYi5hCi0KLW9wcmVwb3J0X1NPVVJDRVMgPSBvcHJlcG9ydC5jcHAgXAotCW9wcmVwb3J0X29wdGlvbnMuaCBvcHJlcG9ydF9vcHRpb25zLmNwcCBcCi0JJChwcF9jb21tb24pCi0KLW9wcmVwb3J0X0xEQUREID0gJChjb21tb25fbGlicykKLW9wYW5ub3RhdGVfU09VUkNFUyA9IG9wYW5ub3RhdGUuY3BwIFwKLQlvcGFubm90YXRlX29wdGlvbnMuaCBvcGFubm90YXRlX29wdGlvbnMuY3BwIFwKLQkkKHBwX2NvbW1vbikKLQotb3Bhbm5vdGF0ZV9MREFERCA9ICQoY29tbW9uX2xpYnMpCi1vcGdwcm9mX1NPVVJDRVMgPSBvcGdwcm9mLmNwcCBcCi0Jb3BncHJvZl9vcHRpb25zLmggb3BncHJvZl9vcHRpb25zLmNwcCBcCi0JJChwcF9jb21tb24pCi0KLW9wZ3Byb2ZfTERBREQgPSAkKGNvbW1vbl9saWJzKQotb3BhcmNoaXZlX1NPVVJDRVMgPSBvcGFyY2hpdmUuY3BwIFwKLQlvcGFyY2hpdmVfb3B0aW9ucy5oIG9wYXJjaGl2ZV9vcHRpb25zLmNwcCBcCi0JJChwcF9jb21tb24pCi0KLW9wYXJjaGl2ZV9MREFERCA9ICQoY29tbW9uX2xpYnMpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jcHAgLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgcHAvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBwL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotaW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChiaW5kaXIpIgotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIHAxPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JICBpZiB0ZXN0IC1mICQkcCBcCi0JICA7IHRoZW4gXAotCSAgICBmPWBlY2hvICIkJHAxIiB8IHNlZCAncyxeLiovLCw7JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCi0JICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAnJCRwJyAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAotCSAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAiJCRwIiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWJpblBST0dSQU1TOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj1gZWNobyAiJCRwIiB8IHNlZCAncyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1iaW5QUk9HUkFNUzoKLQktdGVzdCAteiAiJChiaW5fUFJPR1JBTVMpIiB8fCBybSAtZiAkKGJpbl9QUk9HUkFNUykKLW9wYW5ub3RhdGUkKEVYRUVYVCk6ICQob3Bhbm5vdGF0ZV9PQkpFQ1RTKSAkKG9wYW5ub3RhdGVfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgb3Bhbm5vdGF0ZSQoRVhFRVhUKQotCSQoQ1hYTElOSykgJChvcGFubm90YXRlX0xERkxBR1MpICQob3Bhbm5vdGF0ZV9PQkpFQ1RTKSAkKG9wYW5ub3RhdGVfTERBREQpICQoTElCUykKLW9wYXJjaGl2ZSQoRVhFRVhUKTogJChvcGFyY2hpdmVfT0JKRUNUUykgJChvcGFyY2hpdmVfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgb3BhcmNoaXZlJChFWEVFWFQpCi0JJChDWFhMSU5LKSAkKG9wYXJjaGl2ZV9MREZMQUdTKSAkKG9wYXJjaGl2ZV9PQkpFQ1RTKSAkKG9wYXJjaGl2ZV9MREFERCkgJChMSUJTKQotb3BncHJvZiQoRVhFRVhUKTogJChvcGdwcm9mX09CSkVDVFMpICQob3BncHJvZl9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBvcGdwcm9mJChFWEVFWFQpCi0JJChDWFhMSU5LKSAkKG9wZ3Byb2ZfTERGTEFHUykgJChvcGdwcm9mX09CSkVDVFMpICQob3BncHJvZl9MREFERCkgJChMSUJTKQotb3ByZXBvcnQkKEVYRUVYVCk6ICQob3ByZXBvcnRfT0JKRUNUUykgJChvcHJlcG9ydF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBvcHJlcG9ydCQoRVhFRVhUKQotCSQoQ1hYTElOSykgJChvcHJlcG9ydF9MREZMQUdTKSAkKG9wcmVwb3J0X09CSkVDVFMpICQob3ByZXBvcnRfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NvbW1vbl9vcHRpb24uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wYW5ub3RhdGUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wYW5ub3RhdGVfb3B0aW9ucy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BhcmNoaXZlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGFyY2hpdmVfb3B0aW9ucy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BncHJvZi5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BncHJvZl9vcHRpb25zLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcHJlcG9ydC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3ByZXBvcnRfb3B0aW9ucy5Qb0BhbV9fcXVvdGVACi0KLS5jcHAubzoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAlpZiAkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uY3BwLm9iajoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAlpZiAkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLXVuaW5zdGFsbC1pbmZvLWFtOgotCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCi0KLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCi0JZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1iaW5QUk9HUkFNUwotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYwotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLWluZm8tYW0KLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWJpblBST0dSQU1TIFwKLQljbGVhbi1nZW5lcmljIGN0YWdzIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCi0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWJpblBST0dSQU1TIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIFwKLQl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWJpblBST0dSQU1TIHVuaW5zdGFsbC1pbmZvLWFtCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BwL2NvbW1vbl9vcHRpb24uY3BwIGIvcHAvY29tbW9uX29wdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YTk3MWQuLjAwMDAwMDAKLS0tIGEvcHAvY29tbW9uX29wdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjb21tb25fb3B0aW9uLmNwcAotICogQ29udGFpbnMgY29tbW9uIG9wdGlvbnMgYW5kIGltcGxlbWVudGF0aW9uIG9mIGVudHJ5IHBvaW50IG9mIHBwIHRvb2xzCi0gKiBhbmQgc29tZSBtaXNjZWxsZWFuZW91cyBmdW5jdGlvbnMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+Ci0KLSNpbmNsdWRlICJsb2NhdGVfaW1hZ2VzLmgiCi0jaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAicG9wdF9vcHRpb25zLmgiCi0jaW5jbHVkZSAiY3ZlcmIuaCIKLSNpbmNsdWRlICJjb21tb25fb3B0aW9uLmgiCi0jaW5jbHVkZSAiZmlsZV9tYW5pcC5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2Ugb3B0aW9ucyB7Ci0JZXh0cmFfaW1hZ2VzIGV4dHJhX2ZvdW5kX2ltYWdlczsKLQlkb3VibGUgdGhyZXNob2xkID0gMC4wOwotCXN0cmluZyB0aHJlc2hvbGRfb3B0OwotfQotCi1uYW1lc3BhY2UgewotCi12ZWN0b3I8c3RyaW5nPiBpbWFnZV9wYXRoOwotdmVjdG9yPHN0cmluZz4gdmVyYm9zZV9zdHJpbmdzOwotCi1wb3B0OjpvcHRpb24gY29tbW9uX29wdGlvbnNfYXJyYXlbXSA9IHsKLQlwb3B0OjpvcHRpb24odmVyYm9zZV9zdHJpbmdzLCAidmVyYm9zZSIsICdWJywKLQkJICAgICAvLyBGSVhNRSBoZWxwIHN0cmluZyBmb3IgdmVyYm9zZSBsZXZlbAotCQkgICAgICJ2ZXJib3NlIG91dHB1dCIsICJhbGwsZGVidWcsYmZkLGxldmVsMSxzZmlsZSxzdGF0cyIpLAotCXBvcHQ6Om9wdGlvbihpbWFnZV9wYXRoLCAiaW1hZ2UtcGF0aCIsICdwJywKLQkJICAgICAiY29tbWEtc2VwYXJhdGVkIHBhdGggdG8gc2VhcmNoIG1pc3NpbmcgYmluYXJpZXMiLCAicGF0aCIpLAotfTsKLQotCi1kb3VibGUgaGFuZGxlX3RocmVzaG9sZChzdHJpbmcgdGhyZXNob2xkKQotewotCWRvdWJsZSB2YWx1ZSA9IDAuMDsKLQotCWlmICh0aHJlc2hvbGQubGVuZ3RoKCkpIHsKLQkJaXN0cmluZ3N0cmVhbSBzcyh0aHJlc2hvbGQpOwotCQlpZiAoIShzcyA+PiB2YWx1ZSkpIHsKLQkJCWNlcnIgPDwgImlsbGVnYWwgdGhyZXNob2xkIHZhbHVlOiAiIDw8IHRocmVzaG9sZAotCQkJICAgICA8PCAiIGFsbG93ZWQgcmFuZ2U6IFswLTEwMF0iIDw8IGVuZGw7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQotCQlpZiAodmFsdWUgPCAwLjAgfHwgdmFsdWUgPiAxMDAuMCkgewotCQkJY2VyciA8PCAiaWxsZWdhbCB0aHJlc2hvbGQgdmFsdWU6ICIgPDwgdGhyZXNob2xkCi0JCQkgICAgIDw8ICIgYWxsb3dlZCByYW5nZTogWzAtMTAwXSIgPDwgZW5kbDsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCX0KLQotCWN2ZXJiIDw8IHZkZWJ1ZyA8PCAidGhyZXNob2xkOiAiIDw8IHZhbHVlIDw8IGVuZGw7OwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0KLXZlY3RvcjxzdHJpbmc+IHByZV9wYXJzZV9zcGVjKHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgbm9uX29wdGlvbnMpCi17Ci0JdmVjdG9yPHN0cmluZz4gcmVzdWx0OwotCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub25fb3B0aW9ucy5zaXplKCk7ICsraSkgewotCQlpZiAobm9uX29wdGlvbnNbaV0gPT0gInt9IikgewotCQkJcmVzdWx0LnB1c2hfYmFjaygieyIpOwotCQkJcmVzdWx0LnB1c2hfYmFjaygifSIpOwotCQl9IGVsc2UgewotCQkJcmVzdWx0LnB1c2hfYmFjayhub25fb3B0aW9uc1tpXSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0KLW9wdGlvbnM6OnNwZWMgY29uc3QgcGFyc2Vfc3BlYyh2ZWN0b3I8c3RyaW5nPiBub25fb3B0aW9ucykKLXsKLQlib29sIGluX2ZpcnN0ID0gZmFsc2U7Ci0JYm9vbCBpbl9zZWNvbmQgPSBmYWxzZTsKLQlib29sIGZpcnN0ID0gZmFsc2U7Ci0JYm9vbCBzZWNvbmQgPSBmYWxzZTsKLQlvcHRpb25zOjpzcGVjIHBzcGVjOwotCi0Jbm9uX29wdGlvbnMgPSBwcmVfcGFyc2Vfc3BlYyhub25fb3B0aW9ucyk7Ci0KLQl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub25fb3B0aW9ucy5iZWdpbigpOwotCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBub25fb3B0aW9ucy5lbmQoKTsKLQotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJaWYgKCppdCA9PSAieyIpIHsKLQkJCWlmIChpbl9maXJzdCB8fCBpbl9zZWNvbmQgfHwgc2Vjb25kKQotCQkJCWdvdG8gZmFpbDsKLQkJCWlmIChmaXJzdCkgewotCQkJCWluX3NlY29uZCA9IHRydWU7Ci0JCQkJc2Vjb25kID0gdHJ1ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJaW5fZmlyc3QgPSB0cnVlOwotCQkJCWZpcnN0ID0gdHJ1ZTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9IAotCi0JCWlmICgqaXQgPT0gIn0iKSB7Ci0JCQlpZiAoaW5fZmlyc3QpIHsKLQkJCQlpbl9maXJzdCA9IGZhbHNlOwotCQkJfSBlbHNlIGlmIChpbl9zZWNvbmQpIHsKLQkJCQlpbl9zZWNvbmQgPSBmYWxzZTsKLQkJCX0gZWxzZSB7Ci0JCQkJZ290byBmYWlsOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoaW5fZmlyc3QpIHsKLQkJCXBzcGVjLmZpcnN0LnB1c2hfYmFjaygqaXQpOwotCQl9IGVsc2UgaWYgKGluX3NlY29uZCkgewotCQkJcHNwZWMuc2Vjb25kLnB1c2hfYmFjaygqaXQpOwotCQl9IGVsc2UgewotCQkJcHNwZWMuY29tbW9uLnB1c2hfYmFjaygqaXQpOwotCQl9Ci0JfQotCi0JaWYgKGluX2ZpcnN0IHx8IGluX3NlY29uZCB8fCAoZmlyc3QgJiYgIXNlY29uZCkpCi0JCWdvdG8gZmFpbDsKLQotCWlmIChwc3BlYy5maXJzdC5lbXB0eSgpICYmIHBzcGVjLnNlY29uZC5zaXplKCkpCi0JCWdvdG8gZmFpbDsKLQotCWlmIChmaXJzdCAmJiBzZWNvbmQpIHsKLQkJcHNwZWMuZmlyc3QuaW5zZXJ0KHBzcGVjLmZpcnN0LmJlZ2luKCksIHBzcGVjLmNvbW1vbi5iZWdpbigpLAotCQkgICAgICAgICAgICAgICAgICAgcHNwZWMuY29tbW9uLmVuZCgpKTsKLQkJcHNwZWMuc2Vjb25kLmluc2VydChwc3BlYy5zZWNvbmQuYmVnaW4oKSwgcHNwZWMuY29tbW9uLmJlZ2luKCksCi0JCSAgICAgICAgICAgICAgICAgICBwc3BlYy5jb21tb24uZW5kKCkpOwotCX0KLQotCXJldHVybiBwc3BlYzsKLWZhaWw6Ci0JY2VyciA8PCAiaW52YWxpZCBwcm9maWxlIHNwZWNpZmljYXRpb24gIjsKLQljb3B5KG5vbl9vcHRpb25zLmJlZ2luKCksIG5vbl9vcHRpb25zLmVuZCgpLAotCSAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGNlcnIsICIgIikpOwotCWNlcnIgPDwgZW5kbDsKLQlleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLQotb3B0aW9uczo6c3BlYyBnZXRfb3B0aW9ucyhpbnQgYXJnYywgY2hhciBjb25zdCAqIGFyZ3ZbXSkKLXsKLQl2ZWN0b3I8c3RyaW5nPiBub25fb3B0aW9uczsKLQlwb3B0OjpwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG5vbl9vcHRpb25zKTsKLQotCWlmICghb3B0aW9uczo6dGhyZXNob2xkX29wdC5lbXB0eSgpKQotCQlvcHRpb25zOjp0aHJlc2hvbGQgPSBoYW5kbGVfdGhyZXNob2xkKG9wdGlvbnM6OnRocmVzaG9sZF9vcHQpOwotCi0JaWYgKCF2ZXJib3NlOjpzZXR1cCh2ZXJib3NlX3N0cmluZ3MpKSB7Ci0JCWNlcnIgPDwgInVua25vd24gLS12ZXJib3NlPSBvcHRpb25zXG4iOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JYm9vbCBvayA9IHRydWU7Ci0JdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0OwotCWZvciAoaXQgPSBpbWFnZV9wYXRoLmJlZ2luKCk7IGl0ICE9IGltYWdlX3BhdGguZW5kKCk7ICsraXQpIHsKLQkJaWYgKCFpc19kaXJlY3RvcnkoKml0KSkgewotCQkJY2VyciA8PCAqaXQgPDwgIiBpc24ndCBhIHZhbGlkIGRpcmVjdG9yeVxuIjsKLQkJCW9rID0gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlpZiAoIW9rKQotCQl0aHJvdyBvcF9ydW50aW1lX2Vycm9yKCJpbnZhbGlkIC0taW1hZ2UtcGF0aD0gb3B0aW9ucyIpOwotCi0Jb3B0aW9uczo6ZXh0cmFfZm91bmRfaW1hZ2VzLnBvcHVsYXRlKGltYWdlX3BhdGgpOwotCi0JcmV0dXJuIHBhcnNlX3NwZWMobm9uX29wdGlvbnMpOwotfQotCi19ICAvLyBhbm9uIG5hbWVzcGFjZQotCi0KLWludCBydW5fcHBfdG9vbChpbnQgYXJnYywgY2hhciBjb25zdCAqIGFyZ3ZbXSwgcHBfZmN0X3J1bl90IGZjdCkKLXsKLQl0cnkgewotCQlyZXR1cm4gZmN0KGdldF9vcHRpb25zKGFyZ2MsIGFyZ3YpKTsKLQl9Ci0JY2F0Y2ggKG9wX3J1bnRpbWVfZXJyb3IgY29uc3QgJiBlKSB7Ci0JCWNlcnIgPDwgYXJndlswXSA8PCAiIGVycm9yOiAiIDw8IGUud2hhdCgpIDw8IGVuZGw7Ci0JfQotCWNhdGNoIChvcF9mYXRhbF9lcnJvciBjb25zdCAmIGUpIHsKLQkJY2VyciA8PCBhcmd2WzBdIDw8ICIgZXJyb3I6ICIgPDwgZS53aGF0KCkgPDwgZW5kbDsKLQl9Ci0JY2F0Y2ggKG9wX2V4Y2VwdGlvbiBjb25zdCAmIGUpIHsKLQkJY2VyciA8PCBhcmd2WzBdIDw8ICIgZXJyb3I6ICIgPDwgZS53aGF0KCkgPDwgZW5kbDsKLQl9Ci0JY2F0Y2ggKGludmFsaWRfYXJndW1lbnQgY29uc3QgJiBlKSB7Ci0JCWNlcnIgPDwgYXJndlswXSA8PCAiIGVycm9yOiAiIDw8IGUud2hhdCgpIDw8IGVuZGw7Ci0JfQotCWNhdGNoIChleGNlcHRpb24gY29uc3QgJiBlKSB7Ci0JCWNlcnIgPDwgYXJndlswXSA8PCAiIGVycm9yOiAiIDw8IGUud2hhdCgpIDw8IGVuZGw7Ci0JfQotCWNhdGNoICguLi4pIHsKLQkJY2VyciA8PCBhcmd2WzBdIDw8ICIgdW5rbm93biBleGNlcHRpb24iIDw8IGVuZGw7Ci0JfQotCi0JcmV0dXJuIEVYSVRfRkFJTFVSRTsKLX0KLQotCi1kZW1hbmdsZV90eXBlIGhhbmRsZV9kZW1hbmdsZV9vcHRpb24oc3RyaW5nIGNvbnN0ICYgb3B0aW9uKQotewotCWlmIChvcHRpb24gPT0gIm5vbmUiKQotCQlyZXR1cm4gZG10X25vbmU7Ci0JaWYgKG9wdGlvbiA9PSAic21hcnQiKQotCQlyZXR1cm4gZG10X3NtYXJ0OwotCWlmIChvcHRpb24gPT0gIm5vcm1hbCIpCi0JCXJldHVybiBkbXRfbm9ybWFsOwotCi0JdGhyb3cgb3BfcnVudGltZV9lcnJvcigiaW52YWxpZCBvcHRpb24gLS1kZW1hbmdsZT0iICsgb3B0aW9uKTsKLX0KLQotCi1tZXJnZV9vcHRpb24gaGFuZGxlX21lcmdlX29wdGlvbih2ZWN0b3I8c3RyaW5nPiBjb25zdCAmIG1lcmdlc3BlYywKLSAgICBib29sIGFsbG93X2xpYiwgYm9vbCBleGNsdWRlX2RlcGVuZGVudCkKLXsKLQl1c2luZyBuYW1lc3BhY2Ugb3B0aW9uczsKLQltZXJnZV9vcHRpb24gbWVyZ2VfYnk7Ci0KLQltZXJnZV9ieS5jcHUgPSBmYWxzZTsKLQltZXJnZV9ieS5saWIgPSBmYWxzZTsKLQltZXJnZV9ieS50aWQgPSBmYWxzZTsKLQltZXJnZV9ieS50Z2lkID0gZmFsc2U7Ci0JbWVyZ2VfYnkudW5pdG1hc2sgPSBmYWxzZTsKLQotCWlmICghYWxsb3dfbGliKQotCQltZXJnZV9ieS5saWIgPSB0cnVlOwotCi0JYm9vbCBpc19hbGwgPSBmYWxzZTsKLQotCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBtZXJnZXNwZWMuYmVnaW4oKTsKLQl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWVyZ2VzcGVjLmVuZCgpOwotCi0JZm9yICg7IGNpdCAhPSBlbmQ7ICsrY2l0KSB7Ci0JCWlmICgqY2l0ID09ICJjcHUiKSB7Ci0JCQltZXJnZV9ieS5jcHUgPSB0cnVlOwotCQl9IGVsc2UgaWYgKCpjaXQgPT0gInRpZCIpIHsKLQkJCW1lcmdlX2J5LnRpZCA9IHRydWU7Ci0JCX0gZWxzZSBpZiAoKmNpdCA9PSAidGdpZCIpIHsKLQkJCS8vIFBQOjUuMjEgdGdpZCBtZXJnZSBpbXBseSB0aWQgbWVyZ2luZy4KLQkJCW1lcmdlX2J5LnRnaWQgPSB0cnVlOwotCQkJbWVyZ2VfYnkudGlkID0gdHJ1ZTsKLQkJfSBlbHNlIGlmICgoKmNpdCA9PSAibGliIiB8fCAqY2l0ID09ICJsaWJyYXJ5IikgJiYgYWxsb3dfbGliKSB7Ci0JCQltZXJnZV9ieS5saWIgPSB0cnVlOwotCQl9IGVsc2UgaWYgKCpjaXQgPT0gInVuaXRtYXNrIikgewotCQkJbWVyZ2VfYnkudW5pdG1hc2sgPSB0cnVlOwotCQl9IGVsc2UgaWYgKCpjaXQgPT0gImFsbCIpIHsKLQkJCW1lcmdlX2J5LmNwdSA9IHRydWU7Ci0JCQltZXJnZV9ieS5saWIgPSB0cnVlOwotCQkJbWVyZ2VfYnkudGlkID0gdHJ1ZTsKLQkJCW1lcmdlX2J5LnRnaWQgPSB0cnVlOwotCQkJbWVyZ2VfYnkudW5pdG1hc2sgPSB0cnVlOwotCQkJaXNfYWxsID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCWNlcnIgPDwgInVua25vd24gbWVyZ2Ugb3B0aW9uOiAiIDw8ICpjaXQgPDwgZW5kbDsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCX0KLQotCS8vIGlmIC0tbWVyZ2UgYWxsLCBkb24ndCB3YXJuIGFib3V0IGxpYiBtZXJnaW5nLAotCS8vIGl0J3Mgbm90IHVzZXIgZnJpZW5kbHkuIEJlaGF2aW91ciBzaG91bGQgc3RpbGwKLQkvLyBiZSBjb3JyZWN0LgotCWlmIChleGNsdWRlX2RlcGVuZGVudCAmJiBtZXJnZV9ieS5saWIgJiYgYWxsb3dfbGliICYmICFpc19hbGwpIHsKLQkJY2VyciA8PCAiLS1tZXJnZT1saWIgaXMgbWVhbmluZ2xlc3MgIgotCQkgICAgIDw8ICJ3aXRoIC0tZXhjbHVkZS1kZXBlbmRlbnQiIDw8IGVuZGw7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlyZXR1cm4gbWVyZ2VfYnk7Ci19CmRpZmYgLS1naXQgYS9wcC9jb21tb25fb3B0aW9uLmggYi9wcC9jb21tb25fb3B0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhODJmZTQuLjAwMDAwMDAKLS0tIGEvcHAvY29tbW9uX29wdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBjb21tb25fb3B0aW9uLmgKLSAqIERlY2xhcmF0aW9uIG9mIGVudHJ5IHBvaW50IG9mIHBwIHRvb2xzLCBpbXBsZW1lbnRhdGlvbiBmaWxlIGFkZCBjb21tb24KLSAqIG9wdGlvbnMgb2YgcHAgdG9vbHMgYW5kIHNvbWUgbWlzY2VsbGVhbmVvdXMgZnVuY3Rpb25zCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBDT01NT05fT1BUSU9OX0gKLSNkZWZpbmUgQ09NTU9OX09QVElPTl9ICi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8bGlzdD4KLQotI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKLSNpbmNsdWRlICJkZW1hbmdsZV9zeW1ib2wuaCIKLQotbmFtZXNwYWNlIG9wdGlvbnMgewotCWV4dGVybiBib29sIHZlcmJvc2U7Ci0JZXh0ZXJuIGV4dHJhX2ltYWdlcyBleHRyYV9mb3VuZF9pbWFnZXM7Ci0JZXh0ZXJuIGRvdWJsZSB0aHJlc2hvbGQ7Ci0JZXh0ZXJuIHN0ZDo6c3RyaW5nIHRocmVzaG9sZF9vcHQ7Ci0KLQlzdHJ1Y3Qgc3BlYyB7Ci0JCXN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gY29tbW9uOwotCQlzdGQ6Omxpc3Q8c3RkOjpzdHJpbmc+IGZpcnN0OwotCQlzdGQ6Omxpc3Q8c3RkOjpzdHJpbmc+IHNlY29uZDsKLQl9OwotfTsKLQotLyoqCi0gKiBwcm90b3R5cGUgb2YgYSBwcCB0b29sIGVudHJ5IHBvaW50LiBUaGlzIGVudHJ5IHBvaW50IGlzIGNhbGxlZAotICogYnkgcnVuX3BwX3Rvb2wKLSAqLwotdHlwZWRlZiBpbnQgKCpwcF9mY3RfcnVuX3QpKG9wdGlvbnM6OnNwZWMgY29uc3QgJiBzcGVjKTsKLQotLyoqCi0gKiBAcGFyYW0gYXJnYyAgY29tbWFuZCBsaW5lIG51bWJlciBvZiBhcmd1bWVudAotICogQHBhcmFtIGFyZ3YgIGNvbW1hbmQgbGluZSBhcmd1bWVudCBwb2ludGVyIGFycmF5Ci0gKiBAcGFyYW0gZmN0ICBmdW5jdGlvbiB0byBydW4gdG8gc3RhcnQgdGhpcyBwcCB0b29sCi0gKgotICogUHJvdmlkZSBhIGNvbW1vbiBlbnRyeSB0byBhbGwgcHAgdG9vbHMsIHBhcnNpbmcgYWxsIG9wdGlvbnMsIGhhbmRsaW5nCi0gKiBjb21tb24gb3B0aW9ucyBhbmQgcHJvdmlkaW5nIHRoZSBuZWNlc3NhcnkgdHJ5IGNhdGNoIGNsYXVzZQotICovCi1pbnQgcnVuX3BwX3Rvb2woaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBhcmd2W10sIHBwX2ZjdF9ydW5fdCBmY3QpOwotCi0vKioKLSAqIEBwYXJhbSBvcHRpb24gb25lIG9mIFtzbWFydCxub25lLG5vcm1hbF0KLSAqCi0gKiByZXR1cm4gdGhlIGRlbWFuZ2xlX3R5cGUgb2Ygb3B0aW9uIG9yIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBvcHRpb24KLSAqIGlzIG5vdCB2YWxpZC4KLSAqLwotZGVtYW5nbGVfdHlwZSBoYW5kbGVfZGVtYW5nbGVfb3B0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0ICYgb3B0aW9uKTsKLQotLyoqCi0gKiBAcGFyYW0gbWVyZ2VzcGVjICBtZXJnZSBvcHRpb24KLSAqIEBwYXJhbSBhbGxvd19saWIgIGlzIG1lcmdlKWxpYiBhbGxvd2VkIGluIG1lcmdlc3BlYwotICogQHBhcmFtIGV4Y2x1ZGVfZGVwZW5kZW50IHVzZXIgc3BlY2lmaWVkIC0tZXhjbHVkZS1kZXBlbmRlbnQKLSAqCi0gKiBwYXJzZSBtZXJnZSBvcHRpb24gYW5kIHJldHVybiBhIG1lcmdlX29wdGlvbiBmaWxsZWQgZnJvbSBpdC4KLSAqIAotICovCi1tZXJnZV9vcHRpb24gaGFuZGxlX21lcmdlX29wdGlvbihzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBtZXJnZXNwZWMsCi0gICAgICAgYm9vbCBhbGxvd19saWIsIGJvb2wgZXhjbHVkZV9kZXBlbmRlbnQpOwotCi0jZW5kaWYgLyogIUNPTU1PTl9PUFRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvcHAvb3Bhbm5vdGF0ZS5jcHAgYi9wcC9vcGFubm90YXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxYTFmMS4uMDAwMDAwMAotLS0gYS9wcC9vcGFubm90YXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcxNSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wYW5ub3RhdGUuY3BwCi0gKiBJbXBsZW1lbnQgb3Bhbm5vdGF0ZSB1dGlsaXR5Ci0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGlvbWFuaXA+Ci0jaW5jbHVkZSA8ZnN0cmVhbT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAib3BfaGVhZGVyLmgiCi0jaW5jbHVkZSAicHJvZmlsZS5oIgotI2luY2x1ZGUgInBvcHVsYXRlLmgiCi0jaW5jbHVkZSAib3Bfc2FtcGxlX2ZpbGUuaCIKLSNpbmNsdWRlICJjdmVyYi5oIgotI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgotI2luY2x1ZGUgImRlbWFuZ2xlX3N5bWJvbC5oIgotI2luY2x1ZGUgImNoaWxkX3JlYWRlci5oIgotI2luY2x1ZGUgIm9wX2ZpbGUuaCIKLSNpbmNsdWRlICJmaWxlX21hbmlwLmgiCi0jaW5jbHVkZSAiYXJyYW5nZV9wcm9maWxlcy5oIgotI2luY2x1ZGUgIm9wYW5ub3RhdGVfb3B0aW9ucy5oIgotI2luY2x1ZGUgInByb2ZpbGVfY29udGFpbmVyLmgiCi0jaW5jbHVkZSAic3ltYm9sX3NvcnQuaCIKLSNpbmNsdWRlICJpbWFnZV9lcnJvcnMuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBvcHRpb25zOwotCi1uYW1lc3BhY2UgewotCi1zaXplX3QgbnJfZXZlbnRzOwotCi1zY29wZWRfcHRyPHByb2ZpbGVfY29udGFpbmVyPiBzYW1wbGVzOwotCi0vLy8gaG93IG9wYW5ub3RhdGUgd2FzIGludm9rZWQKLXN0cmluZyBjbWRsaW5lOwotCi0vLy8gZW1wdHkgYW5ub3RhdGlvbiBmaWxsIHN0cmluZwotc3RyaW5nIGFubm90YXRpb25fZmlsbDsKLQotLy8vIHN0cmluZyB1c2VkIGFzIHN0YXJ0IC8gZW5kIGNvbW1lbnQgdG8gYW5ub3RhdGUgc291cmNlCi1zdHJpbmcgY29uc3QgYmVnaW5fY29tbWVudCgiLyogIik7Ci1zdHJpbmcgY29uc3QgaW5fY29tbWVudCgiICogIik7Ci1zdHJpbmcgY29uc3QgZW5kX2NvbW1lbnQoIiAqLyIpOwotCi0vLy8gZmllbGQgd2lkdGggZm9yIHRoZSBzYW1wbGUgY291bnQKLXVuc2lnbmVkIGludCBjb25zdCBjb3VudF93aWR0aCA9IDY7Ci0KLXN0cmluZyBnZXRfYW5ub3RhdGlvbl9maWxsKCkKLXsKLQlzdHJpbmcgc3RyOwotCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucl9ldmVudHM7ICsraSkgewotCQlzdHIgKz0gc3RyaW5nKGNvdW50X3dpZHRoLCAnICcpICsgJyAnOwotCQlzdHIgKz0gc3RyaW5nKHBlcmNlbnRfd2lkdGgsICcgJyk7Ci0JfQotCi0JZm9yIChzaXplX3QgaSA9IDE7IGkgPCBucl9ldmVudHM7ICsraSkgewotCQlzdHIgKz0gIiAgIjsKLQl9Ci0KLQlzdHIgKz0gIiA6IjsKLQlyZXR1cm4gc3RyOwotfQotCi0KLXN5bWJvbF9lbnRyeSBjb25zdCAqIGZpbmRfc3ltYm9sKHN0cmluZyBjb25zdCAmIGltYWdlX25hbWUsCi0JCQkJIHN0cmluZyBjb25zdCAmIHN0cl92bWEpCi17Ci0JLy8gZG8gbm90IHVzZSB0aGUgYmZkIGVxdWl2YWxlbnQ6Ci0JLy8gIC0gaXQgZG9lcyBub3Qgc2tpcCBzcGFjZSBhdCBiZWdpbgotCS8vICAtIHdlIGRvZXMgbm90IG5lZWQgY3Jvc3MgYXJjaGl0ZWN0dXJlIGNvbXBpbGUgc28gdGhlIG5hdGl2ZQotCS8vIHN0cnRvdWxsIG11c3Qgd29yaywgYXNzdW1pbmcgdW5zaWduZWQgbG9uZyBsb25nIGNhbiBjb250YWluIGEgdm1hCi0JLy8gYW5kIG9uIDMyLzY0IGJpdHMgYm94IGJmZF92bWEgaXMgNjQgYml0cwotCWJmZF92bWEgdm1hID0gc3RydG91bGwoc3RyX3ZtYS5jX3N0cigpLCBOVUxMLCAxNik7Ci0KLQlyZXR1cm4gc2FtcGxlcy0+ZmluZF9zeW1ib2woaW1hZ2VfbmFtZSwgdm1hKTsKLX0KLQotCi12b2lkIG91dHB1dF9pbmZvKG9zdHJlYW0gJiBvdXQpCi17Ci0Jb3V0IDw8IGJlZ2luX2NvbW1lbnQgPDwgJ1xuJzsKLQotCW91dCA8PCBpbl9jb21tZW50IDw8ICJDb21tYW5kIGxpbmU6ICIgPDwgY21kbGluZSA8PCAnXG4nCi0JICAgIDw8IGluX2NvbW1lbnQgPDwgJ1xuJzsKLQotCW91dCA8PCBpbl9jb21tZW50IDw8ICJJbnRlcnByZXRhdGlvbiBvZiBjb21tYW5kIGxpbmU6IiA8PCAnXG4nOwotCi0JaWYgKCFhc3NlbWJseSkgewotCQlvdXQgPDwgaW5fY29tbWVudAotCQkgICAgPDwgIk91dHB1dCBhbm5vdGF0ZWQgc291cmNlIGZpbGUgd2l0aCBzYW1wbGVzIiA8PCAnXG4nOwotCi0JCWlmIChvcHRpb25zOjp0aHJlc2hvbGQgIT0gMCkgewotCQkJb3V0IDw8IGluX2NvbW1lbnQKLQkJCSAgICA8PCAiT3V0cHV0IGZpbGVzIHdoZXJlIHNhbXBsZXMgY291bnQgcmVhY2ggIgotCQkJICAgIDw8IG9wdGlvbnM6OnRocmVzaG9sZCA8PCAiJSBvZiB0aGUgc2FtcGxlc1xuIjsKLQkJfSBlbHNlIHsKLQkJCW91dCA8PCBpbl9jb21tZW50IDw8ICJPdXRwdXQgYWxsIGZpbGVzIiA8PCAnXG4nOwotCQl9Ci0JfSBlbHNlIHsKLQkJb3V0IDw8IGluX2NvbW1lbnQKLQkJICAgIDw8ICJPdXRwdXQgYW5ub3RhdGVkIGFzc2VtYmx5IGxpc3Rpbmcgd2l0aCBzYW1wbGVzIgotCQkgICAgPDwgJ1xuJzsKLQotCQlpZiAoIW9iamR1bXBfcGFyYW1zLmVtcHR5KCkpIHsKLQkJCW91dCA8PCBpbl9jb21tZW50IDw8ICJQYXNzaW5nIHRoZSBmb2xsb3dpbmcgIgotCQkJCSJhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBvYmpkdW1wIDsgXCIiOwotCQkJZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgb2JqZHVtcF9wYXJhbXMuc2l6ZSgpIDsgKytpKQotCQkJCW91dCA8PCBvYmpkdW1wX3BhcmFtc1tpXSA8PCAiICI7Ci0JCQlvdXQgPDwgIlwiIiA8PCAnXG4nOwotCQl9Ci0JfQotCi0Jb3V0IDw8IGluX2NvbW1lbnQgPDwgJ1xuJzsKLQotCW91dCA8PCBpbl9jb21tZW50IDw8IGNsYXNzZXMuY3B1aW5mbyA8PCBlbmRsOwotCWlmICghY2xhc3Nlcy5ldmVudC5lbXB0eSgpKQotCQlvdXQgPDwgaW5fY29tbWVudCA8PCBjbGFzc2VzLmV2ZW50IDw8IGVuZGw7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzZXMudi5zaXplKCk7ICsraSkKLQkJb3V0IDw8IGluX2NvbW1lbnQgPDwgY2xhc3Nlcy52W2ldLmxvbmduYW1lIDw8IGVuZGw7Ci0KLQlvdXQgPDwgZW5kX2NvbW1lbnQgPDwgJ1xuJzsKLX0KLQotCi1zdHJpbmcgY291bnRfc3RyKGNvdW50X2FycmF5X3QgY29uc3QgJiBjb3VudCwKLQkJICAgY291bnRfYXJyYXlfdCBjb25zdCAmIHRvdGFsKQotewotCW9zdHJpbmdzdHJlYW0gb3M7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucl9ldmVudHM7ICsraSkgewotCQlvcyA8PCBzZXR3KGNvdW50X3dpZHRoKSA8PCBjb3VudFtpXSA8PCAnICc7Ci0KLQkJb3MgPDwgZm9ybWF0X3BlcmNlbnQob3BfcmF0aW8oY291bnRbaV0sIHRvdGFsW2ldKSAqIDEwMC4wLAotCQkJCSAgICBwZXJjZW50X2ludF93aWR0aCwgcGVyY2VudF9mcmFjdF93aWR0aCk7Ci0JfQotCXJldHVybiBvcy5zdHIoKTsKLX0KLQotCi1zdHJpbmcgYXNtX2xpbmVfYW5ub3RhdGlvbihzeW1ib2xfZW50cnkgY29uc3QgKiBsYXN0X3N5bWJvbCwKLQkJCSAgIHN0cmluZyBjb25zdCAmIHZhbHVlKQotewotCS8vIGRvIG5vdCB1c2UgdGhlIGJmZCBlcXVpdmFsZW50OgotCS8vICAtIGl0IGRvZXMgbm90IHNraXAgc3BhY2UgYXQgYmVnaW4KLQkvLyAgLSB3ZSBkb2VzIG5vdCBuZWVkIGNyb3NzIGFyY2hpdGVjdHVyZSBjb21waWxlIHNvIHRoZSBuYXRpdmUKLQkvLyBzdHJ0b3VsbCBtdXN0IHdvcmssIGFzc3VtaW5nIHVuc2lnbmVkIGxvbmcgbG9uZyBjYW4gY29udGFpbiBhIHZtYQotCS8vIGFuZCBvbiAzMi82NCBiaXRzIGJveCBiZmRfdm1hIGlzIDY0IGJpdHMKLQkvLyBnY2MgMi45MS42NiB3b3JrYXJvdW5kCi0JYmZkX3ZtYSB2bWEgPSAwOwotCXZtYSA9IHN0cnRvdWxsKHZhbHVlLmNfc3RyKCksIE5VTEwsIDE2KTsKLQotCXN0cmluZyBzdHI7Ci0KLQlzYW1wbGVfZW50cnkgY29uc3QgKiBzYW1wbGUgPSBzYW1wbGVzLT5maW5kX3NhbXBsZShsYXN0X3N5bWJvbCwgdm1hKTsKLQlpZiAoc2FtcGxlKSB7Ci0JCXN0ciArPSBjb3VudF9zdHIoc2FtcGxlLT5jb3VudHMsIHNhbXBsZXMtPnNhbXBsZXNfY291bnQoKSk7Ci0JCWZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnJfZXZlbnRzOyArK2kpCi0JCQlzdHIgKz0gIiAgIjsKLQkJc3RyICs9ICIgOiI7Ci0JfSBlbHNlIHsKLQkJc3RyID0gYW5ub3RhdGlvbl9maWxsOwotCX0KLQotCXJldHVybiBzdHI7Ci19Ci0KLQotc3RyaW5nIHN5bWJvbF9hbm5vdGF0aW9uKHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWJvbCkKLXsKLQlpZiAoIXN5bWJvbCkKLQkJcmV0dXJuIHN0cmluZygpOwotCi0Jc3RyaW5nIGFubm90ID0gY291bnRfc3RyKHN5bWJvbC0+c2FtcGxlLmNvdW50cywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy0+c2FtcGxlc19jb3VudCgpKTsKLQlpZiAoYW5ub3QuZW1wdHkoKSkKLQkJcmV0dXJuIHN0cmluZygpOwotCi0Jc3RyaW5nIGNvbnN0ICYgc3ltbmFtZSA9IHN5bWJvbF9uYW1lcy5kZW1hbmdsZShzeW1ib2wtPm5hbWUpOwotCi0Jc3RyaW5nIHN0ciA9ICIgIjsKLQlzdHIgKz0gYmVnaW5fY29tbWVudCArIHN5bW5hbWUgKyAiIHRvdGFsOiAiOwotCXN0ciArPSBjb3VudF9zdHIoc3ltYm9sLT5zYW1wbGUuY291bnRzLCBzYW1wbGVzLT5zYW1wbGVzX2NvdW50KCkpOwotCXN0ciArPSBlbmRfY29tbWVudDsKLQlyZXR1cm4gc3RyOwotfQotCi0KLS8vLyByZXR1cm4gdHJ1ZSBpZiAgdGhpcyBsaW5lIGNvbnRhaW5zIGEgc3ltYm9sIG5hbWUgaW4gb2JqZHVtcCBmb3JtYXR0aW5nCi0vLy8gc3ltYm9sIGFyZSBvbiB0aGUgZm9ybSAwODAzMDQzNCA8c3ltYm9sX25hbWU+OiAgd2UgbmVlZCB0byBiZSBzdHJpY3QKLS8vLyBoZXJlIHRvIGF2b2lkIGFueSBpbnRlcnByZXRhdGlvbiBvZiBhIHNvdXJjZSBsaW5lIGFzIGEgc3ltYm9sIGxpbmUKLWJvb2wgaXNfc3ltYm9sX2xpbmUoc3RyaW5nIGNvbnN0ICYgc3RyLCBzdHJpbmc6OnNpemVfdHlwZSBwb3MpCi17Ci0JaWYgKHN0cltwb3NdICE9ICcgJyB8fCBzdHJbcG9zICsgMV0gIT0gJzwnKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gc3RyW3N0ci5sZW5ndGgoKSAtIDFdID09ICc6JzsKLX0KLQotCi1zeW1ib2xfZW50cnkgY29uc3QgKiBvdXRwdXRfb2JqZHVtcF9hc21fbGluZShzeW1ib2xfZW50cnkgY29uc3QgKiBsYXN0X3N5bWJvbCwKLQkJc3RyaW5nIGNvbnN0ICYgYXBwX25hbWUsIHN0cmluZyBjb25zdCAmIHN0ciwKLQkJc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QgJiBzeW1ib2xzLAotCQlib29sICYgZG9fb3V0cHV0KQotewotCS8vIG91dHB1dCBvZiBvYmpkdW1wIGlzIGEgaHVtYW4gcmVhZGFibGUgZm9ybSBhbmQgY2FuIGNvbnRhaW4gc29tZQotCS8vIGFtYmlndWl0eSBzbyB0aGlzIGNvZGUgaXMgZGlydHkuIEl0IGlzIGFsc28gb3B0aW1pemVkIGEgbGl0dGxlIGJpdAotCS8vIHNvIGl0IGlzIGRpZmZpY3VsdCB0byBzaW1wbGlmeSBpdCB3aXRob3V0IGJyZWFraW5nIHNvbWV0aGluZyAuLi4KLQotCS8vIGxpbmUgb2YgaW50ZXJlc3QgYXJlOiAiWzpzcGFjZTpdKls6eGRpZ2l0Ol0/WyA6XSIsIHRoZSBsYXN0IGNoYXIgb2YKLQkvLyB0aGlzIHJlZ2V4cCBkaXMtYW1iaWd1YXRlIGJldHdlZW4gYSBzeW1ib2wgbGluZSBhbmQgYW4gYXNtIGxpbmUuIElmCi0JLy8gc291cmNlIGNvbnRhaW4gbGluZSBvZiB0aGlzIGZvcm0gYW4gYW1iaWd1aXR5IG9jY3VyIGFuZCB3ZSByZWx5IG9uCi0JLy8gdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBjb2RlLgotCi0Jc2l6ZV90IHBvcyA9IDA7Ci0Jd2hpbGUgKHBvcyA8IHN0ci5sZW5ndGgoKSAmJiBpc3NwYWNlKHN0cltwb3NdKSkKLQkJKytwb3M7Ci0KLQlpZiAocG9zID09IHN0ci5sZW5ndGgoKSB8fCAhaXN4ZGlnaXQoc3RyW3Bvc10pKSB7Ci0JCWlmIChkb19vdXRwdXQpIHsKLQkJCWNvdXQgPDwgYW5ub3RhdGlvbl9maWxsIDw8IHN0ciA8PCAnXG4nOwotCQkJcmV0dXJuIGxhc3Rfc3ltYm9sOwotCQl9Ci0JfQotCi0Jd2hpbGUgKHBvcyA8IHN0ci5sZW5ndGgoKSAmJiBpc3hkaWdpdChzdHJbcG9zXSkpCi0JCSsrcG9zOwotCi0JaWYgKHBvcyA9PSBzdHIubGVuZ3RoKCkgfHwgKCFpc3NwYWNlKHN0cltwb3NdKSAmJiBzdHJbcG9zXSAhPSAnOicpKSB7Ci0JCWlmIChkb19vdXRwdXQpIHsKLQkJCWNvdXQgPDwgYW5ub3RhdGlvbl9maWxsIDw8IHN0ciA8PCAnXG4nOwotCQkJcmV0dXJuIGxhc3Rfc3ltYm9sOwotCQl9Ci0JfQotCi0JaWYgKGlzX3N5bWJvbF9saW5lKHN0ciwgcG9zKSkgewotCQlsYXN0X3N5bWJvbCA9IGZpbmRfc3ltYm9sKGFwcF9uYW1lLCBzdHIpOwotCi0JCS8vICEgY29tcGxleGl0eTogbGluZWFyIGluIG51bWJlciBvZiBzeW1ib2wgbXVzdCB1c2Ugc29ydGVkCi0JCS8vIGJ5IGFkZHJlc3MgdmVjdG9yIGFuZCBsb3dlcl9ib3VuZCA/Ci0JCS8vIE5vdGUgdGhpcyB1c2UgYSBwb2ludGVyIGNvbXBhcmlzb24uIEl0IHdvcmsgYmVjYXVzZSBzeW1ib2xzCi0JCS8vIHBvaW50ZXIgYXJlIHVuaXF1ZQotCQlpZiAoZmluZChzeW1ib2xzLmJlZ2luKCksIHN5bWJvbHMuZW5kKCksIGxhc3Rfc3ltYm9sKQotCQkJIT0gc3ltYm9scy5lbmQoKSkgewotCQkJZG9fb3V0cHV0ID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCWRvX291dHB1dCA9IGZhbHNlOwotCQl9Ci0KLQkJaWYgKGRvX291dHB1dCkKLQkJCWNvdXQgPDwgc3RyIDw8IHN5bWJvbF9hbm5vdGF0aW9uKGxhc3Rfc3ltYm9sKSA8PCAnXG4nOwotCi0JfSBlbHNlIHsKLQkJLy8gbm90IGEgc3ltYm9sLCBwcm9iYWJseSBhbiBhc20gbGluZS4KLQkJaWYgKGRvX291dHB1dCkKLQkJCWNvdXQgPDwgYXNtX2xpbmVfYW5ub3RhdGlvbihsYXN0X3N5bWJvbCwgc3RyKQotCQkJICAgICA8PCBzdHIgPDwgJ1xuJzsKLQl9Ci0KLQlyZXR1cm4gbGFzdF9zeW1ib2w7Ci19Ci0KLQotdm9pZCBkb19vbmVfb3V0cHV0X29iamR1bXAoc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QgJiBzeW1ib2xzLAotCQkJICAgc3RyaW5nIGNvbnN0ICYgYXBwX25hbWUsIGJmZF92bWEgc3RhcnQsIGJmZF92bWEgZW5kKQotewotCXZlY3RvcjxzdHJpbmc+IGFyZ3M7Ci0KLQlhcmdzLnB1c2hfYmFjaygiLWQiKTsKLQlhcmdzLnB1c2hfYmFjaygiLS1uby1zaG93LXJhdy1pbnNuIik7Ci0JaWYgKHNvdXJjZSkKLQkJYXJncy5wdXNoX2JhY2soIi1TIik7Ci0KLQlpZiAoc3RhcnQgfHwgZW5kICE9IH4oYmZkX3ZtYSkwKSB7Ci0JCW9zdHJpbmdzdHJlYW0gYXJnMSwgYXJnMjsKLQkJYXJnMSA8PCAiLS1zdGFydC1hZGRyZXNzPSIgPDwgc3RhcnQ7Ci0JCWFyZzIgPDwgIi0tc3RvcC1hZGRyZXNzPSIgPDwgZW5kOwotCQlhcmdzLnB1c2hfYmFjayhhcmcxLnN0cigpKTsKLQkJYXJncy5wdXNoX2JhY2soYXJnMi5zdHIoKSk7Ci0JfQotCi0JaWYgKCFvYmpkdW1wX3BhcmFtcy5lbXB0eSgpKSB7Ci0JCWZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG9iamR1bXBfcGFyYW1zLnNpemUoKSA7ICsraSkKLQkJCWFyZ3MucHVzaF9iYWNrKG9iamR1bXBfcGFyYW1zW2ldKTsKLQl9Ci0KLQlhcmdzLnB1c2hfYmFjayhhcHBfbmFtZSk7Ci0JY2hpbGRfcmVhZGVyIHJlYWRlcigib2JqZHVtcCIsIGFyZ3MpOwotCWlmIChyZWFkZXIuZXJyb3IoKSkgewotCQljZXJyIDw8ICJBbiBlcnJvciBvY2N1ciBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBvYmpkdW1wOlxuXG4iOwotCQljZXJyIDw8IHJlYWRlci5lcnJvcl9zdHIoKSA8PCBlbmRsOwotCQlyZXR1cm47Ci0JfQotCi0JLy8gdG8gZmlsdGVyIG91dHB1dCBvZiBzeW1ib2xzIChmaWx0ZXIgYmFzZWQgb24gY29tbWFuZCBsaW5lIG9wdGlvbnMpCi0JYm9vbCBkb19vdXRwdXQgPSB0cnVlOwotCi0Jc3ltYm9sX2VudHJ5IGNvbnN0ICogbGFzdF9zeW1ib2wgPSAwOwotCXN0cmluZyBzdHI7Ci0Jd2hpbGUgKHJlYWRlci5nZXRsaW5lKHN0cikpIHsKLQkJbGFzdF9zeW1ib2wgPSBvdXRwdXRfb2JqZHVtcF9hc21fbGluZShsYXN0X3N5bWJvbCwgYXBwX25hbWUsCi0JCQkJCXN0ciwgc3ltYm9scywgZG9fb3V0cHV0KTsKLQl9Ci0KLQkvLyBvYmpkdW1wIGFsd2F5cyByZXR1cm5zIFNVQ0NFU1Mgc28gd2UgbXVzdCByZWx5IG9uIHRoZSBzdGRlcnIgc3RhdGUKLQkvLyBvZiBvYmpkdW1wLiBJZiBvYmpkdW1wIGVycm9yIG1lc3NhZ2UgaXMgY3J5cHRpYyBvdXIgb3duIGVycm9yCi0JLy8gbWVzc2FnZSB3aWxsIGJlIHByb2JhYmx5IGFsc28gY3J5cHRpYwotCW9zdHJpbmdzdHJlYW0gc3RkX2VycjsKLQlvc3RyaW5nc3RyZWFtIHN0ZF9vdXQ7Ci0JcmVhZGVyLmdldF9kYXRhKHN0ZF9vdXQsIHN0ZF9lcnIpOwotCWlmIChzdGRfZXJyLnN0cigpLmxlbmd0aCgpKSB7Ci0JCWNlcnIgPDwgIkFuIGVycm9yIG9jY3VyIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIG9iamR1bXA6XG5cbiI7Ci0JCWNlcnIgPDwgc3RkX2Vyci5zdHIoKSA8PCBlbmRsOwotCQlyZXR1cm4gOwotCX0KLQotCS8vIGZvcmNlIGVycm9yIGNvZGUgdG8gYmUgYWNxdWlyZWQKLQlyZWFkZXIudGVybWluYXRlX3Byb2Nlc3MoKTsKLQotCS8vIHJlcXVpcmVkIGJlY2F1c2UgaWYgb2JqZHVtcCBzdG9wIGJ5IHNpZ25hbCBhbGwgYWJvdmUgdGhpbmdzIHN1Y2VlZWQKLQkvLyAoc2lnbmFsIGVycm9yIG1lc3NhZ2UgYXJlIG5vdCBvdXRwdXQgdGhyb3VnaCBzdGRvdXQvc3RkZXJyKQotCWlmIChyZWFkZXIuZXJyb3IoKSkgewotCQljZXJyIDw8ICJBbiBlcnJvciBvY2N1ciBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBvYmpkdW1wOlxuXG4iOwotCQljZXJyIDw8IHJlYWRlci5lcnJvcl9zdHIoKSA8PCBlbmRsOwotCQlyZXR1cm47Ci0JfQotfQotCi0KLXZvaWQgb3V0cHV0X29iamR1bXBfYXNtKHN5bWJvbF9jb2xsZWN0aW9uIGNvbnN0ICYgc3ltYm9scywKLQkJCXN0cmluZyBjb25zdCAmIGFwcF9uYW1lKQotewotCS8vIHRoaXMgaXMgb25seSBhbiBvcHRpbWlzYXRpb24sIHdlIGNhbiBlaXRoZXIgZmlsdGVyIG91dHB1dCBieQotCS8vIGRpcmVjdGx5IGNhbGxpbmcgb2JqZHVtcCBhbmQgcmVseSBvbiB0aGUgc3ltYm9sIGZpbHRlcmluZyBvcgotCS8vIHdlIGNhbiBjYWxsIG9iamR1bXAgd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGVyIHRvIGp1c3QgZGlzYXNzZW1ibGUKLQkvLyB0aGUgbmVlZGVkIHBhcnQuIFRoaXMgaXMgYSByZWFsIHdpbiBvbmx5IHdoZW4gY2FsbGluZyBvYmpkdW1wCi0JLy8gYSBtZWRpdW0gbnVtYmVyIG9mIHRpbWVzLCBJIGR1bm5vIGlmIHRoZSB1c2VkIHRocmVzaG9sZCBpcyBvcHRpbWFsCi0JLy8gYnV0IGl0IGlzIGEgY29uc2VydmF0aXZlIHZhbHVlLgotCXNpemVfdCBjb25zdCBtYXhfb2JqZHVtcF9leGVjID0gNTA7Ci0JaWYgKHN5bWJvbHMuc2l6ZSgpIDw9IG1heF9vYmpkdW1wX2V4ZWMpIHsKLQkJc3ltYm9sX2NvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIGNpdCA9IHN5bWJvbHMuYmVnaW4oKTsKLQkJc3ltYm9sX2NvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN5bWJvbHMuZW5kKCk7Ci0JCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgewotCQkJYmZkX3ZtYSBzdGFydCA9ICgqY2l0KS0+c2FtcGxlLnZtYTsKLQkJCWJmZF92bWEgZW5kICA9IHN0YXJ0ICsgKCpjaXQpLT5zaXplOwotCQkJZG9fb25lX291dHB1dF9vYmpkdW1wKHN5bWJvbHMsIGFwcF9uYW1lLCBzdGFydCwgZW5kKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWRvX29uZV9vdXRwdXRfb2JqZHVtcChzeW1ib2xzLCBhcHBfbmFtZSwgMCwgfmJmZF92bWEoMCkpOwotCX0KLX0KLQotCi1ib29sIG91dHB1dF9hc20oc3RyaW5nIGNvbnN0ICYgYXBwX25hbWUpCi17Ci0JcHJvZmlsZV9jb250YWluZXI6OnN5bWJvbF9jaG9pY2UgY2hvaWNlOwotCWNob2ljZS50aHJlc2hvbGQgPSBvcHRpb25zOjp0aHJlc2hvbGQ7Ci0JY2hvaWNlLmltYWdlX25hbWUgPSBhcHBfbmFtZTsKLQljaG9pY2UubWF0Y2hfaW1hZ2UgPSB0cnVlOwotCXN5bWJvbF9jb2xsZWN0aW9uIHN5bWJvbHMgPSBzYW1wbGVzLT5zZWxlY3Rfc3ltYm9scyhjaG9pY2UpOwotCi0JaWYgKCFzeW1ib2xzLmVtcHR5KCkpIHsKLQkJc29ydF9vcHRpb25zIG9wdGlvbnM7Ci0JCW9wdGlvbnMuYWRkX3NvcnRfb3B0aW9uKHNvcnRfb3B0aW9uczo6c2FtcGxlKTsKLQkJb3B0aW9ucy5zb3J0KHN5bWJvbHMsIGZhbHNlLCBmYWxzZSk7Ci0KLQkJb3V0cHV0X2luZm8oY291dCk7Ci0KLQkJb3V0cHV0X29iamR1bXBfYXNtKHN5bWJvbHMsIGFwcF9uYW1lKTsKLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLQotc3RyaW5nIGNvbnN0IHNvdXJjZV9saW5lX2Fubm90YXRpb24oZGVidWdfbmFtZV9pZCBmaWxlbmFtZSwgc2l6ZV90IGxpbmVucikKLXsKLQlzdHJpbmcgc3RyOwotCi0JY291bnRfYXJyYXlfdCBjb3VudHMgPSBzYW1wbGVzLT5zYW1wbGVzX2NvdW50KGZpbGVuYW1lLCBsaW5lbnIpOwotCWlmICghY291bnRzLnplcm8oKSkgewotCQlzdHIgKz0gY291bnRfc3RyKGNvdW50cywgc2FtcGxlcy0+c2FtcGxlc19jb3VudCgpKTsKLQkJZm9yIChzaXplX3QgaSA9IDE7IGkgPCBucl9ldmVudHM7ICsraSkKLQkJCXN0ciArPSAiICAiOwotCQlzdHIgKz0gIiA6IjsKLQl9IGVsc2UgewotCQlzdHIgPSBhbm5vdGF0aW9uX2ZpbGw7Ci0JfQotCi0JcmV0dXJuIHN0cjsKLX0KLQotCi1zdHJpbmcgc291cmNlX3N5bWJvbF9hbm5vdGF0aW9uKGRlYnVnX25hbWVfaWQgZmlsZW5hbWUsIHNpemVfdCBsaW5lbnIpCi17Ci0Jc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sID0gc2FtcGxlcy0+ZmluZF9zeW1ib2woZmlsZW5hbWUsIGxpbmVucik7Ci0KLQlyZXR1cm4gc3ltYm9sX2Fubm90YXRpb24oc3ltYm9sKTsKLX0KLQotCi12b2lkIG91dHB1dF9wZXJfZmlsZV9pbmZvKG9zdHJlYW0gJiBvdXQsIGRlYnVnX25hbWVfaWQgZmlsZW5hbWUsCi0JCQkgIGNvdW50X2FycmF5X3QgY29uc3QgJiB0b3RhbF9maWxlX2NvdW50KQotewotCW91dCA8PCBiZWdpbl9jb21tZW50IDw8ICdcbicKLQkgICAgIDw8IGluX2NvbW1lbnQgPDwgIlRvdGFsIHNhbXBsZXMgZm9yIGZpbGUgOiAiCi0JICAgICA8PCAnIicgPDwgZGVidWdfbmFtZXMubmFtZShmaWxlbmFtZSkgPDwgJyInCi0JICAgICA8PCAnXG4nOwotCW91dCA8PCBpbl9jb21tZW50IDw8ICdcbicgPDwgaW5fY29tbWVudAotCSAgICA8PCBjb3VudF9zdHIodG90YWxfZmlsZV9jb3VudCwgc2FtcGxlcy0+c2FtcGxlc19jb3VudCgpKQotCSAgICA8PCAnXG4nOwotCW91dCA8PCBlbmRfY29tbWVudCA8PCAnXG4nIDw8ICdcbic7Ci19Ci0KLQotc3RyaW5nIGNvbnN0IGxpbmUwX2luZm8oZGVidWdfbmFtZV9pZCBmaWxlbmFtZSkKLXsKLQlzdHJpbmcgYW5ub3RhdGlvbiA9IHNvdXJjZV9saW5lX2Fubm90YXRpb24oZmlsZW5hbWUsIDApOwotCWlmICh0cmltKGFubm90YXRpb24sICIgXHQ6IikuZW1wdHkoKSkKLQkJcmV0dXJuIHN0cmluZygpOwotCi0Jc3RyaW5nIHN0ciA9ICI8Y3JlZGl0ZWQgdG8gbGluZSB6ZXJvPiAiOwotCXN0ciArPSBhbm5vdGF0aW9uOwotCXJldHVybiBzdHI7Ci19Ci0KLQotdm9pZCBkb19vdXRwdXRfb25lX2ZpbGUob3N0cmVhbSAmIG91dCwgaXN0cmVhbSAmIGluLCBkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoZWFkZXIpCi17Ci0JY291bnRfYXJyYXlfdCBjb3VudCA9IHNhbXBsZXMtPnNhbXBsZXNfY291bnQoZmlsZW5hbWUpOwotCi0JaWYgKGhlYWRlcikgewotCQlvdXRwdXRfcGVyX2ZpbGVfaW5mbyhvdXQsIGZpbGVuYW1lLCBjb3VudCk7Ci0JCW91dCA8PCBsaW5lMF9pbmZvKGZpbGVuYW1lKSA8PCAnXG4nOwotCX0KLQotCi0JaWYgKGluKSB7Ci0JCXN0cmluZyBzdHI7Ci0KLQkJZm9yIChzaXplX3QgbGluZW5yID0gMSA7IGdldGxpbmUoaW4sIHN0cikgOyArK2xpbmVucikgewotCQkJb3V0IDw8IHNvdXJjZV9saW5lX2Fubm90YXRpb24oZmlsZW5hbWUsIGxpbmVucikgPDwgc3RyCi0JCQkgICAgPDwgc291cmNlX3N5bWJvbF9hbm5vdGF0aW9uKGZpbGVuYW1lLCBsaW5lbnIpCi0JCQkgICAgPDwgJ1xuJzsKLQkJfQotCi0JfSBlbHNlIHsKLQkJLy8gRklYTUUgOiB3ZSBoYXZlIG5vIGlucHV0IGZpbGUgOiB3ZSBqdXN0IG91dHB1dGZvb3RlcgotCQkvLyBzbyBvbiB1c2VyIGNhbiBrbm93biB0b3RhbCBuciBvZiBzYW1wbGVzIGZvciB0aGlzIHNvdXJjZQotCQkvLyBsYXRlciB3ZSBtdXN0IGFkZCBjb2RlIHRoYXQgaXRlcmF0ZSB0aHJvdWdoIHN5bWJvbCBpbiB0aGlzCi0JCS8vIGZpbGUgdG8gb3V0cHV0IG9uZSBhbm5vdGF0aW9uIGZvciBlYWNoIHN5bWJvbC4gVG8gZG8gdGhpcyB3ZQotCQkvLyBuZWVkIGEgc2VsZWN0X3N5bWJvbChmaWxlbmFtZSk7IGluIHByb2ZpbGVfY29udGFpbmVyIHdoaWNoCi0JCS8vIGZhbGwgYmFjayB0byB0aGUgaW1wbGVtZW50YXRpb24gaW4gc3ltYm9sX2NvbnRhaW5lcgotCQkvLyB1c2luZyBhIGxhemlsbHkgYnVpbGQgc3ltYm9sX21hcCBzb3J0ZWQgYnkgZmlsZW5hbWUKLQkJLy8gKG5lY2Vzc2FyeSBmdW5jdG9ycyBhbHJlYWR5IGV4aXN0IGluIHN5bWJvbF9mdW5jdG9ycy5oKQotCX0KLQotCWlmICghaGVhZGVyKSB7Ci0JCW91dHB1dF9wZXJfZmlsZV9pbmZvKG91dCwgZmlsZW5hbWUsIGNvdW50KTsKLQkJb3V0IDw8IGxpbmUwX2luZm8oZmlsZW5hbWUpIDw8ICdcbic7Ci0JfQotfQotCi0KLXZvaWQgb3V0cHV0X29uZV9maWxlKGlzdHJlYW0gJiBpbiwgZGVidWdfbmFtZV9pZCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBjb25zdCAmIHNvdXJjZSkKLXsKLQlpZiAob3V0cHV0X2Rpci5lbXB0eSgpKSB7Ci0JCWRvX291dHB1dF9vbmVfZmlsZShjb3V0LCBpbiwgZmlsZW5hbWUsIHRydWUpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3RyaW5nIGNvbnN0IG91dF9maWxlID0gb3BfcmVhbHBhdGgob3V0cHV0X2RpciArIHNvdXJjZSk7Ci0KLQkvKiBKdXN0IGJlY2F1c2UgeW91J3JlIHBhcmFub2lkIGRvZXNuJ3QgbWVhbiB0aGV5J3JlIG5vdCBvdXQgdG8KLQkgKiBnZXQgeW91IC4uLgotCSAqCi0JICogVGhpcyBpcyBqdXN0IGEgbGFtZSBmaW5hbCBzYWZldHkgY2hlY2suIElmIHdlIGZvdW5kIHRoZQotCSAqIHNvdXJjZSwgdGhlbiAic291cmNlIiBzaG91bGQgYmUgY2Fub25pY2FsIGFscmVhZHksIGFuZAotCSAqIGNhbid0IGVzY2FwZSBmcm9tIHRoZSBvdXRwdXQgZGlyLiBXZSBjYW4ndCB1c2Ugb3BfcmVhbHBhdGgoKQotCSAqIGFsb25lIGFzIHRoYXQgbmVlZHMgdGhlIGZpbGUgdG8gZXhpc3QgYWxyZWFkeS4KLQkgKgotCSAqIExldCdzIG5vdCBjb21wbGFpbiBhZ2FpbiBpZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBmaWxlIGFueXdheS4KLQkgKi8KLQlpZiAob3V0X2ZpbGUuZmluZCgiLy4uLyIpICE9IHN0cmluZzo6bnBvcykgewotCQlpZiAoaW4pIHsKLQkJCWNlcnIgPDwgInJlZnVzaW5nIHRvIGNyZWF0ZSBub24tY2Fub25pY2FsIGZpbGVuYW1lICIKLQkJCSAgICAgPDwgb3V0X2ZpbGUgIDw8IGVuZGw7Ci0JCX0KLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAoIWlzX3ByZWZpeChvdXRfZmlsZSwgb3V0cHV0X2RpcikpIHsKLQkJaWYgKGluKSB7Ci0JCQljZXJyIDw8ICJyZWZ1c2luZyB0byBjcmVhdGUgZmlsZSAiIDw8IG91dF9maWxlCi0JCQkgICAgIDw8ICIgb3V0c2lkZSBvZiBvdXRwdXQgZGlyZWN0b3J5ICIgPDwgb3V0cHV0X2RpcgotCQkJICAgICA8PCBlbmRsOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaXNfZmlsZXNfaWRlbnRpY2FsKG91dF9maWxlLCBzb3VyY2UpKSB7Ci0JCWNlcnIgPDwgImlucHV0IGFuZCBvdXRwdXQgZmlsZXMgYXJlIGlkZW50aWNhbDogIgotCQkgICAgIDw8IG91dF9maWxlIDw8IGVuZGw7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY3JlYXRlX3BhdGgob3V0X2ZpbGUuY19zdHIoKSkpIHsKLQkJY2VyciA8PCAidW5hYmxlIHRvIGNyZWF0ZSBmaWxlOiAiCi0JCSAgICAgPDwgJyInIDw8IG9wX2Rpcm5hbWUob3V0X2ZpbGUpIDw8ICciJyA8PCBlbmRsOwotCQlyZXR1cm47Ci0JfQotCi0Jb2ZzdHJlYW0gb3V0KG91dF9maWxlLmNfc3RyKCkpOwotCWlmICghb3V0KSB7Ci0JCWNlcnIgPDwgInVuYWJsZSB0byBvcGVuIG91dHB1dCBmaWxlICIKLQkJICAgICA8PCAnIicgPDwgb3V0X2ZpbGUgPDwgJyInIDw8IGVuZGw7Ci0JfSBlbHNlIHsKLQkJZG9fb3V0cHV0X29uZV9maWxlKG91dCwgaW4sIGZpbGVuYW1lLCBmYWxzZSk7Ci0JCW91dHB1dF9pbmZvKG91dCk7Ci0JfQotfQotCi0KLS8qIExvY2F0ZSBhIHNvdXJjZSBmaWxlIGZyb20gZGVidWcgaW5mbywgd2hpY2ggbWF5IGJlIHJlbGF0aXZlICovCi1zdHJpbmcgY29uc3QgbG9jYXRlX3NvdXJjZV9maWxlKGRlYnVnX25hbWVfaWQgZmlsZW5hbWVfaWQpCi17Ci0Jc3RyaW5nIGNvbnN0IG9yaWdmaWxlID0gZGVidWdfbmFtZXMubmFtZShmaWxlbmFtZV9pZCk7Ci0Jc3RyaW5nIGZpbGUgPSBvcmlnZmlsZTsKLQotCWlmIChmaWxlLmVtcHR5KCkpCi0JCXJldHVybiBmaWxlOwotCi0JLyogQWxsb3cgYWJzb2x1dGUgcGF0aHMgdG8gYmUgcmVsb2NhdGVkIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeSAqLwotCWlmIChmaWxlWzBdID09ICcvJykgewotCQl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY2l0ID0gYmFzZV9kaXJzLmJlZ2luKCk7Ci0JCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBiYXNlX2RpcnMuZW5kKCk7Ci0JCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgewotCQkJc3RyaW5nIHBhdGggPSBvcF9yZWFscGF0aCgqY2l0KTsKLQotCQkJaWYgKGlzX3ByZWZpeChmaWxlLCBwYXRoKSkgewotCQkJCWZpbGUgPSBmaWxlLnN1YnN0cihwYXRoLmxlbmd0aCgpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBzZWFyY2hfZGlycy5iZWdpbigpOwotCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzZWFyY2hfZGlycy5lbmQoKTsKLQotCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgewotCQlzdHJpbmcgY29uc3QgYWJzZmlsZSA9IG9wX3JlYWxwYXRoKCpjaXQgKyAiLyIgKyBmaWxlKTsKLQotCQlpZiAob3BfZmlsZV9yZWFkYWJsZShhYnNmaWxlKSkgewotCQkJcmV0dXJuIGFic2ZpbGU7Ci0JCX0KLQl9Ci0KLQkvKiBXZSBkaWRuJ3QgZmluZCBhIHJlbG9jYXRlZCBhYnNvbHV0ZSBmaWxlLCBvciBhIHJlbGF0aXZlIGZpbGUsCi0JICogYXNzdW1lIHRoZSBvcmlnaW5hbCBpcyBjb3JyZWN0LCBhY2NvdW50aW5nIGZvciB0aGUKLQkgKiBwb3NzaWJpbGl0eSBpdCdzIHJlbGF0aXZlIHRoZSBjd2QKLQkgKi8KLQlyZXR1cm4gb3BfcmVhbHBhdGgob3JpZ2ZpbGUpOwotfQotCi0KLXZvaWQgb3V0cHV0X3NvdXJjZShwYXRoX2ZpbHRlciBjb25zdCAmIGZpbHRlcikKLXsKLQlib29sIGNvbnN0IHNlcGFyYXRlX2ZpbGUgPSAhb3V0cHV0X2Rpci5lbXB0eSgpOwotCi0JaWYgKCFzZXBhcmF0ZV9maWxlKQotCQlvdXRwdXRfaW5mbyhjb3V0KTsKLQotCXZlY3RvcjxkZWJ1Z19uYW1lX2lkPiBmaWxlbmFtZXMgPQotCQlzYW1wbGVzLT5zZWxlY3RfZmlsZW5hbWUob3B0aW9uczo6dGhyZXNob2xkKTsKLQotCWZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IGZpbGVuYW1lcy5zaXplKCkgOyArK2kpIHsKLQkJc3RyaW5nIGNvbnN0ICYgc291cmNlID0gbG9jYXRlX3NvdXJjZV9maWxlKGZpbGVuYW1lc1tpXSk7Ci0KLQkJaWYgKCFmaWx0ZXIubWF0Y2goc291cmNlKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmc3RyZWFtIGluKHNvdXJjZS5jX3N0cigpKTsKLQotCQkvLyBpdCBpcyBjb21tb24gdG8gaGF2ZSBlbXB0eSBmaWxlbmFtZSBkdWUgdG8gdGhlIGxhY2sKLQkJLy8gb2YgZGVidWcgaW5mbyAoZWcgX2luaXQgZnVuY3Rpb24pIHNvIHdhcm4gb25seQotCQkvLyBpZiB0aGUgZmlsZW5hbWUgaXMgbm9uIGVtcHR5LiBUaGUgY2FzZTogbm8gZGVidWcKLQkJLy8gaW5mbyBhdCBhbGwgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkLgotCQlpZiAoKCFpbikgJiYgc291cmNlLmxlbmd0aCgpKSB7Ci0JCQljZXJyIDw8ICJvcGFubm90YXRlICh3YXJuaW5nKTogdW5hYmxlIHRvIG9wZW4gZm9yICIKLQkJCSAgICAgInJlYWRpbmc6ICIgPDwgc291cmNlIDw8IGVuZGw7Ci0JCX0KLQotCQlpZiAoc291cmNlLmxlbmd0aCgpKSB7Ci0JCQlvdXRwdXRfb25lX2ZpbGUoaW4sIGZpbGVuYW1lc1tpXSwgc291cmNlKTsKLQkJfQotCX0KLX0KLQotCi1ib29sIGFubm90YXRlX3NvdXJjZShsaXN0PHN0cmluZz4gY29uc3QgJiBpbWFnZXMpCi17Ci0JYW5ub3RhdGlvbl9maWxsID0gZ2V0X2Fubm90YXRpb25fZmlsbCgpOwotCi0JaWYgKCFvdXRwdXRfZGlyLmVtcHR5KCkpIHsKLQotCQlpZiAoY3JlYXRlX3BhdGgob3V0cHV0X2Rpci5jX3N0cigpKSkgewotCQkJY2VyciA8PCAidW5hYmxlIHRvIGNyZWF0ZSAiIDw8IG91dHB1dF9kaXIKLQkJCSAgICAgPDwgIiBkaXJlY3Rvcnk6ICIgPDwgZW5kbDsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCS8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGguCi0JCW91dHB1dF9kaXIgPSBvcF9yZWFscGF0aChvdXRwdXRfZGlyKTsKLQkJaWYgKG91dHB1dF9kaXIubGVuZ3RoKCkgJiYKLQkJICAgIG91dHB1dF9kaXJbb3V0cHV0X2Rpci5sZW5ndGgoKSAtIDFdICE9ICcvJykKLQkJCW91dHB1dF9kaXIgKz0gJy8nOwotCi0JCS8qIERvbid0IGxldCB0aGUgdXNlciBzdG9tcCBvbiB0aGVpciBzb3VyY2VzICovCi0JCWlmIChvdXRwdXRfZGlyID09ICIvIikgewotCQkJY2VyciA8PCAiT3V0cHV0IHBhdGggb2YgLyB3b3VsZCBvdmVyLXdyaXRlIHRoZSAiCi0JCQkJInNvdXJjZSBmaWxlcyIgPDwgZW5kbDsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCWlmIChhc3NlbWJseSkgewotCQlib29sIHNvbWVfb3V0cHV0ID0gZmFsc2U7Ci0KLQkJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGltYWdlcy5iZWdpbigpOwotCQlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGltYWdlcy5lbmQoKTsKLQotCQlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCQlpZiAob3V0cHV0X2FzbSgqaXQpKSB7Ci0JCQkJc29tZV9vdXRwdXQgPSB0cnVlOwotCQkJfQotCQl9Ci0KLQkJaWYgKCFzb21lX291dHB1dCkgewotCQkJLy8gSXQncyB0aGUgb25seSBjYXNlIHdlIG11c3QgY2FyZSBzaW5jZSB3ZSBrbm93IHRoZQotCQkJLy8gc2VsZWN0ZWQgaW1hZ2Ugc2V0IGlzIG5vdCBlbXB0eQotCQkJY2VyciA8PCAic2VsZWN0ZWQgaW1hZ2Ugc2V0IGRvZXNuJ3QgY29udGFpbiBhbnkgb2YgIgotCQkJICAgICA8PCAidGhlIHNlbGVjdGVkIHN5bWJvbFxuIjsKLQkJfQotCX0gZWxzZSB7Ci0JCW91dHB1dF9zb3VyY2UoZmlsZV9maWx0ZXIpOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi0KLWludCBvcGFubm90YXRlKG9wdGlvbnM6OnNwZWMgY29uc3QgJiBzcGVjKQotewotCWhhbmRsZV9vcHRpb25zKHNwZWMpOwotCi0JbnJfZXZlbnRzID0gY2xhc3Nlcy52LnNpemUoKTsKLQotCXNhbXBsZXMucmVzZXQobmV3IHByb2ZpbGVfY29udGFpbmVyKHRydWUsIHRydWUpKTsKLQotCWxpc3Q8c3RyaW5nPiBpbWFnZXM7Ci0KLQlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGlwcm9maWxlcwotCQk9IGludmVydF9wcm9maWxlcyhvcHRpb25zOjphcmNoaXZlX3BhdGgsIGNsYXNzZXMsCi0JCQkJICBvcHRpb25zOjpleHRyYV9mb3VuZF9pbWFnZXMpOwotCi0JcmVwb3J0X2ltYWdlX2Vycm9ycyhpcHJvZmlsZXMpOwotCi0JbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6aXRlcmF0b3IgaXQgPSBpcHJvZmlsZXMuYmVnaW4oKTsKLQlsaXN0PGludmVydGVkX3Byb2ZpbGU+OjppdGVyYXRvciBjb25zdCBlbmQgPSBpcHJvZmlsZXMuZW5kKCk7Ci0KLQlib29sIGRlYnVnX2luZm8gPSBmYWxzZTsKLQlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCWJvb2wgdG1wID0gZmFsc2U7Ci0JCXBvcHVsYXRlX2Zvcl9pbWFnZShvcHRpb25zOjphcmNoaXZlX3BhdGgsICpzYW1wbGVzLCAqaXQsCi0JCSAgICAgICAgICAgICAgICAgICBvcHRpb25zOjpzeW1ib2xfZmlsdGVyLCAmdG1wKTsKLQkJaW1hZ2VzLnB1c2hfYmFjayhpdC0+aW1hZ2UpOwotCQlpZiAodG1wKQotCQkJZGVidWdfaW5mbyA9IHRydWU7Ci0JfQotCi0JaWYgKCFkZWJ1Z19pbmZvICYmICFvcHRpb25zOjphc3NlbWJseSkgewotCQljZXJyIDw8ICJubyBkZWJ1ZyBpbmZvcm1hdGlvbiBhdmFpbGFibGUgZm9yIGFueSBiaW5hcnkgIgotCQkgICAgIDw8ICJzZWxlY3RlZCBhbmQgLS1hc3NlbWJseSBub3QgcmVxdWVzdGVkXG4iOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JYW5ub3RhdGVfc291cmNlKGltYWdlcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBhcmd2W10pCi17Ci0JLy8gc2V0IHRoZSBpbnZvY2F0aW9uLCBmb3IgdGhlIGZpbGUgaGVhZGVycyBsYXRlcgotCWZvciAoaW50IGkgPSAwIDsgaSA8IGFyZ2MgOyArK2kpCi0JCWNtZGxpbmUgKz0gc3RyaW5nKGFyZ3ZbaV0pICsgIiAiOwotCi0JcmV0dXJuIHJ1bl9wcF90b29sKGFyZ2MsIGFyZ3YsIG9wYW5ub3RhdGUpOwotfQpkaWZmIC0tZ2l0IGEvcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcCBiL3BwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiY2I2OTQuLjAwMDAwMDAKLS0tIGEvcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wYW5ub3RhdGVfb3B0aW9ucy5jcHAKLSAqIE9wdGlvbnMgZm9yIG9wYW5ub3RhdGUgdG9vbAotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotI2luY2x1ZGUgInByb2ZpbGVfc3BlYy5oIgotI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKLSNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKLSNpbmNsdWRlICJvcGFubm90YXRlX29wdGlvbnMuaCIKLSNpbmNsdWRlICJwb3B0X29wdGlvbnMuaCIKLSNpbmNsdWRlICJjdmVyYi5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1wcm9maWxlX2NsYXNzZXMgY2xhc3NlczsKLQotbmFtZXNwYWNlIG9wdGlvbnMgewotCXN0cmluZyBhcmNoaXZlX3BhdGg7Ci0JZGVtYW5nbGVfdHlwZSBkZW1hbmdsZSA9IGRtdF9ub3JtYWw7Ci0Jc3RyaW5nIG91dHB1dF9kaXI7Ci0JdmVjdG9yPHN0cmluZz4gc2VhcmNoX2RpcnM7Ci0JdmVjdG9yPHN0cmluZz4gYmFzZV9kaXJzOwotCW1lcmdlX29wdGlvbiBtZXJnZV9ieTsKLQlwYXRoX2ZpbHRlciBmaWxlX2ZpbHRlcjsKLQlzdHJpbmdfZmlsdGVyIHN5bWJvbF9maWx0ZXI7Ci0JYm9vbCBzb3VyY2U7Ci0JYm9vbCBhc3NlbWJseTsKLQl2ZWN0b3I8c3RyaW5nPiBvYmpkdW1wX3BhcmFtczsKLQlib29sIGV4Y2x1ZGVfZGVwZW5kZW50OwotfQotCi0KLW5hbWVzcGFjZSB7Ci0KLXN0cmluZyBpbmNsdWRlX3N5bWJvbHM7Ci1zdHJpbmcgZXhjbHVkZV9zeW1ib2xzOwotc3RyaW5nIGluY2x1ZGVfZmlsZTsKLXN0cmluZyBleGNsdWRlX2ZpbGU7Ci1zdHJpbmcgZGVtYW5nbGVfb3B0aW9uID0gIm5vcm1hbCI7Ci12ZWN0b3I8c3RyaW5nPiBtZXJnZXNwZWM7Ci0KLXBvcHQ6Om9wdGlvbiBvcHRpb25zX2FycmF5W10gPSB7Ci0JcG9wdDo6b3B0aW9uKGRlbWFuZ2xlX29wdGlvbiwgImRlbWFuZ2xlIiwgJ0QnLAotCQkgICAgICJkZW1hbmdsZSBHTlUgQysrIHN5bWJvbCBuYW1lcyAoZGVmYXVsdCBub3JtYWwpIiwKLQkgICAgICAgICAgICAgIm5vbmV8bm9ybWFsfHNtYXJ0IiksCi0JcG9wdDo6b3B0aW9uKG9wdGlvbnM6Om91dHB1dF9kaXIsICJvdXRwdXQtZGlyIiwgJ28nLAotCQkgICAgICJvdXRwdXQgZGlyZWN0b3J5IiwgImRpcmVjdG9yeSBuYW1lIiksCi0JcG9wdDo6b3B0aW9uKG9wdGlvbnM6OnNlYXJjaF9kaXJzLCAic2VhcmNoLWRpcnMiLCAnZCcsCi0JICAgICAgICAgICAgICJkaXJlY3RvcmllcyB0byBsb29rIGZvciBzb3VyY2UgZmlsZXMiLCAiY29tbWEtc2VwYXJhdGVkIHBhdGhzIiksCi0JcG9wdDo6b3B0aW9uKG9wdGlvbnM6OmJhc2VfZGlycywgImJhc2UtZGlycyIsICdiJywKLQkgICAgICAgICAgICAgInNvdXJjZSBmaWxlIHByZWZpeGVzIHRvIHN0cmlwIiwgImNvbW1hLXNlcGFyYXRlZCBwYXRocyIpLAotCXBvcHQ6Om9wdGlvbihpbmNsdWRlX2ZpbGUsICJpbmNsdWRlLWZpbGUiLCAnXDAnLAotCQkgICAgICJpbmNsdWRlIHRoZXNlIGNvbW1hIHNlcGFyYXRlZCBmaWxlbmFtZSIsICJmaWxlbmFtZXMiKSwKLQlwb3B0OjpvcHRpb24oZXhjbHVkZV9maWxlLCAiZXhjbHVkZS1maWxlIiwgJ1wwJywKLQkJICAgICAiZXhjbHVkZSB0aGVzZSBjb21tYSBzZXBhcmF0ZWQgZmlsZW5hbWUiLCAiZmlsZW5hbWVzIiksCi0JcG9wdDo6b3B0aW9uKGluY2x1ZGVfc3ltYm9scywgImluY2x1ZGUtc3ltYm9scyIsICdpJywKLQkJICAgICAiaW5jbHVkZSB0aGVzZSBjb21tYSBzZXBhcmF0ZWQgc3ltYm9scyIsICJzeW1ib2xzIiksCi0JcG9wdDo6b3B0aW9uKGV4Y2x1ZGVfc3ltYm9scywgImV4Y2x1ZGUtc3ltYm9scyIsICdlJywKLQkJICAgICAiZXhjbHVkZSB0aGVzZSBjb21tYSBzZXBhcmF0ZWQgc3ltYm9scyIsICJzeW1ib2xzIiksCi0JcG9wdDo6b3B0aW9uKG9wdGlvbnM6Om9iamR1bXBfcGFyYW1zLCAib2JqZHVtcC1wYXJhbXMiLCAnXDAnLAotCQkgICAgICJhZGRpdGlvbmFsIHBhcmFtcyB0byBwYXNzIHRvIG9iamR1bXAiLCAicGFyYW1ldGVycyIpLAotCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpleGNsdWRlX2RlcGVuZGVudCwgImV4Y2x1ZGUtZGVwZW5kZW50IiwgJ3gnLAotCQkgICAgICJleGNsdWRlIGxpYnMsIGtlcm5lbCwgYW5kIG1vZHVsZSBzYW1wbGVzIGZvciBhcHBsaWNhdGlvbnMiKSwKLQlwb3B0OjpvcHRpb24obWVyZ2VzcGVjLCAibWVyZ2UiLCAnbScsCi0JCSAgICAgImNvbW1hIHNlcGFyYXRlZCBsaXN0IiwgImNwdSx0aWQsdGdpZCx1bml0bWFzayxhbGwiKSwKLQlwb3B0OjpvcHRpb24ob3B0aW9uczo6c291cmNlLCAic291cmNlIiwgJ3MnLCAib3V0cHV0IHNvdXJjZSIpLAotCXBvcHQ6Om9wdGlvbihvcHRpb25zOjphc3NlbWJseSwgImFzc2VtYmx5IiwgJ2EnLCAib3V0cHV0IGFzc2VtYmx5IiksCi0JcG9wdDo6b3B0aW9uKG9wdGlvbnM6OnRocmVzaG9sZF9vcHQsICJ0aHJlc2hvbGQiLCAndCcsCi0JCSAgICAgIm1pbmltdW0gcGVyY2VudGFnZSBuZWVkZWQgdG8gcHJvZHVjZSBvdXRwdXQiLAotCQkgICAgICJwZXJjZW50IiksCi19OwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLQotdm9pZCBoYW5kbGVfb3B0aW9ucyhvcHRpb25zOjpzcGVjIGNvbnN0ICYgc3BlYykKLXsKLQl1c2luZyBuYW1lc3BhY2Ugb3B0aW9uczsKLQotCWlmIChzcGVjLmZpcnN0LnNpemUoKSkgewotCQljZXJyIDw8ICJkaWZmZXJlbnRpYWwgcHJvZmlsZXMgbm90IGFsbG93ZWQiIDw8IGVuZGw7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlpZiAoIWFzc2VtYmx5ICYmICFzb3VyY2UpIHsKLQkJY2VyciA8PAkieW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCAtLXNvdXJjZSBvciAtLWFzc2VtYmx5XG4iOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JaWYgKCFvYmpkdW1wX3BhcmFtcy5lbXB0eSgpICYmICFhc3NlbWJseSkgewotCQljZXJyIDw8ICItLW9iamR1bXAtcGFyYW1zIGlzIG1lYW5pbmdsZXNzIHdpdGhvdXQgLS1hc3NlbWJseVxuIjsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWlmIChzZWFyY2hfZGlycy5lbXB0eSgpICYmICFiYXNlX2RpcnMuZW1wdHkoKSkgewotCQljZXJyIDw8ICItLWJhc2UtZGlycyBpcyB1c2VsZXNzIHVubGVzcyB5b3Ugc3BlY2lmeSBhbiAiCi0JCQkiYWx0ZXJuYXRpdmUgc291cmNlIGxvY2F0aW9uIHdpdGggLS1zZWFyY2gtZGlycyIKLQkJICAgICA8PCBlbmRsOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JaWYgKGFzc2VtYmx5ICYmICFvdXRwdXRfZGlyLmVtcHR5KCkpIHsKLQkJY2VyciA8PCAiLS1vdXRwdXQtZGlyIGlzIG1lYW5pbmdsZXNzIHdpdGggLS1hc3NlbWJseSIgPDwgZW5kbDsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCW9wdGlvbnM6OnN5bWJvbF9maWx0ZXIgPSBzdHJpbmdfZmlsdGVyKGluY2x1ZGVfc3ltYm9scywgZXhjbHVkZV9zeW1ib2xzKTsKLQotCW9wdGlvbnM6OmZpbGVfZmlsdGVyID0gcGF0aF9maWx0ZXIoaW5jbHVkZV9maWxlLCBleGNsdWRlX2ZpbGUpOwotCi0JcHJvZmlsZV9zcGVjIGNvbnN0IHBzcGVjID0KLQkJcHJvZmlsZV9zcGVjOjpjcmVhdGUoc3BlYy5jb21tb24sIG9wdGlvbnM6OmV4dHJhX2ZvdW5kX2ltYWdlcyk7Ci0KLQlsaXN0PHN0cmluZz4gc2FtcGxlX2ZpbGVzID0gcHNwZWMuZ2VuZXJhdGVfZmlsZV9saXN0KGV4Y2x1ZGVfZGVwZW5kZW50LCB0cnVlKTsKLQotCWFyY2hpdmVfcGF0aCA9IHBzcGVjLmdldF9hcmNoaXZlX3BhdGgoKTsKLQljdmVyYiA8PCB2c2ZpbGUgPDwgIkFyY2hpdmU6ICIgPDwgYXJjaGl2ZV9wYXRoIDw8IGVuZGw7Ci0KLQljdmVyYiA8PCB2c2ZpbGUgPDwgIk1hdGNoZWQgc2FtcGxlIGZpbGVzOiAiIDw8IHNhbXBsZV9maWxlcy5zaXplKCkKLQkgICAgICA8PCBlbmRsOwotCWNvcHkoc2FtcGxlX2ZpbGVzLmJlZ2luKCksIHNhbXBsZV9maWxlcy5lbmQoKSwKLQkgICAgIG9zdHJlYW1faXRlcmF0b3I8c3RyaW5nPihjdmVyYiA8PCB2c2ZpbGUsICJcbiIpKTsKLQotCWRlbWFuZ2xlID0gaGFuZGxlX2RlbWFuZ2xlX29wdGlvbihkZW1hbmdsZV9vcHRpb24pOwotCi0JLy8gd2UgYWx3YXlzIG1lcmdlIGJ1dCB0aGlzIGhhdmUgbm8gZWZmZWN0IG9uIG91dHB1dCBzaW5jZSBhdCBzb3VyY2UKLQkvLyBvciBhc3NlbWJseSBwb2ludCBvZiB2aWV3IHRoZSByZXN1bHQgd2lsbCBiZSBtZXJnZWQgYW55d2F5Ci0JbWVyZ2VfYnkgPSBoYW5kbGVfbWVyZ2Vfb3B0aW9uKG1lcmdlc3BlYywgZmFsc2UsIGV4Y2x1ZGVfZGVwZW5kZW50KTsKLQotCWNsYXNzZXMgPSBhcnJhbmdlX3Byb2ZpbGVzKHNhbXBsZV9maWxlcywgbWVyZ2VfYnkpOwotCi0JY3ZlcmIgPDwgdnNmaWxlIDw8ICJwcm9maWxlX2NsYXNzZXM6XG4iIDw8IGNsYXNzZXMgPDwgZW5kbDsKLQotCWlmIChjbGFzc2VzLnYuZW1wdHkoKSkgewotCQljZXJyIDw8ICJlcnJvcjogbm8gc2FtcGxlIGZpbGVzIGZvdW5kOiBwcm9maWxlIHNwZWNpZmljYXRpb24gIgotCQkgICAgICJ0b28gc3RyaWN0ID8iIDw8IGVuZGw7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9wcC9vcGFubm90YXRlX29wdGlvbnMuaCBiL3BwL29wYW5ub3RhdGVfb3B0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2U5NWNiLi4wMDAwMDAwCi0tLSBhL3BwL29wYW5ub3RhdGVfb3B0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcGFubm90YXRlX29wdGlvbnMuaAotICogT3B0aW9ucyBmb3Igb3Bhbm5vdGF0ZSB0b29sCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUEFOTk9UQVRFX09QVElPTlNfSAotI2RlZmluZSBPUEFOTk9UQVRFX09QVElPTlNfSAotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvbW1vbl9vcHRpb24uaCIKLSNpbmNsdWRlICJwYXRoX2ZpbHRlci5oIgotCi1jbGFzcyBwcm9maWxlX2NsYXNzZXM7Ci0KLW5hbWVzcGFjZSBvcHRpb25zIHsKLQlleHRlcm4gc3RkOjpzdHJpbmcgYXJjaGl2ZV9wYXRoOwotCWV4dGVybiBkZW1hbmdsZV90eXBlIGRlbWFuZ2xlOwotCWV4dGVybiBib29sIHNvdXJjZTsKLQlleHRlcm4gYm9vbCBhc3NlbWJseTsKLQlleHRlcm4gc3RyaW5nX2ZpbHRlciBzeW1ib2xfZmlsdGVyOwotCWV4dGVybiBwYXRoX2ZpbHRlciBmaWxlX2ZpbHRlcjsKLQlleHRlcm4gc3RkOjpzdHJpbmcgb3V0cHV0X2RpcjsKLQlleHRlcm4gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNlYXJjaF9kaXJzOwotCWV4dGVybiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYmFzZV9kaXJzOwotCWV4dGVybiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb2JqZHVtcF9wYXJhbXM7Ci0JZXh0ZXJuIGRvdWJsZSB0aHJlc2hvbGQ7Ci19Ci0KLS8vLyBjbGFzc2VzIG9mIHNhbXBsZSBmaWxlbmFtZXMgdG8gaGFuZGxlCi1leHRlcm4gcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXM7Ci0KLS8qKgotICogaGFuZGxlX29wdGlvbnMgLSBwcm9jZXNzIGNvbW1hbmQgbGluZQotICogQHBhcmFtIHNwZWMgIHByb2ZpbGUgc3BlY2lmaWNhdGlvbgotICoKLSAqIFByb2Nlc3MgdGhlIHNwZWMsIGZhdGFsbHkgY29tcGxhaW5pbmcgb24gZXJyb3IuCi0gKi8KLXZvaWQgaGFuZGxlX29wdGlvbnMob3B0aW9uczo6c3BlYyBjb25zdCAmIHNwZWMpOwotCi0jZW5kaWYgLy8gT1BBTk5PVEFURV9PUFRJT05TX0gKZGlmZiAtLWdpdCBhL3BwL29wYXJjaGl2ZS5jcHAgYi9wcC9vcGFyY2hpdmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDhlYTQ1Li4wMDAwMDAwCi0tLSBhL3BwL29wYXJjaGl2ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcGFyY2hpdmUuY3BwCi0gKiBJbXBsZW1lbnQgb3BhcmNoaXZlIHV0aWxpdHkKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzLCAyMDA0IE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBXaWxsIENvaGVuCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxmc3RyZWFtPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlICJvcF9maWxlLmgiCi0jaW5jbHVkZSAib3BfYmZkLmgiCi0jaW5jbHVkZSAib3BfY29uZmlnLmgiCi0jaW5jbHVkZSAib3BhcmNoaXZlX29wdGlvbnMuaCIKLSNpbmNsdWRlICJmaWxlX21hbmlwLmgiCi0jaW5jbHVkZSAiY3ZlcmIuaCIKLSNpbmNsdWRlICJpbWFnZV9lcnJvcnMuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIHsKLQotaW50IG9wYXJjaGl2ZShvcHRpb25zOjpzcGVjIGNvbnN0ICYgc3BlYykKLXsKLQloYW5kbGVfb3B0aW9ucyhzcGVjKTsKLQotCS8qIENoZWNrIHRvIHNlZSBpZiBkaXJlY3RvcnkgY2FuIGJlIGNyZWF0ZWQgKi8KLQlpZiAoY3JlYXRlX3BhdGgob3B0aW9uczo6b3V0ZGlyZWN0b3J5LmNfc3RyKCkpKSB7Ci0JCWNlcnIgPDwgIlVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAiIAotCQkgICAgIDw8CW9wdGlvbnM6Om91dGRpcmVjdG9yeSA8PCAiLiIgPDwgZW5kbDsKLQkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQkvKiBjb3B5IG92ZXIgZWFjaCBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIHRoZSBkZWJ1Z2luZm8gZmlsZXMgKi8KLQlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGlwcm9maWxlcwotCQk9IGludmVydF9wcm9maWxlcyhvcHRpb25zOjphcmNoaXZlX3BhdGgsIGNsYXNzZXMsCi0JCQkJICBvcHRpb25zOjpleHRyYV9mb3VuZF9pbWFnZXMpOwotCi0JcmVwb3J0X2ltYWdlX2Vycm9ycyhpcHJvZmlsZXMpOwotCi0JbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6aXRlcmF0b3IgaXQgPSBpcHJvZmlsZXMuYmVnaW4oKTsKLQlsaXN0PGludmVydGVkX3Byb2ZpbGU+OjppdGVyYXRvciBjb25zdCBlbmQgPSBpcHJvZmlsZXMuZW5kKCk7Ci0KLQljdmVyYiA8PCB2ZGVidWcgPDwgIihleGVfbmFtZXMpIiA8PCBlbmRsIDw8IGVuZGw7Ci0JZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotCQlzdHJpbmcgZXhlX25hbWUgPSBpdC0+aW1hZ2U7Ci0JCXN0cmluZyBleGVfYXJjaGl2ZV9maWxlID0gb3B0aW9uczo6b3V0ZGlyZWN0b3J5ICsgZXhlX25hbWU7Ci0KLQkJY3ZlcmIgPDwgdmRlYnVnIDw8IGV4ZV9uYW1lIDw8IGVuZGw7Ci0JCS8qIENyZWF0ZSBkaXJlY3RvcnkgZm9yIGV4ZWN1dGFibGUgZmlsZS4gKi8KLQkJaWYgKGNyZWF0ZV9wYXRoKGV4ZV9hcmNoaXZlX2ZpbGUuY19zdHIoKSkpIHsKLQkJCWNlcnIgPDwgIlVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAiCi0JCQkgICAgIDw8IGV4ZV9hcmNoaXZlX2ZpbGUgPDwgIi4iIDw8IGVuZGw7Ci0JCQlleGl0IChFWElUX0ZBSUxVUkUpOwotCQl9Ci0KLQkJLyogQ29weSBhY3R1YWwgZXhlY3V0YWJsZSBmaWxlcyAqLwotCQljb3B5X2ZpbGUob3B0aW9uczo6YXJjaGl2ZV9wYXRoICsgZXhlX25hbWUsIGV4ZV9hcmNoaXZlX2ZpbGUpOwotCi0JCS8qIElmIHRoZXJlIGFyZSBhbnkgZGVidWdpbmZvIGZpbGVzLCBjb3B5IHRoZW0gb3Zlci4KLQkJICogTmVlZCB0byBjb3B5IHRoZSBkZWJ1ZyBpbmZvIGZpbGUgaW4gdGhlIHNhbWUKLQkJICogZGlyZWN0b3J5IGFzIHRoZSBleGVjdXRhYmxlLiBUaGUgL3Vzci9saWIvZGVidWcKLQkJICogIHNlYXJjaCBwYXRoIGlzIG5vdCBnb2luZyB0byB3b3JrLgotCQkgKi8KLQkJYmZkICogaWJmZCA9IG9wZW5fYmZkKGV4ZV9uYW1lKTsKLQkJaWYgKGliZmQpIHsKLQkJCXN0cmluZyBnbG9iYWwob3B0aW9uczo6YXJjaGl2ZV9wYXRoICsgREVCVUdESVIpOwotCQkJc3RyaW5nIGRpcm5hbWUgPSBvcF9kaXJuYW1lKG9wdGlvbnM6OmFyY2hpdmVfcGF0aCArIAotCQkJCQkJICAgIGV4ZV9uYW1lKTsKLQkJCXN0cmluZyBkZWJ1Z19maWxlbmFtZTsKLQkJCWlmIChmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGUoaWJmZCwgZGlybmFtZSwgZ2xvYmFsLAotCQkJCWRlYnVnX2ZpbGVuYW1lKSkgewotCQkJCS8qIGZvdW5kIHNvbWV0aGluZyBjb3B5IGl0IG92ZXIgKi8KLQkJCQlzdHJpbmcgZGVzdF9kZWJ1ZyA9IG9wdGlvbnM6Om91dGRpcmVjdG9yeSArCi0JCQkJCWRpcm5hbWUgKyAiLyIgKwotCQkJCQlvcF9iYXNlbmFtZShkZWJ1Z19maWxlbmFtZSk7Ci0JCQkJY29weV9maWxlKGRlYnVnX2ZpbGVuYW1lLCBkZXN0X2RlYnVnKTsKLQkJCX0KLQkJCWJmZF9jbG9zZShpYmZkKTsKLQkJfQotCX0KLQotCS8qIGNvcHkgb3ZlciBlYWNoIG9mIHRoZSBzYW1wbGUgZmlsZXMgKi8KLQlsaXN0PHN0cmluZz46Oml0ZXJhdG9yIHNpdCA9IHNhbXBsZV9maWxlcy5iZWdpbigpOwotCWxpc3Q8c3RyaW5nPjo6aXRlcmF0b3IgY29uc3Qgc2VuZCA9IHNhbXBsZV9maWxlcy5lbmQoKTsKLQotCWN2ZXJiIDw8IHZkZWJ1ZyA8PCAiKHNhbXBsZV9uYW1lcykiIDw8IGVuZGwgPDwgZW5kbDsKLQotCS8qIENvcHkgb3ZlciBlYWNoIG9mIHRoZSBzYW1wbGUgZmlsZXMuICBUaGUgc2FtcGxlIGZpbGVzIGFyZQotCSAqIGNvcGllZCBhZnRlciB0aGUgZXhlY3V0YWJsZXMgdG8gYXZvaWQgdGhlIHNpdHVhdGlvbiB3aGVyZQotCSAqIGV4ZWN1dGFibGUgaXMgbmV3ZXIgdGhhbiB0aGUgc2FtcGxlIGZpbGUuCi0JICovCi0JZm9yICg7IHNpdCAhPSBzZW5kOyArK3NpdCkgewotCQlzdHJpbmcgc2FtcGxlX25hbWUgPSAqc2l0OwotCQlzdHJpbmcgc2FtcGxlX2Jhc2UgPSBzYW1wbGVfbmFtZTsKLQkJLyogR2V0IHJpZCBvZiB0aGUgdGhlIGFyY2hpdmVfcGF0aCBmcm9tIHRoZSBuYW1lICovCi0JCXNhbXBsZV9iYXNlLnJlcGxhY2Uoc2FtcGxlX2Jhc2UuZmluZChvcHRpb25zOjphcmNoaXZlX3BhdGgpLAotCQkJCSAgICBvcHRpb25zOjphcmNoaXZlX3BhdGguc2l6ZSgpLCAiIik7Ci0JCXN0cmluZyBzYW1wbGVfYXJjaGl2ZV9maWxlID0gb3B0aW9uczo6b3V0ZGlyZWN0b3J5ICsgc2FtcGxlX2Jhc2U7Ci0JCQotCQljdmVyYiA8PCB2ZGVidWcgPDwgKHNhbXBsZV9uYW1lKSA8PCBlbmRsOwotCQljdmVyYiA8PCB2ZGVidWcgPDwgIiBkZXN0cCAiIDw8IHNhbXBsZV9hcmNoaXZlX2ZpbGUgPDwgZW5kbDsKLQkJaWYgKGNyZWF0ZV9wYXRoKHNhbXBsZV9hcmNoaXZlX2ZpbGUuY19zdHIoKSkpIHsKLQkJCWNlcnIgPDwgIlVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAiCi0JCQkgICAgIDw8CXNhbXBsZV9hcmNoaXZlX2ZpbGUgPDwgIi4iIDw8IGVuZGw7Ci0JCQlleGl0IChFWElUX0ZBSUxVUkUpOwotCQl9Ci0KLQkJLyogQ29weSBvdmVyIGFjdHVhbCBzYW1wbGUgZmlsZS4gKi8KLQkJY29weV9maWxlKHNhbXBsZV9uYW1lLCBzYW1wbGVfYXJjaGl2ZV9maWxlKTsKLQl9Ci0KLQkvKiBjb3B5IG92ZXIgdGhlIC92YXIvbGliL29wcm9maWxlL2FiaSBmaWxlIGlmIGl0IGV4aXN0cyAqLwotCXN0cmluZyBhYmlfbmFtZSA9ICIvdmFyL2xpYi9vcHJvZmlsZS9hYmkiOwotCWNvcHlfZmlsZShvcHRpb25zOjphcmNoaXZlX3BhdGggKyBhYmlfbmFtZSwKLQkJICBvcHRpb25zOjpvdXRkaXJlY3RvcnkgKyBhYmlfbmFtZSk7Ci0KLQkvKiBjb3B5IG92ZXIgdGhlIC92YXIvbGliL29wcm9maWxlL29wcm9maWxlZC5sb2cgZmlsZSAqLwotCXN0cmluZyBsb2dfbmFtZSA9ICIvdmFyL2xpYi9vcHJvZmlsZS9vcHJvZmlsZWQubG9nIjsKLQljb3B5X2ZpbGUob3B0aW9uczo6YXJjaGl2ZV9wYXRoICsgbG9nX25hbWUsCi0JCSAgb3B0aW9uczo6b3V0ZGlyZWN0b3J5ICsgbG9nX25hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciBjb25zdCAqIGFyZ3ZbXSkKLXsKLQlydW5fcHBfdG9vbChhcmdjLCBhcmd2LCBvcGFyY2hpdmUpOwotfQpkaWZmIC0tZ2l0IGEvcHAvb3BhcmNoaXZlX29wdGlvbnMuY3BwIGIvcHAvb3BhcmNoaXZlX29wdGlvbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzA5ODhmLi4wMDAwMDAwCi0tLSBhL3BwL29wYXJjaGl2ZV9vcHRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wYXJjaGl2ZV9vcHRpb25zLmNwcAotICogT3B0aW9ucyBmb3Igb3BhcmNoaXZlIHRvb2wKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLCAyMDAzLCAyMDA0IE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBXaWxsaWFtIENvaGVuCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPGZzdHJlYW0+Ci0KLSNpbmNsdWRlICJwcm9maWxlX3NwZWMuaCIKLSNpbmNsdWRlICJhcnJhbmdlX3Byb2ZpbGVzLmgiCi0jaW5jbHVkZSAib3BhcmNoaXZlX29wdGlvbnMuaCIKLSNpbmNsdWRlICJwb3B0X29wdGlvbnMuaCIKLSNpbmNsdWRlICJzdHJpbmdfZmlsdGVyLmgiCi0jaW5jbHVkZSAiZmlsZV9tYW5pcC5oIgotI2luY2x1ZGUgImN2ZXJiLmgiCi0KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXM7Ci1saXN0PHN0cmluZz4gc2FtcGxlX2ZpbGVzOwotCi1uYW1lc3BhY2Ugb3B0aW9ucyB7Ci0Jc3RyaW5nIGFyY2hpdmVfcGF0aDsKLQlib29sIGV4Y2x1ZGVfZGVwZW5kZW50OwotCW1lcmdlX29wdGlvbiBtZXJnZV9ieTsKLQlzdHJpbmcgb3V0ZGlyZWN0b3J5OwotfQotCi0KLW5hbWVzcGFjZSB7Ci0KLXZlY3RvcjxzdHJpbmc+IG1lcmdlc3BlYzsKLQotcG9wdDo6b3B0aW9uIG9wdGlvbnNfYXJyYXlbXSA9IHsKLQlwb3B0OjpvcHRpb24ob3B0aW9uczo6b3V0ZGlyZWN0b3J5LCAib3V0cHV0LWRpcmVjdG9yeSIsICdvJywKLQkgICAgICAgICAgICAgIm91dHB1dCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5IiwgImRpcmVjdG9yeSIpLAotCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpleGNsdWRlX2RlcGVuZGVudCwgImV4Y2x1ZGUtZGVwZW5kZW50IiwgJ3gnLAotCQkgICAgICJleGNsdWRlIGxpYnMsIGtlcm5lbCwgYW5kIG1vZHVsZSBzYW1wbGVzIGZvciBhcHBsaWNhdGlvbnMiKQotfTsKLQotCi0vKioKLSAqIGNoZWNrIGluY29tcGF0aWJsZSBvciBtZWFuaW5nbGVzcyBvcHRpb25zCi0gKgotICovCi12b2lkIGNoZWNrX29wdGlvbnMoKQotewotCXVzaW5nIG5hbWVzcGFjZSBvcHRpb25zOwotCi0JLyogb3V0cHV0IGRpcmVjdG9yeSBpcyByZXF1aXJlZCAqLwotCWlmIChvdXRkaXJlY3Rvcnkuc2l6ZSgpID09IDApIHsKLQkJY2VyciA8PCAiUmVxdWlyZXMgLS1vdXRwdXQtZGlyZWN0b3J5IG9wdGlvbi4iIDw8IGVuZGw7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotCi12b2lkIGhhbmRsZV9vcHRpb25zKG9wdGlvbnM6OnNwZWMgY29uc3QgJiBzcGVjKQotewotCXVzaW5nIG5hbWVzcGFjZSBvcHRpb25zOwotCi0JaWYgKHNwZWMuZmlyc3Quc2l6ZSgpKSB7Ci0JCWNlcnIgPDwgImRpZmZlcmVudGlhbCBwcm9maWxlcyBub3QgYWxsb3dlZCIgPDwgZW5kbDsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCW1lcmdlX2J5ID0gaGFuZGxlX21lcmdlX29wdGlvbihtZXJnZXNwZWMsIHRydWUsIGV4Y2x1ZGVfZGVwZW5kZW50KTsKLQljaGVja19vcHRpb25zKCk7Ci0KLQlwcm9maWxlX3NwZWMgY29uc3QgcHNwZWMgPQotCQlwcm9maWxlX3NwZWM6OmNyZWF0ZShzcGVjLmNvbW1vbiwgZXh0cmFfZm91bmRfaW1hZ2VzKTsKLQotCXNhbXBsZV9maWxlcyA9IHBzcGVjLmdlbmVyYXRlX2ZpbGVfbGlzdChleGNsdWRlX2RlcGVuZGVudCwgZmFsc2UpOwotCi0JYXJjaGl2ZV9wYXRoID0gcHNwZWMuZ2V0X2FyY2hpdmVfcGF0aCgpOwotCWN2ZXJiIDw8IHZzZmlsZSA8PCAiQXJjaGl2ZTogIiA8PCBhcmNoaXZlX3BhdGggPDwgZW5kbDsKLQotCWN2ZXJiIDw8IHZzZmlsZSA8PCAiTWF0Y2hlZCBzYW1wbGUgZmlsZXM6ICIgPDwgc2FtcGxlX2ZpbGVzLnNpemUoKQotCSAgICAgIDw8IGVuZGw7Ci0JY29weShzYW1wbGVfZmlsZXMuYmVnaW4oKSwgc2FtcGxlX2ZpbGVzLmVuZCgpLAotCSAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGN2ZXJiIDw8IHZzZmlsZSwgIlxuIikpOwotCi0JY2xhc3NlcyA9IGFycmFuZ2VfcHJvZmlsZXMoc2FtcGxlX2ZpbGVzLCBtZXJnZV9ieSk7Ci0KLQljdmVyYiA8PCB2c2ZpbGUgPDwgInByb2ZpbGVfY2xhc3NlczpcbiIgPDwgY2xhc3NlcyA8PCBlbmRsOwotCi0JaWYgKGNsYXNzZXMudi5lbXB0eSgpKSB7Ci0JCWNlcnIgPDwgImVycm9yOiBubyBzYW1wbGUgZmlsZXMgZm91bmQ6IHByb2ZpbGUgc3BlY2lmaWNhdGlvbiAiCi0JCSAgICAgInRvbyBzdHJpY3QgPyIgPDwgZW5kbDsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3BwL29wYXJjaGl2ZV9vcHRpb25zLmggYi9wcC9vcGFyY2hpdmVfb3B0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmY3ODcyLi4wMDAwMDAwCi0tLSBhL3BwL29wYXJjaGl2ZV9vcHRpb25zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wYXJjaGl2ZV9vcHRpb25zLmgKLSAqIE9wdGlvbnMgZm9yIG9wYXJjaGl2ZSB0b29sCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgV2lsbCBDb2hlbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUEFSQ0hJVkVfT1BUSU9OU19ICi0jZGVmaW5lIE9QQVJDSElWRV9PUFRJT05TX0gKLQotI2luY2x1ZGUgImNvbW1vbl9vcHRpb24uaCIKLQotY2xhc3MgcHJvZmlsZV9jbGFzc2VzOwotY2xhc3MgbWVyZ2Vfb3B0aW9uOwotCi1uYW1lc3BhY2Ugb3B0aW9ucyB7Ci0JZXh0ZXJuIHN0ZDo6c3RyaW5nIGFyY2hpdmVfcGF0aDsKLQlleHRlcm4gYm9vbCBleGNsdWRlX2RlcGVuZGVudDsKLQlleHRlcm4gbWVyZ2Vfb3B0aW9uIG1lcmdlX2J5OwotCWV4dGVybiBzdGQ6OnN0cmluZyBvdXRkaXJlY3Rvcnk7Ci19Ci0KLS8vLyBBbGwgdGhlIGNob3NlbiBzYW1wbGUgZmlsZXMuCi1leHRlcm4gcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXM7Ci1leHRlcm4gc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiBzYW1wbGVfZmlsZXM7Ci0KLS8qKgotICogaGFuZGxlX29wdGlvbnMgLSBwcm9jZXNzIGNvbW1hbmQgbGluZQotICogQHBhcmFtIHNwZWMgIHByb2ZpbGUgc3BlY2lmaWNhdGlvbgotICoKLSAqIFByb2Nlc3MgdGhlIHNwZWMsIGZhdGFsbHkgY29tcGxhaW5pbmcgb24gZXJyb3IuCi0gKi8KLXZvaWQgaGFuZGxlX29wdGlvbnMob3B0aW9uczo6c3BlYyBjb25zdCAmIHNwZWMpOwotCi0jZW5kaWYgLy8gT1BBUkNISVZFX09QVElPTlNfSApkaWZmIC0tZ2l0IGEvcHAvb3BncHJvZi5jcHAgYi9wcC9vcGdwcm9mLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2ZGVhYy4uMDAwMDAwMAotLS0gYS9wcC9vcGdwcm9mLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMSArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wZ3Byb2YuY3BwCi0gKiBJbXBsZW1lbnQgb3BncHJvZiB1dGlsaXR5Ci0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgIm9wX2hlYWRlci5oIgotI2luY2x1ZGUgInByb2ZpbGUuaCIKLSNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKLSNpbmNsdWRlICJvcF9maWxlaW8uaCIKLSNpbmNsdWRlICJzdHJpbmdfZmlsdGVyLmgiCi0jaW5jbHVkZSAicHJvZmlsZV9jb250YWluZXIuaCIKLSNpbmNsdWRlICJhcnJhbmdlX3Byb2ZpbGVzLmgiCi0jaW5jbHVkZSAiaW1hZ2VfZXJyb3JzLmgiCi0jaW5jbHVkZSAib3BncHJvZl9vcHRpb25zLmgiCi0jaW5jbHVkZSAiY3ZlcmIuaCIKLSNpbmNsdWRlICJvcF9maWxlLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci0KLSNkZWZpbmUgR01PTl9WRVJTSU9OIDEKLSNkZWZpbmUgR01PTl9UQUdfVElNRV9ISVNUIDAKLSNkZWZpbmUgR01PTl9UQUdfQ0dfQVJDIDEKLQotc3RydWN0IGdtb25faGRyIHsKLQljaGFyIGNvb2tpZVs0XTsKLQl1MzIgdmVyc2lvbjsKLQl1MzIgc3BhcmVbM107Ci19OwotCi0KLXZvaWQgb3Bfd3JpdGVfdm1hKEZJTEUgKiBmcCwgb3BfYmZkIGNvbnN0ICYgYWJmZCwgYmZkX3ZtYSB2bWEpCi17Ci0JLy8gYmZkIHZtYSB3cml0ZSBzaXplIGlzIGEgcGVyIGJpbmFyeSBwcm9wZXJ0eSBub3QgYSBiZmQKLQkvLyBjb25maWd1cmF0aW9uIHByb3BlcnR5Ci0Jc3dpdGNoIChhYmZkLmJmZF9hcmNoX2JpdHNfcGVyX2FkZHJlc3MoKSkgewotCQljYXNlIDMyOgotCQkJb3Bfd3JpdGVfdTMyKGZwLCB2bWEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjQ6Ci0JCQlvcF93cml0ZV91NjQoZnAsIHZtYSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNlcnIgPDwgIm9wcm9maWxlOiB1bmtub3duIHZtYSBzaXplIGZvciB0aGlzIGJpbmFyeVxuIjsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci19Ci0KLQotdm9pZCBnZXRfdm1hX3JhbmdlKGJmZF92bWEgJiBtaW4sIGJmZF92bWEgJiBtYXgsCi0gICAgICAgICAgICAgICAgICAgcHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBzYW1wbGVzKQotewotCW1pbiA9IGJmZF92bWEoLTEpOwotCW1heCA9IDA7Ci0KLQlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGl0ICA9IHNhbXBsZXMuYmVnaW4oKTsKLQlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGVuZCA9IHNhbXBsZXMuZW5kKCk7Ci0JZm9yICg7IGl0ICE9IGVuZCA7ICsraXQpIHsKLQkJaWYgKGl0LT5zZWNvbmQudm1hIDwgbWluKQotCQkJbWluID0gaXQtPnNlY29uZC52bWE7Ci0JCWlmIChpdC0+c2Vjb25kLnZtYSA+IG1heCkKLQkJCW1heCA9IGl0LT5zZWNvbmQudm1hOwotCX0KLQotCWlmIChtaW4gPT0gYmZkX3ZtYSgtMSkpCi0JCW1pbiA9IDA7Ci0JLy8gd2UgbXVzdCByZXR1cm4gYSByYW5nZSBbbWluLCBtYXgpIG5vdCBhIHJhbmdlIFttaW4sIG1heF0KLQlpZiAobWF4ICE9IDApCi0JCW1heCArPSAxOwotfQotCi0KLS8qKgotICogQHBhcmFtIGFiZmQgIGJmZCBvYmplY3QKLSAqIEBwYXJhbSBzYW1wbGVzX2ZpbGVzICBwcm9maWxlIGNvbnRhaW5lciB0byBhY3Qgb24KLSAqIEBwYXJhbSBnYXAgIGEgcG93ZXIgb2YgMgotICoKLSAqIHJldHVybiB0cnVlIGlmIGFsbCBzYW1wbGUgaW4gc2FtcGxlc19maWxlcyBhcmUgYXQgbGVhc3QgYWxpZ25lZCBvbiBnYXAuIFRoaXMKLSAqIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGF0IHJ1bnRpbWUgdGhlIHJpZ2h0IHNpemUgb2YgZ3Byb2YgYmluIHNpemUKLSAqIHJlZHVjaW5nIGdtb24ub3V0IG9uIGFyY2ggd2l0aCBmaXhlZCBzaXplIGluc3RydWN0aW9uIGxlbmd0aAotICoKLSAqLwotYm9vbCBhbGlnbmVkX3NhbXBsZXMocHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBzYW1wbGVzLCBpbnQgZ2FwKQotewotCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgaXQgID0gc2FtcGxlcy5iZWdpbigpOwotCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgZW5kID0gc2FtcGxlcy5lbmQoKTsKLQlmb3IgKDsgaXQgIT0gZW5kIDsgKytpdCkgewotCQlpZiAoaXQtPnNlY29uZC52bWEgJSBnYXApCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLQotdm9pZCBvdXRwdXRfY2coRklMRSAqIGZwLCBvcF9iZmQgY29uc3QgJiBhYmZkLCBwcm9maWxlX3QgY29uc3QgJiBjZ19kYikKLXsKLQlvcGRfaGVhZGVyIGNvbnN0ICYgaGVhZGVyID0gY2dfZGIuZ2V0X2hlYWRlcigpOwotCWJmZF92bWEgb2Zmc2V0ID0gMDsKLQlpZiAoaGVhZGVyLmlzX2tlcm5lbCB8fCBoZWFkZXIuYW5vbl9zdGFydCkKLQkJb2Zmc2V0ID0gYWJmZC5nZXRfc3RhcnRfb2Zmc2V0KGhlYWRlci5hbm9uX3N0YXJ0KTsKLSAKLQlwcm9maWxlX3Q6Oml0ZXJhdG9yX3BhaXIgcF9pdCA9IGNnX2RiLnNhbXBsZXNfcmFuZ2UoKTsKLQlmb3IgKDsgcF9pdC5maXJzdCAhPSBwX2l0LnNlY29uZDsgKytwX2l0LmZpcnN0KSB7Ci0JCWJmZF92bWEgZnJvbSA9IHBfaXQuZmlyc3Qudm1hKCkgPj4gMzI7Ci0JCWJmZF92bWEgdG8gPSBwX2l0LmZpcnN0LnZtYSgpICYgMHhmZmZmZmZmZjsKLQotCQlvcF93cml0ZV91OChmcCwgR01PTl9UQUdfQ0dfQVJDKTsKLQkJb3Bfd3JpdGVfdm1hKGZwLCBhYmZkLCBhYmZkLm9mZnNldF90b19wYyhmcm9tICsgb2Zmc2V0KSk7Ci0JCW9wX3dyaXRlX3ZtYShmcCwgYWJmZCwgYWJmZC5vZmZzZXRfdG9fcGModG8gKyBvZmZzZXQpKTsKLQkJb3Bfd3JpdGVfdTMyKGZwLCBwX2l0LmZpcnN0LmNvdW50KCkpOwotCX0KLX0KLQotCi12b2lkIG91dHB1dF9ncHJvZihvcF9iZmQgY29uc3QgJiBhYmZkLCBwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHNhbXBsZXMsCi0gICAgICAgICAgICAgICAgICBwcm9maWxlX3QgY29uc3QgJiBjZ19kYiwgc3RyaW5nIGNvbnN0ICYgZ21vbl9maWxlbmFtZSkKLXsKLQlzdGF0aWMgZ21vbl9oZHIgaGRyID0geyB7ICdnJywgJ20nLCAnbycsICduJyB9LCBHTU9OX1ZFUlNJT04sIHswLCAwLCAwIH0gfTsKLQotCWJmZF92bWEgbG93X3BjOwotCWJmZF92bWEgaGlnaF9wYzsKLQotCS8qIEZJWE1FIHdvcnRoIHRvIHRyeSBtb3JlIG11bHRpcGxpZXIgPwkqLwotCWludCBtdWx0aXBsaWVyID0gMjsKLQlpZiAoYWxpZ25lZF9zYW1wbGVzKHNhbXBsZXMsIDQpKQotCQltdWx0aXBsaWVyID0gODsKLQotCWN2ZXJiIDw8IHZkZWJ1ZyA8PCAib3Bncm9mIG11bHRpcGxpZXI6ICIgPDwgbXVsdGlwbGllciA8PCBlbmRsOwotCi0JZ2V0X3ZtYV9yYW5nZShsb3dfcGMsIGhpZ2hfcGMsIHNhbXBsZXMpOwotCi0JY3ZlcmIgPDwgdmRlYnVnIDw8ICJsb3dfcGM6ICIgPDwgaGV4IDw8IGxvd19wYyA8PCAiICIgPDwgImhpZ2hfcGM6ICIKLQkgICAgICA8PCBoaWdoX3BjIDw8IGRlYyA8PCBlbmRsOwotCi0JLy8gcm91bmQtZG93biBsb3dfcGMgdG8gZW5zdXJlIGJpbiBudW1iZXIgaXMgY29ycmVjdCBpbiB0aGUgaW5uZXIgbG9vcAotCWxvd19wYyA9IChsb3dfcGMgLyBtdWx0aXBsaWVyKSAqIG11bHRpcGxpZXI7Ci0JLy8gcm91bmQtdXAgaGlnaF9wYyB0byBlbnN1cmUgYSBjb3JyZWN0IGhpc3RzaXplIGNhbGN1bHVzCi0JaGlnaF9wYyA9ICgoaGlnaF9wYyArIG11bHRpcGxpZXIgLSAxKSAvIG11bHRpcGxpZXIpICogbXVsdGlwbGllcjsKLQotCWN2ZXJiIDw8IHZkZWJ1ZyA8PCAibG93X3BjOiAiIDw8IGhleCA8PCBsb3dfcGMgPDwgIiAiIDw8ICJoaWdoX3BjOiAiCi0JICAgICAgPDwgaGlnaF9wYyA8PCBkZWMgPDwgZW5kbDsKLQotCXNpemVfdCBoaXN0c2l6ZSA9IChoaWdoX3BjIC0gbG93X3BjKSAvIG11bHRpcGxpZXI7Ci0KLQkvLyBGSVhNRTogbXVzdCB3ZSBza2lwIHRoZSBmbGF0IHByb2ZpbGUgd3JpdGUgaWYgaGlzdHNpemUgPT0gMCA/Ci0JLy8gKHRoaXMgY2FuIG9jY3VyIHdpdGggY2FsbGdyYXBoIHcvbyBzYW1wbGVzIHRvIHRoZSBiaW5hcnkpIGJ1dCBpbgotCS8vIHRoaXMgY2FzZSB1c2VyIG11c3QgZ3Byb2YgLS1uby1mbGF0LXByb2ZpbGUgd2hpd2ggaXMgYSBiaXQgYm9yaW5nCi0JLy8gYW5kIHJlc3VsdCAqc2VlbXMqIHdlaXJkcy4KLQotCUZJTEUgKiBmcCA9IG9wX29wZW5fZmlsZShnbW9uX2ZpbGVuYW1lLmNfc3RyKCksICJ3Iik7Ci0KLQlvcF93cml0ZV9maWxlKGZwLCAmaGRyLCBzaXplb2YoZ21vbl9oZHIpKTsKLQlvcF93cml0ZV91OChmcCwgR01PTl9UQUdfVElNRV9ISVNUKTsKLQotCW9wX3dyaXRlX3ZtYShmcCwgYWJmZCwgbG93X3BjKTsKLQlvcF93cml0ZV92bWEoZnAsIGFiZmQsIGhpZ2hfcGMpOwotCS8qIHNpemUgb2YgaGlzdG9ncmFtICovCi0Jb3Bfd3JpdGVfdTMyKGZwLCBoaXN0c2l6ZSk7Ci0JLyogcHJvZmlsaW5nIHJhdGUgKi8KLQlvcF93cml0ZV91MzIoZnAsIDEpOwotCW9wX3dyaXRlX2ZpbGUoZnAsICJzYW1wbGVzXDBcMFwwXDBcMFwwXDBcMCIsIDE1KTsKLQkvKiBhYmJyZXZpYXRpb24gKi8KLQlvcF93cml0ZV91OChmcCwgJzEnKTsKLQotCXUxNiAqIGhpc3QgPSAodTE2Kil4Y2FsbG9jKGhpc3RzaXplLCBzaXplb2YodTE2KSk7Ci0KLQlwcm9maWxlX2NvbnRhaW5lcjo6c3ltYm9sX2Nob2ljZSBjaG9pY2U7Ci0JY2hvaWNlLnRocmVzaG9sZCA9IG9wdGlvbnM6OnRocmVzaG9sZDsKLQlzeW1ib2xfY29sbGVjdGlvbiBzeW1ib2xzID0gc2FtcGxlcy5zZWxlY3Rfc3ltYm9scyhjaG9pY2UpOwotCi0Jc3ltYm9sX2NvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIHNpdCA9IHN5bWJvbHMuYmVnaW4oKTsKLQlzeW1ib2xfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3Igc2VuZCA9IHN5bWJvbHMuZW5kKCk7Ci0KLQlmb3IgKDsgc2l0ICE9IHNlbmQ7ICsrc2l0KSB7Ci0JCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgaXQgID0gc2FtcGxlcy5iZWdpbigqc2l0KTsKLQkJc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBlbmQgPSBzYW1wbGVzLmVuZCgqc2l0KTsKLQkJZm9yICg7IGl0ICE9IGVuZCA7ICsraXQpIHsKLQkJCXUzMiBwb3MgPSAoaXQtPnNlY29uZC52bWEgLSBsb3dfcGMpIC8gbXVsdGlwbGllcjsKLQkJCXUzMiBjb3VudCA9IGl0LT5zZWNvbmQuY291bnRzWzBdOwotCi0JCQlpZiAocG9zID49IGhpc3RzaXplKSB7Ci0JCQkJY2VyciA8PCAiQm9ndXMgaGlzdG9ncmFtIGJpbiAiIDw8IHBvcwotCQkJCSAgICAgPDwgIiwgbGFyZ2VyIHRoYW4gIiA8PCBwb3MgPDwgIiAhXG4iOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQotCQkJaWYgKGhpc3RbcG9zXSArIGNvdW50ID4gKHUxNiktMSkgewotCQkJCWhpc3RbcG9zXSA9ICh1MTYpLTE7Ci0JCQkJY2VyciA8PAkiV2FybmluZzogY2FwcGluZyBzYW1wbGUgY291bnQgYnkgIgotCQkJCSAgICAgPDwgaGlzdFtwb3NdICsgY291bnQgLSAoKHUxNiktMSkgPDwgZW5kbDsKLQkJCX0gZWxzZSB7Ci0JCQkJaGlzdFtwb3NdICs9ICh1MTYpY291bnQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlvcF93cml0ZV9maWxlKGZwLCBoaXN0LCBoaXN0c2l6ZSAqIHNpemVvZih1MTYpKTsKLQotCWlmICghY2dfZGIuZW1wdHkoKSkKLQkJb3V0cHV0X2NnKGZwLCBhYmZkLCBjZ19kYik7Ci0KLQlvcF9jbG9zZV9maWxlKGZwKTsKLQotCWZyZWUoaGlzdCk7Ci19Ci0KLQotdm9pZAotbG9hZF9zYW1wbGVzKG9wX2JmZCBjb25zdCAmIGFiZmQsIGxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+IGNvbnN0ICYgZmlsZXMsCi0gICAgICAgICAgICAgICAgICBzdHJpbmcgY29uc3QgJiBpbWFnZSwgcHJvZmlsZV9jb250YWluZXIgJiBzYW1wbGVzKQotewotCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpbGVzLmJlZ2luKCk7Ci0JbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGZpbGVzLmVuZCgpOwotCi0JZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotCQkvLyB3ZSBjYW4gZ2V0IGNhbGwgZ3JhcGggdy9vIGFueSBzYW1wbGVzIHRvIHRoZSBiaW5hcnkKLQkJaWYgKGl0LT5zYW1wbGVfZmlsZW5hbWUuZW1wdHkoKSkKLQkJCWNvbnRpbnVlOwotCQkJCi0JCWN2ZXJiIDw8IHZzZmlsZSA8PCAibG9hZGluZyBmbGF0IHNhbXBsZXMgZmlsZXMgOiAiCi0JCSAgICAgIDw8IGl0LT5zYW1wbGVfZmlsZW5hbWUgPDwgZW5kbDsKLQotCQlwcm9maWxlX3QgcHJvZmlsZTsKLQotCQlwcm9maWxlLmFkZF9zYW1wbGVfZmlsZShpdC0+c2FtcGxlX2ZpbGVuYW1lKTsKLQkJcHJvZmlsZS5zZXRfb2Zmc2V0KGFiZmQpOwotCi0JCWNoZWNrX210aW1lKGFiZmQuZ2V0X2ZpbGVuYW1lKCksIHByb2ZpbGUuZ2V0X2hlYWRlcigpKTsKLQotCQlzYW1wbGVzLmFkZChwcm9maWxlLCBhYmZkLCBpbWFnZSwgMCk7Ci0JfQotfQotCi0KLXZvaWQgbG9hZF9jZyhwcm9maWxlX3QgJiBjZ19kYiwgbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz4gY29uc3QgJiBmaWxlcykKLXsKLQlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWxlcy5iZWdpbigpOwotCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQgPSBmaWxlcy5lbmQoKTsKLQotCS8qIHRoZSBsaXN0IG9mIG5vbiBjZyBmaWxlcyBpcyBhIHN1cGVyIHNldCBvZiB0aGUgbGlzdCBvZiBjZyBmaWxlCi0JICogKG1vZHVsZSBhbHdheXMgbG9nIGEgc2FtcGxlcyB0byBub24tY2cgZmlsZXMgYmVmb3JlIGxvZ2dpbmcKLQkgKiBjYWxsIHN0YWNrKSBzbyBieSB1c2luZyB0aGUgbGlzdCBvZiBub24tY2cgZmlsZSB3ZSBhcmUgc3VyZSB0byBnZXQKLQkgKiBhbGwgZXhpc3RpbmcgY2cgZmlsZXMuCi0JICovCi0JZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotCQlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNpdDsKLQkJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBjZW5kID0gaXQtPmNnX2ZpbGVzLmVuZCgpOwotCQlmb3IgKGNpdCA9IGl0LT5jZ19maWxlcy5iZWdpbigpOyBjaXQgIT0gY2VuZDsgKytjaXQpIHsKLQkJCS8vIEZJWE1FOiBkbyB3ZSBuZWVkIGZpbHRlcmluZyA/Ci0JCQkvKiBXZSBjYW4ndCBoYW5kbGUgc3RhcnRfb2Zmc2V0IG5vdyBidXQgYWZ0ZXIgc3BsaXR0aW5nCi0JCQkgKiBkYXRhIGluIGZyb20vdG8gZWlwLiAqLwotCQkJY3ZlcmIgPDwgdnNmaWxlIDw8ICJsb2FkaW5nIGNnIHNhbXBsZXMgZmlsZSA6ICIgCi0JCQkgICAgICA8PCAqY2l0IDw8IGVuZGw7Ci0JCQljZ19kYi5hZGRfc2FtcGxlX2ZpbGUoKmNpdCk7Ci0JCX0KLQl9Ci19Ci0KLQotaW50IG9wZ3Byb2Yob3B0aW9uczo6c3BlYyBjb25zdCAmIHNwZWMpCi17Ci0JaGFuZGxlX29wdGlvbnMoc3BlYyk7Ci0KLQlwcm9maWxlX2NvbnRhaW5lciBzYW1wbGVzKGZhbHNlLCB0cnVlKTsKLQotCWJvb2wgb2sgPSBpbWFnZV9wcm9maWxlLmVycm9yID09IGltYWdlX29rOwotCS8vIEZJWE1FOiBzeW1ib2xfZmlsdGVyIHdvdWxkIGJlIGFsbG93ZWQgdGhyb3VnaCBvcHRpb24KLQlvcF9iZmQgYWJmZChvcHRpb25zOjphcmNoaXZlX3BhdGgsIGltYWdlX3Byb2ZpbGUuaW1hZ2UsCi0JCSAgICBzdHJpbmdfZmlsdGVyKCksIG9rKTsKLQlpZiAoIW9rICYmIGltYWdlX3Byb2ZpbGUuZXJyb3IgPT0gaW1hZ2Vfb2spCi0JCWltYWdlX3Byb2ZpbGUuZXJyb3IgPSBpbWFnZV9mb3JtYXRfZmFpbHVyZTsKLQotCWlmIChpbWFnZV9wcm9maWxlLmVycm9yICE9IGltYWdlX29rKSB7Ci0JCXJlcG9ydF9pbWFnZV9lcnJvcihpbWFnZV9wcm9maWxlLCB0cnVlKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCXByb2ZpbGVfdCBjZ19kYjsKLQkKLQlpbWFnZV9ncm91cF9zZXQgY29uc3QgJiBncm91cHMgPSBpbWFnZV9wcm9maWxlLmdyb3Vwc1swXTsKLQlpbWFnZV9ncm91cF9zZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0OwotCWZvciAoaXQgPSBncm91cHMuYmVnaW4oKTsgaXQgIT0gZ3JvdXBzLmVuZCgpOyArK2l0KSB7Ci0JCWxvYWRfc2FtcGxlcyhhYmZkLCBpdC0+ZmlsZXMsIGltYWdlX3Byb2ZpbGUuaW1hZ2UsIHNhbXBsZXMpOwotCi0JCWxvYWRfY2coY2dfZGIsIGl0LT5maWxlcyk7Ci0JfQotCi0Jb3V0cHV0X2dwcm9mKGFiZmQsIHNhbXBsZXMsIGNnX2RiLCBvcHRpb25zOjpnbW9uX2ZpbGVuYW1lKTsKLQotCXJldHVybiAwOwotfQotCi0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICogYXJndltdKQotewotCXJldHVybiBydW5fcHBfdG9vbChhcmdjLCBhcmd2LCBvcGdwcm9mKTsKLX0KZGlmZiAtLWdpdCBhL3BwL29wZ3Byb2Zfb3B0aW9ucy5jcHAgYi9wcC9vcGdwcm9mX29wdGlvbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzMyYjAyLi4wMDAwMDAwCi0tLSBhL3BwL29wZ3Byb2Zfb3B0aW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqCi0gKiBAZmlsZSBvcGdwcm9mX29wdGlvbnMuY3BwCi0gKiBPcHRpb25zIGZvciBvcGdwcm9mIHRvb2wKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLSNpbmNsdWRlICJvcGdwcm9mX29wdGlvbnMuaCIKLSNpbmNsdWRlICJwb3B0X29wdGlvbnMuaCIKLSNpbmNsdWRlICJjdmVyYi5oIgotI2luY2x1ZGUgInByb2ZpbGVfc3BlYy5oIgotI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotaW52ZXJ0ZWRfcHJvZmlsZSBpbWFnZV9wcm9maWxlOwotCi1uYW1lc3BhY2Ugb3B0aW9ucyB7Ci0Jc3RyaW5nIGFyY2hpdmVfcGF0aDsKLQlzdHJpbmcgZ21vbl9maWxlbmFtZSA9ICJnbW9uLm91dCI7Ci0KLQkvLyBVZ2x5LCBmb3IgYnVpbGQgb25seQotCWRlbWFuZ2xlX3R5cGUgZGVtYW5nbGU7Ci19Ci0KLQotbmFtZXNwYWNlIHsKLQotcG9wdDo6b3B0aW9uIG9wdGlvbnNfYXJyYXlbXSA9IHsKLQlwb3B0OjpvcHRpb24ob3B0aW9uczo6Z21vbl9maWxlbmFtZSwgIm91dHB1dC1maWxlbmFtZSIsICdvJywKLQkgICAgICAgICAgICAgIm91dHB1dCBmaWxlbmFtZSwgZGVmYXVsdHMgdG8gZ21vbi5vdXQgaWYgbm90IHNwZWNpZmllZCIsCi0JICAgICAgICAgICAgICJmaWxlbmFtZSIpLAotCXBvcHQ6Om9wdGlvbihvcHRpb25zOjp0aHJlc2hvbGRfb3B0LCAidGhyZXNob2xkIiwgJ3QnLAotCQkgICAgICJtaW5pbXVtIHBlcmNlbnRhZ2UgbmVlZGVkIHRvIHByb2R1Y2Ugb3V0cHV0IiwKLQkJICAgICAicGVyY2VudCIpLAotfTsKLQotCi1ib29sIHRyeV9tZXJnZV9wcm9maWxlcyhwcm9maWxlX3NwZWMgY29uc3QgJiBzcGVjLCBib29sIGV4Y2x1ZGVfZGVwZW5kZW50KQotewotCWxpc3Q8c3RyaW5nPiBzYW1wbGVfZmlsZXMgPSBzcGVjLmdlbmVyYXRlX2ZpbGVfbGlzdChleGNsdWRlX2RlcGVuZGVudCwgZmFsc2UpOwotCi0JY3ZlcmIgPDwgdnNmaWxlCi0JICAgICAgPDwgIk1hdGNoZWQgc2FtcGxlIGZpbGVzOiAiIDw8IHNhbXBsZV9maWxlcy5zaXplKCkgPDwgZW5kbDsKLQljb3B5KHNhbXBsZV9maWxlcy5iZWdpbigpLCBzYW1wbGVfZmlsZXMuZW5kKCksCi0JICAgICBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oY3ZlcmIgPDwgdnNmaWxlLCAiXG4iKSk7Ci0KLQkvLyBvcGdwcm9mIG1lcmdlIGFsbCBieSBkZWZhdWx0Ci0JbWVyZ2Vfb3B0aW9uIG1lcmdlX2J5OwotCW1lcmdlX2J5LmNwdSA9IHRydWU7Ci0JbWVyZ2VfYnkubGliID0gdHJ1ZTsKLQltZXJnZV9ieS50aWQgPSB0cnVlOwotCW1lcmdlX2J5LnRnaWQgPSB0cnVlOwotCW1lcmdlX2J5LnVuaXRtYXNrID0gdHJ1ZTsKLQotCXByb2ZpbGVfY2xhc3NlcyBjbGFzc2VzCi0JCT0gYXJyYW5nZV9wcm9maWxlcyhzYW1wbGVfZmlsZXMsIG1lcmdlX2J5KTsKLQotCWN2ZXJiIDw8IHZzZmlsZSA8PCAicHJvZmlsZV9jbGFzc2VzOlxuIiA8PCBjbGFzc2VzIDw8IGVuZGw7Ci0KLQlzaXplX3QgbnJfY2xhc3NlcyA9IGNsYXNzZXMudi5zaXplKCk7Ci0KLQlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGlwcm9maWxlcwotCQk9IGludmVydF9wcm9maWxlcyhvcHRpb25zOjphcmNoaXZlX3BhdGgsIGNsYXNzZXMsCi0JCQkJICBvcHRpb25zOjpleHRyYV9mb3VuZF9pbWFnZXMpOwotCi0JaWYgKG5yX2NsYXNzZXMgPT0gMSAmJiBpcHJvZmlsZXMuc2l6ZSgpID09IDEpIHsKLQkJaW1hZ2VfcHJvZmlsZSA9ICooaXByb2ZpbGVzLmJlZ2luKCkpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvLyBjb21lIHJvdW5kIGZvciBhbm90aGVyIHRyeQotCWlmIChleGNsdWRlX2RlcGVuZGVudCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGlwcm9maWxlcy5lbXB0eSgpKSB7Ci0JCWNlcnIgPDwgImVycm9yOiBubyBzYW1wbGUgZmlsZXMgZm91bmQ6IHByb2ZpbGUgc3BlY2lmaWNhdGlvbiAiCi0JCSAgICAgInRvbyBzdHJpY3QgPyIgPDwgZW5kbDsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWlmIChucl9jbGFzc2VzID4gMSB8fCBpcHJvZmlsZXMuc2l6ZSgpID4gMSkgewotCQljZXJyIDw8ICJlcnJvcjogc3BlY2lmeSBleGFjdGx5IG9uZSBiaW5hcnkgdG8gcHJvY2VzcyAiCi0JCSAgICAgImFuZCBnaXZlIGFuIGV2ZW50OiBvciBjb3VudDogc3BlY2lmaWNhdGlvbiBpZiBuZWNlc3NhcnkiCi0JCSAgICAgPDwgZW5kbDsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi0KLXZvaWQgaGFuZGxlX29wdGlvbnMob3B0aW9uczo6c3BlYyBjb25zdCAmIHNwZWMpCi17Ci0JaWYgKHNwZWMuZmlyc3Quc2l6ZSgpKSB7Ci0JCWNlcnIgPDwgImRpZmZlcmVudGlhbCBwcm9maWxlcyBub3QgYWxsb3dlZCIgPDwgZW5kbDsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCXByb2ZpbGVfc3BlYyBjb25zdCBwc3BlYyA9Ci0JCXByb2ZpbGVfc3BlYzo6Y3JlYXRlKHNwZWMuY29tbW9uLCBvcHRpb25zOjpleHRyYV9mb3VuZF9pbWFnZXMpOwotCi0Jb3B0aW9uczo6YXJjaGl2ZV9wYXRoID0gcHNwZWMuZ2V0X2FyY2hpdmVfcGF0aCgpOwotCWN2ZXJiIDw8IHZzZmlsZSA8PCAiQXJjaGl2ZTogIiA8PCBvcHRpb25zOjphcmNoaXZlX3BhdGggPDwgZW5kbDsKLQotCWN2ZXJiIDw8IHZzZmlsZSA8PCAib3V0cHV0IGZpbGVuYW1lOiAiIDw8IG9wdGlvbnM6Omdtb25fZmlsZW5hbWUKLQkgICAgICA8PCBlbmRsOwotCi0JLy8gd2UgZG8gYSBmaXJzdCB0cnkgd2l0aCBleGNsdWRlLWRlcGVuZGVudCBpZiBpdCBmYWlscyB3ZSBpbmNsdWRlCi0JLy8gZGVwZW5kZW50LiBGaXJzdCB0cnkgc2hvdWxkIGNhdGNoICJvcGdyb2YgL3Vzci9iaW4vbWFrZSIgd2hpbHN0Ci0JLy8gdGhlIHNlY29uZCBjYXRjaCAib3BncHJvZiAvbGliL2xpYmMtMi4yLjUuc28iCi0JaWYgKCF0cnlfbWVyZ2VfcHJvZmlsZXMocHNwZWMsIHRydWUpKSB7Ci0JCXRyeV9tZXJnZV9wcm9maWxlcyhwc3BlYywgZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3BwL29wZ3Byb2Zfb3B0aW9ucy5oIGIvcHAvb3BncHJvZl9vcHRpb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYmM1ODAuLjAwMDAwMDAKLS0tIGEvcHAvb3BncHJvZl9vcHRpb25zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9wZ3Byb2Zfb3B0aW9ucy5oCi0gKiBPcHRpb25zIGZvciBvcGdwcm9mIHRvb2wKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaWZuZGVmIE9QR1BST0ZfT1BUSU9OU19ICi0jZGVmaW5lIE9QR1BST0ZfT1BUSU9OU19ICi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJjb21tb25fb3B0aW9uLmgiCi0KLW5hbWVzcGFjZSBvcHRpb25zIHsKLQlleHRlcm4gc3RkOjpzdHJpbmcgYXJjaGl2ZV9wYXRoOwotCWV4dGVybiBzdGQ6OnN0cmluZyBnbW9uX2ZpbGVuYW1lOwotfQotCi1jbGFzcyBpbnZlcnRlZF9wcm9maWxlOwotCi0vLy8gYSBzZXQgb2Ygc2FtcGxlIGZpbGVuYW1lcyB0byBoYW5kbGUuCi1leHRlcm4gaW52ZXJ0ZWRfcHJvZmlsZSBpbWFnZV9wcm9maWxlOwotCi0vKioKLSAqIGhhbmRsZV9vcHRpb25zIC0gcHJvY2VzcyBjb21tYW5kIGxpbmUKLSAqIEBwYXJhbSBzcGVjICBwcm9maWxlIHNwZWNpZmljYXRpb24KLSAqCi0gKiBQcm9jZXNzIHRoZSBzcGVjLCBmYXRhbGx5IGNvbXBsYWluaW5nIG9uIGVycm9yLgotICovCi12b2lkIGhhbmRsZV9vcHRpb25zKG9wdGlvbnM6OnNwZWMgY29uc3QgJiBzcGVjKTsKLQotI2VuZGlmIC8vIE9QR1BST0ZfT1BUSU9OU19ICmRpZmYgLS1naXQgYS9wcC9vcHJlcG9ydC5jcHAgYi9wcC9vcHJlcG9ydC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwY2E5MWMuLjAwMDAwMDAKLS0tIGEvcHAvb3ByZXBvcnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQ1ICswLDAgQEAKLS8qKgotICogQGZpbGUgb3ByZXBvcnQuY3BwCi0gKiBJbXBsZW1lbnQgb3ByZXBvcnQgdXRpbGl0eQotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24KLSAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQotICovCi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxpb21hbmlwPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDxudW1lcmljPgotCi0jaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAic3RyZWFtX3V0aWwuaCIKLSNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKLSNpbmNsdWRlICJmaWxlX21hbmlwLmgiCi0jaW5jbHVkZSAib3ByZXBvcnRfb3B0aW9ucy5oIgotI2luY2x1ZGUgIm9wX2hlYWRlci5oIgotI2luY2x1ZGUgInByb2ZpbGUuaCIKLSNpbmNsdWRlICJwb3B1bGF0ZS5oIgotI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKLSNpbmNsdWRlICJwcm9maWxlX2NvbnRhaW5lci5oIgotI2luY2x1ZGUgImNhbGxncmFwaF9jb250YWluZXIuaCIKLSNpbmNsdWRlICJkaWZmX2NvbnRhaW5lci5oIgotI2luY2x1ZGUgInN5bWJvbF9zb3J0LmgiCi0jaW5jbHVkZSAiZm9ybWF0X291dHB1dC5oIgotI2luY2x1ZGUgImltYWdlX2Vycm9ycy5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgewotCi1zdGF0aWMgc2l6ZV90IG5yX2NsYXNzZXM7Ci0KLS8vLyBzdG9yYWdlIGZvciBhIG1lcmdlZCBmaWxlIHN1bW1hcnkKLXN0cnVjdCBzdW1tYXJ5IHsKLQljb3VudF9hcnJheV90IGNvdW50czsKLQlzdHJpbmcgbGliX2ltYWdlOwotCi0JYm9vbCBvcGVyYXRvcjwoc3VtbWFyeSBjb25zdCAmIHJocykgY29uc3QgewotCQlyZXR1cm4gb3B0aW9uczo6cmV2ZXJzZV9zb3J0Ci0JCSAgICA/IGNvdW50c1swXSA8IHJocy5jb3VudHNbMF0gOiByaHMuY291bnRzWzBdIDwgY291bnRzWzBdOwotCX0KLQotCS8vLyBhZGQgYSBzZXQgb2YgZmlsZXMgdG8gYSBzdW1tYXJ5Ci0Jc2l6ZV90IGFkZF9maWxlcyhsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPiBjb25zdCAmIGZpbGVzLAotCQkJIHNpemVfdCBwY2xhc3MpOwotfTsKLQotCi1zaXplX3Qgc3VtbWFyeTo6Ci1hZGRfZmlsZXMobGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz4gY29uc3QgJiBmaWxlcywgc2l6ZV90IHBjbGFzcykKLXsKLQlzaXplX3Qgc3VidG90YWwgPSAwOwotCi0JbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmlsZXMuYmVnaW4oKTsKLQlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gZmlsZXMuZW5kKCk7Ci0KLQlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0JCXNpemVfdCBjb3VudCA9IHByb2ZpbGVfdDo6c2FtcGxlX2NvdW50KGl0LT5zYW1wbGVfZmlsZW5hbWUpOwotCQljb3VudHNbcGNsYXNzXSArPSBjb3VudDsKLQkJc3VidG90YWwgKz0gY291bnQ7Ci0KLQkJLy8gRklYTUU6IGlzIGl0IHdvcnRoIChmb3Igbm93IHllcyBJIGV4cGVjdCBidWdzIC4uLikKLQkJaWYgKCFpdC0+Y2dfZmlsZXMuZW1wdHkoKSkgewotCQkJdGhyb3cgIm9wcmVwb3J0LmNwcDo6YWRkX2ZpbGVzKCk6IHVueHBlY3RlZCBub24gZW1wdHkgIgotCQkJCSJjZyBmaWxlIHNldFxuIjsKLQkJfQotCX0KLQotCXJldHVybiBzdWJ0b3RhbDsKLX0KLQotCi0vKioKLSAqIFN1bW1hcnkgb2YgYW4gYXBwbGljYXRpb246IGEgc2V0IG9mIGltYWdlIHN1bW1hcmllcwotICogZm9yIG9uZSBhcHBsaWNhdGlvbiwgaS5lLiBhbiBhcHBsaWNhdGlvbiBpbWFnZSBhbmQgYWxsCi0gKiBkZXBlbmRlbnQgaW1hZ2VzIHN1Y2ggYXMgbGlicmFyaWVzLgotICovCi1zdHJ1Y3QgYXBwX3N1bW1hcnkgewotCS8vLyB0b3RhbCBjb3VudCBvZiB1cyBhbmQgYWxsIGRlcGVuZGVudHMKLQljb3VudF9hcnJheV90IGNvdW50czsKLQkvLy8gdGhlIG1haW4gaW1hZ2UKLQlzdHJpbmcgaW1hZ2U7Ci0JLy8vIG91ciBkZXBlbmRlbnQgaW1hZ2VzCi0JdmVjdG9yPHN1bW1hcnk+IGRlcHM7Ci0KLQkvLy8gY29uc3RydWN0IGFuZCBmaWxsIGluIHRoZSBkYXRhCi0Jc2l6ZV90IGFkZF9wcm9maWxlKHByb2ZpbGVfc2V0IGNvbnN0ICYgcHJvZmlsZSwgc2l6ZV90IHBjbGFzcyk7Ci0KLQlib29sIG9wZXJhdG9yPChhcHBfc3VtbWFyeSBjb25zdCAmIHJocykgY29uc3QgewotCQlyZXR1cm4gb3B0aW9uczo6cmV2ZXJzZV9zb3J0IAotCQkgICAgPyBjb3VudHNbMF0gPCByaHMuY291bnRzWzBdIDogcmhzLmNvdW50c1swXSA8IGNvdW50c1swXTsKLQl9Ci0KLXByaXZhdGU6Ci0JLy8vIGZpbmQgYSBtYXRjaGluZyBzdW1tYXJ5IChpbmNsdWRpbmcgbWFpbiBhcHAgc3VtbWFyeSkKLQlzdW1tYXJ5ICYgZmluZF9zdW1tYXJ5KHN0cmluZyBjb25zdCAmIGltYWdlKTsKLX07Ci0KLQotc3VtbWFyeSAmIGFwcF9zdW1tYXJ5OjpmaW5kX3N1bW1hcnkoc3RyaW5nIGNvbnN0ICYgaW1hZ2UpCi17Ci0JdmVjdG9yPHN1bW1hcnk+OjppdGVyYXRvciBzaXQgPSBkZXBzLmJlZ2luKCk7Ci0JdmVjdG9yPHN1bW1hcnk+OjppdGVyYXRvciBjb25zdCBzZW5kID0gZGVwcy5lbmQoKTsKLQlmb3IgKDsgc2l0ICE9IHNlbmQ7ICsrc2l0KSB7Ci0JCWlmIChzaXQtPmxpYl9pbWFnZSA9PSBpbWFnZSkKLQkJCXJldHVybiAqc2l0OwotCX0KLQotCXN1bW1hcnkgc3VtbTsKLQlzdW1tLmxpYl9pbWFnZSA9IGltYWdlOwotCWRlcHMucHVzaF9iYWNrKHN1bW0pOwotCXJldHVybiBkZXBzLmJhY2soKTsKLX0KLQotCi1zaXplX3QgYXBwX3N1bW1hcnk6OmFkZF9wcm9maWxlKHByb2ZpbGVfc2V0IGNvbnN0ICYgcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBjbGFzcykKLXsKLQlzaXplX3QgZ3JvdXBfdG90YWwgPSAwOwotCi0JLy8gZmlyc3QgdGhlIG1haW4gaW1hZ2UKLQlzdW1tYXJ5ICYgc3VtbSA9IGZpbmRfc3VtbWFyeShwcm9maWxlLmltYWdlKTsKLQlzaXplX3QgYXBwX2NvdW50ID0gc3VtbS5hZGRfZmlsZXMocHJvZmlsZS5maWxlcywgcGNsYXNzKTsKLQljb3VudHNbcGNsYXNzXSArPSBhcHBfY291bnQ7Ci0JZ3JvdXBfdG90YWwgKz0gYXBwX2NvdW50OwotCi0JLy8gbm93IGFsbCBkZXBlbmRlbnQgaW1hZ2VzIGlmIGFueQotCWxpc3Q8cHJvZmlsZV9kZXBfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcm9maWxlLmRlcHMuYmVnaW4oKTsKLQlsaXN0PHByb2ZpbGVfZGVwX3NldD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IHByb2ZpbGUuZGVwcy5lbmQoKTsKLQotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJc3VtbWFyeSAmIHN1bW0gPSBmaW5kX3N1bW1hcnkoaXQtPmxpYl9pbWFnZSk7Ci0JCXNpemVfdCBsaWJfY291bnQgPSBzdW1tLmFkZF9maWxlcyhpdC0+ZmlsZXMsIHBjbGFzcyk7Ci0JCWNvdW50c1twY2xhc3NdICs9IGxpYl9jb3VudDsKLQkJZ3JvdXBfdG90YWwgKz0gbGliX2NvdW50OwotCX0KLQotCXJldHVybiBncm91cF90b3RhbDsKLX0KLQotCi0vLy8gYWxsIHRoZSBzdW1tYXJpZXMKLXN0cnVjdCBzdW1tYXJ5X2NvbnRhaW5lciB7Ci0Jc3VtbWFyeV9jb250YWluZXIodmVjdG9yPHByb2ZpbGVfY2xhc3M+IGNvbnN0ICYgcGNsYXNzZXMpOwotCi0JLy8vIGFsbCBtYXAgc3VtbWFyaWVzCi0JdmVjdG9yPGFwcF9zdW1tYXJ5PiBhcHBzOwotCS8vLyB0b3RhbCBjb3VudCBvZiBzYW1wbGVzIGZvciBhbGwgc3VtbWFyaWVzCi0JY291bnRfYXJyYXlfdCB0b3RhbF9jb3VudHM7Ci19OwotCi0KLXN1bW1hcnlfY29udGFpbmVyOjoKLXN1bW1hcnlfY29udGFpbmVyKHZlY3Rvcjxwcm9maWxlX2NsYXNzPiBjb25zdCAmIHBjbGFzc2VzKQotewotCXR5cGVkZWYgbWFwPHN0cmluZywgYXBwX3N1bW1hcnk+IGFwcF9tYXBfdDsKLQlhcHBfbWFwX3QgYXBwX21hcDsKLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGNsYXNzZXMuc2l6ZSgpOyArK2kpIHsKLQkJbGlzdDxwcm9maWxlX3NldD46OmNvbnN0X2l0ZXJhdG9yIGl0Ci0JCQk9IHBjbGFzc2VzW2ldLnByb2ZpbGVzLmJlZ2luKCk7Ci0JCWxpc3Q8cHJvZmlsZV9zZXQ+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQKLQkJCT0gcGNsYXNzZXNbaV0ucHJvZmlsZXMuZW5kKCk7Ci0KLQkJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotCQkJYXBwX21hcF90OjppdGVyYXRvciBhaXQgPSBhcHBfbWFwLmZpbmQoaXQtPmltYWdlKTsKLQkJCWlmIChhaXQgPT0gYXBwX21hcC5lbmQoKSkgewotCQkJCWFwcF9zdW1tYXJ5IGFwcDsKLQkJCQlhcHAuaW1hZ2UgPSBpdC0+aW1hZ2U7Ci0JCQkJdG90YWxfY291bnRzW2ldICs9IGFwcC5hZGRfcHJvZmlsZSgqaXQsIGkpOwotCQkJCWFwcF9tYXBbYXBwLmltYWdlXSA9IGFwcDsKLQkJCX0gZWxzZSB7Ci0JCQkJdG90YWxfY291bnRzW2ldCi0JCQkJCSs9IGFpdC0+c2Vjb25kLmFkZF9wcm9maWxlKCppdCwgaSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlhcHBfbWFwX3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXBwX21hcC5iZWdpbigpOwotCWFwcF9tYXBfdDo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gYXBwX21hcC5lbmQoKTsKLQotCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLQkJYXBwcy5wdXNoX2JhY2soaXQtPnNlY29uZCk7Ci0JfQotCi0JLy8gc29ydCBieSBjb3VudAotCXN0YWJsZV9zb3J0KGFwcHMuYmVnaW4oKSwgYXBwcy5lbmQoKSk7Ci0JdmVjdG9yPGFwcF9zdW1tYXJ5Pjo6aXRlcmF0b3IgYWl0ID0gYXBwcy5iZWdpbigpOwotCXZlY3RvcjxhcHBfc3VtbWFyeT46Oml0ZXJhdG9yIGNvbnN0IGFlbmQgPSBhcHBzLmVuZCgpOwotCWZvciAoOyBhaXQgIT0gYWVuZDsgKythaXQpIHsKLQkJc3RhYmxlX3NvcnQoYWl0LT5kZXBzLmJlZ2luKCksIGFpdC0+ZGVwcy5lbmQoKSk7Ci0JfQotfQotCi0KLXZvaWQgb3V0cHV0X2hlYWRlcigpCi17Ci0JaWYgKCFvcHRpb25zOjpzaG93X2hlYWRlcikKLQkJcmV0dXJuOwotCi0JY291dCA8PCBjbGFzc2VzLmNwdWluZm8gPDwgZW5kbDsKLQlpZiAoIWNsYXNzZXMuZXZlbnQuZW1wdHkoKSkKLQkJY291dCA8PCBjbGFzc2VzLmV2ZW50IDw8IGVuZGw7Ci0KLQlmb3IgKHZlY3Rvcjxwcm9maWxlX2NsYXNzPjo6c2l6ZV90eXBlIGkgPSAwOwotCSAgICAgaSA8IGNsYXNzZXMudi5zaXplKCk7ICsraSkgewotCQljb3V0IDw8IGNsYXNzZXMudltpXS5sb25nbmFtZSA8PCBlbmRsOwotCX0KLX0KLQotCi1zdHJpbmcgZ2V0X2ZpbGVuYW1lKHN0cmluZyBjb25zdCAmIGZpbGVuYW1lKQotewotCXJldHVybiBvcHRpb25zOjpsb25nX2ZpbGVuYW1lcyA/IGZpbGVuYW1lIDogb3BfYmFzZW5hbWUoZmlsZW5hbWUpOwotfQotCi0KLS8vLyBPdXRwdXQgYSBjb3VudCBhbmQgYSBwZXJjZW50YWdlCi12b2lkIG91dHB1dF9jb3VudChkb3VibGUgdG90YWxfY291bnQsIHNpemVfdCBjb3VudCkKLXsKLQljb3V0IDw8IHNldHcoOSkgPDwgY291bnQgPDwgJyAnOwotCWRvdWJsZSByYXRpbyA9IG9wX3JhdGlvKGNvdW50LCB0b3RhbF9jb3VudCk7Ci0JY291dCA8PCBmb3JtYXRfcGVyY2VudChyYXRpbyAqIDEwMCwgcGVyY2VudF9pbnRfd2lkdGgsCi0JCQkgICAgICBwZXJjZW50X2ZyYWN0X3dpZHRoKSA8PCAnICc7Ci19Ci0KLQotdm9pZCBvdXRwdXRfY29sX2hlYWRlcnMoYm9vbCBpbmRlbnQpCi17Ci0JaWYgKCFvcHRpb25zOjpzaG93X2hlYWRlcikKLQkJcmV0dXJuOwotCi0JaWYgKGluZGVudCkKLQkJY291dCA8PCAnXHQnOwotCi0Jc2l6ZV90IGNvbHdpZHRoID0gOSArIDEgKyBwZXJjZW50X3dpZHRoOwotCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbGFzc2VzLnYuc2l6ZSgpOyArK2kpIHsKLQkJc3RyaW5nIG5hbWUgPSBjbGFzc2VzLnZbaV0ubmFtZTsKLQkJaWYgKG5hbWUubGVuZ3RoKCkgPiBjb2x3aWR0aCkKLQkJCW5hbWUgPSBuYW1lLnN1YnN0cigwLCBjb2x3aWR0aCAtIDMpCi0JCQkJKyAiLi4uIjsKLQkJaW9fc3RhdGUgc3RhdGUoY291dCk7Ci0JCS8vIGdjYyAyLjk1IGRvZXNuJ3Qga25vdyByaWdodCBpbyBtYW5pcHVsYXRvcgotCQljb3V0LnNldGYoaW9zOjpyaWdodCwgaW9zOjphZGp1c3RmaWVsZCk7Ci0JCS8vIGdjYyAyLjk1IGRvZXNuJ3QgaG9ub3Igc2V0dygpIGZvciBzdGQ6OnN0cmluZwotCQljb3V0IDw8IHNldHcoY29sd2lkdGgpIDw8IG5hbWUuY19zdHIoKTsKLQkJY291dCA8PCAnfCc7Ci0JfQotCWNvdXQgPDwgJ1xuJzsKLQotCWlmIChpbmRlbnQpCi0JCWNvdXQgPDwgJ1x0JzsKLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3Nlcy52LnNpemUoKTsgKytpKSB7Ci0JCWNvdXQgPDwgIiAgc2FtcGxlc3wgIjsKLQkJaW9fc3RhdGUgc3RhdGUoY291dCk7Ci0JCS8vIGdjYyAyLjk1IGRvZXNuJ3Qga25vdyByaWdodCBpbyBtYW5pcHVsYXRvcgotCQljb3V0LnNldGYoaW9zOjpyaWdodCwgaW9zOjphZGp1c3RmaWVsZCk7Ci0JCWNvdXQgPDwgc2V0dyhwZXJjZW50X3dpZHRoKSA8PCAiJXwiOwotCX0KLQotCWNvdXQgPDwgJ1xuJzsKLQotCWlmIChpbmRlbnQpCi0JCWNvdXQgPDwgJ1x0JzsKLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3Nlcy52LnNpemUoKTsgKytpKSB7Ci0JCWNvdXQgPDwgIi0tLS0tLS0tLS0tIjsKLQkJc3RyaW5nIHN0cihwZXJjZW50X3dpZHRoLCAnLScpOwotCQljb3V0IDw8IHN0cjsKLQl9Ci0KLQljb3V0IDw8ICdcbic7Ci19Ci0KLQotdm9pZAotb3V0cHV0X2RlcHMoc3VtbWFyeV9jb250YWluZXIgY29uc3QgJiBzdW1tYXJpZXMsCi0JICAgIGFwcF9zdW1tYXJ5IGNvbnN0ICYgYXBwKQotewotCS8vIHRoZSBhcHAgc3VtbWFyeSBpdHNlbGYgaXMgKmFsd2F5cyogcHJlc2VudAotCS8vIChwZXJoYXBzIHdpdGggemVybyBjb3VudHMpIHNvIHRoaXMgdGVzdAotCS8vIGlzIGNvcnJlY3QKLQlpZiAoYXBwLmRlcHMuc2l6ZSgpID09IDEpCi0JCXJldHVybjsKLQotCW91dHB1dF9jb2xfaGVhZGVycyh0cnVlKTsKLQotCWZvciAoc2l6ZV90IGogPSAwIDsgaiA8IGFwcC5kZXBzLnNpemUoKTsgKytqKSB7Ci0JCXN1bW1hcnkgY29uc3QgJiBzdW1tID0gYXBwLmRlcHNbal07Ci0KLQkJaWYgKHN1bW0uY291bnRzLnplcm8oKSkKLQkJCWNvbnRpbnVlOwotCi0JCWNvdXQgPDwgJ1x0JzsKLQotCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5yX2NsYXNzZXM7ICsraSkgewotCQkJZG91YmxlIHRvdF9jb3VudCA9IG9wdGlvbnM6Omdsb2JhbF9wZXJjZW50Ci0JCQkJPyBzdW1tYXJpZXMudG90YWxfY291bnRzW2ldIDogYXBwLmNvdW50c1tpXTsKLQotCQkJb3V0cHV0X2NvdW50KHRvdF9jb3VudCwgc3VtbS5jb3VudHNbaV0pOwotCQl9Ci0KLQkJY291dCA8PCBnZXRfZmlsZW5hbWUoc3VtbS5saWJfaW1hZ2UpOwotCQljb3V0IDw8ICdcbic7Ci0JfQotfQotCi0KLS8qKgotICogRGlzcGxheSBhbGwgdGhlIGdpdmVuIHN1bW1hcnkgaW5mb3JtYXRpb24KLSAqLwotdm9pZCBvdXRwdXRfc3VtbWFyaWVzKHN1bW1hcnlfY29udGFpbmVyIGNvbnN0ICYgc3VtbWFyaWVzKQotewotCW91dHB1dF9jb2xfaGVhZGVycyhmYWxzZSk7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1bW1hcmllcy5hcHBzLnNpemUoKTsgKytpKSB7Ci0JCWFwcF9zdW1tYXJ5IGNvbnN0ICYgYXBwID0gc3VtbWFyaWVzLmFwcHNbaV07Ci0KLQkJaWYgKChhcHAuY291bnRzWzBdICogMTAwLjApIC8gc3VtbWFyaWVzLnRvdGFsX2NvdW50c1swXQotCQkgICAgPCBvcHRpb25zOjp0aHJlc2hvbGQpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZm9yIChzaXplX3QgaiA9IDA7IGogPCBucl9jbGFzc2VzOyArK2opIHsKLQkJCW91dHB1dF9jb3VudChzdW1tYXJpZXMudG90YWxfY291bnRzW2pdLAotCQkJICAgICAgICAgICAgIGFwcC5jb3VudHNbal0pOwotCQl9Ci0KLQkJY291dCA8PCBnZXRfZmlsZW5hbWUoYXBwLmltYWdlKSA8PCAnXG4nOwotCi0JCW91dHB1dF9kZXBzKHN1bW1hcmllcywgYXBwKTsKLQl9Ci19Ci0KLQotZm9ybWF0X2ZsYWdzIGNvbnN0IGdldF9mb3JtYXRfZmxhZ3MoY29sdW1uX2ZsYWdzIGNvbnN0ICYgY2YpCi17Ci0JZm9ybWF0X2ZsYWdzIGZsYWdzKGZmX25vbmUpOwotCWZsYWdzID0gZm9ybWF0X2ZsYWdzKGZsYWdzIHwgZmZfbnJfc2FtcGxlcyk7Ci0JZmxhZ3MgPSBmb3JtYXRfZmxhZ3MoZmxhZ3MgfCBmZl9wZXJjZW50IHwgZmZfc3ltYl9uYW1lKTsKLQotCWlmIChvcHRpb25zOjpzaG93X2FkZHJlc3MpCi0JCWZsYWdzID0gZm9ybWF0X2ZsYWdzKGZsYWdzIHwgZmZfdm1hKTsKLQotCWlmIChvcHRpb25zOjpkZWJ1Z19pbmZvKQotCQlmbGFncyA9IGZvcm1hdF9mbGFncyhmbGFncyB8IGZmX2xpbmVucl9pbmZvKTsKLQotCWlmIChvcHRpb25zOjphY2N1bXVsYXRlZCkgewotCQlmbGFncyA9IGZvcm1hdF9mbGFncyhmbGFncyB8IGZmX25yX3NhbXBsZXNfY3VtdWxhdGVkKTsKLQkJZmxhZ3MgPSBmb3JtYXRfZmxhZ3MoZmxhZ3MgfCBmZl9wZXJjZW50X2N1bXVsYXRlZCk7Ci0JfQotCi0JaWYgKGNsYXNzZXMyLnYuc2l6ZSgpKQotCQlmbGFncyA9IGZvcm1hdF9mbGFncyhmbGFncyB8IGZmX2RpZmYpOwotCi0JaWYgKGNmICYgY2ZfaW1hZ2VfbmFtZSkKLQkJZmxhZ3MgPSBmb3JtYXRfZmxhZ3MoZmxhZ3MgfCBmZl9pbWFnZV9uYW1lKTsKLQotCXJldHVybiBmbGFnczsKLX0KLQotCi12b2lkIG91dHB1dF9zeW1ib2xzKHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMsIGJvb2wgbXVsdGlwbGVfYXBwcykKLXsKLQlwcm9maWxlX2NvbnRhaW5lcjo6c3ltYm9sX2Nob2ljZSBjaG9pY2U7Ci0JY2hvaWNlLnRocmVzaG9sZCA9IG9wdGlvbnM6OnRocmVzaG9sZDsKLQlzeW1ib2xfY29sbGVjdGlvbiBzeW1ib2xzID0gcGMuc2VsZWN0X3N5bWJvbHMoY2hvaWNlKTsKLQlvcHRpb25zOjpzb3J0X2J5LnNvcnQoc3ltYm9scywgb3B0aW9uczo6cmV2ZXJzZV9zb3J0LAotCSAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOjpsb25nX2ZpbGVuYW1lcyk7Ci0KLQlmb3JtYXRfb3V0cHV0OjpvcHJlcG9ydF9mb3JtYXR0ZXIgb3V0KHBjKTsKLQotCW91dC5zZXRfbnJfY2xhc3Nlcyhucl9jbGFzc2VzKTsKLQlvdXQuc2hvd19kZXRhaWxzKG9wdGlvbnM6OmRldGFpbHMpOwotCW91dC5zaG93X2xvbmdfZmlsZW5hbWVzKG9wdGlvbnM6OmxvbmdfZmlsZW5hbWVzKTsKLQlvdXQuc2hvd19oZWFkZXIob3B0aW9uczo6c2hvd19oZWFkZXIpOwotCW91dC52bWFfZm9ybWF0XzY0Yml0KGNob2ljZS5oaW50cyAmIGNmXzY0Yml0X3ZtYSk7Ci0Jb3V0LnNob3dfZ2xvYmFsX3BlcmNlbnQob3B0aW9uczo6Z2xvYmFsX3BlcmNlbnQpOwotCi0JZm9ybWF0X2ZsYWdzIGZsYWdzID0gZ2V0X2Zvcm1hdF9mbGFncyhjaG9pY2UuaGludHMpOwotCWlmIChtdWx0aXBsZV9hcHBzKQotCQlmbGFncyA9IGZvcm1hdF9mbGFncyhmbGFncyB8IGZmX2FwcF9uYW1lKTsKLQotCW91dC5hZGRfZm9ybWF0KGZsYWdzKTsKLQlvdXQub3V0cHV0KGNvdXQsIHN5bWJvbHMpOwotfQotCi0KLXZvaWQgb3V0cHV0X2RpZmZfc3ltYm9scyhwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjMiwgYm9vbCBtdWx0aXBsZV9hcHBzKQotewotCWRpZmZfY29udGFpbmVyIGRjKHBjMSwgcGMyKTsKLQotCXByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlIGNob2ljZTsKLQljaG9pY2UudGhyZXNob2xkID0gb3B0aW9uczo6dGhyZXNob2xkOwotCi0JZGlmZl9jb2xsZWN0aW9uIHN5bWJvbHMgPSBkYy5nZXRfc3ltYm9scyhjaG9pY2UpOwotCi0JZm9ybWF0X2ZsYWdzIGZsYWdzID0gZ2V0X2Zvcm1hdF9mbGFncyhjaG9pY2UuaGludHMpOwotCWlmIChtdWx0aXBsZV9hcHBzKQotCQlmbGFncyA9IGZvcm1hdF9mbGFncyhmbGFncyB8IGZmX2FwcF9uYW1lKTsKLQotCWZvcm1hdF9vdXRwdXQ6OmRpZmZfZm9ybWF0dGVyIG91dChkYyk7Ci0KLQlvdXQuc2V0X25yX2NsYXNzZXMobnJfY2xhc3Nlcyk7Ci0Jb3V0LnNob3dfbG9uZ19maWxlbmFtZXMob3B0aW9uczo6bG9uZ19maWxlbmFtZXMpOwotCW91dC5zaG93X2hlYWRlcihvcHRpb25zOjpzaG93X2hlYWRlcik7Ci0Jb3V0LnNob3dfZ2xvYmFsX3BlcmNlbnQob3B0aW9uczo6Z2xvYmFsX3BlcmNlbnQpOwotCW91dC52bWFfZm9ybWF0XzY0Yml0KGNob2ljZS5oaW50cyAmIGNmXzY0Yml0X3ZtYSk7Ci0Jb3V0LmFkZF9mb3JtYXQoZmxhZ3MpOwotCi0Jb3B0aW9uczo6c29ydF9ieS5zb3J0KHN5bWJvbHMsIG9wdGlvbnM6OnJldmVyc2Vfc29ydCwKLQkgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczo6bG9uZ19maWxlbmFtZXMpOwotCi0Jb3V0Lm91dHB1dChjb3V0LCBzeW1ib2xzKTsKLX0KLQotCi12b2lkIG91dHB1dF9jZ19zeW1ib2xzKGNhbGxncmFwaF9jb250YWluZXIgY29uc3QgJiBjZywgYm9vbCBtdWx0aXBsZV9hcHBzKQotewotCWNvbHVtbl9mbGFncyBvdXRwdXRfaGludHMgPSBjZy5vdXRwdXRfaGludCgpOwotCi0JY2dfY29sbGVjdGlvbiBzeW1ib2xzID0gY2cuZ2V0X3N5bWJvbHMoKTsKLQlvcHRpb25zOjpzb3J0X2J5LnNvcnQoc3ltYm9scywgb3B0aW9uczo6cmV2ZXJzZV9zb3J0LAotCSAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOjpsb25nX2ZpbGVuYW1lcyk7Ci0KLQlmb3JtYXRfb3V0cHV0OjpjZ19mb3JtYXR0ZXIgb3V0KGNnKTsKLQotCW91dC5zZXRfbnJfY2xhc3Nlcyhucl9jbGFzc2VzKTsKLQlvdXQuc2hvd19sb25nX2ZpbGVuYW1lcyhvcHRpb25zOjpsb25nX2ZpbGVuYW1lcyk7Ci0Jb3V0LnNob3dfaGVhZGVyKG9wdGlvbnM6OnNob3dfaGVhZGVyKTsKLQlvdXQudm1hX2Zvcm1hdF82NGJpdChvdXRwdXRfaGludHMgJiBjZl82NGJpdF92bWEpOwotCW91dC5zaG93X2dsb2JhbF9wZXJjZW50KG9wdGlvbnM6Omdsb2JhbF9wZXJjZW50KTsKLQotCWZvcm1hdF9mbGFncyBmbGFncyA9IGdldF9mb3JtYXRfZmxhZ3Mob3V0cHV0X2hpbnRzKTsKLQlpZiAobXVsdGlwbGVfYXBwcykKLQkJZmxhZ3MgPSBmb3JtYXRfZmxhZ3MoZmxhZ3MgfCBmZl9hcHBfbmFtZSk7Ci0KLQlvdXQuYWRkX2Zvcm1hdChmbGFncyk7Ci0KLQlvdXQub3V0cHV0KGNvdXQsIHN5bWJvbHMpOwotfQotCi0KLWludCBvcHJlcG9ydChvcHRpb25zOjpzcGVjIGNvbnN0ICYgc3BlYykKLXsKLQloYW5kbGVfb3B0aW9ucyhzcGVjKTsKLQotCW5yX2NsYXNzZXMgPSBjbGFzc2VzLnYuc2l6ZSgpOwotCi0JaWYgKCFvcHRpb25zOjpzeW1ib2xzKSB7Ci0JCXN1bW1hcnlfY29udGFpbmVyIHN1bW1hcmllcyhjbGFzc2VzLnYpOwotCQlvdXRwdXRfaGVhZGVyKCk7Ci0JCW91dHB1dF9zdW1tYXJpZXMoc3VtbWFyaWVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JYm9vbCBtdWx0aXBsZV9hcHBzID0gZmFsc2U7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzZXMudi5zaXplKCk7ICsraSkgewotCQlpZiAoY2xhc3Nlcy52W2ldLnByb2ZpbGVzLnNpemUoKSA+IDEpCi0JCQltdWx0aXBsZV9hcHBzID0gdHJ1ZTsKLQl9Ci0KLQlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGlwcm9maWxlcwotCQk9IGludmVydF9wcm9maWxlcyhvcHRpb25zOjphcmNoaXZlX3BhdGgsIGNsYXNzZXMsCi0JCQkJICBvcHRpb25zOjpleHRyYV9mb3VuZF9pbWFnZXMpOwotCi0JcmVwb3J0X2ltYWdlX2Vycm9ycyhpcHJvZmlsZXMpOwotCi0Jb3V0cHV0X2hlYWRlcigpOwotCi0JaWYgKGNsYXNzZXMyLnYuc2l6ZSgpKSB7Ci0JCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NlczIudi5zaXplKCk7ICsraSkgewotCQkJaWYgKGNsYXNzZXMyLnZbaV0ucHJvZmlsZXMuc2l6ZSgpID4gMSkKLQkJCQltdWx0aXBsZV9hcHBzIHw9IHRydWU7Ci0JCX0KLQotCQlwcm9maWxlX2NvbnRhaW5lciBwYzEob3B0aW9uczo6ZGVidWdfaW5mbywgb3B0aW9uczo6ZGV0YWlscyk7Ci0KLQkJbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6aXRlcmF0b3IgaXQgPSBpcHJvZmlsZXMuYmVnaW4oKTsKLQkJbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6aXRlcmF0b3IgY29uc3QgZW5kID0gaXByb2ZpbGVzLmVuZCgpOwotCi0JCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0JCQlwb3B1bGF0ZV9mb3JfaW1hZ2Uob3B0aW9uczo6YXJjaGl2ZV9wYXRoLCBwYzEsCi0JCQkJKml0LCBvcHRpb25zOjpzeW1ib2xfZmlsdGVyLCAwKTsKLQotCQlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGlwcm9maWxlczIKLQkJCT0gaW52ZXJ0X3Byb2ZpbGVzKG9wdGlvbnM6OmFyY2hpdmVfcGF0aDIsIGNsYXNzZXMyLAotCQkJCSAgb3B0aW9uczo6ZXh0cmFfZm91bmRfaW1hZ2VzKTsKLQotCQlyZXBvcnRfaW1hZ2VfZXJyb3JzKGlwcm9maWxlczIpOwotCi0JCXByb2ZpbGVfY29udGFpbmVyIHBjMihvcHRpb25zOjpkZWJ1Z19pbmZvLCBvcHRpb25zOjpkZXRhaWxzKTsKLQotCQlsaXN0PGludmVydGVkX3Byb2ZpbGU+OjppdGVyYXRvciBpdDIgPSBpcHJvZmlsZXMyLmJlZ2luKCk7Ci0JCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT46Oml0ZXJhdG9yIGNvbnN0IGVuZDIgPSBpcHJvZmlsZXMyLmVuZCgpOwotCi0JCWZvciAoOyBpdDIgIT0gZW5kMjsgKytpdDIpCi0JCQlwb3B1bGF0ZV9mb3JfaW1hZ2Uob3B0aW9uczo6YXJjaGl2ZV9wYXRoMiwgcGMyLAotCQkJCSppdDIsIG9wdGlvbnM6OnN5bWJvbF9maWx0ZXIsIDApOwotCi0JCW91dHB1dF9kaWZmX3N5bWJvbHMocGMxLCBwYzIsIG11bHRpcGxlX2FwcHMpOwotCX0gZWxzZSBpZiAob3B0aW9uczo6Y2FsbGdyYXBoKSB7Ci0JCWNhbGxncmFwaF9jb250YWluZXIgY2dfY29udGFpbmVyOwotCQljZ19jb250YWluZXIucG9wdWxhdGUob3B0aW9uczo6YXJjaGl2ZV9wYXRoLCBpcHJvZmlsZXMsCi0JCQlvcHRpb25zOjpleHRyYV9mb3VuZF9pbWFnZXMsCi0JCQlvcHRpb25zOjpkZWJ1Z19pbmZvLCBvcHRpb25zOjp0aHJlc2hvbGQsCi0JCQlvcHRpb25zOjptZXJnZV9ieS5saWIsIG9wdGlvbnM6OnN5bWJvbF9maWx0ZXIpOwotCi0JCW91dHB1dF9jZ19zeW1ib2xzKGNnX2NvbnRhaW5lciwgbXVsdGlwbGVfYXBwcyk7Ci0JfSBlbHNlIHsKLQkJcHJvZmlsZV9jb250YWluZXIgc2FtcGxlcyhvcHRpb25zOjpkZWJ1Z19pbmZvLCBvcHRpb25zOjpkZXRhaWxzKTsKLQotCQlsaXN0PGludmVydGVkX3Byb2ZpbGU+OjppdGVyYXRvciBpdCA9IGlwcm9maWxlcy5iZWdpbigpOwotCQlsaXN0PGludmVydGVkX3Byb2ZpbGU+OjppdGVyYXRvciBjb25zdCBlbmQgPSBpcHJvZmlsZXMuZW5kKCk7Ci0KLQkJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLQkJCXBvcHVsYXRlX2Zvcl9pbWFnZShvcHRpb25zOjphcmNoaXZlX3BhdGgsIHNhbXBsZXMsCi0JCQkJKml0LCBvcHRpb25zOjpzeW1ib2xfZmlsdGVyLCAwKTsKLQotCQlvdXRwdXRfc3ltYm9scyhzYW1wbGVzLCBtdWx0aXBsZV9hcHBzKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICogYXJndltdKQotewotCWNvdXQudGllKDApOwotCXJldHVybiBydW5fcHBfdG9vbChhcmdjLCBhcmd2LCBvcHJlcG9ydCk7Ci19CmRpZmYgLS1naXQgYS9wcC9vcHJlcG9ydF9vcHRpb25zLmNwcCBiL3BwL29wcmVwb3J0X29wdGlvbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTFkODcyLi4wMDAwMDAwCi0tLSBhL3BwL29wcmVwb3J0X29wdGlvbnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc5ICswLDAgQEAKLS8qKgotICogQGZpbGUgb3ByZXBvcnRfb3B0aW9ucy5jcHAKLSAqIE9wdGlvbnMgZm9yIG9wcmVwb3J0IHRvb2wKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqLwotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPGZzdHJlYW0+Ci0KLSNpbmNsdWRlICJwcm9maWxlX3NwZWMuaCIKLSNpbmNsdWRlICJhcnJhbmdlX3Byb2ZpbGVzLmgiCi0jaW5jbHVkZSAib3ByZXBvcnRfb3B0aW9ucy5oIgotI2luY2x1ZGUgInBvcHRfb3B0aW9ucy5oIgotI2luY2x1ZGUgInN0cmluZ19maWx0ZXIuaCIKLSNpbmNsdWRlICJmaWxlX21hbmlwLmgiCi0jaW5jbHVkZSAiY3ZlcmIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXM7Ci1wcm9maWxlX2NsYXNzZXMgY2xhc3NlczI7Ci0KLW5hbWVzcGFjZSBvcHRpb25zIHsKLQlzdHJpbmcgYXJjaGl2ZV9wYXRoOwotCXN0cmluZyBhcmNoaXZlX3BhdGgyOwotCWRlbWFuZ2xlX3R5cGUgZGVtYW5nbGUgPSBkbXRfbm9ybWFsOwotCWJvb2wgc3ltYm9sczsKLQlib29sIGNhbGxncmFwaDsKLQlib29sIGRlYnVnX2luZm87Ci0JYm9vbCBkZXRhaWxzOwotCWJvb2wgZXhjbHVkZV9kZXBlbmRlbnQ7Ci0Jc3RyaW5nX2ZpbHRlciBzeW1ib2xfZmlsdGVyOwotCXNvcnRfb3B0aW9ucyBzb3J0X2J5OwotCW1lcmdlX29wdGlvbiBtZXJnZV9ieTsKLQlib29sIHNob3dfaGVhZGVyID0gdHJ1ZTsKLQlib29sIGxvbmdfZmlsZW5hbWVzOwotCWJvb2wgc2hvd19hZGRyZXNzOwotCWJvb2wgYWNjdW11bGF0ZWQ7Ci0JYm9vbCByZXZlcnNlX3NvcnQ7Ci0JYm9vbCBnbG9iYWxfcGVyY2VudDsKLX0KLQotCi1uYW1lc3BhY2UgewotCi1zdHJpbmcgb3V0ZmlsZTsKLXZlY3RvcjxzdHJpbmc+IG1lcmdlc3BlYzsKLXZlY3RvcjxzdHJpbmc+IHNvcnQ7Ci12ZWN0b3I8c3RyaW5nPiBleGNsdWRlX3N5bWJvbHM7Ci12ZWN0b3I8c3RyaW5nPiBpbmNsdWRlX3N5bWJvbHM7Ci1zdHJpbmcgZGVtYW5nbGVfb3B0aW9uID0gIm5vcm1hbCI7Ci0KLXBvcHQ6Om9wdGlvbiBvcHRpb25zX2FycmF5W10gPSB7Ci0JcG9wdDo6b3B0aW9uKG9wdGlvbnM6OmNhbGxncmFwaCwgImNhbGxncmFwaCIsICdjJywKLQkgICAgICAgICAgICAgInNob3cgY2FsbCBncmFwaCIpLAotCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpkZXRhaWxzLCAiZGV0YWlscyIsICdkJywKLQkJICAgICAib3V0cHV0IGRldGFpbGVkIHNhbXBsZXMgZm9yIGVhY2ggc3ltYm9sIiksCi0JcG9wdDo6b3B0aW9uKG9wdGlvbnM6OnN5bWJvbHMsICJzeW1ib2xzIiwgJ2wnLAotCQkgICAgICJsaXN0IGFsbCBzeW1ib2xzIiksCi0KLQlwb3B0OjpvcHRpb24ob3V0ZmlsZSwgIm91dHB1dC1maWxlIiwgJ28nLAotCSAgICAgICAgICAgICAib3V0cHV0IHRvIHRoZSBnaXZlbiBmaWxlbmFtZSIsICJmaWxlIiksCi0KLQlwb3B0OjpvcHRpb24oc29ydCwgInNvcnQiLCAncycsCi0JCSAgICAgInNvcnQgYnkiLCAic2FtcGxlLGltYWdlLGFwcC1uYW1lLHN5bWJvbCxkZWJ1Zyx2bWEiKSwKLQlwb3B0OjpvcHRpb24ob3B0aW9uczo6cmV2ZXJzZV9zb3J0LCAicmV2ZXJzZS1zb3J0IiwgJ3InLAotCQkgICAgICJ1c2UgcmV2ZXJzZSBzb3J0IiksCi0JcG9wdDo6b3B0aW9uKG1lcmdlc3BlYywgIm1lcmdlIiwgJ20nLAotCQkgICAgICJjb21tYSBzZXBhcmF0ZWQgbGlzdCIsICJjcHUsbGliLHRpZCx0Z2lkLHVuaXRtYXNrLGFsbCIpLAotCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpleGNsdWRlX2RlcGVuZGVudCwgImV4Y2x1ZGUtZGVwZW5kZW50IiwgJ3gnLAotCQkgICAgICJleGNsdWRlIGxpYnMsIGtlcm5lbCwgYW5kIG1vZHVsZSBzYW1wbGVzIGZvciBhcHBsaWNhdGlvbnMiKSwKLQlwb3B0OjpvcHRpb24oZXhjbHVkZV9zeW1ib2xzLCAiZXhjbHVkZS1zeW1ib2xzIiwgJ2UnLAotCQkgICAgICJleGNsdWRlIHRoZXNlIGNvbW1hIHNlcGFyYXRlZCBzeW1ib2xzIiwgInN5bWJvbHMiKSwKLQlwb3B0OjpvcHRpb24oaW5jbHVkZV9zeW1ib2xzLCAiaW5jbHVkZS1zeW1ib2xzIiwgJ2knLAotCQkgICAgICJpbmNsdWRlIHRoZXNlIGNvbW1hIHNlcGFyYXRlZCBzeW1ib2xzIiwgInN5bWJvbHMiKSwKLQlwb3B0OjpvcHRpb24ob3B0aW9uczo6dGhyZXNob2xkX29wdCwgInRocmVzaG9sZCIsICd0JywKLQkJICAgICAibWluaW11bSBwZXJjZW50YWdlIG5lZWRlZCB0byBwcm9kdWNlIG91dHB1dCIsCi0JCSAgICAgInBlcmNlbnQiKSwKLQotCXBvcHQ6Om9wdGlvbihkZW1hbmdsZV9vcHRpb24sICJkZW1hbmdsZSIsICdEJywKLQkJICAgICAiZGVtYW5nbGUgR05VIEMrKyBzeW1ib2wgbmFtZXMgKGRlZmF1bHQgbm9ybWFsKSIsCi0JICAgICAgICAgICAgICJub25lfG5vcm1hbHxzbWFydCIpLAotCS8vIFBQOjUKLQlwb3B0OjpvcHRpb24ob3B0aW9uczo6ZGVidWdfaW5mbywgImRlYnVnLWluZm8iLCAnZycsCi0JCSAgICAgImFkZCBzb3VyY2UgZmlsZSBhbmQgbGluZSBudW1iZXIgdG8gb3V0cHV0IiksCi0JcG9wdDo6b3B0aW9uKG9wdGlvbnM6OnNob3dfaGVhZGVyLCAibm8taGVhZGVyIiwgJ24nLAotCQkgICAgICJyZW1vdmUgYWxsIGhlYWRlcnMgZnJvbSBvdXRwdXQiKSwKLQlwb3B0OjpvcHRpb24ob3B0aW9uczo6c2hvd19hZGRyZXNzLCAic2hvdy1hZGRyZXNzIiwgJ3cnLAotCSAgICAgICAgICAgICAic2hvdyBWTUEgYWRkcmVzcyBvZiBlYWNoIHN5bWJvbCIpLAotCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpsb25nX2ZpbGVuYW1lcywgImxvbmctZmlsZW5hbWVzIiwgJ2YnLAotCQkgICAgICJzaG93IHRoZSBmdWxsIHBhdGggb2YgZmlsZW5hbWVzIiksCi0JcG9wdDo6b3B0aW9uKG9wdGlvbnM6OmFjY3VtdWxhdGVkLCAiYWNjdW11bGF0ZWQiLCAnYScsCi0JCSAgICAgInBlcmNlbnRhZ2UgZmllbGQgc2hvdyBhY2N1bXVsYXRlZCBjb3VudCIpLAotCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpnbG9iYWxfcGVyY2VudCwgImdsb2JhbC1wZXJjZW50IiwgJyUnLAotCQkgICAgICJwZXJjZW50YWdlIGFyZSBub3QgcmVsYXRpdmUgdG8gc3ltYm9sIGNvdW50IG9yIGltYWdlICIKLQkJICAgICAiY291bnQgYnV0IHRvdGFsIHNhbXBsZSBjb3VudCIpLAotfTsKLQotCi12b2lkIGhhbmRsZV9zb3J0X29wdGlvbigpCi17Ci0JaWYgKHNvcnQuZW1wdHkoKSkgewotCQkvLyBQUDo1LjE0IHNvcnQgZGVmYXVsdCB0byBzYW1wbGUKLQkJc29ydC5wdXNoX2JhY2soInNhbXBsZSIpOwotCX0KLQotCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBzb3J0LmJlZ2luKCk7Ci0JdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNvcnQuZW5kKCk7Ci0KLQlmb3IgKDsgY2l0ICE9IGVuZDsgKytjaXQpIHsKLQkJb3B0aW9uczo6c29ydF9ieS5hZGRfc29ydF9vcHRpb24oKmNpdCk7Ci0JfQotfQotCi0KLXZvaWQgaGFuZGxlX291dHB1dF9maWxlKCkKLXsKLQlpZiAob3V0ZmlsZS5lbXB0eSgpKQotCQlyZXR1cm47Ci0KLQlzdGF0aWMgb2ZzdHJlYW0gb3Mob3V0ZmlsZS5jX3N0cigpKTsKLQlpZiAoIW9zKSB7Ci0JCWNlcnIgPDwgIkNvdWxkbid0IG9wZW4gXCIiIDw8IG91dGZpbGUKLQkJICAgICA8PCAiXCIgZm9yIHdyaXRpbmcuIiA8PCBlbmRsOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JY291dC5yZGJ1Zihvcy5yZGJ1ZigpKTsKLX0KLQotCi0vLy8gIENoZWNrIGluY29tcGF0aWJsZSBvciBtZWFuaW5nbGVzcyBvcHRpb25zLgotdm9pZCBjaGVja19vcHRpb25zKGJvb2wgZGlmZikKLXsKLQl1c2luZyBuYW1lc3BhY2Ugb3B0aW9uczsKLQotCWJvb2wgZG9fZXhpdCA9IGZhbHNlOwotCi0JaWYgKGNhbGxncmFwaCkgewotCQlzeW1ib2xzID0gdHJ1ZTsKLQkJaWYgKGRldGFpbHMpIHsKLQkJCWNlcnIgPDwgIi0tY2FsbGdyYXBoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWlscyIgPDwgZW5kbDsKLQkJCWRvX2V4aXQgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKGRpZmYpIHsKLQkJCWNlcnIgPDwgImRpZmZlcmVudGlhbCBwcm9maWxlcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggLS1jYWxsZ3JhcGgiIDw8IGVuZGw7Ci0JCQlkb19leGl0ID0gdHJ1ZTsKLQkJfQotCX0KLQotCWlmIChkZXRhaWxzICYmIGRpZmYpIHsKLQkJY2VyciA8PCAiZGlmZmVyZW50aWFsIHByb2ZpbGVzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCAtLWRldGFpbHMiIDw8IGVuZGw7Ci0JCWRvX2V4aXQgPSB0cnVlOwotCX0KLQotCWlmICghc3ltYm9scykgewotCQlpZiAoZGlmZikgewotCQkJY2VyciA8PCAiZGlmZmVyZW50IHByb2ZpbGVzIGFyZSBtZWFuaW5nbGVzcyAiCi0JCQkJIndpdGhvdXQgLS1zeW1ib2xzIiA8PCBlbmRsOwotCQkJZG9fZXhpdCA9IHRydWU7Ci0JCX0KLQotCQlpZiAoc2hvd19hZGRyZXNzKSB7Ci0JCQljZXJyIDw8ICItLXNob3ctYWRkcmVzcyBpcyBtZWFuaW5nbGVzcyAiCi0JCQkJIndpdGhvdXQgLS1zeW1ib2xzIiA8PCBlbmRsOwotCQkJZG9fZXhpdCA9IHRydWU7Ci0JCX0KLQotCQlpZiAoZGVidWdfaW5mbyB8fCBhY2N1bXVsYXRlZCkgewotCQkJY2VyciA8PCAiLS1kZWJ1Zy1pbmZvIGFuZCAtLWFjY3VtdWxhdGVkIGFyZSAiCi0JCQkgICAgIDw8ICJtZWFuaW5nbGVzcyB3aXRob3V0IC0tc3ltYm9scyIgPDwgZW5kbDsKLQkJCWRvX2V4aXQgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKCFleGNsdWRlX3N5bWJvbHMuZW1wdHkoKSB8fCAhaW5jbHVkZV9zeW1ib2xzLmVtcHR5KCkpIHsKLQkJCWNlcnIgPDwgIi0tZXhjbHVkZS1zeW1ib2xzIGFuZCAtLWluY2x1ZGUtc3ltYm9scyBhcmUgIgotCQkJICAgICA8PCAibWVhbmluZ2xlc3Mgd2l0aG91dCAtLXN5bWJvbHMiIDw8IGVuZGw7Ci0JCQlkb19leGl0ID0gdHJ1ZTsKLQkJfQotCi0JCWlmIChmaW5kKHNvcnRfYnkub3B0aW9ucy5iZWdpbigpLCBzb3J0X2J5Lm9wdGlvbnMuZW5kKCksIAotCQkJIHNvcnRfb3B0aW9uczo6dm1hKSAhPSBzb3J0X2J5Lm9wdGlvbnMuZW5kKCkpIHsKLQkJCWNlcnIgPDwgIi0tc29ydD12bWEgaXMgIgotCQkJICAgICA8PCAibWVhbmluZ2xlc3Mgd2l0aG91dCAtLXN5bWJvbHMiIDw8IGVuZGw7Ci0JCQlkb19leGl0ID0gdHJ1ZTsKLQkJfQotCX0KLQotCWlmIChnbG9iYWxfcGVyY2VudCAmJiBzeW1ib2xzICYmICEoZGV0YWlscyB8fCBjYWxsZ3JhcGgpKSB7Ci0JCWNlcnIgPDwgIi0tZ2xvYmFsLXBlcmNlbnQgaXMgbWVhbmluZ2xlc3Mgd2l0aCAtLXN5bWJvbHMgIgotCQkgICAgICAgICJhbmQgd2l0aG91dCAtLWRldGFpbHMgb3IgLS1jYWxsZ3JhcGgiIDw8IGVuZGw7Ci0JCWRvX2V4aXQgPSB0cnVlOwotCX0KLQotCWlmIChkb19leGl0KQotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLQotLy8vIHByb2Nlc3MgYSBzcGVjIGludG8gY2xhc3Nlcwotc3RyaW5nIHByb2Nlc3Nfc3BlYyhwcm9maWxlX2NsYXNzZXMgJiBjbGFzc2VzLCBsaXN0PHN0cmluZz4gY29uc3QgJiBzcGVjKQotewotCXVzaW5nIG5hbWVzcGFjZSBvcHRpb25zOwotCi0JY29weShzcGVjLmJlZ2luKCksIHNwZWMuZW5kKCksCi0JICAgICBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oY3ZlcmIgPDwgdnNmaWxlLCAiICIpKTsKLQljdmVyYiA8PCB2c2ZpbGUgPDwgIlxuXG4iOwotCi0JcHJvZmlsZV9zcGVjIGNvbnN0IHBzcGVjID0KLQkJcHJvZmlsZV9zcGVjOjpjcmVhdGUoc3BlYywgZXh0cmFfZm91bmRfaW1hZ2VzKTsKLQotCWxpc3Q8c3RyaW5nPiBzYW1wbGVfZmlsZXMgPSBwc3BlYy5nZW5lcmF0ZV9maWxlX2xpc3QoZXhjbHVkZV9kZXBlbmRlbnQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhb3B0aW9uczo6Y2FsbGdyYXBoKTsKLQotCWN2ZXJiIDw8IHZzZmlsZSA8PCAiQXJjaGl2ZTogIiA8PCBwc3BlYy5nZXRfYXJjaGl2ZV9wYXRoKCkgPDwgZW5kbDsKLQotCWN2ZXJiIDw8IHZzZmlsZSA8PCAiTWF0Y2hlZCBzYW1wbGUgZmlsZXM6ICIgPDwgc2FtcGxlX2ZpbGVzLnNpemUoKQotCSAgICAgIDw8IGVuZGw7Ci0JY29weShzYW1wbGVfZmlsZXMuYmVnaW4oKSwgc2FtcGxlX2ZpbGVzLmVuZCgpLAotCSAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGN2ZXJiIDw8IHZzZmlsZSwgIlxuIikpOwotCi0JY2xhc3NlcyA9IGFycmFuZ2VfcHJvZmlsZXMoc2FtcGxlX2ZpbGVzLCBtZXJnZV9ieSk7Ci0KLQljdmVyYiA8PCB2c2ZpbGUgPDwgInByb2ZpbGVfY2xhc3NlczpcbiIgPDwgY2xhc3NlcyA8PCBlbmRsOwotCi0JaWYgKGNsYXNzZXMudi5lbXB0eSgpKSB7Ci0JCWNlcnIgPDwgImVycm9yOiBubyBzYW1wbGUgZmlsZXMgZm91bmQ6IHByb2ZpbGUgc3BlY2lmaWNhdGlvbiAiCi0JCSAgICAgInRvbyBzdHJpY3QgPyIgPDwgZW5kbDsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCXJldHVybiBwc3BlYy5nZXRfYXJjaGl2ZV9wYXRoKCk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgYW5vbgotCi0KLXZvaWQgaGFuZGxlX29wdGlvbnMob3B0aW9uczo6c3BlYyBjb25zdCAmIHNwZWMpCi17Ci0JdXNpbmcgbmFtZXNwYWNlIG9wdGlvbnM7Ci0KLQlpZiAoZGV0YWlscykgewotCQlzeW1ib2xzID0gdHJ1ZTsKLQkJc2hvd19hZGRyZXNzID0gdHJ1ZTsKLQl9Ci0KLQloYW5kbGVfc29ydF9vcHRpb24oKTsKLQltZXJnZV9ieSA9IGhhbmRsZV9tZXJnZV9vcHRpb24obWVyZ2VzcGVjLCB0cnVlLCBleGNsdWRlX2RlcGVuZGVudCk7Ci0JaGFuZGxlX291dHB1dF9maWxlKCk7Ci0JZGVtYW5nbGUgPSBoYW5kbGVfZGVtYW5nbGVfb3B0aW9uKGRlbWFuZ2xlX29wdGlvbik7Ci0JY2hlY2tfb3B0aW9ucyhzcGVjLmZpcnN0LnNpemUoKSk7Ci0KLQlzeW1ib2xfZmlsdGVyID0gc3RyaW5nX2ZpbHRlcihpbmNsdWRlX3N5bWJvbHMsIGV4Y2x1ZGVfc3ltYm9scyk7Ci0KLQlpZiAoIXNwZWMuZmlyc3Quc2l6ZSgpKSB7Ci0JCWFyY2hpdmVfcGF0aCA9IHByb2Nlc3Nfc3BlYyhjbGFzc2VzLCBzcGVjLmNvbW1vbik7Ci0JfSBlbHNlIHsKLQkJY3ZlcmIgPDwgdnNmaWxlIDw8ICJwcm9maWxlIHNwZWMgMToiIDw8IGVuZGw7Ci0JCWFyY2hpdmVfcGF0aCA9IHByb2Nlc3Nfc3BlYyhjbGFzc2VzLCBzcGVjLmZpcnN0KTsKLQkJY3ZlcmIgPDwgdnNmaWxlIDw8ICJwcm9maWxlIHNwZWMgMjoiIDw8IGVuZGw7Ci0JCWFyY2hpdmVfcGF0aDIgPSBwcm9jZXNzX3NwZWMoY2xhc3NlczIsIHNwZWMuc2Vjb25kKTsKLQotCQlpZiAoIWNsYXNzZXMubWF0Y2hlcyhjbGFzc2VzMikpIHsKLQkJCWNlcnIgPDwgInByb2ZpbGUgY2xhc3NlcyBhcmUgaW5jb21wYXRpYmxlIiA8PCBlbmRsOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcHAvb3ByZXBvcnRfb3B0aW9ucy5oIGIvcHAvb3ByZXBvcnRfb3B0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzhjMTAxLi4wMDAwMDAwCi0tLSBhL3BwL29wcmVwb3J0X29wdGlvbnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKgotICogQGZpbGUgb3ByZXBvcnRfb3B0aW9ucy5oCi0gKiBPcHRpb25zIGZvciBvcHJlcG9ydCB0b29sCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2lmbmRlZiBPUFJFUE9SVF9PUFRJT05TX0gKLSNkZWZpbmUgT1BSRVBPUlRfT1BUSU9OU19ICi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGlvc2Z3ZD4KLQotI2luY2x1ZGUgImNvbW1vbl9vcHRpb24uaCIKLSNpbmNsdWRlICJzdHJpbmdfZmlsdGVyLmgiCi0jaW5jbHVkZSAic3ltYm9sX3NvcnQuaCIKLQotY2xhc3MgcHJvZmlsZV9jbGFzc2VzOwotY2xhc3MgbWVyZ2Vfb3B0aW9uOwotCi1uYW1lc3BhY2Ugb3B0aW9ucyB7Ci0JZXh0ZXJuIHN0ZDo6c3RyaW5nIGFyY2hpdmVfcGF0aDsKLQlleHRlcm4gc3RkOjpzdHJpbmcgYXJjaGl2ZV9wYXRoMjsKLQlleHRlcm4gZGVtYW5nbGVfdHlwZSBkZW1hbmdsZTsKLQlleHRlcm4gYm9vbCBzeW1ib2xzOwotCWV4dGVybiBib29sIGNhbGxncmFwaDsKLQlleHRlcm4gYm9vbCBkZWJ1Z19pbmZvOwotCWV4dGVybiBib29sIGRldGFpbHM7Ci0JZXh0ZXJuIGJvb2wgcmV2ZXJzZV9zb3J0OwotCWV4dGVybiBib29sIGV4Y2x1ZGVfZGVwZW5kZW50OwotCWV4dGVybiBzb3J0X29wdGlvbnMgc29ydF9ieTsKLQlleHRlcm4gbWVyZ2Vfb3B0aW9uIG1lcmdlX2J5OwotCWV4dGVybiBib29sIGdsb2JhbF9wZXJjZW50OwotCWV4dGVybiBib29sIGxvbmdfZmlsZW5hbWVzOwotCWV4dGVybiBib29sIHNob3dfYWRkcmVzczsKLQlleHRlcm4gc3RyaW5nX2ZpbHRlciBzeW1ib2xfZmlsdGVyOwotCWV4dGVybiBib29sIHNob3dfaGVhZGVyOwotCWV4dGVybiBib29sIGFjY3VtdWxhdGVkOwotfQotCi0vLy8gQWxsIHRoZSBjaG9zZW4gc2FtcGxlIGZpbGVzLgotZXh0ZXJuIHByb2ZpbGVfY2xhc3NlcyBjbGFzc2VzOwotZXh0ZXJuIHByb2ZpbGVfY2xhc3NlcyBjbGFzc2VzMjsKLQotLyoqCi0gKiBoYW5kbGVfb3B0aW9ucyAtIHByb2Nlc3MgY29tbWFuZCBsaW5lCi0gKiBAcGFyYW0gc3BlYyAgcHJvZmlsZSBzcGVjaWZpY2F0aW9uCi0gKgotICogUHJvY2VzcyB0aGUgc3BlYywgZmF0YWxseSBjb21wbGFpbmluZyBvbiBlcnJvci4KLSAqLwotdm9pZCBoYW5kbGVfb3B0aW9ucyhvcHRpb25zOjpzcGVjIGNvbnN0ICYgc3BlYyk7Ci0KLSNlbmRpZiAvLyBPUFJFUE9SVF9PUFRJT05TX0gKZGlmZiAtLWdpdCBhL3V0aWxzL01ha2VmaWxlLmFtIGIvdXRpbHMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MTM2ZTAuLjAwMDAwMDAKLS0tIGEvdXRpbHMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1BTV9DUFBGTEFHUz0tSSAke3RvcF9zcmNkaXJ9L2xpYm9wIC1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbAotQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLQotTElCUz1AUE9QVF9MSUJTQCBATElCRVJUWV9MSUJTQAotCi1iaW5fUFJPR1JBTVMgPSBvcGhlbHAKLWRpc3RfYmluX1NDUklQVFMgPSBvcGNvbnRyb2wKLQotb3BoZWxwX1NPVVJDRVMgPSBvcGhlbHAuYwotb3BoZWxwX0xEQUREID0gLi4vbGlib3AvbGlib3AuYSAuLi9saWJ1dGlsL2xpYnV0aWwuYQpkaWZmIC0tZ2l0IGEvdXRpbHMvTWFrZWZpbGUuaW4gYi91dGlscy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkwOTNmMC4uMDAwMDAwMAotLS0gYS91dGlscy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ4MiArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotU09VUkNFUyA9ICQob3BoZWxwX1NPVVJDRVMpCi0KLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSBASU5TVEFMTEAKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJpbl9QUk9HUkFNUyA9IG9waGVscCQoRVhFRVhUKQotc3ViZGlyID0gdXRpbHMKLURJU1RfQ09NTU9OID0gJChkaXN0X2Jpbl9TQ1JJUFRTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAotCSQoc3JjZGlyKS9NYWtlZmlsZS5pbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIKLWJpblBST0dSQU1TX0lOU1RBTEwgPSAkKElOU1RBTExfUFJPR1JBTSkKLVBST0dSQU1TID0gJChiaW5fUFJPR1JBTVMpCi1hbV9vcGhlbHBfT0JKRUNUUyA9IG9waGVscC4kKE9CSkVYVCkKLW9waGVscF9PQkpFQ1RTID0gJChhbV9vcGhlbHBfT0JKRUNUUykKLW9waGVscF9ERVBFTkRFTkNJRVMgPSAuLi9saWJvcC9saWJvcC5hIC4uL2xpYnV0aWwvbGlidXRpbC5hCi1kaXN0X2JpblNDUklQVF9JTlNUQUxMID0gJChJTlNUQUxMX1NDUklQVCkKLVNDUklQVFMgPSAkKGRpc3RfYmluX1NDUklQVFMpCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotU09VUkNFUyA9ICQob3BoZWxwX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKG9waGVscF9TT1VSQ0VTKQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAotQU1UQVIgPSBAQU1UQVJACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJGRF9MSUJTID0gQEJGRF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEUgPSBAREFURUAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1LSU5DID0gQEtJTkNACi1LU1JDID0gQEtTUkNACi1LVkVSUyA9IEBLVkVSU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBAUE9QVF9MSUJTQCBATElCRVJUWV9MSUJTQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTU9DID0gQE1PQ0AKLU1PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAotT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACi1PUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAotT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACi1PUF9ET0NESVIgPSBAT1BfRE9DRElSQAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKLVBUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAotUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACi1RVF9MREZMQUdTID0gQFFUX0xERkxBR1NACi1RVF9MSUIgPSBAUVRfTElCQAotUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKLVNUUklQID0gQFNUUklQQAotVUlDID0gQFVJQ0AKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKLVhfTElCUyA9IEBYX0xJQlNACi1YX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWVuYWJsZV9hYmlfRkFMU0UgPSBAZW5hYmxlX2FiaV9GQUxTRUAKLWVuYWJsZV9hYmlfVFJVRSA9IEBlbmFibGVfYWJpX1RSVUVACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhhdmVfcXRfRkFMU0UgPSBAaGF2ZV9xdF9GQUxTRUAKLWhhdmVfcXRfVFJVRSA9IEBoYXZlX3F0X1RSVUVACi1oYXZlX3hzbHRwcm9jX0ZBTFNFID0gQGhhdmVfeHNsdHByb2NfRkFMU0VACi1oYXZlX3hzbHRwcm9jX1RSVUUgPSBAaGF2ZV94c2x0cHJvY19UUlVFQAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAota2VybmVsX3N1cHBvcnRfRkFMU0UgPSBAa2VybmVsX3N1cHBvcnRfRkFMU0VACi1rZXJuZWxfc3VwcG9ydF9UUlVFID0gQGtlcm5lbF9zdXBwb3J0X1RSVUVACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10b3BkaXIgPSBAdG9wZGlyQAotQU1fQ1BQRkxBR1MgPSAtSSAke3RvcF9zcmNkaXJ9L2xpYm9wIC1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbAotQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKLWRpc3RfYmluX1NDUklQVFMgPSBvcGNvbnRyb2wKLW9waGVscF9TT1VSQ0VTID0gb3BoZWxwLmMKLW9waGVscF9MREFERCA9IC4uL2xpYm9wL2xpYm9wLmEgLi4vbGlidXRpbC9saWJ1dGlsLmEKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgdXRpbHMvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHV0aWxzL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotaW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChiaW5kaXIpIgotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIHAxPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JICBpZiB0ZXN0IC1mICQkcCBcCi0JICA7IHRoZW4gXAotCSAgICBmPWBlY2hvICIkJHAxIiB8IHNlZCAncyxeLiovLCw7JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCi0JICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAnJCRwJyAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAotCSAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAiJCRwIiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWJpblBST0dSQU1TOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj1gZWNobyAiJCRwIiB8IHNlZCAncyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1iaW5QUk9HUkFNUzoKLQktdGVzdCAteiAiJChiaW5fUFJPR1JBTVMpIiB8fCBybSAtZiAkKGJpbl9QUk9HUkFNUykKLW9waGVscCQoRVhFRVhUKTogJChvcGhlbHBfT0JKRUNUUykgJChvcGhlbHBfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgb3BoZWxwJChFWEVFWFQpCi0JJChMSU5LKSAkKG9waGVscF9MREZMQUdTKSAkKG9waGVscF9PQkpFQ1RTKSAkKG9waGVscF9MREFERCkgJChMSUJTKQotaW5zdGFsbC1kaXN0X2JpblNDUklQVFM6ICQoZGlzdF9iaW5fU0NSSVBUUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQl0ZXN0IC16ICIkKGJpbmRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKGJpbmRpcikiCi0JQGxpc3Q9JyQoZGlzdF9iaW5fU0NSSVBUUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBpZiB0ZXN0IC1mICQkZCQkcDsgdGhlbiBcCi0JICAgIGY9YGVjaG8gIiQkcCIgfCBzZWQgJ3N8Xi4qL3x8OyQodHJhbnNmb3JtKSdgOyBcCi0JICAgIGVjaG8gIiAkKGRpc3RfYmluU0NSSVBUX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICAgICQoZGlzdF9iaW5TQ1JJUFRfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKGJpbmRpcikvJCRmIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWRpc3RfYmluU0NSSVBUUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGRpc3RfYmluX1NDUklQVFMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPWBlY2hvICIkJHAiIHwgc2VkICdzfF4uKi98fDskKHRyYW5zZm9ybSknYDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BoZWxwLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCi11bmluc3RhbGwtaW5mby1hbToKLQotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUwotCi1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAotCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQoYmluZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAotCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1kaXN0X2JpblNDUklQVFMKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TIHVuaW5zdGFsbC1kaXN0X2JpblNDUklQVFMgXAotCXVuaW5zdGFsbC1pbmZvLWFtCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1iaW5QUk9HUkFNUyBcCi0JY2xlYW4tZ2VuZXJpYyBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAotCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1iaW5QUk9HUkFNUyBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRpc3RfYmluU0NSSVBUUyBcCi0JaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKLQlpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAotCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBcCi0JcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1iaW5QUk9HUkFNUyBcCi0JdW5pbnN0YWxsLWRpc3RfYmluU0NSSVBUUyB1bmluc3RhbGwtaW5mby1hbQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS91dGlscy9vcGNvbnRyb2wgYi91dGlscy9vcGNvbnRyb2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjQyMjYuLjAwMDAwMDAKLS0tIGEvdXRpbHMvb3Bjb250cm9sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0NiArMCwwIEBACi0jIS9iaW4vYmFzaAotIwotIyBvcGNvbnRyb2wgaXMgYSBzY3JpcHQgdG8gY29udHJvbCBPUHJvZmlsZQotIyBvcGNvbnRyb2wgLS1oZWxwIGFuZCBvcGNvbnRyb2wgLS1saXN0LWV2ZW50cyBoYXZlIGluZm8KLSMKLSMgQ29weXJpZ2h0IDIwMDIKLSMgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0jCi0jIEF1dGhvcnM6IEpvaG4gTGV2b24sIFBoaWxpcHBlIEVsaWUsIFdpbGwgQ29oZW4KLQotIyBlbnN1cmUgYmFzaDIKLWlmIHRlc3QgImBlY2hvICRCQVNIX1ZFUlNJT04gfCBjdXQgLWIxYCIgLWx0IDI7IHRoZW4KLQlleGVjIC9iaW4vYmFzaDIgJDAgJEAKLWZpCi0gCi0KLVNZU0NUTD1kb19zeXNjdGwKLQotIyBBIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGZvciB0aGUgc3lzY3RsIChwcm9jcHMgcGFja2FnZSkgdXRpbGl0eSB3aGljaCBpcwotIyBtaXNzaW5nIG9uIHNvbWUgZGlzdHJpYnV0aW9uIChlLmcuIHNsYWNrIDcuMCkuIAotIyBIYW5kbGVzIG9ubHkgdGhlIC13IG9wdGlvbiBvZiBzeXNjdGwuCi1kb19zeXNjdGwoKQotewotCWlmIHRlc3QgIiQxIiAhPSAiLXciOyB0aGVuCi0JCWVjaG8gIiQwIHVua25vd24gc3lzY3RsIG9wdGlvbiIgPiYyCi0JCWV4aXQgMQotCWZpCi0KLQlzaGlmdAotCi0JYXJnPWBlY2hvICQxIHwgYXdrIC1GPSAne3ByaW50ICQxfSdgCi0JdmFsPWBlY2hvICQxIHwgYXdrIC1GPSAne3ByaW50ICQyfSdgCi0KLQlkZXZfbmFtZT1gZWNobyAkYXJnIHwgdHIgLiAvYAotCi0JaWYgdGVzdCAhIC1mIC9wcm9jL3N5cy8kZGV2X25hbWU7IHRoZW4KLQkJZWNobyAiL3Byb2Mvc3lzLyRkZXZfbmFtZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSByZWd1bGFyIGZpbGUiID4mMgotCQlleGl0IDEKLQlmaQotCWVjaG8gJHZhbCA+IC9wcm9jL3N5cy8kZGV2X25hbWUKLX0KLQotCi0jIGNoZWNrIHZhbHVlIGlzIHNldAotZXJyb3JfaWZfZW1wdHkoKQotewotCWlmIHRlc3QgLXogIiQyIjsgdGhlbgotCQllY2hvICJObyB2YWx1ZSBnaXZlbiBmb3Igb3B0aW9uICQxIiA+JjIKLQkJZG9faGVscCAKLQkJZXhpdCAxCi0JZmkKLX0KLQotCi0jIHJtX2RldmljZSBhcmd1bWVudHMgJDE9ZmlsZV9uYW1lCi1mdW5jdGlvbiBybV9kZXZpY2UKLXsKLQlpZiB0ZXN0IC1jICIkMSI7IHRoZW4KLQkJdmVjaG8gIlJlbW92aW5nICQxIgotCQlybSAiJDEiCi0JZmkKLX0KLQotCi0jIGNyZWF0ZV9kZXZpY2UgYXJndW1lbnRzICQxPWZpbGVfbmFtZSAkMj1NQUpPUl9OUiAkMz1NSU5PUl9OUgotZnVuY3Rpb24gY3JlYXRlX2RldmljZSB7Ci0JdmVjaG8gIkRvaW5nIG1rbm9kICQxIgotCW1rbm9kICIkMSIgYyAkMiAkMwotCWlmIHRlc3QgIiQ/IiAhPSAiMCI7IHRoZW4KLQkJZWNobyAiQ291bGRuJ3QgbWtub2QgJDEiID4mMgotCQlleGl0IDEKLQlmaQotCWNobW9kIDcwMCAiJDEiCi19Ci0KLQotbW92ZV9hbmRfcmVtb3ZlKCkKLXsKLQlpZiB0ZXN0IC1lICQxOyB0aGVuCi0JCW12ICQxICRTQU1QTEVTX0RJUi8udG1wX3Jlc2V0LiQkCi0JCXJtIC1yZiAkU0FNUExFU19ESVIvLnRtcF9yZXNldC4kJAotCWZpCi19Ci0KLQotIyB2ZXJib3NlIGVjaG8KLXZlY2hvKCkKLXsKLQlpZiB0ZXN0IC1uICIkVkVSQk9TRSI7IHRoZW4gCi0JCWVjaG8gJEAKLQlmaQotfQotCi0gCi0jIHByaW50IGhlbHAgbWVzc2FnZQotZG9faGVscCgpCi17IAotICAgZWNobyAib3Bjb250cm9sOiB1c2FnZToKLSAgIC1sLy0tbGlzdC1ldmVudHMgbGlzdCBldmVudCB0eXBlcyBhbmQgdW5pdCBtYXNrcwotICAgLT8vLS1oZWxwICAgICAgICB0aGlzIG1lc3NhZ2UKLSAgIC12Ly0tdmVyc2lvbiAgICAgc2hvdyB2ZXJzaW9uCi0gICAtLWluaXQgICAgICAgICAgIGxvYWRzIHRoZSBvcHJvZmlsZSBtb2R1bGUgYW5kIG9wcm9maWxlZnMKLSAgIC0tc2V0dXAgICAgICAgICAgZ2l2ZSBzZXR1cCBhcmd1bWVudHMgKG1heSBiZSBvbWl0dGVkKQotICAgLS1zdGF0dXMgICAgICAgICBzaG93IGNvbmZpZ3VyYXRpb24KLSAgIC0tc3RhcnQtZGFlbW9uICAgc3RhcnQgZGFlbW9uIHdpdGhvdXQgc3RhcnRpbmcgcHJvZmlsaW5nCi0gICAtcy8tLXN0YXJ0ICAgICAgIHN0YXJ0IGRhdGEgY29sbGVjdGlvbgotICAgLWQvLS1kdW1wICAgICAgICBmbHVzaCB0aGUgY29sbGVjdGVkIHByb2ZpbGluZyBkYXRhCi0gICAtdC8tLXN0b3AgICAgICAgIHN0b3AgZGF0YSBjb2xsZWN0aW9uCi0gICAtaC8tLXNodXRkb3duICAgIHN0b3AgZGF0YSBjb2xsZWN0aW9uIGFuZCBraWxsIGRhZW1vbgotICAgLVYvLS12ZXJib3NlWz1hbGwsc2ZpbGUsYXJjcyxzYW1wbGVzLG1vZHVsZSxtaXNjXSAgICAgYmUgdmVyYm9zZSBpbiB0aGUgZGFlbW9uIGxvZwotICAgLS1yZXNldCAgICAgICAgICBjbGVhcnMgb3V0IGRhdGEgZnJvbSBjdXJyZW50IHNlc3Npb24KLSAgIC0tc2F2ZT1uYW1lICAgICAgc2F2ZSBkYXRhIGZyb20gY3VycmVudCBzZXNzaW9uIHRvIHNlc3Npb25fbmFtZQotICAgLS1kZWluaXQgICAgICAgICB1bmxvYWQgdGhlIG9wcm9maWxlIG1vZHVsZSBhbmQgb3Byb2ZpbGVmcwotCi0gICAtZS8tLWV2ZW50PWV2ZW50c3BlYyAKLQotICAgICAgQ2hvb3NlIGFuIGV2ZW50LiBNYXkgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLiBPZiB0aGUgZm9ybQotICAgICAgImRlZmF1bHQiIG9yICJuYW1lOmNvdW50OnVuaXRtYXNrOmtlcm5lbDp1c2VyIiwgd2hlcmUgOgotCi0gICAgICBuYW1lOiAgICAgZXZlbnQgbmFtZSwgZS5nLiBDUFVfQ0xLX1VOSEFMVEVEIG9yIFJUQ19JTlRFUlJVUFRTCi0gICAgICBjb3VudDogICAgcmVzZXQgY291bnRlciB2YWx1ZSBlLmcuIDEwMDAwMAotICAgICAgdW5pdG1hc2s6IGhhcmR3YXJlIHVuaXQgbWFzayBlLmcuIDB4MGYKLSAgICAgIGtlcm5lbDogICB3aGV0aGVyIHRvIHByb2ZpbGUga2VybmVsOiAwIG9yIDEKLSAgICAgIHVzZXI6ICAgICB3aGV0aGVyIHRvIHByb2ZpbGUgdXNlcnNwYWNlOiAwIG9yIDEKLQotICAgLXAvLS1zZXBhcmF0ZT10eXBlLFt0eXBlc10KLQotICAgICAgIFNlcGFyYXRlIHByb2ZpbGVzIGFzIGZvbGxvd3MgOgotCi0gICAgICAgbm9uZTogICAgIG5vIHByb2ZpbGUgc2VwYXJhdGlvbgotICAgICAgIGxpYnJhcnk6ICBzZXBhcmF0ZSBzaGFyZWQgbGlicmFyeSBwcm9maWxlcyBwZXItYXBwbGljYXRpb24KLSAgICAgICBrZXJuZWw6ICAgc2FtZSBhcyBsaWJyYXJ5LCBwbHVzIGtlcm5lbCBwcm9maWxlcwotICAgICAgIHRocmVhZDogICBwZXItdGhyZWFkL3Byb2Nlc3MgcHJvZmlsZXMKLSAgICAgICBjcHU6ICAgICAgcGVyIENQVSBwcm9maWxlcwotICAgICAgIGFsbDogICAgICBhbGwgb2YgdGhlIGFib3ZlCi0KLSAgIC1jLy0tY2FsbGdyYXBoPSNkZXB0aCAgICAgICAgIGVuYWJsZSBjYWxsZ3JhcGggc2FtcGxlIGNvbGxlY3Rpb24gd2l0aCBhIG1heGltdW0gZGVwdGguCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgMCB0byBkaXNhYmxlIGNhbGxncmFwaCBwcm9maWxpbmcuCi0KLSAgIC1pLy0taW1hZ2U9bmFtZVssbmFtZXNdICAgICAgIGxpc3Qgb2YgYmluYXJpZXMgdG8gcHJvZmlsZSAoZGVmYXVsdCBpcyAiYWxsIikKLSAgIC0tdm1saW51eD1maWxlICAgICAgICAgICAgICAgIHZtbGludXgga2VybmVsIGltYWdlCi0gICAtLW5vLXZtbGludXggICAgICAgICAgICAgICAgICBubyBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIGF2YWlsYWJsZQotICAgLS1rZXJuZWwtcmFuZ2U9c3RhcnQsZW5kICAgICAga2VybmVsIHJhbmdlIHZtYSBhZGRyZXNzIGluIGhleGFkZWNpbWFsCi0gICAtLWJ1ZmZlci1zaXplPW51bSAgICAgICAgICAgICBrZXJuZWwgYnVmZmVyIHNpemUgaW4gc2FtcGxlIHVuaXRzCi0gICAtLWNwdS1idWZmZXItc2l6ZT1udW0gICAgICAgICBwZXItY3B1IGJ1ZmZlciBzaXplIGluIHVuaXRzICgyLjYgb25seSkKLSAgIC0tbm90ZS10YWJsZS1zaXplICAgICAgICAgICAgIGtlcm5lbCBub3RlcyBidWZmZXIgc2l6ZSBpbiBub3RlcyB1bml0cyAoMi40IG9ubHkpCi0iID4mMgotfQotCi0KLSMgbG9hZCB0aGUgbW9kdWxlIGFuZCBtb3VudCBvcHJvZmlsZWZzCi1sb2FkX21vZHVsZV8yNigpCi17Ci0JZ3JlcCBvcHJvZmlsZWZzIC9wcm9jL2ZpbGVzeXN0ZW1zID4vZGV2L251bGwKLQlpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KLQkJbW9kcHJvYmUgb3Byb2ZpbGUKLQkJaWYgdGVzdCAiJD8iICE9ICIwIjsgdGhlbgotCQkJIyBjb3VsZG4ndCBsb2FkIGEgbW9kdWxlCi0JCQlyZXR1cm4KLQkJZmkKLQkJZ3JlcCBvcHJvZmlsZSAvcHJvYy9tb2R1bGVzID4vZGV2L251bGwKLQkJaWYgdGVzdCAiJD8iICE9ICIwIjsgdGhlbgotCQkJIyBkaWRuJ3QgZmluZCBtb2R1bGUKLQkJCXJldHVybgotCQlmaQotCWZpCi0JZ3JlcCBvcHJvZmlsZWZzIC9wcm9jL2ZpbGVzeXN0ZW1zID4vZGV2L251bGwKLQlpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KLQkJIyBmaWxlc3lzdGVtIHN0aWxsIG5vdCBhcm91bmQKLQkJcmV0dXJuCi0JZmkKLQlta2RpciAvZGV2L29wcm9maWxlID4vZGV2L251bGwgMj4mMQotCWdyZXAgb3Byb2ZpbGVmcyAvZXRjL210YWIgPi9kZXYvbnVsbAotCWlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgotCQltb3VudCAtdCBvcHJvZmlsZWZzIG5vZGV2IC9kZXYvb3Byb2ZpbGUgPi9kZXYvbnVsbAotCWZpCi0JS0VSTkVMX1NVUFBPUlQ9eWVzCi0JT1BST0ZJTEVfQVZBSUxBQkxFPXllcwotfQotCi0KLWxvYWRfbW9kdWxlXzI0KCkKLXsKLQlncmVwIG9wcm9mIC9wcm9jL2RldmljZXMgPi9kZXYvbnVsbAotCWlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgotCQltb2Rwcm9iZSBvcHJvZmlsZQotCQlpZiB0ZXN0ICIkPyIgIT0gIjAiOyB0aGVuCi0JCQkjIGNvdWxkbid0IGxvYWQgYSBtb2R1bGUKLQkJCXJldHVybgotCQlmaQotCQlncmVwIG9wcm9maWxlIC9wcm9jL21vZHVsZXMgPi9kZXYvbnVsbAotCQlpZiB0ZXN0ICIkPyIgIT0gIjAiOyB0aGVuCi0JCQkjIGRpZG4ndCBmaW5kIG1vZHVsZQotCQkJcmV0dXJuCi0JCWZpCi0JZmkKLQlLRVJORUxfU1VQUE9SVD1ubwotCU9QUk9GSUxFX0FWQUlMQUJMRT15ZXMKLX0KLQotCi1sb2FkX21vZHVsZSgpCi17Ci0JT1BST0ZJTEVfQVZBSUxBQkxFPW5vCi0JbG9hZF9tb2R1bGVfMjYKLQlpZiB0ZXN0ICIkT1BST0ZJTEVfQVZBSUxBQkxFIiAhPSAieWVzIjsgdGhlbgotCQlsb2FkX21vZHVsZV8yNAotCWZpCi0JaWYgdGVzdCAiJE9QUk9GSUxFX0FWQUlMQUJMRSIgIT0gInllcyI7IHRoZW4KLQkJZWNobyAiS2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBvcHJvZmlsZSIgPiYyCi0JCWV4aXQgMQotCWZpCi19Ci0KLSMgc2V0dXAgdmFyaWFibGVzIHJlbGF0ZWQgdG8gZGFlbW9uCi1kb19pbml0X2RhZW1vbl92YXJzKCkKLXsKLQkjIGFzIGluIG9wX3VzZXIuaAotCURJUj0iL3Zhci9saWIvb3Byb2ZpbGUiCi0JTE9DS19GSUxFPSIvdmFyL2xpYi9vcHJvZmlsZS9sb2NrIgotCUxPR19GSUxFPSIkRElSL29wcm9maWxlZC5sb2ciCi0JU0FNUExFU19ESVI9IiRESVIvc2FtcGxlcyIKLQlDVVJSRU5UX1NBTVBMRVNfRElSPSR7U0FNUExFU19ESVJ9L2N1cnJlbnQKLX0KLQotIyBwaWNrIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbnMgZGV2aWNlIGZvciBvcHJvZmlsZSBiYXNlZCBvbiBrZXJuZWwKLWRlY2lkZV9vcHJvZmlsZV9kZXZpY2UoKQotewotCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgotCQlNT1VOVD0iL2Rldi9vcHJvZmlsZSIKLQkJREVWSUNFX0ZJTEU9IiRNT1VOVC9idWZmZXIiCi0JZWxzZQotCQlNT1VOVD0iL3Byb2Mvc3lzL2Rldi9vcHJvZmlsZSIKLQkJREVWSUNFX0ZJTEU9IiRESVIvb3BkZXYiCi0JCU5PVEVfREVWSUNFX0ZJTEU9IiRESVIvb3Bub3RlZGV2IgotCQlIQVNIX01BUF9ERVZJQ0VfRklMRT0iJERJUi9vcGhhc2htYXBkZXYiCi0JZmkKLX0KLQotIyBpbml0aWFsaXNlIHBhcmFtZXRlcnMKLWRvX2luaXQoKQotewotCSMgZm9yIHRoZXNlIHRocmVlIGJ1ZmZlciBzaXplID09IDAgbWVhbnMgdXNlIHRoZSBkZWZhdWx0IHZhbHVlCi0JIyBoYXJkLWNvZGVkIGluIG9wX3VzZXIuaAotCUJVRl9TSVpFPTAKLQlDUFVfQlVGX1NJWkU9MAotCU5PVEVfU0laRT0wCi0JVk1MSU5VWD0KLQlWRVJCT1NFPSIiCi0JU0VQQVJBVEVfTElCPTAKLQlTRVBBUkFURV9LRVJORUw9MAotCVNFUEFSQVRFX1RIUkVBRD0wCi0JU0VQQVJBVEVfQ1BVPTAKLQlDQUxMR1JBUEg9MAotCi0JT1BST0ZJTEVEPSIkT1BESVIvb3Byb2ZpbGVkIgotCi0JIyBsb2NhdGlvbiBmb3IgZGFlbW9uIHNldHVwIGluZm9ybWF0aW9uCi0JU0VUVVBfRElSPSIvcm9vdC8ub3Byb2ZpbGUiCi0JU0VUVVBfRklMRT0iJFNFVFVQX0RJUi9kYWVtb25yYyIKLQotCUNQVVRZUEU9YGNhdCAkTU9VTlQvY3B1X3R5cGVgCi0JT1BfQ09VTlRFUlM9YGxzICRNT1VOVC8gfCBncmVwICJeWzAtOV1cK1wkIiB8IHRyICJcbiIgIiAiYAotCU5SX0NIT1NFTj0wCi0KLQlERUZBVUxUX0VWRU5UPWAkT1BIRUxQIC0tZ2V0LWRlZmF1bHQtZXZlbnRgCi0gCi0JSVNfVElNRVI9MAotCUlTX1BFUkZNT049MAotCWlmIHRlc3QgIiRDUFVUWVBFIiA9ICJ0aW1lciI7IHRoZW4KLQkJSVNfVElNRVI9MQotCWVsc2UKLQkJY2FzZSAiJENQVVRZUEUiIGluCi0JCQlpYTY0LyopCi0JCQkJSVNfUEVSRk1PTj0kS0VSTkVMX1NVUFBPUlQKLQkJCQk7OwotCQllc2FjCi0JZmkKLX0KLQotCi1jcmVhdGVfZGlyKCkKLXsKLQlpZiB0ZXN0ICEgLWQgIiQxIjsgdGhlbgotCSAgICAgICBta2RpciAtcCAiJDEiCi0JICAgICAgIGlmIHRlc3QgIiQ/IiAhPSAiMCI7IHRoZW4KLQkJICAgICAgIGVjaG8gIkNvdWxkbid0IG1rZGlyIC1wICQxIiA+JjIKLQkJICAgICAgIGV4aXQgMQotCSAgICAgICBmaQotCSAgICAgICBjaG1vZCA3NTUgIiQxIgotCWZpCi19Ci0KLQotIyBzYXZlIGFsbCB0aGUgc2V0dXAgcmVsYXRlZCBpbmZvcm1hdGlvbgotZG9fc2F2ZV9zZXR1cCgpCi17Ci0JY3JlYXRlX2RpciAiJFNFVFVQX0RJUiIKLQotCXRvdWNoICRTRVRVUF9GSUxFCi0JY2htb2QgNjQ0ICRTRVRVUF9GSUxFCi0JPiRTRVRVUF9GSUxFCi0KLQlpZiB0ZXN0ICIkTlJfQ0hPU0VOIiAhPSAiMCI7IHRoZW4KLQkJZm9yIGYgaW4gYHNlcSAwICQoKE5SX0NIT1NFTiAtIDEpKWA7IGRvCi0JCQllY2hvICJDSE9TRU5fRVZFTlRTWyR7Zn1dPSR7Q0hPU0VOX0VWRU5UU1skZl19IiA+PiRTRVRVUF9GSUxFCi0JCWRvbmUKLQlmaQotIAotCWVjaG8gIk5SX0NIT1NFTj0kTlJfQ0hPU0VOIiA+PiRTRVRVUF9GSUxFCi0KLQllY2hvICJTRVBBUkFURV9MSUI9JFNFUEFSQVRFX0xJQiIgPj4gJFNFVFVQX0ZJTEUKLQllY2hvICJTRVBBUkFURV9LRVJORUw9JFNFUEFSQVRFX0tFUk5FTCIgPj4gJFNFVFVQX0ZJTEUKLQllY2hvICJTRVBBUkFURV9USFJFQUQ9JFNFUEFSQVRFX1RIUkVBRCIgPj4gJFNFVFVQX0ZJTEUKLQllY2hvICJTRVBBUkFURV9DUFU9JFNFUEFSQVRFX0NQVSIgPj4gJFNFVFVQX0ZJTEUKLQllY2hvICJWTUxJTlVYPSRWTUxJTlVYIiA+PiAkU0VUVVBfRklMRQotCWVjaG8gIklNQUdFX0ZJTFRFUj0kSU1BR0VfRklMVEVSIiA+PiAkU0VUVVBfRklMRQotCSMgd3JpdGUgdGhlIGFjdHVhbCBpbmZvcm1hdGlvbiB0byBmaWxlCi0JaWYgdGVzdCAiJEJVRl9TSVpFIiAhPSAiMCI7IHRoZW4KLQkJZWNobyAiQlVGX1NJWkU9JEJVRl9TSVpFIiA+PiAkU0VUVVBfRklMRQotCWZpOwotCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgotCQllY2hvICJDUFVfQlVGX1NJWkU9JENQVV9CVUZfU0laRSIgPj4gJFNFVFVQX0ZJTEUKLQlmaQotCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgIT0gInllcyI7IHRoZW4KLQkJZWNobyAiTk9URV9TSVpFPSROT1RFX1NJWkUiID4+ICRTRVRVUF9GSUxFCi0JZmkKLQllY2hvICJDQUxMR1JBUEg9JENBTExHUkFQSCIgPj4gJFNFVFVQX0ZJTEUKLX0KLQotCi0jIHJlbG9hZCBhbGwgdGhlIHNldHVwLXJlbGF0ZWQgaW5mb3JtYXRpb24KLWRvX2xvYWRfc2V0dXAoKQotewotCWlmIHRlc3QgLWYgIiRTRVRVUF9GSUxFIjsgdGhlbgotCQkjIGxvYWQgdGhlIGFjdHVhbCBpbmZvcm1hdGlvbiBmcm9tIGZpbGUKLQkJIyBGSVhNRSB0aGlzIGlzIGluc2VjdXJlLCBhcmJpdHJhcnkgY29tbWFuZHMgY291bGQgYmUgYWRkZWQgdG8KLQkJIyAkU0VUVVBfRklMRSBhbmQgYmUgZXhlY3V0ZWQgYXMgcm9vdAotCQlzb3VyY2UgJFNFVFVQX0ZJTEUKLQlmaQotCi0JdmVjaG8gIlBhcmFtZXRlcnMgdXNlZDoiCi0JdmVjaG8gIkNQVVRZUEUgJENQVVRZUEUiCi0JaWYgdGVzdCAiJEJVRl9TSVpFIiAhPSAiMCI7IHRoZW4KLQkJdmVjaG8gIkJVRl9TSVpFICRCVUZfU0laRSIKLQllbHNlCi0JCXZlY2hvICJCVUZfU0laRSBkZWZhdWx0IHZhbHVlIgotCWZpOwotCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgotCQlpZiB0ZXN0ICIkQ1BVX0JVRl9TSVpFIiAhPSAiMCI7IHRoZW4KLQkJCXZlY2hvICJDUFVfQlVGX1NJWkUgJENQVV9CVUZfU0laRSIKLQkJZWxzZQotCQkgICAgdmVjaG8gIkNQVV9CVUZfU0laRSBkZWZhdWx0IHZhbHVlIgotCQlmaTsKLQlmaQotCi0JdmVjaG8gIlNFUEFSQVRFX0xJQiAkU0VQQVJBVEVfTElCIgotCXZlY2hvICJTRVBBUkFURV9LRVJORUwgJFNFUEFSQVRFX0tFUk5FTCIKLQl2ZWNobyAiU0VQQVJBVEVfVEhSRUFEICRTRVBBUkFURV9USFJFQUQiCi0JdmVjaG8gIlNFUEFSQVRFX0NQVSAkU0VQQVJBVEVfQ1BVIgotCXZlY2hvICJDQUxMR1JBUEggJENBTExHUkFQSCIKLQl2ZWNobyAiVk1MSU5VWCAkVk1MSU5VWCIKLX0KLQotCi1jaGVja192YWxpZF9hcmdzKCkKLXsKLQlpZiB0ZXN0IC16ICIkVk1MSU5VWCI7IHRoZW4KLQkJZWNobyAiTm8gdm1saW51eCBmaWxlIHNwZWNpZmllZC4gWW91IG11c3Qgc3BlY2lmeSB0aGUgY29ycmVjdCB2bWxpbnV4IGZpbGUsIGUuZy4iID4mMgotCQllY2hvICJvcGNvbnRyb2wgLS12bWxpbnV4PS9wYXRoL3RvL3ZtbGludXgiID4mMgotCQllY2hvICJJZiB5b3UgZG8gbm90IGhhdmUgYSB2bWxpbnV4IGZpbGUsIHVzZSAiID4mMgotCQllY2hvICJvcGNvbnRyb2wgLS1uby12bWxpbnV4IiA+JjIKLQkJZWNobyAiRW50ZXIgb3Bjb250cm9sIC0taGVscCBmb3IgZnVsbCBvcHRpb25zIiA+JjIKLQkJZXhpdCAxCi0JZmkKLQotCWlmIHRlc3QgLWYgIiRWTUxJTlVYIjsgdGhlbgotCQlyZXR1cm4KLQlmaQotCi0JaWYgdGVzdCAiJFZNTElOVVgiID0gIm5vbmUiOyB0aGVuCi0JCXJldHVybgotCWZpCi0KLQllY2hvICJUaGUgc3BlY2lmaWVkIHZtbGludXggZmlsZSBcIiRWTUxJTlVYXCIgZG9lc24ndCBleGlzdC4iID4mMgotCWV4aXQgMQotfQotCi0KLSMgZ2V0IHN0YXJ0IGFuZCBlbmQgcG9pbnRzIG9mIHRoZSBrZXJuZWwKLWdldF9rZXJuZWxfcmFuZ2UoKQotewotCWlmIHRlc3QgISAteiAiJEtFUk5FTF9SQU5HRSI7IHRoZW4KLQkJcmV0dXJuOwotCWZpCi0KLQlpZiB0ZXN0ICIkVk1MSU5VWCIgPSAibm9uZSI7IHRoZW4KLQkJcmV0dXJuOwotCWZpCi0KLQkjIHN0YXJ0IGF0IHRoZSBzdGFydCBvZiAudGV4dCBhbmQgdGhlbiBjb250aW51ZSB0byB0aGUgZW5kIAotCXJhbmdlX2luZm89YG9iamR1bXAgLWggJFZNTElOVVggMj4vZGV2L251bGwgfCBncmVwICIgLnRleHQgImAKLQl0bXAxPWBlY2hvICRyYW5nZV9pbmZvIHwgYXdrICd7cHJpbnQgJDR9J2AJCi0JdG1wX2xlbmd0aD1gZWNobyAkcmFuZ2VfaW5mbyB8IGF3ayAgJ3twcmludCAkM30nYAotCXRtcDI9YG9iamR1bXAgLWggJFZNTElOVVggLS1hZGp1c3Qtdm1hPTB4JHRtcF9sZW5ndGggMj4vZGV2L251bGwgfCBncmVwICIgLnRleHQgIiB8IGF3ayAgJ3twcmludCAkNH0nYAotCi0JaWYgdGVzdCAteiAiJHRtcDEiIC1vIC16ICIkdG1wMiI7IHRoZW4KLQkJZWNobyAiVGhlIHNwZWNpZmllZCBmaWxlICRWTUxJTlVYIGRvZXMgbm90IHNlZW0gdG8gYmUgdmFsaWQiID4mMgotCQllY2hvICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB2bWxpbnV4IG5vdCB2bWxpbnV6IiA+JjIKLQkJdmVjaG8gImZvdW5kIHN0YXJ0IGFzIFwiJHRtcDFcIiwgZW5kIGFzIFwiJHRtcDJcIiIgPiYyCi0JCWV4aXQgMQotCWZpCi0KLQlLRVJORUxfUkFOR0U9ImBlY2hvICR0bXAxYCxgZWNobyAkdG1wMmAiCi0JdmVjaG8gIktFUk5FTF9SQU5HRSAkS0VSTkVMX1JBTkdFIgotfQotIAotIAotIyB2YWxpZGF0ZSAtLXNlcGFyYXRlPSBwYXJhbWV0ZXJzLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIElGUz0sCi0jIHNvIG9uIGVhY2ggYXJndW1lbnQgaXMgc3BsaXR0ZWQKLXZhbGlkYXRlX3NlcGFyYXRlX2FyZ3MoKQotewotCWVycm9yX2lmX2VtcHR5ICQxICQyCSMgd2UgbmVlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQKLQlsb2NhbCBpPTEKLQlTRVBBUkFURV9MSUI9MAotCVNFUEFSQVRFX0tFUk5FTD0wCi0JU0VQQVJBVEVfVEhSRUFEPTAKLQlTRVBBUkFURV9DUFU9MAotCXdoaWxlICgoJGkgPCAkIykpOyBkbwotCQlzaGlmdAotCQljYXNlICIkMSIgaW4KLQkJCWxpYnxsaWJyYXJ5KQotCQkJCVNFUEFSQVRFX0xJQj0xCi0JCQkJOzsKLQkJCWtlcm5lbCkKLQkJCQkjIGZpcnN0IGltcGxpZWQgYnkgc2Vjb25kCi0JCQkJU0VQQVJBVEVfTElCPTEgCi0JCQkJU0VQQVJBVEVfS0VSTkVMPTEKLQkJCQk7OwotCQkJdGhyZWFkKQotCQkJCVNFUEFSQVRFX1RIUkVBRD0xCi0JCQkJOzsKLQkJCWNwdSkKLQkJCQlTRVBBUkFURV9DUFU9MQotCQkJCTs7Ci0JCQlhbGwpCi0JCQkJU0VQQVJBVEVfTElCPTEKLQkJCQlTRVBBUkFURV9LRVJORUw9MQotCQkJCVNFUEFSQVRFX1RIUkVBRD0xCi0JCQkJU0VQQVJBVEVfQ1BVPTEKLQkJCQk7OwotCQkJbm9uZSkKLQkJCQlTRVBBUkFURV9MSUI9MAotCQkJCVNFUEFSQVRFX0tFUk5FTD0wCi0JCQkJU0VQQVJBVEVfVEhSRUFEPTAKLQkJCQlTRVBBUkFURV9DUFU9MAotCQkJCTs7Ci0JCQkqKQotCQkJCWVjaG8gImludmFsaWQgLS1zZXBhcmF0ZT0gYXJndW1lbnQ6ICQxIgotCQkJCWV4aXQgMQotCQllc2FjCi0JZG9uZQotfQotCi0KLSMgY2hlY2sgdGhlIGNvdW50ZXJzIG1ha2Ugc2Vuc2UsIGFuZCByZXNvbHZlIHRoZSBoYXJkd2FyZSBhbGxvY2F0aW9uCi12ZXJpZnlfY291bnRlcnMoKQotewotCWlmIHRlc3QgIiRJU19USU1FUiIgPSAxOyB0aGVuCi0JCWlmIHRlc3QgIiROUl9DSE9TRU4iICE9IDA7IHRoZW4KLQkgCQllY2hvICJZb3UgY2Fubm90IHNwZWNpZnkgYW55IHBlcmZvcm1hbmNlIGNvdW50ZXIgZXZlbnRzIiA+JjIKLQkJCWVjaG8gImJlY2F1c2UgT1Byb2ZpbGUgaXMgaW4gdGltZXIgbW9kZS4iID4mMgotCQkJZXhpdCAxCi0JCWZpCi0JCXJldHVybgotCWZpCi0KLQlPUEhFTFBfQVJHUz0KLQotCWlmIHRlc3QgIiROUl9DSE9TRU4iICE9IDA7IHRoZW4KLQkJZm9yIGYgaW4gYHNlcSAwICQoKE5SX0NIT1NFTiAtIDEpKWA7IGRvCi0JCQlpZiB0ZXN0ICIke0NIT1NFTl9FVkVOVFNbJGZdfSIgIT0gIiI7IHRoZW4KLQkJCQlPUEhFTFBfQVJHUz0iJE9QSEVMUF9BUkdTICR7Q0hPU0VOX0VWRU5UU1skZl19IgotCQkJZmkKLQkJZG9uZQotCi0JCUhXX0NUUlM9YCRPUEhFTFAgLS1jaGVjay1ldmVudHMgJE9QSEVMUF9BUkdTIC0tY2FsbGdyYXBoPSRDQUxMR1JBUEhgCi0JCWlmIHRlc3QgIiQ/IiAhPSAwOyB0aGVuCi0JCQlleGl0IDEKLQkJZmkKLQlmaQotfQotCi0KLSMgc2V0dXAgYW55IG5lZWRlZCBkZWZhdWx0IHZhbHVlIGluIGNob3NlbiBldmVudHMKLW5vcm1hbGlzZV9ldmVudHMoKQotewotCWlmIHRlc3QgIiROUl9DSE9TRU4iIC1sZSAwOyB0aGVuCi0JCXJldHVybgotCWZpCi0KLQlmb3IgZiBpbiBgc2VxIDAgJCgoTlJfQ0hPU0VOIC0gMSkpYDsgZG8KLQkJaWYgdGVzdCAiJHtDSE9TRU5fRVZFTlRTWyRmXX0iICE9ICIiOyB0aGVuCi0JCQlFVkVOVD1gZWNobyAke0NIT1NFTl9FVkVOVFNbJGZdfSB8IGF3ayAtRjogJ3twcmludCAkMX0nYAotCQkJRVZFTlRfVkFMPWAkT1BIRUxQICRFVkVOVGAKLQkJCWlmIHRlc3QgIiQ/IiAhPSAwOyB0aGVuCi0JCQkJZXhpdCAxCi0JCQlmaQotCQkJQ09VTlQ9YGVjaG8gJHtDSE9TRU5fRVZFTlRTWyRmXX0gfCBhd2sgLUY6ICd7cHJpbnQgJDJ9J2AKLQkJCVVOSVRfTUFTSz1gZWNobyAke0NIT1NFTl9FVkVOVFNbJGZdfSB8IGF3ayAtRjogJ3twcmludCAkM30nYAotCQkJS0VSTkVMPWBlY2hvICR7Q0hPU0VOX0VWRU5UU1skZl19IHwgYXdrIC1GOiAne3ByaW50ICQ0fSdgCi0JCQlVU0VSPWBlY2hvICR7Q0hPU0VOX0VWRU5UU1skZl19IHwgYXdrIC1GOiAne3ByaW50ICQ1fSdgCi0JCQlpZiB0ZXN0IC16ICIkVU5JVF9NQVNLIjsgdGhlbgotCQkJCVRNUEVWRU5UPSIkRVZFTlQ6JENPVU5UIgotCQkJCVVOSVRfTUFTSz1gJE9QSEVMUCAtLXVuaXQtbWFzayAkVE1QRVZFTlRgCi0JCQkJaWYgdGVzdCAiJD8iICE9IDA7IHRoZW4KLQkJCQkJZXhpdCAxCi0JCQkJZmkKLQkJCWZpCi0JCQlpZiB0ZXN0IC16ICIkS0VSTkVMIjsgdGhlbgotCQkJCUtFUk5FTD0xCi0JCQlmaQotCQkJaWYgdGVzdCAteiAiJFVTRVIiOyB0aGVuCi0JCQkJVVNFUj0xCi0JCQlmaQotCi0JCQlDSE9TRU5fRVZFTlRTWyRmXT0kRVZFTlQ6JENPVU5UOiRVTklUX01BU0s6JEtFUk5FTDokVVNFUgotCQlmaQotCWRvbmUKLX0KLQotCi0jIGdldCBhbmQgY2hlY2sgc3BlY2lmaWVkIG9wdGlvbnMKLWRvX29wdGlvbnMoKQotewotCUVYQ0xVU0lWRV9BUkdDPTAKLQlTRVRVUD1ubwotCU5FRURfU0VUVVA9bm8KLQlTRUVOX0VWRU5UPTAKLQotCSMgbG9hZCBhbnkgZGVmYXVsdCBzZXR0aW5ncwotCWRvX2xvYWRfc2V0dXAKLQotCXdoaWxlIFsgIiQjIiAtbmUgMCBdCi0JZG8KLQkJYXJnPWBwcmludGYgJXMgJDEgfCBhd2sgLUY9ICd7cHJpbnQgJDF9J2AKLQkJdmFsPWBwcmludGYgJXMgJDEgfCBhd2sgLUY9ICd7cHJpbnQgJDJ9J2AKLQkJc2hpZnQKLQkJaWYgdGVzdCAteiAiJHZhbCI7IHRoZW4KLQkJCWxvY2FsIHBvc3NpYmxldmFsPSQxCi0JCQlwcmludGYgJXMgJDEgIiRwb3NzaWJsZXZhbCIgfCBncmVwIF4tID4vZGV2L251bGwgMj4mMQotCQkJaWYgdGVzdCAiJD8iICE9ICIwIjsgdGhlbgotCQkJCXZhbD0kcG9zc2libGV2YWwKLQkJCQlzaGlmdAotCQkJZmkKLQkJZmkKLSAKLQkJY2FzZSAiJGFyZyIgaW4KLQotCQkJLS1pbml0KQotCQkJCSMgdGhpcyBpcyBhbHJlYWR5IGRvbmUgaW4gbG9hZF9tb2R1bGUKLQkJCQkjIGJlY2F1c2UgbmVlZCB0byBrbm93IHRoZSBwcm9jZXNzb3IgdHlwZQotCQkJCSMgYW5kIG51bWJlciBvZiByZWdpc3RlcnMKLQkJCQlJTklUPXllczsKLQkJCQlFWENMVVNJVkVfQVJHQz1gZXhwciAkRVhDTFVTSVZFX0FSR0MgKyAxYAotCQkJCUVYQ0xVU0lWRV9BUkdWPSIkYXJnIgotCQkJCTs7Ci0KLQkJCS0tc2V0dXApCi0JCQkJU0VUVVA9eWVzCi0JCQkJOzsKLQotCQkJLS1zdGFydC1kYWVtb24pCi0JCQkJaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiAhPSAieWVzIjsgdGhlbgotCQkJCQllY2hvICIkYXJnIHVuc3VwcG9ydGVkLiB1c2UgXCItLXN0YXJ0XCIiID4mMgotCQkJCQlleGl0IDEKLQkJCQlmaQotCQkJCVNUQVJUX0RBRU1PTj15ZXMKLQkJCQlFWENMVVNJVkVfQVJHQz1gZXhwciAkRVhDTFVTSVZFX0FSR0MgKyAxYAotCQkJCUVYQ0xVU0lWRV9BUkdWPSIkYXJnIgotCQkJCTs7Ci0KLQkJCS1zfC0tc3RhcnQpCi0JCQkJU1RBUlQ9eWVzCi0JCQkJRVhDTFVTSVZFX0FSR0M9YGV4cHIgJEVYQ0xVU0lWRV9BUkdDICsgMWAKLQkJCQlFWENMVVNJVkVfQVJHVj0iJGFyZyIKLQkJCQk7OwotCi0JCQktZHwtLWR1bXApCi0JCQkJRFVNUD15ZXMKLQkJCQlPTkxZX0RVTVA9eWVzCi0JCQkJRVhDTFVTSVZFX0FSR0M9YGV4cHIgJEVYQ0xVU0lWRV9BUkdDICsgMWAKLQkJCQlFWENMVVNJVkVfQVJHVj0iJGFyZyIKLQkJCQk7OwotCi0JCQktdHwtLXN0b3ApCi0JCQkJaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiAhPSAieWVzIjsgdGhlbgotCQkJCQllY2hvICIkYXJnIHVuc3VwcG9ydGVkLiB1c2UgXCItLXNodXRkb3duXCIiID4mMgotCQkJCQlleGl0IDEKLQkJCQlmaQotCQkJCURVTVA9eWVzCi0JCQkJU1RPUD15ZXMKLQkJCQlFWENMVVNJVkVfQVJHQz1gZXhwciAkRVhDTFVTSVZFX0FSR0MgKyAxYAotCQkJCUVYQ0xVU0lWRV9BUkdWPSIkYXJnIgotCQkJCTs7Ci0KLQkJCS1ofC0tc2h1dGRvd24pCi0JCQkJRFVNUD15ZXMKLQkJCQlTVE9QPXllcwotCQkJCUtJTExfREFFTU9OPXllcwotCQkJCUVYQ0xVU0lWRV9BUkdDPWBleHByICRFWENMVVNJVkVfQVJHQyArIDFgCi0JCQkJRVhDTFVTSVZFX0FSR1Y9IiRhcmciCi0JCQkJOzsKLQotCQkJLS1zdGF0dXMpCi0JCQkJU1RBVFVTPXllcwotCQkJCTs7Ci0KLQkJCS0tcmVzZXQpCi0JCQkJRFVNUD15ZXMKLQkJCQlSRVNFVD15ZXMKLQkJCQlFWENMVVNJVkVfQVJHQz1gZXhwciAkRVhDTFVTSVZFX0FSR0MgKyAxYAotCQkJCUVYQ0xVU0lWRV9BUkdWPSIkYXJnIgotCQkJCTs7Ci0KLQkJCS0tc2F2ZSkKLQkJCQllcnJvcl9pZl9lbXB0eSAkYXJnICR2YWwKLQkJCQlEVU1QPXllcwotCQkJCVNBVkVfU0VTU0lPTj15ZXMKLQkJCQlTQVZFX05BTUU9JHZhbAotCQkJCUVYQ0xVU0lWRV9BUkdDPWBleHByICRFWENMVVNJVkVfQVJHQyArIDFgCi0JCQkJRVhDTFVTSVZFX0FSR1Y9IiRhcmciCi0JCQkJOzsKLQotCQkJLS1kZWluaXQpCi0JCQkJRFVNUD15ZXMKLQkJCQlTVE9QPXllcwotCQkJCUtJTExfREFFTU9OPXllcwotCQkJCURFSU5JVD15ZXMKLQkJCQlFWENMVVNJVkVfQVJHQz1gZXhwciAkRVhDTFVTSVZFX0FSR0MgKyAxYAotCQkJCUVYQ0xVU0lWRV9BUkdWPSIkYXJnIgotCQkJCTs7Ci0KLQkJCSMgLS1zZXR1cCBvcHRpb25zCi0KLQkJCS0tYnVmZmVyLXNpemUpCi0JCQkJZXJyb3JfaWZfZW1wdHkgJGFyZyAkdmFsCi0JCQkJQlVGX1NJWkU9JHZhbAotCQkJCURPX1NFVFVQPXllcwotCQkJCTs7Ci0JCQktLWNwdS1idWZmZXItc2l6ZSkKLQkJCQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiICE9ICJ5ZXMiOyB0aGVuCi0JCQkJCWVjaG8gIiRhcmcgdW5zdXBwb3J0ZWQgZm9yIHRoaXMga2VybmVsIHZlcnNpb24iCi0JCQkJCWV4aXQgMQotCQkJCWZpCi0JCQkJZXJyb3JfaWZfZW1wdHkgJGFyZyAkdmFsCi0JCQkJQ1BVX0JVRl9TSVpFPSR2YWwKLQkJCQlET19TRVRVUD15ZXMKLQkJCQk7OwotCQkJLWV8LS1ldmVudCkKLQkJCQllcnJvcl9pZl9lbXB0eSAkYXJnICR2YWwKLQkJCQkjIHJlc2V0IGFueSByZWFkLWluIGRlZmF1bHRzIGZyb20gZGFlbW9ucmMKLQkJCQlpZiB0ZXN0ICIkU0VFTl9FVkVOVCIgPSAiMCI7IHRoZW4KLQkJCQkJTlJfQ0hPU0VOPTAKLQkJCQkJU0VFTl9FVkVOVD0xCi0JCQkJZmkKLQkJCQlpZiB0ZXN0ICIkdmFsIiA9ICJkZWZhdWx0IjsgdGhlbgotCQkJCQl2YWw9JERFRkFVTFRfRVZFTlQKLQkJCQlmaQotCQkJCUNIT1NFTl9FVkVOVFNbJE5SX0NIT1NFTl09JHZhbAotCQkJCU5SX0NIT1NFTj1gZXhwciAkTlJfQ0hPU0VOICsgMWAKLQkJCQlET19TRVRVUD15ZXMKLQkJCQk7OwotCQkJLXB8LS1zZXBhcmF0ZSkKLQkJCQlPTERfSUZTPSRJRlMKLQkJCQlJRlM9LAotCQkJCXZhbGlkYXRlX3NlcGFyYXRlX2FyZ3MgJGFyZyAkdmFsCi0JCQkJSUZTPSRPTERfSUZTCi0JCQkJRE9fU0VUVVA9eWVzCi0JCQkJOzsKLQkJCS1jfC0tY2FsbGdyYXBoKQotCQkJCWVycm9yX2lmX2VtcHR5ICRhcmcgJHZhbAotCQkJCWlmIHRlc3QgISAtZiAkTU9VTlQvYmFja3RyYWNlX2RlcHRoOyB0aGVuCi0JCQkJCWVjaG8gIkNhbGwtZ3JhcGggcHJvZmlsaW5nIHVuc3VwcG9ydGVkIG9uIHRoaXMga2VybmVsL2hhcmR3YXJlIiA+JjIKLQkJCQkJZXhpdCAxCi0JCQkJZmkKLQkJCQlDQUxMR1JBUEg9JHZhbAotCQkJCURPX1NFVFVQPXllcwotCQkJCTs7Ci0JCQktLXZtbGludXgpCi0JCQkJZXJyb3JfaWZfZW1wdHkgJGFyZyAkdmFsCi0JCQkJVk1MSU5VWD0kdmFsCi0JCQkJRE9fU0VUVVA9eWVzCi0JCQkJIyBjaGVjayB2YWxpZGl0eQotCQkJCWdldF9rZXJuZWxfcmFuZ2UKLQkJCQk7OwotCQkJLS1uby12bWxpbnV4KQotCQkJCVZNTElOVVg9bm9uZQotCQkJCURPX1NFVFVQPXllcwotCQkJCTs7Ci0JCQktLWtlcm5lbC1yYW5nZSkKLQkJCQllcnJvcl9pZl9lbXB0eSAkYXJnICR2YWwKLQkJCQlLRVJORUxfUkFOR0U9JHZhbAotCQkJCURPX1NFVFVQPXllcwotCQkJCTs7Ci0JCQktLW5vdGUtdGFibGUtc2l6ZSkKLQkJCQllcnJvcl9pZl9lbXB0eSAkYXJnICR2YWwKLQkJCQlpZiB0ZXN0ICQiS0VSTkVMX1NVUFBPUlQiID0gInllcyI7IHRoZW4KLQkJCQkJZWNobyAiXCIkYXJnXCIgbWVhbmluZ2xlc3Mgb24gdGhpcyBrZXJuZWwiID4mMgotCQkJCQlleGl0IDEKLQkJCQllbHNlCi0JCQkJCU5PVEVfU0laRT0kdmFsCi0JCQkJZmkKLQkJCQlET19TRVRVUD15ZXMKLQkJCQk7OwotCQkJLWl8LS1pbWFnZSkKLQkJCQllcnJvcl9pZl9lbXB0eSAkYXJnICR2YWwKLQkJCQlpZiB0ZXN0ICIkdmFsIiA9ICJhbGwiOyB0aGVuCi0JCQkJCUlNQUdFX0ZJTFRFUj0KLQkJCQllbHNlCi0JCQkJCUlNQUdFX0ZJTFRFUj0kdmFsCi0JCQkJZmkKLQkJCQlET19TRVRVUD15ZXMKLQkJCQk7OwotCi0JCQktVnwtLXZlcmJvc2UpCi0JCQkJaWYgdGVzdCAteiAiJHZhbCI7IHRoZW4KLQkJCQkJVkVSQk9TRT0iYWxsIgotCQkJCWVsc2UKLQkJCQkJVkVSQk9TRT0kdmFsCi0JCQkJZmkKLQkJCQk7OwotCi0JCQktbHwtLWxpc3QtZXZlbnRzKQotCQkJCUVYQ0xVU0lWRV9BUkdDPWBleHByICRFWENMVVNJVkVfQVJHQyArIDFgCi0JCQkJRVhDTFVTSVZFX0FSR1Y9IiRhcmciCi0JCQkJZXhlYyAkT1BIRUxQCi0JCQkJOzsKLQkJCQkKLQkJCSopCi0JCQkJZWNobyAiVW5rbm93biBvcHRpb24gXCIkYXJnXCIuIFNlZSBvcGNvbnRyb2wgLS1oZWxwIiA+JjIKLQkJCQlleGl0IDEKLQkJCQk7OyAKLQkJZXNhYwotCWRvbmUKLQotCW5vcm1hbGlzZV9ldmVudHMKLQl2ZXJpZnlfY291bnRlcnMKLQotCSMgZXJyb3IgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIG9wdGlvbnMgbWFrZSBzZW5zZQotCWlmIHRlc3QgIiRFWENMVVNJVkVfQVJHQyIgLWd0IDE7IHRoZW4KLQkJZWNobyAiT3B0aW9uIFwiJEVYQ0xVU0lWRV9BUkdWXCIgbm90IHZhbGlkIHdpdGggb3RoZXIgb3B0aW9ucy4iID4mMgotCQlleGl0IDEKLQlmaQotCi0JaWYgdGVzdCAiJFNFVFVQIiA9ICJ5ZXMiIC1hICIkRE9fU0VUVVAiICE9ICJ5ZXMiOyB0aGVuCi0JCWVjaG8gIk5vIG9wdGlvbnMgc3BlY2lmaWVkIGZvciAtLXNldHVwLiIgPiYyCi0JCWV4aXQgMQotCWZpCi0KLQlpZiB0ZXN0IC1uICIkVkVSQk9TRSI7IHRoZW4KLQkJaWYgdGVzdCAiJFNUQVJUIiAhPSAieWVzIiAtYSAiJFNUQVJUX0RBRU1PTiIgIT0gInllcyI7IHRoZW4KLQkJCWVjaG8gIk9wdGlvbiAtLXZlcmJvc2UgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIC0tc3RhcnQgb3IgLS1zdGFydC1kYWVtb24iID4mMgotCQkJZXhpdCAxCi0JCWZpCi0JZmkKLQotCWlmIHRlc3QgIiRET19TRVRVUCIgPSAieWVzIjsgdGhlbgotCQlTRVRVUD0iJERPX1NFVFVQIgotCWZpCi0KLQlpZiB0ZXN0ICIkRVhDTFVTSVZFX0FSR0MiIC1lcSAxIC1hICIkU0VUVVAiID0gInllcyI7IHRoZW4KLQkJaWYgdGVzdCAiJEVYQ0xVU0lWRV9BUkdWIiAhPSAiLS1zdGFydC1kYWVtb24iIC1hICIkRVhDTFVTSVZFX0FSR1YiICE9ICItLXN0YXJ0IjsgdGhlbgotCQkJZWNobyAiT3B0aW9uIFwiLS1zZXR1cFwiIG5vdCB2YWxpZCB3aXRoIFwiJEVYQ0xVU0lWRV9BUkdWXCIuIiA+JjIKLQkJCWV4aXQgMQotCQlmaQotCWZpCi19Ci0KLQotIyBzdG9wIGFueSBleGlzdGluZyBkYWVtb24KLWRvX3N0b3AoKQotewotCWlmIHRlc3QgISAtZiAiJExPQ0tfRklMRSI7IHRoZW4KLQkJZWNobyAiRGFlbW9uIG5vdCBydW5uaW5nIiA+JjIKLQkJcmV0dXJuCi0JZmkKLQotCWtpbGwgLXMgMCBgY2F0ICRMT0NLX0ZJTEVgIDI+L2Rldi9udWxsCi0JaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCi0JCWVjaG8gIkRldGVjdGVkIHN0YWxlIGxvY2sgZmlsZS4gUmVtb3ZpbmcuIiA+JjIKLQkJcm0gLWYgIiRMT0NLX0ZJTEUiCi0JCXJldHVybgotCWZpCi0KLQlpZiB0ZXN0ICRLRVJORUxfU1VQUE9SVCA9ICJ5ZXMiOyB0aGVuCi0JCWVjaG8gIlN0b3BwaW5nIHByb2ZpbGluZy4iCi0JCWVjaG8gMCA+L2Rldi9vcHJvZmlsZS9lbmFibGUKLQlmaQotCWtpbGwgLXMgVVNSMiBgY2F0ICRMT0NLX0ZJTEVgIDI+L2Rldi9udWxsCi19Ci0KLQotIyBraWxsIHRoZSBkYWVtb24gcHJvY2VzcyhlcykKLWRvX2tpbGxfZGFlbW9uKCkKLXsKLQlpZiB0ZXN0ICEgLWYgIiRMT0NLX0ZJTEUiOyB0aGVuCi0JCSMgbm8gZXJyb3IgbWVzc2FnZSwgZG9fa2lsbF9kZWFtb24gaW1wbHkgc3RvcCBhbmQgc3RvcCBhbHJlYWR5Ci0JCSMgb3V0cHV0ICJEYWVtb24gbm90IHJ1bm5pbmciCi0JCXJldHVybgotCWZpCi0KLQlraWxsIC1zIDAgYGNhdCAkTE9DS19GSUxFYCAyPi9kZXYvbnVsbAotCWlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgotCQllY2hvICJEZXRlY3RlZCBzdGFsZSBsb2NrIGZpbGUuIFJlbW92aW5nLiIgPiYyCi0JCXJtIC1mICIkTE9DS19GSUxFIgotCQlyZXR1cm4KLQlmaQotCi0JZWNobyAiS2lsbGluZyBkYWVtb24uIgotCi0JaWYgdGVzdCAkS0VSTkVMX1NVUFBPUlQgPSAieWVzIjsgdGhlbgotCQlraWxsIC1URVJNIGBjYXQgJExPQ0tfRklMRWAKLQllbHNlCi0JCWVjaG8gMSA+L3Byb2Mvc3lzL2Rldi9vcHJvZmlsZS9kdW1wX3N0b3AKLQlmaQotCi0JQ09VTlQ9MAotCXdoaWxlIHRlc3QgLW4gImBwaWRvZiBvcHJvZmlsZWRgIgotCWRvCi0JCXNsZWVwIDEgCi0KLQkJIyBiZWNhdXNlIG9wcm9maWxlZCBvbmx5IHNldHMgYSB2YXJpYWJsZSBpbnNpZGUgdGhlCi0JCSMgc2lnbmFsIGhhbmRsZXIgaXRzZWxmLCBpdCdzIHBvc3NpYmxlIHRvIG1pc3MgYQotCQkjIHNpZ25hbCBqdXN0IGJlZm9yZSBpdCBnb2VzIHRvIHNsZWVwIHdhaXRpbmcgZm9yCi0JCSMgZGF0YSBmcm9tIHRoZSBrZXJuZWwgdGhhdCBuZXZlciBhcnJpdmVzLiBTbyB3ZQotCQkjIHJlbWluZCBpdCBpdCBuZWVkcyB0byBkaWUgLSB0aGlzIHdvcmtzIGJlY2F1c2UKLQkJIyB0aGUgc2lnbmFsIHdpbGwgYnJpbmcgb3Byb2ZpbGVkIG91dCBvZiB0aGUga2VybmVsCi0JCSMgYmFjayBpbnRvIHVzZXJzcGFjZQotCQlpZiB0ZXN0ICRLRVJORUxfU1VQUE9SVCA9ICJ5ZXMiOyB0aGVuCi0JCQlwaWQ9YGNhdCAkTE9DS19GSUxFIDI+L2Rldi9udWxsYAotCQkJa2lsbCAtVEVSTSAiJHBpZCIgMj4vZGV2L251bGwKLQkJZmkKLQotCQlDT1VOVD1gZXhwciAkQ09VTlQgKyAxYAotCQlpZiB0ZXN0ICIkQ09VTlQiIC1lcSAxNTsgdGhlbgotCQkJZWNobyAiRGFlbW9uIHN0dWNrIHNodXR0aW5nIGRvd247IGtpbGxpbmcgISIKLQkJCWtpbGwgLTkgYGNhdCAkTE9DS19GSUxFYAotCQlmaQotCWRvbmUKLQotCSMgYWxyZWFkeSByZW1vdmVkIHVubGVzcyB3ZSBmb3JjZWQgdGhlIGtpbGwKLQlybSAtZiAvdmFyL2xpYi9vcHJvZmlsZS9sb2NrCi19Ci0KLQotcm1fZGV2aWNlc18yNCgpCi17Ci0Jcm1fZGV2aWNlICIkREVWSUNFX0ZJTEUiCi0Jcm1fZGV2aWNlICIkTk9URV9ERVZJQ0VfRklMRSIKLQlybV9kZXZpY2UgIiRIQVNIX01BUF9ERVZJQ0VfRklMRSIKLX0KLQotCi1jcmVhdGVfZGV2aWNlc18yNCgpIAotewotCU1BSk9SX05SPWBncmVwIG9wcm9mIC9wcm9jL2RldmljZXMgfCBhd2sgJ3twcmludCAkMX0nYAotCi0JY3JlYXRlX2RldmljZSAkREVWSUNFX0ZJTEUgJE1BSk9SX05SIDAKLQljcmVhdGVfZGV2aWNlICROT1RFX0RFVklDRV9GSUxFICRNQUpPUl9OUiAyCi0JY3JlYXRlX2RldmljZSAkSEFTSF9NQVBfREVWSUNFX0ZJTEUgJE1BSk9SX05SIDEKLX0KLQotCi0jIHNldHVwIGFuZCBzdGFydCBtb2R1bGUKLWRvX3NldHVwKCkKLXsKLQljcmVhdGVfZGlyICIkRElSIgotCi0JPiRMT0dfRklMRQotCi0JaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiAhPSAieWVzIjsgdGhlbgotCQlybV9kZXZpY2VzXzI0Ci0JCWNyZWF0ZV9kZXZpY2VzXzI0Ci0JZmkKLQotCWNyZWF0ZV9kaXIgIiRDVVJSRU5UX1NBTVBMRVNfRElSIgotfQotCi0KLSMgc2V0IGEgc3lzY3RsL29wcm9maWxlZnMgcGFyYW1ldGVyCi1zZXRfcGFyYW0oKQotewotCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgotCQllY2hvICQyID4kTU9VTlQvJDEKLQllbHNlCi0JCSRTWVNDVEwgLXcgZGV2Lm9wcm9maWxlLiQxPSQyCi0JZmkKLX0KLQotCi0jIHNldCBhIHN5c2N0bC9vcHJvZmlsZWZzIGNvdW50ZXIgcGFyYW1ldGVyCi1zZXRfY3RyX3BhcmFtKCkKLXsKLQkjIG5vIHN1Y2ggdGhpbmcgZm9yIHBlcmZtb24KLQlpZiB0ZXN0ICIkSVNfUEVSRk1PTiIgPSAieWVzIjsgdGhlbgotCQlyZXR1cm4KLQlmaQotCi0JaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiA9ICJ5ZXMiOyB0aGVuCi0JCWVjaG8gJDMgPiRNT1VOVC8kMS8kMgotCWVsc2UKLQkJJFNZU0NUTCAtdyBkZXYub3Byb2ZpbGUuJDEuJDI9JDMKLQlmaQotfQotCi0KLSMgSWYgRVZFTlRfU1RSIGhhcyBtb3JlIHRoYW4gb25lIHRva2VuIGluIGl0IChpLmUuLCB0aGUgZXZlbnQgSUQpLCAKLSMgdGhpcyBpbXBsaWVzIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBwcmVzZW50IHRoYXQgaXMgYXNzb2NpYXRlZCAKLSMgd2l0aCB0aGUgZXZlbnQuICBGb3IgZXhhbXBsZSwgZm9yIFBQQzY0IGFyY2hpdGVjdHVyZXMsIHRoZSB2YWx1ZXMKLSMgcmVxdWlyZWQgdG8gcHJvZ3JhbSB0aGUgTU1DUnMgZm9yIHRoZSBnaXZlbiBldmVudCBhcmUgcmV0dXJuZWQgYWxvbmcgCi0jIHdpdGggdGhlIGV2ZW50LiAgVGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0gYW55IG5lZWRlZCB2YWxpZGF0aW9uCi0jIG9mIHN1Y2ggZXZlbnQgbWFwcGluZyBkYXRhLgotY2hlY2tfZXZlbnRfbWFwcGluZ19kYXRhKCkKLXsKLQotCWlmIFsgIiRDUFVUWVBFIiA9ICJwcGM2NC9wb3dlcjQiIC1vICIkQ1BVVFlQRSIgPSAicHBjNjQvcG93ZXI1IiAtbyAiJENQVVRZUEUiID0gInBwYzY0Lzk3MCIgXTsgdGhlbgotCQlNTUNSMD1gZWNobyAkRVZFTlRfU1RSIHwgYXdrICd7cHJpbnQgJDJ9J2AKLQkJTU1DUjE9YGVjaG8gJEVWRU5UX1NUUiB8IGF3ayAne3ByaW50ICQzfSdgCi0JCU1NQ1JBPWBlY2hvICRFVkVOVF9TVFIgfCBhd2sgJ3twcmludCAkNH0nYAotCQlNTUNSMF9WQUw9YGVjaG8gJE1NQ1IwIHwgYXdrIC1GOiAne3ByaW50ICQyfSdgCi0JCU1NQ1IxX1ZBTD1gZWNobyAkTU1DUjEgfCBhd2sgLUY6ICd7cHJpbnQgJDJ9J2AKLQkJTU1DUkFfVkFMPWBlY2hvICRNTUNSQSB8IGF3ayAtRjogJ3twcmludCAkMn0nYAotCQotCQkjIyBtbWNyMCwgbW1jcjEsIG1tY3JhIGFyZSBmb3IgYWxsIHBwYzY0IGNvdW50ZXJzCi0JCSMgU2F2ZSBmaXJzdCBldmVudCBtbWNyIHNldHRpbmdzIHRvIGNvbXBhcmUgd2l0aCBhZGRpdGlvbmFsCi0JCSMgZXZlbnRzLiAgQWxsIGV2ZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgbW1jcnggdmFsdWVzIGkuZS4gYmUgaW4KLQkJIyB0aGUgc2FtZSBncm91cC4gIE9ubHkgb25lIGV2ZW50IGlzIGFzc2lnbmVkIHBlciBjb3VudGVyLAotCQkjIGhlbmNlIHRoZXJlIHdpbGwgbm90IGJlIGEgY29uZmxpY3Qgb24gdGhlIGNvdW50ZXJzCi0JCWlmIFsgIiRNTUNSMF9DS19WQUwiID0gIiIgXSA7IHRoZW4gICAgCi0JCQlNTUNSMF9DS19WQUw9JE1NQ1IwX1ZBTAotCQkJTU1DUjFfQ0tfVkFMPSRNTUNSMV9WQUwKLQkJCU1NQ1JBX0NLX1ZBTD0kTU1DUkFfVkFMCi0JCWVsc2UKLQkJCSMgbWFrZSBzdXJlIGFsbCBldmVudHMgYXJlIGZyb20gdGhlIHNhbWUgZ3JvdXAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICRNTUNSMF9DS19WQUwgIT0gJE1NQ1IwX1ZBTCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1vICRNTUNSMV9DS19WQUwgIT0gJE1NQ1IxX1ZBTCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1vICRNTUNSQV9DS19WQUwgIT0gJE1NQ1JBX1ZBTCA7IHRoZW4KLQkJCQllY2hvICJFUlJPUjogVGhlIHNwZWNpZmllZCBldmVudHMgYXJlIG5vdCBmcm9tIHRoZSBzYW1lIGdyb3VwLiIKLQkJCQllY2hvICIgICAgICAgVXNlICdvcGNvbnRyb2wgLS1saXN0LWV2ZW50cycgdG8gc2VlIGV2ZW50IGdyb3VwaW5ncy4iCi0JCQkJZXhpdCAxCi0JCQlmaQotCQlmaQotCWZpCi19Ci0KLQotZG9fcGFyYW1fc2V0dXAoKQotewotCSMgZGlmZmVyZW50IG5hbWVzCi0JaWYgdGVzdCAkQlVGX1NJWkUgIT0gMDsgdGhlbgotCQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiID0gInllcyI7IHRoZW4KLQkJCWVjaG8gJEJVRl9TSVpFID4kTU9VTlQvYnVmZmVyX3NpemUKLQkJZWxzZQotCQkJJFNZU0NUTCAtdyBkZXYub3Byb2ZpbGUuYnVmc2l6ZT0kQlVGX1NJWkUKLQkJZmkKLQlmaQotCi0JaWYgdGVzdCAkQ1BVX0JVRl9TSVpFICE9IDA7IHRoZW4KLQkJaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiA9ICJ5ZXMiOyB0aGVuCi0JCQllY2hvICRDUFVfQlVGX1NJWkUgPiRNT1VOVC9jcHVfYnVmZmVyX3NpemUKLQkJZWxzZQotCQkJZWNobyAiY3B1LWJ1ZmZlci1zaXplIG5vdCBzdXBwb3J0ZWQgLSBpZ25vcmVkIiA+JjIKLQkJZmkKLQlmaQotCi0JaWYgdGVzdCAkTk9URV9TSVpFICE9IDA7IHRoZW4KLQkJc2V0X3BhcmFtIG5vdGVzaXplICROT1RFX1NJWkUKLQlmaQotCi0JaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiA9ICJ5ZXMiIC1hIC1mICRNT1VOVC9iYWNrdHJhY2VfZGVwdGg7IHRoZW4KLQkJc2V0X3BhcmFtIGJhY2t0cmFjZV9kZXB0aCAkQ0FMTEdSQVBICi0JZWxpZiB0ZXN0ICIkQ0FMTEdSQVBIIiAhPSAiMCI7IHRoZW4KLQkJZWNobyAiQ2FsbC1ncmFwaCBwcm9maWxpbmcgbm90IHN1cHBvcnRlZCAtIGlnbm9yZWQiID4mMgotCWZpCi0KLQlpZiB0ZXN0ICIkSVNfVElNRVIiID0gMTsgdGhlbgotCQlyZXR1cm4KLQlmaQotCi0JIyB1c2UgdGhlIGRlZmF1bHQgc2V0dXAgaWYgbm9uZSBzZXQKLQlpZiB0ZXN0ICIkTlJfQ0hPU0VOIiA9IDA7IHRoZW4KLQkJQ0hPU0VOX0VWRU5UU1swXT0kREVGQVVMVF9FVkVOVAotCQlOUl9DSE9TRU49MQotCQlIV19DVFJTPWAkT1BIRUxQIC0tY2hlY2stZXZlbnRzICRERUZBVUxUX0VWRU5UIC0tY2FsbGdyYXBoPSRDQUxMR1JBUEhgCi0JCWVjaG8gIlVzaW5nIGRlZmF1bHQgZXZlbnQ6ICR7Q0hPU0VOX0VWRU5UU1swXX0iCi0JZmkKLQotCSMgTmVjZXNzYXJ5IGluIHRoaXMgY2FzZSA6Ci0JIyBvcGNvbnRyb2wgY3RyMC1vbiBjdHIxLW9uIHRoZW4gb3Bjb250cm9sIGN0cjAtb24KLQlmb3IgZiBpbiAkT1BfQ09VTlRFUlMgOyBkbwotCQlzZXRfY3RyX3BhcmFtICRmIGVuYWJsZWQgMAotCQlzZXRfY3RyX3BhcmFtICRmIGV2ZW50IDAKLQkJc2V0X2N0cl9wYXJhbSAkZiBjb3VudCAwCi0JZG9uZQotCi0JdmVyaWZ5X2NvdW50ZXJzCi0KLQlPUFJPRklMRURfRVZFTlRTPQotCWZvciBmIGluIGBzZXEgMCAkKChOUl9DSE9TRU4gLSAxKSlgOyBkbwotCQlpZiB0ZXN0ICIke0NIT1NFTl9FVkVOVFNbJGZdfSIgIT0gIiI7IHRoZW4KLQkJCUVWRU5UPWBlY2hvICR7Q0hPU0VOX0VWRU5UU1skZl19IHwgYXdrIC1GOiAne3ByaW50ICQxfSdgCi0JCQlFVkVOVF9TVFI9YCRPUEhFTFAgJEVWRU5UYAotCQkJIyBGb3Igc29tZSBhcmNoaXRlY3R1cmVzLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBnaXZlbgotCQkJIyBldmVudCBpcyByZXR1cm5lZCBpbiBFVkVOVF9TVFIsIHNvIHdlIHZhbGlkYXRlIHRoaXMgaW5mb3JtYXRpb24gaWYgbmVjZXNzYXJ5Ci0JCQljaGVja19ldmVudF9tYXBwaW5nX2RhdGEKLQkJCUVWRU5UX1ZBTD1gZWNobyAkRVZFTlRfU1RSIHwgYXdrICd7cHJpbnQgJDF9J2AKLQkJCUNPVU5UPWBlY2hvICR7Q0hPU0VOX0VWRU5UU1skZl19IHwgYXdrIC1GOiAne3ByaW50ICQyfSdgCi0JCQlVTklUX01BU0s9YGVjaG8gJHtDSE9TRU5fRVZFTlRTWyRmXX0gfCBhd2sgLUY6ICd7cHJpbnQgJDN9J2AKLQkJCUtFUk5FTD1gZWNobyAke0NIT1NFTl9FVkVOVFNbJGZdfSB8IGF3ayAtRjogJ3twcmludCAkNH0nYAotCQkJVVNFUj1gZWNobyAke0NIT1NFTl9FVkVOVFNbJGZdfSB8IGF3ayAtRjogJ3twcmludCAkNX0nYAotCQkJQ1RSPWBlY2hvICRIV19DVFJTIHwgYXdrICJ7cHJpbnQgXFwkJCgoZiArIDEpKX0iYAotCi0JCQlpZiB0ZXN0ICIkRVZFTlQiID0gIlJUQ19JTlRFUlJVUFRTIjsgdGhlbgotCQkJCXNldF9wYXJhbSBydGNfdmFsdWUgJENPVU5UCi0JCQkJJFNZU0NUTCAtdyBkZXYub3Byb2ZpbGUucnRjX3ZhbHVlPSRDT1VOVAotCQkJZWxzZQotCQkJCXNldF9jdHJfcGFyYW0gJENUUiBlbmFibGVkIDEJCQkJCi0JCQkJc2V0X2N0cl9wYXJhbSAkQ1RSIGV2ZW50ICRFVkVOVF9WQUwKLQkJCQlsZXQgbG9vcF9jb3VudD0xCi0JCQkJZm9yIGkgaW4gJHtFVkVOVF9TVFJ9OyBkbwotCQkJCQkjU2tpcCBmaXJzdCBhcmd1bWVudCBvZiBFVkVOVF9TVFIgKGV2ZW50IHZhbCkgc2luY2Ugd2UndmUgYWxyZWFkeQotCQkJCQkjcHJvY2Vzc2VkIHRoYXQgdmFsdWUuCi0JCQkJCWlmIHRlc3QgIiRsb29wX2NvdW50IiAtZ3QgMTsgdGhlbgotCQkJCQkJS0VZPWBlY2hvICRpIHwgYXdrIC1GOiAne3ByaW50ICQxfSdgCi0JCQkJCQlWQUw9YGVjaG8gJGkgfCBhd2sgLUY6ICd7cHJpbnQgJDJ9J2AKLQkJCQkJCXNldF9jdHJfcGFyYW0gIiIgJEtFWSAkVkFMCi0JCQkJCWZpCi0JCQkJCWxldCBsb29wX2NvdW50PSIkbG9vcF9jb3VudCIrMQotCQkJCWRvbmUJCQkJCi0JCQkJc2V0X2N0cl9wYXJhbSAkQ1RSIGNvdW50ICRDT1VOVAotCQkJCXNldF9jdHJfcGFyYW0gJENUUiBrZXJuZWwgJEtFUk5FTAotCQkJCXNldF9jdHJfcGFyYW0gJENUUiB1c2VyICRVU0VSCi0JCQkJc2V0X2N0cl9wYXJhbSAkQ1RSIHVuaXRfbWFzayAkVU5JVF9NQVNLCi0JCQlmaQotCQkJT1BST0ZJTEVEX0VWRU5UUz0ke09QUk9GSUxFRF9FVkVOVFN9JEVWRU5UOiRFVkVOVF9WQUw6Ci0JCQlPUFJPRklMRURfRVZFTlRTPSR7T1BST0ZJTEVEX0VWRU5UU30kQ1RSOiRDT1VOVDokVU5JVF9NQVNLOgotCQkJT1BST0ZJTEVEX0VWRU5UUz0ke09QUk9GSUxFRF9FVkVOVFN9JEtFUk5FTDokVVNFUiwKLQkJZmkKLQlkb25lCi19Ci0KLQotZG9fc3RhcnRfZGFlbW9uKCkKLXsKLSAKLQlpZiB0ZXN0IC1mICIkTE9DS19GSUxFIjsgdGhlbgotCQlraWxsIC1zIDAgYGNhdCAkTE9DS19GSUxFYCAyPi9kZXYvbnVsbAotCQlpZiB0ZXN0ICIkPyIgLWVxIDA7IHRoZW4KLQkJCXJldHVybjsKLQkJZWxzZQotCQkJZWNobyAiRGV0ZWN0ZWQgc3RhbGUgbG9jayBmaWxlLiBSZW1vdmluZy4iID4mMgotCQkJcm0gLWYgIiRMT0NLX0ZJTEUiCi0JCWZpCi0JZmkKLSAKLQlkb19zZXR1cAotCWRvX2xvYWRfc2V0dXAKLQljaGVja192YWxpZF9hcmdzCi0JZ2V0X2tlcm5lbF9yYW5nZQotCWRvX3BhcmFtX3NldHVwCi0KLQlPUERfQVJHUz0iIFwKLQkJLS1zZXBhcmF0ZS1saWI9JFNFUEFSQVRFX0xJQiBcCi0JCS0tc2VwYXJhdGUta2VybmVsPSRTRVBBUkFURV9LRVJORUwgXAotCQktLXNlcGFyYXRlLXRocmVhZD0kU0VQQVJBVEVfVEhSRUFEIFwKLQkJLS1zZXBhcmF0ZS1jcHU9JFNFUEFSQVRFX0NQVSIKLQotCU9QRF9BUkdTPSIkT1BEX0FSR1MgLS1ldmVudHM9JE9QUk9GSUxFRF9FVkVOVFMiCi0KLQlpZiB0ZXN0ICIkVk1MSU5VWCIgPSAibm9uZSI7IHRoZW4KLQkJT1BEX0FSR1M9IiRPUERfQVJHUyAtLW5vLXZtbGludXgiCi0JZWxzZQotCQlPUERfQVJHUz0iJE9QRF9BUkdTIC0tdm1saW51eD0kVk1MSU5VWCAtLWtlcm5lbC1yYW5nZT0kS0VSTkVMX1JBTkdFIgotCWZpCi0KLQlpZiAhIHRlc3QgLXogIiRJTUFHRV9GSUxURVIiOyB0aGVuCi0JCU9QRF9BUkdTPSIkT1BEX0FSR1MgLS1pbWFnZT0kSU1BR0VfRklMVEVSIgotCWZpCi0KLQlpZiB0ZXN0IC1uICIkVkVSQk9TRSI7IHRoZW4KLQkJT1BEX0FSR1M9IiRPUERfQVJHUyAtLXZlcmJvc2U9JFZFUkJPU0UiCi0JZmkKLQotCXZlY2hvICJleGVjdXRpbmcgb3Byb2ZpbGVkICRPUERfQVJHUyIKLQotCSRPUFJPRklMRUQgJE9QRF9BUkdTCi0gCi0JQ09VTlQ9MAotCXdoaWxlICEgdGVzdCAtZiAiJERJUi9sb2NrIgotCWRvCi0JCXNsZWVwIDEKLQkJQ09VTlQ9YGV4cHIgJENPVU5UICsgMWAKLQkJaWYgdGVzdCAiJENPVU5UIiAtZXEgMTA7IHRoZW4KLQkJCWVjaG8gIkNvdWxkbid0IHN0YXJ0IG9wcm9maWxlZC4iID4mMgotCQkJZWNobyAiQ2hlY2sgdGhlIGxvZyBmaWxlIFwiJExPR19GSUxFXCIgYW5kIGtlcm5lbCBzeXNsb2ciID4mMgotCQkJZXhpdCAxCi0JCWZpCi0JZG9uZQotCi0JZWNobyAiRGFlbW9uIHN0YXJ0ZWQuIgotfQotCi0KLWRvX3N0YXJ0KCkKLXsKLQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiID0gInllcyI7IHRoZW4KLQkJZWNobyAxID4kTU9VTlQvZW5hYmxlCi0JZmkKLQlraWxsIC1zIFVTUjEgYGNhdCAkTE9DS19GSUxFYCAyPi9kZXYvbnVsbAotCWVjaG8gIlByb2ZpbGVyIHJ1bm5pbmcuIgotfQotCi0KLSMgcHJpbnQgc3RhdHVzCi1kb19zdGF0dXMoKQotewotCU9QUk9GSUxFRF9QSUQ9YGNhdCAkRElSL2xvY2sgMj4vZGV2L251bGxgCi0JaWYgdGVzdCAtbiAiJE9QUk9GSUxFRF9QSUQiIC1hIC1kICIvcHJvYy8kT1BST0ZJTEVEX1BJRCI7IHRoZW4KLQkJZWNobyAiRGFlbW9uIHJ1bm5pbmc6IHBpZCAkT1BST0ZJTEVEX1BJRCIKLQllbHNlCi0JCWVjaG8gIkRhZW1vbiBub3QgcnVubmluZyIKLQlmaQotCi0JaWYgdGVzdCAiJE5SX0NIT1NFTiIgIT0gIjAiOyB0aGVuCi0JCWZvciBmIGluIGBzZXEgMCAkKChOUl9DSE9TRU4gLSAxKSlgOyBkbwotCQkJZWNobyAiRXZlbnQgMDogJHtDSE9TRU5fRVZFTlRTWyRmXX0iCi0JCWRvbmUKLQlmaQotIAotCVNFUEFSQVRFPSIiCi0JaWYgdGVzdCAiJFNFUEFSQVRFX0xJQiIgPSAiMSI7IHRoZW4KLQkJU0VQQVJBVEU9ImxpYnJhcnkiOwotCWZpCi0JaWYgdGVzdCAiJFNFUEFSQVRFX0tFUk5FTCIgPSAiMSI7IHRoZW4KLQkJU0VQQVJBVEU9IiRTRVBBUkFURSBrZXJuZWwiOwotCWZpCi0JaWYgdGVzdCAiJFNFUEFSQVRFX1RIUkVBRCIgPSAiMSI7IHRoZW4KLQkJU0VQQVJBVEU9IiRTRVBBUkFURSB0aHJlYWQiOwotCWZpCi0JaWYgdGVzdCAiJFNFUEFSQVRFX0NQVSIgPSAiMSI7IHRoZW4KLQkJU0VQQVJBVEU9IiRTRVBBUkFURSBjcHUiOwotCWZpCi0KLQlpZiB0ZXN0IC16ICIkU0VQQVJBVEUiOyB0aGVuCi0JCVNFUEFSQVRFPW5vbmUKLQlmaQotCi0JZWNobyAiU2VwYXJhdGUgb3B0aW9uczogJFNFUEFSQVRFIgotCWVjaG8gInZtbGludXggZmlsZTogJFZNTElOVVgiCi0KLQlpZiB0ZXN0IC16ICIkSU1BR0VfRklMVEVSIjsgdGhlbgotCQllY2hvICJJbWFnZSBmaWx0ZXI6IG5vbmUiCi0JZWxzZQotCQllY2hvICJJbWFnZSBmaWx0ZXI6ICRJTUFHRV9GSUxURVIiCi0JZmkKLQotCWVjaG8gIkNhbGwtZ3JhcGggZGVwdGg6ICRDQUxMR1JBUEgiCi0JaWYgdGVzdCAiJEJVRl9TSVpFIiAhPSAiMCI7IHRoZW4KLQkJZWNobyAiQnVmZmVyIHNpemU6ICRCVUZfU0laRSIKLQlmaTsKLQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiICE9ICJ5ZXMiOyB0aGVuCi0JCWlmIHRlc3QgIiROT1RFX1NJWkUiICE9ICIwIjsgdGhlbgotCQkJZWNobyAiTm90ZSBidWZmZXIgc2l6ZTogJE5PVEVfU0laRSIKLQkJZmkKLQllbHNlCi0JCWlmIHRlc3QgIiRDUFVfQlVGX1NJWkUiICE9ICIwIjsgdGhlbgotCQkJZWNobyAiQ1BVIGJ1ZmZlciBzaXplOiAkQ1BVX0JVRl9TSVpFIgotCQlmaQotCWZpCi0KLQlleGl0IDAKLX0KLQotCi0jIGRvX2R1bXBfZGF0YQotIyByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bAotIyByZXR1cm5zIDEgaWYgdGhlIGRhZW1vbiBpcyB1bmFibGUgdG8gZHVtcCBkYXRhCi0jIGV4aXQgMSBpZiB3ZSBuZWVkIHRvIGJlIHJvb3QgdG8gZHVtcAotZG9fZHVtcF9kYXRhKCkKLXsKLQkjIG1ha2Ugc3VyZSB0aGF0IHRoZSBkYWVtb24gaXMgbm90IGRlYWQgYW5kIGdvbmUKLQlpZiB0ZXN0IC1lICIkRElSL2xvY2siOyB0aGVuCi0JCU9QUk9GSUxFRF9QSUQ9YGNhdCAkRElSL2xvY2tgCi0JCWlmIHRlc3QgISAtZCAiL3Byb2MvJE9QUk9GSUxFRF9QSUQiOyB0aGVuCi0JCQllY2hvICJkdW1wIGZhaWw6IGRhZW1vbiBkaWVkIGR1cmluZyBsYXN0IHJ1biA/IiA+JjIKLQkJCXJldHVybiAxOwotCQlmaQotCWVsc2UKLQkJcmV0dXJuIDE7Ci0JZmkKLQotCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgotCQkjIGZpbmQgY3VycmVudCB0aW1lCi0JCVRNUEZJTEU9YG1rdGVtcCAvdG1wL29wcm9maWxlLlhYWFhYWGAgfHwgZXhpdCAxCi0JCWlmICEgdGVzdCAtdyAkTU9VTlQvZHVtcDsgdGhlbgotCQkJaWYgdGVzdCAiJFVJRCIgIT0gIjAiOyB0aGVuCi0JCQkJZWNobyAiWW91IG11c3QgYmUgcm9vdCB0byBkdW1wIHdpdGggdGhpcyBrZXJuZWwgdmVyc2lvbiIKLQkJCQlleGl0IDEKLQkJCWZpCi0JCWZpCi0JCWVjaG8gMSA+ICRNT1VOVC9kdW1wCi0JCSMgbG9vcCB1bnRpbCB0aGVyZSBpcyBhIGZpbGUgdG8gY2hlY2sgYW5kIAotCQkjIHRoZSBtb2RpZmljYXRpb24gZGF0YSBvZiAkTU9VTlQvZHVtcCBhZnRlciBUTVBGSUxFCi0JCXdoaWxlIFsgXCggISAtZSAiJERJUi9jb21wbGV0ZV9kdW1wIiBcKSAtbyBcKCAiJFRNUEZJTEUiIC1udCAiJERJUi9jb21wbGV0ZV9kdW1wIiBcKSBdCi0JCWRvCi0JCQlpZiB0ZXN0ICEgLWQgIi9wcm9jLyRPUFJPRklMRURfUElEIjsgdGhlbgotCQkJCXJtICRUTVBGSUxFCi0JCQkJZWNobyAiZHVtcCBmYWlsOiBlaXRoZXIgZGFlbW9uIGRpZWQgZHVyaW5nIGxhc3QgcnVuIG9yIGRpZXMgZHVyaW5nIGR1bXAiID4mMgotCQkJCXJldHVybiAxCi0JCQlmaQotCQkJc2xlZXAgMTsKLQkJZG9uZQotCQlybSAkVE1QRklMRQotCWVsc2UKLQkJZWNobyAxID4gJE1PVU5UL2R1bXAKLQkJIyBIQUNLICEKLQkJc2xlZXAgMgotCWZpCi0JcmV0dXJuIDA7Ci19Ci0KLSMgZG9fZHVtcAotIyByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bAotIyBleGl0cyBpZiB1bnN1Y2Nlc3NmdWwKLWRvX2R1bXAoKQotewotCWRvX2R1bXBfZGF0YQotCWlmIHRlc3QgJD8gLW5lIDAgLWEgIiRPTkxZX0RVTVAiID0gInllcyI7IHRoZW4KLQkJZWNobyAiVW5hYmxlIHRvIGNvbXBsZXRlIGR1bXAgb2Ygb3Byb2ZpbGUgZGF0YTogaXMgdGhlIG9wcm9maWxlIGRhZW1vbiBydW5uaW5nPyIgPiYgMgotCQlleGl0IDE7Ci0JZmkKLQlyZXR1cm4gMDsKLX0KLQotIyB0ZWxsIGRhZW1vbiB0byByZS1vcGVuIHRoZSBzYW1wbGUgZmlsZXMKLWh1cF9kYWVtb24oKQotewotCWlmIHRlc3QgLWYgIiRMT0NLX0ZJTEUiOyB0aGVuCi0JCWVjaG8gLW4gIlNpZ25hbGxpbmcgZGFlbW9uLi4uICIKLQkJa2lsbCAtSFVQIGBjYXQgJExPQ0tfRklMRWAgCi0JCWVjaG8gImRvbmUiCi0JZmkKLX0KLSAKLQotIyBtb3ZlIGFsbCB0aGUgc2FtcGxlIGZpbGVzIHRvIGEgc2FtcGxlIGRpcmVjdG9yeQotZG9fc2F2ZV9zZXNzaW9uKCkKLXsKLQlTQVZFX0RJUj0iJHtTQU1QTEVTX0RJUn0vJHtTQVZFX05BTUV9IgotCi0JaWYgdGVzdCAtZSAiJFNBVkVfRElSIjsgdGhlbgotCQllY2hvICJzZXNzaW9uICRTQVZFX0RJUiBhbHJlYWR5IGV4aXN0cyIgPiYyCi0JCWV4aXQgMQotCWZpCi0KLQlpZiAhIHRlc3QgLWUgJENVUlJFTlRfU0FNUExFU19ESVI7IHRoZW4KLQkJZWNobyAiJENVUlJFTlRfU0FNUExFU19ESVIgZG9lc24ndCBleGlzdDogbm90aGluZyB0byBzYXZlIiA+JjIKLQkJZXhpdCAwCi0JZmkKLQotCSMgRklYTUU6IEkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCBjaGVja2luZyBmb3IgZW1wdHkgY3VycmVudCBkaXJlY3RvcnkKLQotCW12ICRDVVJSRU5UX1NBTVBMRVNfRElSICRTQVZFX0RJUgotCWlmIHRlc3QgIiQ/IiAhPSAiMCI7IHRoZW4KLQkJZWNobyAiQ291bGRuJ3QgbW92ZSAkQ1VSUkVOVF9TQU1QTEVTX0RJUiB0byAkU0FWRV9ESVIiID4mMgotCQlleGl0IDEKLQlmaQotCi0JaHVwX2RhZW1vbgotfQotCi0KLSMgcmVtb3ZlIGFsbCB0aGUgc2FtcGxlIGZpbGVzCi1kb19yZXNldCgpCi17Ci0JaWYgdGVzdCAteiAiJFNBTVBMRVNfRElSIjsgdGhlbgotCQllY2hvICJvcGNvbnRyb2w6ZG9fcmVzZXQoKSBTQU1QTEVTX0RJUiBpcyBlbXB0eSEiCi0JCWV4aXQgMTsKLQlmaQotCi0JIyBkYWVtb24gdXNlIHtrZXJufSBhbmQge3Jvb3R9IHN1YmRpciwgaXQncyBub3QgYSB0eXBvIHRvIG5vdCB1c2UgJHt9Ci0JbW92ZV9hbmRfcmVtb3ZlICRTQU1QTEVTX0RJUi9jdXJyZW50L3trZXJufQotCW1vdmVfYW5kX3JlbW92ZSAkU0FNUExFU19ESVIvY3VycmVudC97cm9vdH0KLQotCWh1cF9kYWVtb24KLX0KLQotCi1kb19kZWluaXQoKQotewotCSMgdW5tb3VudCAvZGV2L29wcm9maWxlIGlmIGl0IGlzIG1vdW50ZWQKLQlPUFJPRl9GUz1gZ3JlcCAvZGV2L29wcm9maWxlIC9ldGMvbXRhYmAKLQlpZiB0ZXN0IC1uICIkT1BST0ZfRlMiOyB0aGVuCi0JCXVtb3VudCAvZGV2L29wcm9maWxlCi0JZmkKLQkjIHVubG9hZCB0aGUgb3Byb2ZpbGUgbW9kdWxlIGlmIGl0IGlzIGFyb3VuZAotCU9QUk9GX01PRD1gbHNtb2QgfCBncmVwIG9wcm9maWxlYAotCWlmIHRlc3QgLW4gIiRPUFJPRl9NT0QiOyB0aGVuCi0JCWVjaG8gIlVubG9hZGluZyBvcHJvZmlsZSBtb2R1bGUiID4mIDIKLQkJcm1tb2Qgb3Byb2ZpbGUKLQlmaQotfQotCi0KLSMgVGhlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIG9wZXJhdGlvbnMKLWRvX29wZXJhdGlvbnMoKQotewotCSMgSU5JVCBhbHdheXMgZG9uZSBieSBsb2FkX21vZHVsZSB0byBnZXQgYWNjZXNzIHRvIGNwdXR5cGUKLQkjIHRodXMgSU5JVCBpcyBhIG5vb3AKLQotCWlmIHRlc3QgIiRTVEFUVVMiID0gInllcyI7IHRoZW4KLQkJZG9fc3RhdHVzCi0JZmkKLSAKLQlpZiB0ZXN0ICIkU0VUVVAiID0gInllcyI7IHRoZW4KLQkJY2hlY2tfdmFsaWRfYXJncwotCQlkb19zYXZlX3NldHVwCi0JZmkKLQotCWlmIHRlc3QgIiRTVEFSVF9EQUVNT04iID0gInllcyI7IHRoZW4KLQkJZG9fc3RhcnRfZGFlbW9uCi0JZmkKLQotCWlmIHRlc3QgIiRTVEFSVCIgPSAieWVzIjsgdGhlbgotCQlkb19zdGFydF9kYWVtb24KLQkJZG9fc3RhcnQKLQlmaQotCi0JaWYgdGVzdCAiJERVTVAiID0gInllcyI7IHRoZW4KLQkJZG9fZHVtcAotCWZpCi0KLQlpZiB0ZXN0ICIkU0FWRV9TRVNTSU9OIiA9ICJ5ZXMiOyB0aGVuCi0JCWRvX3NhdmVfc2Vzc2lvbgotCWZpCi0KLQlpZiB0ZXN0ICIkU1RPUCIgPSAieWVzIjsgdGhlbgotCQlkb19zdG9wCi0JZmkKLQotCWlmIHRlc3QgIiRLSUxMX0RBRU1PTiIgPSAieWVzIjsgdGhlbgotCQlkb19raWxsX2RhZW1vbgotCWZpCi0KLQlpZiB0ZXN0ICIkUkVTRVQiID0gInllcyI7IHRoZW4KLQkJZG9fcmVzZXQKLQlmaQotCi0JaWYgdGVzdCAiJERFSU5JVCIgPSAieWVzIjsgdGhlbgotCQlkb19kZWluaXQKLQlmaQotfQotIAotIyBlYXJseSBjaGVjayBmb3IgLS12ZXJzaW9uLCAtLWhlbHAKLWNoZWNrX3ZlcnNpb25faGVscCgpCi17Ci0KLQlPUEhFTFA9IiRPUERJUi9vcGhlbHAiCi0KLQlmb3IgaSBpbiAkQDsgZG8KLQkJY2FzZSAiJGkiIGluCi0JCQktXD98LS1oZWxwKQotCQkJCWRvX2hlbHAKLQkJCQlleGl0IDAKLQkJCQk7OwotCi0JCQktdnwtLXZlcnNpb24pCi0JCQkJZWNobyAtbiAiYGJhc2VuYW1lICQwYDogIgotCQkJCSRPUEhFTFAgLS12ZXJzaW9uIHwgY3V0IC1kJyAnIC1mMi0KLQkJCQlleGl0IDAKLQkJCQk7OwotIAotCQllc2FjCi0JZG9uZQotfQotCi0KLSNkZXRlcm1pbmUgd2hpY2ggbW9kdWxlIGlzIGxvYWRlZAotY2hlY2tfdmVyc2lvbigpCi17Ci0JT1BST0ZJTEVfQVZBSUxBQkxFPW5vCi0JZ3JlcCBvcHJvZmlsZWZzIC9ldGMvbXRhYiA+L2Rldi9udWxsCi0JaWYgdGVzdCAiJD8iIC1lcSAwOyB0aGVuCi0JCSMgbmVlZCB0byBoYXZlIG9wcm9maWxlZnMgbW91bnRlZCBmb3IgdGhpcyB0byB3b3JrIG9uIDIuNgotCQlLRVJORUxfU1VQUE9SVD15ZXMKLQkJT1BST0ZJTEVfQVZBSUxBQkxFPXllcwotCQlyZXR1cm4KLQlmaQotCSMgbmVlZCB0byBoYXZlIC9wcm9jL29wcm9mIGF2YWlsYWJsZSBmb3IgdGhpcyB0byB3b3JrIG9uIDIuNAotCWdyZXAgb3Byb2YgL3Byb2MvZGV2aWNlcyA+L2Rldi9udWxsCi0JaWYgdGVzdCAiJD8iIC1lcSAwOyB0aGVuCi0JCUtFUk5FTF9TVVBQT1JUPW5vCi0JCU9QUk9GSUxFX0FWQUlMQUJMRT15ZXMKLQkJcmV0dXJuCi0JZmkKLX0KLQotCi0jIG1haW4KLQotIyBkZXRlcm1pbmUgdGhlIGxvY2F0aW9uIG9mIG9wY29udHJvbCBhbmQgcmVsYXRlZCBwcm9ncmFtcwotT1BDT05UUk9MPWB3aGljaCAkMGAKLU9QRElSPWBkaXJuYW1lICRPUENPTlRST0xgCi0KLVBBVEg9L3Vzci9sb2NhbC9iaW46L3Vzci9sb2NhbC9zYmluOi9iaW46L3NiaW46L3Vzci9iaW46L3Vzci9zYmluCi0KLWNoZWNrX3ZlcnNpb25faGVscCAkQAotCi1pZiB0ZXN0IC16ICIkMSI7IHRoZW4KLQlkb19oZWxwCi0JZXhpdCAwCi1maQotCi1pZiB0ZXN0ICIkVUlEIiA9ICIwIjsgdGhlbgotCWxvYWRfbW9kdWxlCi1maQotY2hlY2tfdmVyc2lvbgotZG9faW5pdF9kYWVtb25fdmFycwotZGVjaWRlX29wcm9maWxlX2RldmljZQotaWYgdGVzdCAiJFVJRCIgIT0gIjAiOyB0aGVuCi0gICAgaWYgdGVzdCAiJDEiID0gIi0tZHVtcCIgLWEgLXogIiQyIjsgdGhlbgotCU9OTFlfRFVNUD15ZXMKLQlkb19kdW1wCi0JZXhpdCAwOwotICAgIGVsaWYgdGVzdCAiJDEiID0gIi0tbGlzdC1ldmVudHMiIC1hIC16ICIkMiI7IHRoZW4KLQlleGVjICRPUEhFTFAKLSAgICBlbHNlCi0JZWNobyAiTm9ybWFsIHVzZXJzIGFyZSBsaW1pdGVkIHRvIGVpdGhlciAnLS1kdW1wJyBvciAnLS1saXN0LWV2ZW50cycuIiA+JjIKLQlleGl0IDEKLSAgICBmaQotZmkKLQotZG9faW5pdAotZG9fb3B0aW9ucyAkQAotZG9fb3BlcmF0aW9ucwpkaWZmIC0tZ2l0IGEvdXRpbHMvb3BoZWxwLmMgYi91dGlscy9vcGhlbHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI5N2VkMy4uMDAwMDAwMAotLS0gYS91dGlscy9vcGhlbHAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3MiArMCwwIEBACi0vKioKLSAqIEBmaWxlIG9waGVscC5jCi0gKiBQcmludCBvdXQgUE1DIGV2ZW50IGluZm9ybWF0aW9uCi0gKgotICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCi0gKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwotICoKLSAqIEBhdXRob3IgSm9obiBMZXZvbgotICogQGF1dGhvciBQaGlsaXBwZSBFbGllCi0gKi8KLQotI2RlZmluZSBfR05VX1NPVVJDRQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpbmNsdWRlICJvcF92ZXJzaW9uLmgiCi0jaW5jbHVkZSAib3BfZXZlbnRzLmgiCi0jaW5jbHVkZSAib3BfcG9wdC5oIgotI2luY2x1ZGUgIm9wX2NwdWZyZXEuaCIKLSNpbmNsdWRlICJvcF9od19jb25maWcuaCIKLSNpbmNsdWRlICJvcF9zdHJpbmcuaCIKLSNpbmNsdWRlICJvcF9hbGxvY19jb3VudGVyLmgiCi0jaW5jbHVkZSAib3BfcGFyc2VfZXZlbnQuaCIKLSNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKLQotc3RhdGljIGNoYXIgY29uc3QgKiogY2hvc2VuX2V2ZW50czsKLXN0cnVjdCBwYXJzZWRfZXZlbnQgKiBwYXJzZWRfZXZlbnRzOwotc3RhdGljIG9wX2NwdSBjcHVfdHlwZSA9IENQVV9OT19HT09EOwotc3RhdGljIGNoYXIgKiBjcHVfc3RyaW5nOwotc3RhdGljIGludCBjYWxsZ3JhcGhfZGVwdGg7Ci0KLXN0YXRpYyBwb3B0Q29udGV4dCBvcHRjb247Ci0KLQotLy8vIHJldHVybiB0aGUgSGFtbWluZyB3ZWlnaHQgKG51bWJlciBvZiBzZXQgYml0cykKLXN0YXRpYyBzaXplX3QgaHdlaWdodChzaXplX3QgbWFzaykKLXsKLQlzaXplX3QgY291bnQgPSAwOwotCi0Jd2hpbGUgKG1hc2spIHsKLQkJbWFzayAmPSBtYXNrIC0gMTsKLQkJY291bnQrKzsKLQl9Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLQotLyoqCi0gKiBoZWxwX2Zvcl9ldmVudCAtIG91dHB1dCBldmVudCBuYW1lIGFuZCBkZXNjcmlwdGlvbgotICogQHBhcmFtIGkgIGV2ZW50IG51bWJlcgotICoKLSAqIG91dHB1dCBhbiBoZWxwIHN0cmluZyBmb3IgdGhlIGV2ZW50IEBpCi0gKi8KLXN0YXRpYyB2b2lkIGhlbHBfZm9yX2V2ZW50KHN0cnVjdCBvcF9ldmVudCAqIGV2ZW50KQotewotCXVpbnQgaSwgajsKLQl1aW50IG1hc2s7Ci0KLQlzaXplX3QgbnJfY291bnRlcnMgPSBvcF9nZXRfbnJfY291bnRlcnMoY3B1X3R5cGUpOwotCi0JcHJpbnRmKCIlcyIsIGV2ZW50LT5uYW1lKTsKLQotCXByaW50ZigiOiAoY291bnRlcjogIik7Ci0KLQltYXNrID0gZXZlbnQtPmNvdW50ZXJfbWFzazsKLQlpZiAoaHdlaWdodChtYXNrKSA9PSBucl9jb3VudGVycykgewotCQlwcmludGYoImFsbCIpOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBDSEFSX0JJVCAqIHNpemVvZihldmVudC0+Y291bnRlcl9tYXNrKTsgKytpKSB7Ci0JCQlpZiAobWFzayAmICgxIDw8IGkpKSB7Ci0JCQkJcHJpbnRmKCIlZCIsIGkpOwotCQkJCW1hc2sgJj0gfigxIDw8IGkpOwotCQkJCWlmIChtYXNrKQotCQkJCQlwcmludGYoIiwgIik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcmludGYoIilcblx0JXMgKG1pbiBjb3VudDogJWQpXG4iLCBldmVudC0+ZGVzYywgZXZlbnQtPm1pbl9jb3VudCk7Ci0KLQlpZiAoc3RyY21wKGV2ZW50LT51bml0LT5uYW1lLCAiemVybyIpKSB7Ci0KLQkJcHJpbnRmKCJcdFVuaXQgbWFza3MgKGRlZmF1bHQgMHgleClcbiIsCi0JCSAgICAgICBldmVudC0+dW5pdC0+ZGVmYXVsdF9tYXNrKTsKLQkJcHJpbnRmKCJcdC0tLS0tLS0tLS1cbiIpOwotCi0JCWZvciAoaiA9IDA7IGogPCBldmVudC0+dW5pdC0+bnVtOyBqKyspIHsKLQkJCXByaW50ZigiXHQweCUuMng6ICVzXG4iLAotCQkJICAgICAgIGV2ZW50LT51bml0LT51bVtqXS52YWx1ZSwKLQkJCSAgICAgICBldmVudC0+dW5pdC0+dW1bal0uZGVzYyk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgY2hlY2tfZXZlbnQoc3RydWN0IHBhcnNlZF9ldmVudCAqIHBldiwKLQkJCXN0cnVjdCBvcF9ldmVudCBjb25zdCAqIGV2ZW50KQotewotCWludCByZXQ7Ci0JaW50IG1pbl9jb3VudDsKLQlpbnQgY29uc3QgY2FsbGdyYXBoX21pbl9jb3VudF9zY2FsZSA9IDE1OwotCi0JaWYgKCFldmVudCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGV2ZW50IG5hbWVkICVzIGlzIGF2YWlsYWJsZS5cbiIsCi0JCSAgICAgICAgcGV2LT5uYW1lKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCXJldCA9IG9wX2NoZWNrX2V2ZW50cygwLCBldmVudC0+dmFsLCBwZXYtPnVuaXRfbWFzaywgY3B1X3R5cGUpOwotCi0JaWYgKHJldCAmIE9QX0lOVkFMSURfVU0pIHsKLQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHVuaXQgbWFzayAweCV4IGZvciBldmVudCAlc1xuIiwKLQkJICAgICAgICBwZXYtPnVuaXRfbWFzaywgcGV2LT5uYW1lKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCW1pbl9jb3VudCA9IGV2ZW50LT5taW5fY291bnQ7Ci0JaWYgKGNhbGxncmFwaF9kZXB0aCkKLQkJbWluX2NvdW50ICo9IGNhbGxncmFwaF9taW5fY291bnRfc2NhbGU7Ci0JaWYgKHBldi0+Y291bnQgPCBtaW5fY291bnQpIHsKLQkJZnByaW50ZihzdGRlcnIsICJDb3VudCAlZCBmb3IgZXZlbnQgJXMgaXMgYmVsb3cgdGhlICIKLQkJICAgICAgICAibWluaW11bSAlZFxuIiwgcGV2LT5jb3VudCwgcGV2LT5uYW1lLCBtaW5fY291bnQpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIHJlc29sdmVfZXZlbnRzKHZvaWQpCi17Ci0Jc2l6ZV90IGNvdW50OwotCXNpemVfdCBpLCBqOwotCXNpemVfdCAqIGNvdW50ZXJfbWFwOwotCXNpemVfdCBucl9jb3VudGVycyA9IG9wX2dldF9ucl9jb3VudGVycyhjcHVfdHlwZSk7Ci0Jc3RydWN0IG9wX2V2ZW50IGNvbnN0ICogc2VsZWN0ZWRfZXZlbnRzW25yX2NvdW50ZXJzXTsKLQotCWNvdW50ID0gcGFyc2VfZXZlbnRzKHBhcnNlZF9ldmVudHMsIG5yX2NvdW50ZXJzLCBjaG9zZW5fZXZlbnRzKTsKLQlpZiAoY291bnQgPiBucl9jb3VudGVycykgewotCQlmcHJpbnRmKHN0ZGVyciwgIk5vdCBlbm91Z2ggaGFyZHdhcmUgY291bnRlcnMuXG4iKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0JCWZvciAoaiA9IGkgKyAxOyBqIDwgY291bnQ7ICsraikgewotCQkJc3RydWN0IHBhcnNlZF9ldmVudCAqIHBldjEgPSAmcGFyc2VkX2V2ZW50c1tpXTsKLQkJCXN0cnVjdCBwYXJzZWRfZXZlbnQgKiBwZXYyID0gJnBhcnNlZF9ldmVudHNbal07Ci0KLQkJCWlmICghc3RyY21wKHBldjEtPm5hbWUsIHBldjItPm5hbWUpICYmCi0JCQkgICAgcGV2MS0+Y291bnQgPT0gcGV2Mi0+Y291bnQgJiYKLQkJCSAgICBwZXYxLT51bml0X21hc2sgPT0gcGV2Mi0+dW5pdF9tYXNrICYmCi0JCQkgICAgcGV2MS0+a2VybmVsID09IHBldjItPmtlcm5lbCAmJgotCQkJICAgIHBldjEtPnVzZXIgPT0gcGV2Mi0+dXNlcikgewotCQkJCWZwcmludGYoc3RkZXJyLCAiQWxsIGV2ZW50cyBtdXN0IGJlIGRpc3RpbmN0LlxuIik7Ci0JCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQkJfQotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLQkJc3RydWN0IHBhcnNlZF9ldmVudCAqIHBldiA9ICZwYXJzZWRfZXZlbnRzW2ldOwotCi0JCXNlbGVjdGVkX2V2ZW50c1tpXSA9IGZpbmRfZXZlbnRfYnlfbmFtZShwZXYtPm5hbWUpOwotCi0JCWNoZWNrX2V2ZW50KHBldiwgc2VsZWN0ZWRfZXZlbnRzW2ldKTsKLQl9Ci0KLQljb3VudGVyX21hcCA9IG1hcF9ldmVudF90b19jb3VudGVyKHNlbGVjdGVkX2V2ZW50cywgY291bnQsIGNwdV90eXBlKTsKLQotCWlmICghY291bnRlcl9tYXApIHsKLQkJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBhbGxvY2F0ZSBoYXJkd2FyZSBjb3VudGVycyBmb3IgdGhlIHNlbGVjdGVkIGV2ZW50cy5cbiIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLQkJcHJpbnRmKCIlZCAiLCAodW5zaWduZWQgaW50KSBjb3VudGVyX21hcFtpXSk7Ci0JfQotCXByaW50ZigiXG4iKTsKLQotCWZyZWUoY291bnRlcl9tYXApOwotfQotCi0KLXN0YXRpYyB2b2lkIHNob3dfdW5pdF9tYXNrKHZvaWQpCi17Ci0Jc3RydWN0IG9wX2V2ZW50ICogZXZlbnQ7Ci0Jc2l6ZV90IGNvdW50OwotCXNpemVfdCBucl9jb3VudGVyID0gb3BfZ2V0X25yX2NvdW50ZXJzKGNwdV90eXBlKTsKLQotCWNvdW50ID0gcGFyc2VfZXZlbnRzKHBhcnNlZF9ldmVudHMsIG5yX2NvdW50ZXIsIGNob3Nlbl9ldmVudHMpOwotCWlmIChjb3VudCA+IDEpIHsKLQkJZnByaW50ZihzdGRlcnIsICJNb3JlIHRoYW4gb25lIGV2ZW50IHNwZWNpZmllZC5cbiIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JZXZlbnQgPSBmaW5kX2V2ZW50X2J5X25hbWUocGFyc2VkX2V2ZW50c1swXS5uYW1lKTsKLQotCWlmICghZXZlbnQpIHsKLQkJZnByaW50ZihzdGRlcnIsICJObyBzdWNoIGV2ZW50IGZvdW5kLlxuIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlwcmludGYoIiVkXG4iLCBldmVudC0+dW5pdC0+ZGVmYXVsdF9tYXNrKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBzaG93X2RlZmF1bHRfZXZlbnQodm9pZCkKLXsKLQlzdHJ1Y3Qgb3BfZGVmYXVsdF9ldmVudF9kZXNjciBkZXNjcjsKLQotCW9wX2RlZmF1bHRfZXZlbnQoY3B1X3R5cGUsICZkZXNjcik7Ci0KLQlpZiAoZGVzY3IubmFtZVswXSA9PSAnXDAnKQotCQlyZXR1cm47Ci0KLQlwcmludGYoIiVzOiVsdTolbHU6MToxXG4iLCBkZXNjci5uYW1lLCBkZXNjci5jb3VudCwgZGVzY3IudW0pOwotfQotCi0KLXN0YXRpYyBpbnQgc2hvd192ZXJzOwotc3RhdGljIGludCBnZXRfY3B1X3R5cGU7Ci1zdGF0aWMgaW50IGNoZWNrX2V2ZW50czsKLXN0YXRpYyBpbnQgdW5pdF9tYXNrOwotc3RhdGljIGludCBnZXRfZGVmYXVsdF9ldmVudDsKLQotc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNbXSA9IHsKLQl7ICJjcHUtdHlwZSIsICdjJywgUE9QVF9BUkdfU1RSSU5HLCAmY3B1X3N0cmluZywgMCwKLQkgICJ1c2UgdGhlIGdpdmVuIENQVSB0eXBlIiwgImNwdSB0eXBlIiwgfSwKLQl7ICJjaGVjay1ldmVudHMiLCAnZScsIFBPUFRfQVJHX05PTkUsICZjaGVja19ldmVudHMsIDAsCi0JICAiY2hlY2sgdGhlIGdpdmVuIGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFsaWRpdHkiLCBOVUxMLCB9LAotCXsgInVuaXQtbWFzayIsICd1JywgUE9QVF9BUkdfTk9ORSwgJnVuaXRfbWFzaywgMCwKLQkgICJkZWZhdWx0IHVuaXQgbWFzayBmb3IgdGhlIGdpdmVuIGV2ZW50IiwgTlVMTCwgfSwKLQl7ICJnZXQtY3B1LXR5cGUiLCAncicsIFBPUFRfQVJHX05PTkUsICZnZXRfY3B1X3R5cGUsIDAsCi0JICAic2hvdyB0aGUgYXV0by1kZXRlY3RlZCBDUFUgdHlwZSIsIE5VTEwsIH0sCi0JeyAiZ2V0LWRlZmF1bHQtZXZlbnQiLCAnZCcsIFBPUFRfQVJHX05PTkUsICZnZXRfZGVmYXVsdF9ldmVudCwgMCwKLQkgICJnZXQgdGhlIGRlZmF1bHQgZXZlbnQiLCBOVUxMLCB9LAotCXsgImNhbGxncmFwaCIsICdcMCcsIFBPUFRfQVJHX0lOVCwgJmNhbGxncmFwaF9kZXB0aCwgMCwKLQkgICJ1c2UgdGhpcyBjYWxsZ3JhcGggZGVwdGgiLCAiY2FsbGdyYXBoIGRlcHRoIiwgfSwKLQl7ICJ2ZXJzaW9uIiwgJ3YnLCBQT1BUX0FSR19OT05FLCAmc2hvd192ZXJzLCAwLAotCSAgICJzaG93IHZlcnNpb24iLCBOVUxMLCB9LAotCVBPUFRfQVVUT0hFTFAKLQl7IE5VTEwsIDAsIDAsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIH0sCi19OwotCi0vKioKLSAqIGdldF9vcHRpb25zIC0gcHJvY2VzcyBjb21tYW5kIGxpbmUKLSAqIEBwYXJhbSBhcmdjICBwcm9ncmFtIGFyZyBjb3VudAotICogQHBhcmFtIGFyZ3YgIHByb2dyYW0gYXJnIGFycmF5Ci0gKgotICogUHJvY2VzcyB0aGUgYXJndW1lbnRzLCBmYXRhbGx5IGNvbXBsYWluaW5nIG9uIGVycm9yLgotICovCi1zdGF0aWMgdm9pZCBnZXRfb3B0aW9ucyhpbnQgYXJnYywgY2hhciBjb25zdCAqIGFyZ3ZbXSkKLXsKLQlvcHRjb24gPSBvcF9wb3B0R2V0Q29udGV4dChOVUxMLCBhcmdjLCBhcmd2LCBvcHRpb25zLCAwKTsKLQotCWlmIChzaG93X3ZlcnMpIHsKLQkJc2hvd192ZXJzaW9uKGFyZ3ZbMF0pOwotCX0KLQotCS8qIG5vbi1vcHRpb24sIG11c3QgYmUgYSB2YWxpZCBldmVudCBuYW1lIG9yIGV2ZW50IHNwZWNzICovCi0JY2hvc2VuX2V2ZW50cyA9IHBvcHRHZXRBcmdzKG9wdGNvbik7Ci0KLQkvKiBkb24ndCBmcmVlIHRoZSBjb250ZXh0IG5vdywgd2UgbmVlZCBjaG9zZW5fZXZlbnRzICovCi19Ci0KLQotLyoqIG1ha2UgdmFsZ3JpbmQgaGFwcHkgKi8KLXN0YXRpYyB2b2lkIGNsZWFudXAodm9pZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgb3BfZ2V0X25yX2NvdW50ZXJzKGNwdV90eXBlKTsgKytpKSB7Ci0JCWlmIChwYXJzZWRfZXZlbnRzW2ldLm5hbWUpCi0JCQlmcmVlKHBhcnNlZF9ldmVudHNbaV0ubmFtZSk7Ci0JfQotCW9wX2ZyZWVfZXZlbnRzKCk7Ci0JaWYgKG9wdGNvbikKLQkJcG9wdEZyZWVDb250ZXh0KG9wdGNvbik7Ci0JaWYgKHBhcnNlZF9ldmVudHMpCi0JCWZyZWUocGFyc2VkX2V2ZW50cyk7Ci19Ci0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBhcmd2W10pCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIGV2ZW50czsKLQlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOwotCWNoYXIgY29uc3QgKiBwcmV0dHk7Ci0Jc2l6ZV90IG5yX2NvdW50ZXI7Ci0KLQlhdGV4aXQoY2xlYW51cCk7Ci0KLQlnZXRfb3B0aW9ucyhhcmdjLCBhcmd2KTsKLQotCS8qIHVzZWZ1bGwgZm9yIHRlc3RpbmcgcHVycG9zZSB0byBhbGxvdyB0byBmb3JjZSB0aGUgY3B1IHR5cGUKLQkgKiB3aXRoIC0tY3B1LXR5cGUgKi8KLQlpZiAoY3B1X3N0cmluZykgewotCQljcHVfdHlwZSA9IG9wX2dldF9jcHVfbnVtYmVyKGNwdV9zdHJpbmcpOwotCX0gZWxzZSB7Ci0JCWNwdV90eXBlID0gb3BfZ2V0X2NwdV90eXBlKCk7Ci0JfQotCi0JaWYgKGNwdV90eXBlID09IENQVV9OT19HT09EKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiY3B1X3R5cGUgJyVzJyBpcyBub3QgdmFsaWRcbiIsCi0JCSAgICAgICAgY3B1X3N0cmluZyA/IGNwdV9zdHJpbmcgOiAidW5zZXQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCW5yX2NvdW50ZXIgPSBvcF9nZXRfbnJfY291bnRlcnMoY3B1X3R5cGUpOwotCXBhcnNlZF9ldmVudHMgPSB4Y2FsbG9jKG5yX2NvdW50ZXIsIHNpemVvZihzdHJ1Y3QgcGFyc2VkX2V2ZW50KSk7Ci0KLQlwcmV0dHkgPSBvcF9nZXRfY3B1X3R5cGVfc3RyKGNwdV90eXBlKTsKLQotCWlmIChnZXRfY3B1X3R5cGUpIHsKLQkJcHJpbnRmKCIlc1xuIiwgcHJldHR5KTsKLQkJZXhpdChFWElUX1NVQ0NFU1MpOwotCX0KLQotCWlmIChnZXRfZGVmYXVsdF9ldmVudCkgewotCQlzaG93X2RlZmF1bHRfZXZlbnQoKTsKLQkJZXhpdChFWElUX1NVQ0NFU1MpOwotCX0KLQotCWlmIChjcHVfdHlwZSA9PSBDUFVfVElNRVJfSU5UKSB7Ci0JCWlmICghY2hlY2tfZXZlbnRzKQotCQkJcHJpbnRmKCJVc2luZyB0aW1lciBpbnRlcnJ1cHQuXG4iKTsKLQkJZXhpdChFWElUX1NVQ0NFU1MpOwotCX0KLQotCWV2ZW50cyA9IG9wX2V2ZW50cyhjcHVfdHlwZSk7Ci0KLQlpZiAoIWNob3Nlbl9ldmVudHMgJiYgKHVuaXRfbWFzayB8fCBjaGVja19ldmVudHMpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiTm8gZXZlbnRzIGdpdmVuLlxuIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlpZiAodW5pdF9tYXNrKSB7Ci0JCXNob3dfdW5pdF9tYXNrKCk7Ci0JCWV4aXQoRVhJVF9TVUNDRVNTKTsKLQl9Ci0KLQlpZiAoY2hlY2tfZXZlbnRzKSB7Ci0JCXJlc29sdmVfZXZlbnRzKCk7Ci0JCWV4aXQoRVhJVF9TVUNDRVNTKTsKLQl9Ci0KLQkvKiB3aXRob3V0IC0tY2hlY2stZXZlbnRzLCB0aGUgb25seSBhcmd1bWVudCBtdXN0IGJlIGFuIGV2ZW50IG5hbWUgKi8KLQlpZiAoY2hvc2VuX2V2ZW50cyAmJiBjaG9zZW5fZXZlbnRzWzBdKSB7Ci0JCWlmIChjaG9zZW5fZXZlbnRzWzFdKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIlRvbyBtYW55IGFyZ3VtZW50cy5cbiIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0KLQkJbGlzdF9mb3JfZWFjaChwb3MsIGV2ZW50cykgewotCQkJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wX2V2ZW50LCBldmVudF9uZXh0KTsKLQotCQkJaWYgKHN0cmNtcChldmVudC0+bmFtZSwgY2hvc2VuX2V2ZW50c1swXSkgPT0gMCkgewotCQkJCWNoYXIgY29uc3QgKiBtYXAgPSBmaW5kX21hcHBpbmdfZm9yX2V2ZW50KGV2ZW50LT52YWwsIGNwdV90eXBlKTsKLQkJCQlpZiAobWFwKSB7Ci0JCQkJCXByaW50ZigiJWQgJXNcbiIsIGV2ZW50LT52YWwsIG1hcCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpbnRmKCIlZFxuIiwgZXZlbnQtPnZhbCk7Ci0JCQkJfQotCQkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKLQkJCX0KLQkJfQotCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHN1Y2ggZXZlbnQgXCIlc1wiXG4iLCBjaG9zZW5fZXZlbnRzWzBdKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCS8qIGRlZmF1bHQ6IGxpc3QgYWxsIGV2ZW50cyAqLwotCi0JcHJpbnRmKCJvcHJvZmlsZTogYXZhaWxhYmxlIGV2ZW50cyBmb3IgQ1BVIHR5cGUgXCIlc1wiXG5cbiIsIHByZXR0eSk7Ci0Jc3dpdGNoIChjcHVfdHlwZSkgewotCWNhc2UgQ1BVX0hBTU1FUjoKLQkJYnJlYWs7Ci0JY2FzZSBDUFVfQVRITE9OOgotCQlwcmludGYgKCJTZWUgQU1EIGRvY3VtZW50IHg4NiBvcHRpbWlzYXRpb24gZ3VpZGUgKDIyMDA3LnBkZiksIEFwcGVuZGl4IERcblxuIik7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX1BQUk86Ci0JY2FzZSBDUFVfUElJOgotCWNhc2UgQ1BVX1BJSUk6Ci0JY2FzZSBDUFVfUDZfTU9CSUxFOgotCWNhc2UgQ1BVX1A0OgotCWNhc2UgQ1BVX1A0X0hUMjoKLQkJcHJpbnRmKCJTZWUgSW50ZWwgQXJjaGl0ZWN0dXJlIERldmVsb3BlcidzIE1hbnVhbCBWb2x1bWUgMywgQXBwZW5kaXggQSBhbmRcbiIKLQkJIkludGVsIEFyY2hpdGVjdHVyZSBPcHRpbWl6YXRpb24gUmVmZXJlbmNlIE1hbnVhbCAoNzMwNzk1LTAwMSlcblxuIik7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX0lBNjQ6Ci0JY2FzZSBDUFVfSUE2NF8xOgotCWNhc2UgQ1BVX0lBNjRfMjoKLQkJcHJpbnRmKCJTZWUgSW50ZWwgSXRhbml1bSBQcm9jZXNzb3IgUmVmZXJlbmNlIE1hbnVhbFxuIgotCQkgICAgICAgImZvciBTb2Z0d2FyZSBEZXZlbG9wbWVudCAoRG9jdW1lbnQgMjQ1MzIwLTAwMyksXG4iCi0JCSAgICAgICAiSW50ZWwgSXRhbml1bSBQcm9jZXNzb3IgUmVmZXJlbmNlIE1hbnVhbFxuIgotCQkgICAgICAgImZvciBTb2Z0d2FyZSBPcHRpbWl6YXRpb24gKERvY3VtZW50IDI0NTQ3My0wMDMpLFxuIgotCQkgICAgICAgIkludGVsIEl0YW5pdW0gMiBQcm9jZXNzb3IgUmVmZXJlbmNlIE1hbnVhbFxuIgotCQkgICAgICAgImZvciBTb2Z0d2FyZSBEZXZlbG9wbWVudCBhbmQgT3B0aW1pemF0aW9uIChEb2N1bWVudCAyNTExMTAtMDAxKVxuXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVfQVhQX0VWNDoKLQljYXNlIENQVV9BWFBfRVY1OgotCWNhc2UgQ1BVX0FYUF9QQ0E1NjoKLQljYXNlIENQVV9BWFBfRVY2OgotCWNhc2UgQ1BVX0FYUF9FVjY3OgotCQlwcmludGYoIlNlZSBBbHBoYSBBcmNoaXRlY3R1cmUgUmVmZXJlbmNlIE1hbnVhbFxuIgotCQkgICAgICAgImZ0cDovL2Z0cC5jb21wYXEuY29tL3B1Yi9wcm9kdWN0cy9hbHBoYUNQVWRvY3MvYWxwaGFfYXJjaF9yZWYucGRmXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVfQVJNX1hTQ0FMRTE6Ci0JY2FzZSBDUFVfQVJNX1hTQ0FMRTI6Ci0JCXByaW50ZigiU2VlIEludGVsIFhTY2FsZSBDb3JlIERldmVsb3BlcidzIE1hbnVhbFxuIgotCQkgICAgICAgIkNoYXB0ZXIgOCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nXG4iKTsKLQkJYnJlYWs7Ci0JCWJyZWFrOwotCi0JY2FzZSBDUFVfUFBDNjRfUE9XRVI0OgotCWNhc2UgQ1BVX1BQQzY0X1BPV0VSNToKLQljYXNlIENQVV9QUEM2NF85NzA6Ci0JCXByaW50ZigiT2J0YWluIFBvd2VyUEM2NCBwcm9jZXNzb3IgZG9jdW1lbnRhdGlvbiBhdDpcbiIKLQkJCSJodHRwOi8vd3d3LTMwNi5pYm0uY29tL2NoaXBzL3RlY2hsaWIvdGVjaGxpYi5uc2YvcHJvZHVjdGZhbWlsaWVzL1Bvd2VyUENcbiIpOwotCQlicmVhazsKLQotCWNhc2UgQ1BVX01JUFNfMjRLOgotCQlwcmludGYoIlNlZSBQcm9ncmFtbWluZyB0aGUgTUlQUzMyIDI0SyBDb3JlICIKLQkJICAgICAgICJhdmFpbGFibGUgZnJvbSB3d3cubWlwcy5jb21cbiIpOwotCQlicmVhazsKLQljYXNlIENQVV9NSVBTX1IxMDAwMDoKLQljYXNlIENQVV9NSVBTX1IxMjAwMDoKLQkJcHJpbnRmKCJTZWUgTkVDIFIxMDAwMCAvIFIxMjAwMCBVc2VyJ3MgTWFudWFsXG4iCi0JCSAgICAgICAiaHR0cDovL3d3dy5uZWNlbGFtLmNvbS9kb2NzL2ZpbGVzL1UxMDI3OEVKM1YwVU0wMC5wZGZcbiIpOwotCQlicmVhazsKLQljYXNlIENQVV9NSVBTX1JNNzAwMDoKLQkJcHJpbnRmKCJTZWUgUk03MDAwIEZhbWlseSBVc2VyIE1hbnVhbCAiCi0JCSAgICAgICAiYXZhaWxhYmxlIGZyb20gd3d3LnBtYy1zaWVycmEuY29tXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVfTUlQU19STTkwMDA6Ci0JCXByaW50ZigiU2VlIFJNOTAwMHgyIEZhbWlseSBVc2VyIE1hbnVhbCAiCi0JCSAgICAgICAiYXZhaWxhYmxlIGZyb20gd3d3LnBtYy1zaWVycmEuY29tXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVfTUlQU19TQjE6Ci0JY2FzZSBDUFVfTUlQU19WUjU0MzI6Ci0JCXByaW50ZigiU2VlIE5FQyBWUjU0NDMgVXNlcidzIE1hbnVhbCwgVm9sdW1lIDFcbiIKLQkJICAgICAgICJodHRwOi8vd3d3Lm5lY2VsYW0uY29tL2RvY3MvZmlsZXMvMTM3NV9WMS5wZGZcbiIpOwotCQlicmVhazsKLQljYXNlIENQVV9NSVBTX1ZSNTUwMDoKLQkJcHJpbnRmKCJTZWUgTkVDIFIxMDAwMCAvIFIxMjAwMCBVc2VyJ3MgTWFudWFsXG4iCi0JCSAgICAgImh0dHA6Ly93d3cubmVjZWwuY29tL25lc2Rpcy9pbWFnZS9VMTY2NzdFSjNWMFVNMDAucGRmXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENQVV9QUENfRTUwMDoKLQkJcHJpbnRmKCJTZWUgUG93ZXJQQyBlNTAwIENvcmUgQ29tcGxleCBSZWZlcmVuY2UgTWFudWFsXG4iCi0JCQkiQ2hhcHRlciA3OiBQZXJmb3JtYW5jZSBNb25pdG9yXG4iCi0JCQkiRG93bmxvYWRhYmxlIGZyb20gaHR0cDovL3d3dy5mcmVlc2NhbGUuY29tXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENQVV9SVEM6Ci0JCWJyZWFrOwotCi0JLy8gZG9uJ3QgdXNlIGRlZmF1bHQsIGlmIHNvbWVvbmUgYWRkIGEgY3B1IGhlIHdhbnRzIGEgY29tcGlsZXIgd2FybmluZwotCS8vIGlmIGhlIGZvcmdldHMgdG8gaGFuZGxlIGl0IGhlcmUuCi0JY2FzZSBDUFVfVElNRVJfSU5UOgotCWNhc2UgQ1BVX05PX0dPT0Q6Ci0JY2FzZSBNQVhfQ1BVX1RZUEU6Ci0JCXByaW50ZigiJWQgaXMgbm90IGEgdmFsaWQgcHJvY2Vzc29yIHR5cGUuXG4iLCBjcHVfdHlwZSk7Ci0JCWJyZWFrOwotCX0KLQotCWxpc3RfZm9yX2VhY2gocG9zLCBldmVudHMpIHsKLQkJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wX2V2ZW50LCBldmVudF9uZXh0KTsKLQkJaGVscF9mb3JfZXZlbnQoZXZlbnQpOwotCX0KLQotCXJldHVybiBFWElUX1NVQ0NFU1M7Ci19Cg==